OSDN Git Service

st/nine: Fix CheckDeviceFormat advertising for surfaces
authorAxel Davy <axel.davy@ens.fr>
Fri, 11 Mar 2016 22:30:05 +0000 (23:30 +0100)
committerAxel Davy <axel.davy@ens.fr>
Wed, 18 May 2016 21:37:14 +0000 (23:37 +0200)
Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/adapter9.c

index 48e1e44..b06528d 100644 (file)
@@ -326,6 +326,18 @@ NineAdapter9_CheckDeviceFormat( struct NineAdapter9 *This,
     case D3DRTYPE_VOLUMETEXTURE: bind |= PIPE_BIND_SAMPLER_VIEW; break;
     case D3DRTYPE_VERTEXBUFFER:  bind |= PIPE_BIND_VERTEX_BUFFER; break;
     case D3DRTYPE_INDEXBUFFER:   bind |= PIPE_BIND_INDEX_BUFFER; break;
+    case D3DRTYPE_SURFACE:
+        if (!(Usage & D3DUSAGE_DEPTHSTENCIL))
+            bind |= PIPE_BIND_SAMPLER_VIEW; /* StretchRect */
+        /* Offscreen surface support: Usage = 0.
+         * In practice drivers are very restrictive on the formats supported.
+         * Basically a few common formats + YUV and compressed formats. The
+         * reason is that offscreen surface are useful only for directdraw
+         * compatibility (a WONTIMPL of nine) + format conversion (useful in
+         * particular for YUV because the format was not advertised for textures
+         * on NV chips). */
+        if (Usage == 0)
+            bind |= PIPE_BIND_RENDER_TARGET; /* A current requirement of our impl, which we should get rid of. */
     default:
         break;
     }