diff options
Diffstat (limited to 'src/gallium/frontends/nine')
-rw-r--r-- | src/gallium/frontends/nine/adapter9.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/gallium/frontends/nine/adapter9.c b/src/gallium/frontends/nine/adapter9.c index e8d4697986c..200e5389949 100644 --- a/src/gallium/frontends/nine/adapter9.c +++ b/src/gallium/frontends/nine/adapter9.c @@ -255,6 +255,26 @@ display_format( D3DFORMAT fmt, return FALSE; } +static inline boolean +adapter_format( D3DFORMAT fmt ) +{ + /* Formats that are compatible to display_format (modulo alpha bits) */ + static const D3DFORMAT allowed[] = { + D3DFMT_A2R10G10B10, + D3DFMT_X8R8G8B8, + D3DFMT_A8R8G8B8, + D3DFMT_X1R5G5B5, + D3DFMT_A1R5G5B5, + D3DFMT_R5G6B5, + }; + unsigned i; + + for (i = 0; i < sizeof(allowed)/sizeof(D3DFORMAT); i++) { + if (fmt == allowed[i]) { return TRUE; } + } + return FALSE; +} + HRESULT NINE_WINAPI NineAdapter9_CheckDeviceFormat( struct NineAdapter9 *This, D3DDEVTYPE DeviceType, @@ -460,7 +480,10 @@ NineAdapter9_CheckDepthStencilMatch( struct NineAdapter9 *This, d3dformat_to_string(RenderTargetFormat), d3dformat_to_string(DepthStencilFormat)); - user_assert(display_format(AdapterFormat, FALSE), D3DERR_NOTAVAILABLE); + /* TODO: does it check AdapterFormat at all ? + * It seems to need to pass at least for A8R8G8B8: + * https://github.com/iXit/Mesa-3D/issues/317 */ + user_assert(adapter_format(AdapterFormat), D3DERR_NOTAVAILABLE); user_assert(depth_stencil_format(DepthStencilFormat), D3DERR_NOTAVAILABLE); hr = NineAdapter9_GetScreen(This, DeviceType, &screen); |