diff options
-rw-r--r-- | src/gallium/drivers/svga/svga_screen.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c index 5b759627f73..e8f17ba30b0 100644 --- a/src/gallium/drivers/svga/svga_screen.c +++ b/src/gallium/drivers/svga/svga_screen.c @@ -519,6 +519,15 @@ svga_screen_create(struct svga_winsys_screen *sws) sws->get_cap(sws, SVGA3D_DEVCAP_VERTEX_SHADER_VERSION, &result) && result.u >= SVGA3DVSVERSION_30 ? TRUE : FALSE; + /* + * The D16, D24X8, and D24S8 formats always do an implicit shadow compare + * when sampled from, where as the DF16, DF24, and D24S8_INT do not. So + * we prefer the later when available. + * + * This mimics hardware vendors extensions for D3D depth sampling. See also + * http://aras-p.info/texts/D3D9GPUHacks.html + */ + { SVGA3dSurfaceFormatCaps mask; mask.value = 0; @@ -551,7 +560,7 @@ svga_screen_create(struct svga_winsys_screen *sws) sws->get_cap(sws, SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT, &result) && (result.u & mask.value) == mask.value ? SVGA3D_Z_D24S8_INT : svgascreen->depth.s8z24; - } + } #if 1 |