st/nine: Check if format is DS before retrieving flags
authorAxel Davy <davyaxel0@gmail.com>
Thu, 13 Sep 2018 18:56:55 +0000 (20:56 +0200)
committerAxel Davy <davyaxel0@gmail.com>
Tue, 25 Sep 2018 20:05:24 +0000 (22:05 +0200)
d3d9_get_pipe_depth_format_bindings assumes the input format
is a depth stencil format.
Previously the user could hit this function with an invalid format.
Protect the last non protected call with a depth_stencil_format check.

Another solution is to have d3d9_get_pipe_depth_format_bindings
support non depth stencil format, but we don't want the user
to create depth buffers with d3d formats that can't be one,
it's better to check if the format can be depth buffer with d3d.

Signed-off-by: Axel Davy <davyaxel0@gmail.com>
src/gallium/state_trackers/nine/surface9.c

index 71aa4f46ffd1022c2f51e0913c10686221a56123..5fd662fa0496c9ad545d691553b861a9b77b256d 100644 (file)
@@ -111,6 +111,8 @@ NineSurface9_ctor( struct NineSurface9 *This,
     if (pDesc->Usage & D3DUSAGE_RENDERTARGET) {
         This->base.info.bind |= PIPE_BIND_RENDER_TARGET;
     } else if (pDesc->Usage & D3DUSAGE_DEPTHSTENCIL) {
+        if (!depth_stencil_format(pDesc->Format))
+            return D3DERR_INVALIDCALL;
         This->base.info.bind = d3d9_get_pipe_depth_format_bindings(pDesc->Format);
         if (TextureType)
             This->base.info.bind |= PIPE_BIND_SAMPLER_VIEW;