From f04fa0a62c6d39659c38eabd63bff54f0d2833fe Mon Sep 17 00:00:00 2001 From: Patrick Rudolph Date: Sat, 24 Sep 2016 10:46:27 +0200 Subject: [PATCH] st/nine: Assert on buffer creation failure Add an assert to make sure buffer creation doesn't fail. Add error handling in calling functions. Signed-off-by: Patrick Rudolph Reviewed-by: Axel Davy --- src/gallium/state_trackers/nine/swapchain9.c | 26 ++++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/gallium/state_trackers/nine/swapchain9.c b/src/gallium/state_trackers/nine/swapchain9.c index 9459786c6cf..e61111899c7 100644 --- a/src/gallium/state_trackers/nine/swapchain9.c +++ b/src/gallium/state_trackers/nine/swapchain9.c @@ -85,6 +85,7 @@ D3DWindowBuffer_create(struct NineSwapChain9 *This, D3DWindowBuffer *ret; struct winsys_handle whandle; int stride, dmaBufFd; + HRESULT hr; memset(&whandle, 0, sizeof(whandle)); whandle.type = DRM_API_HANDLE_TYPE_FD; @@ -96,14 +97,20 @@ D3DWindowBuffer_create(struct NineSwapChain9 *This, PIPE_HANDLE_USAGE_READ); stride = whandle.stride; dmaBufFd = whandle.handle; - ID3DPresent_NewD3DWindowBufferFromDmaBuf(This->present, - dmaBufFd, - resource->width0, - resource->height0, - stride, - depth, - 32, - &ret); + hr = ID3DPresent_NewD3DWindowBufferFromDmaBuf(This->present, + dmaBufFd, + resource->width0, + resource->height0, + stride, + depth, + 32, + &ret); + assert (SUCCEEDED(hr)); + + if (FAILED(hr)) { + ERR("Failed to create new D3DWindowBufferFromDmaBuf\n"); + return NULL; + } return ret; } @@ -339,6 +346,9 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This, } This->present_handles[i] = D3DWindowBuffer_create(This, resource, depth, false); pipe_resource_reference(&resource, NULL); + if (!This->present_handles[i]) { + return D3DERR_DRIVERINTERNALERROR; + } } if (pParams->EnableAutoDepthStencil) { tmplt.bind = d3d9_get_pipe_depth_format_bindings(pParams->AutoDepthStencilFormat);