Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- Ideally this should be squashed into 142935.
dlls/wined3d/surface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index fa25b03748..e98541c429 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1518,7 +1518,7 @@ void texture2d_load_fb_texture(struct wined3d_texture *texture, checkGLcall("glCopyTexSubImage2D");
if (restore_texture) - context_restore(context, restore_texture->sub_resources[sub_resource_idx].u.surface); + context_restore(context, restore_texture->sub_resources[restore_idx].u.surface); }
/* Does a direct frame buffer -> texture copy. Stretching is done with single
For regression bug 44565.
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3d9/texture.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d9/texture.c b/dlls/d3d9/texture.c index e7efe7361f..0858be9922 100644 --- a/dlls/d3d9/texture.c +++ b/dlls/d3d9/texture.c @@ -1339,9 +1339,22 @@ HRESULT texture_init(struct d3d9_texture *texture, struct d3d9_device *device, WARN("D3DUSAGE_AUTOGENMIPMAP texture with %u levels, returning D3DERR_INVALIDCALL.\n", levels); return D3DERR_INVALIDCALL; } - flags |= WINED3D_TEXTURE_CREATE_GENERATE_MIPMAPS; + wined3d_mutex_lock(); + hr = wined3d_check_device_format(device->d3d_parent->wined3d, 0, WINED3D_DEVICE_TYPE_HAL, WINED3DFMT_B8G8R8A8_UNORM, + WINED3DUSAGE_TEXTURE | WINED3DUSAGE_QUERY_GENMIPMAP, WINED3D_RTYPE_TEXTURE_2D, wined3dformat_from_d3dformat(format)); + wined3d_mutex_unlock(); + if (hr == D3D_OK) + { + flags |= WINED3D_TEXTURE_CREATE_GENERATE_MIPMAPS; + levels = 0; + } + else + { + WARN("D3DUSAGE_AUTOGENMIPMAP not supported on D3DFORMAT %#x, creating a texture " + "with a single level.\n", format); + levels = 1; + } texture->autogen_filter_type = D3DTEXF_LINEAR; - levels = 0; } else {
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3d9/tests/visual.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+)
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c index 3686fc678e..358ed1d160 100644 --- a/dlls/d3d9/tests/visual.c +++ b/dlls/d3d9/tests/visual.c @@ -6455,6 +6455,76 @@ static void test_mipmap_autogen(void) color = getPixelColor(device, 440, 270); ok(color == 0x0000ff00, "Unexpected color 0x%08x.\n", color);
+ /* Test format not supporting D3DUSAGE_AUTOGENMIPMAP. */ + hr = IDirect3D9_CheckDeviceFormat(d3d, 0, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, D3DUSAGE_AUTOGENMIPMAP, D3DRTYPE_TEXTURE, D3DFMT_A1R5G5B5); + if (hr != D3DOK_NOAUTOGEN) + { + skip("D3DFMT_A1R5G5B5 support is not D3DOK_NOAUTOGEN (%#x).\n", hr); + } + else + { + hr = IDirect3DDevice9_CreateTexture(device, 1024, 1024, 0, D3DUSAGE_AUTOGENMIPMAP, + D3DFMT_A1R5G5B5, D3DPOOL_MANAGED, &texture, 0); + ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr); + + hr = IDirect3DTexture9_LockRect(texture, 0, &lr, NULL, 0); + ok(SUCCEEDED(hr), "Failed to map texture, hr %#x.\n", hr); + for (y = 0; y < 1024; ++y) + { + for (x = 0; x < 1024; ++x) + { + WORD *dst = (WORD *)(((BYTE *)lr.pBits) + y * lr.Pitch + x * 2); + POINT pt; + + pt.x = x; + pt.y = y; + if (PtInRect(&r1, pt)) + *dst = 0xfc00; + else if (PtInRect(&r2, pt)) + *dst = 0x83e0; + else if (PtInRect(&r3, pt)) + *dst = 0x801f; + else if (PtInRect(&r4, pt)) + *dst = 0x8000; + else + *dst = 0xffff; + } + } + hr = IDirect3DTexture9_UnlockRect(texture, 0); + ok(SUCCEEDED(hr), "Failed to unmap texture, hr %#x.\n", hr); + + hr = IDirect3DDevice9_SetTexture(device, 0, (IDirect3DBaseTexture9 *)texture); + ok(SUCCEEDED(hr), "Failed to set texture, %#x.\n", hr); + + hr = IDirect3DDevice9_BeginScene(device); + ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); + hr = IDirect3DDevice9_DrawPrimitiveUP(device, D3DPT_TRIANGLESTRIP, 2, quad, 5 * sizeof(float)); + ok(SUCCEEDED(hr), "Failed to draw, hr %#x.\n", hr); + hr = IDirect3DDevice9_EndScene(device); + ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); + IDirect3DTexture9_Release(texture); + + color = getPixelColor(device, 200, 200); + ok(color == 0x00ffffff, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 280, 200); + ok(color == 0x000000ff, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 360, 200); + ok(color == 0x00000000, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 440, 200); + ok(color == 0x00ffffff, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 200, 270); + ok(color == 0x00ffffff, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 280, 270); + ok(color == 0x00ff0000, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 360, 270); + ok(color == 0x0000ff00, "Unexpected color 0x%08x.\n", color); + color = getPixelColor(device, 440, 270); + ok(color == 0x00ffffff, "Unexpected color 0x%08x.\n", color); + hr = IDirect3DDevice9_Present(device, NULL, NULL, NULL, NULL); + ok(SUCCEEDED(hr), "Failed to present, hr %#x.\n", hr); + } + IDirect3DSurface9_Release(backbuffer);
refcount = IDirect3DDevice9_Release(device);
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=36593
Your paranoid android.
=== build (build) === Patch failed to apply
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- It turns out that those are apparently never supported by HAL devices. The reference rasterizer does advertise support though, FWIW.
include/d3d9caps.h | 32 ++++++++++++++++++-------------- include/d3d9types.h | 4 ++++ 2 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/include/d3d9caps.h b/include/d3d9caps.h index 424b20cd96..24ba14cd5e 100644 --- a/include/d3d9caps.h +++ b/include/d3d9caps.h @@ -73,20 +73,24 @@ #define D3DLINECAPS_FOG 0x10 #define D3DLINECAPS_ANTIALIAS 0x20
-#define D3DPBLENDCAPS_ZERO 0x00000001 -#define D3DPBLENDCAPS_ONE 0x00000002 -#define D3DPBLENDCAPS_SRCCOLOR 0x00000004 -#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008 -#define D3DPBLENDCAPS_SRCALPHA 0x00000010 -#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020 -#define D3DPBLENDCAPS_DESTALPHA 0x00000040 -#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080 -#define D3DPBLENDCAPS_DESTCOLOR 0x00000100 -#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200 -#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400 -#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800 -#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000 -#define D3DPBLENDCAPS_BLENDFACTOR 0x00002000 +#define D3DPBLENDCAPS_ZERO __MSABI_LONG(0x00000001) +#define D3DPBLENDCAPS_ONE __MSABI_LONG(0x00000002) +#define D3DPBLENDCAPS_SRCCOLOR __MSABI_LONG(0x00000004) +#define D3DPBLENDCAPS_INVSRCCOLOR __MSABI_LONG(0x00000008) +#define D3DPBLENDCAPS_SRCALPHA __MSABI_LONG(0x00000010) +#define D3DPBLENDCAPS_INVSRCALPHA __MSABI_LONG(0x00000020) +#define D3DPBLENDCAPS_DESTALPHA __MSABI_LONG(0x00000040) +#define D3DPBLENDCAPS_INVDESTALPHA __MSABI_LONG(0x00000080) +#define D3DPBLENDCAPS_DESTCOLOR __MSABI_LONG(0x00000100) +#define D3DPBLENDCAPS_INVDESTCOLOR __MSABI_LONG(0x00000200) +#define D3DPBLENDCAPS_SRCALPHASAT __MSABI_LONG(0x00000400) +#define D3DPBLENDCAPS_BOTHSRCALPHA __MSABI_LONG(0x00000800) +#define D3DPBLENDCAPS_BOTHINVSRCALPHA __MSABI_LONG(0x00001000) +#define D3DPBLENDCAPS_BLENDFACTOR __MSABI_LONG(0x00002000) +#ifndef D3D_DISABLE_9EX +#define D3DPBLENDCAPS_SRCCOLOR2 __MSABI_LONG(0x00004000) +#define D3DPBLENDCAPS_INVSRCCOLOR2 __MSABI_LONG(0x00008000) +#endif
#define D3DPCMPCAPS_NEVER 0x01 #define D3DPCMPCAPS_LESS 0x02 diff --git a/include/d3d9types.h b/include/d3d9types.h index ed14e9b3d2..bb7e3a03e8 100644 --- a/include/d3d9types.h +++ b/include/d3d9types.h @@ -679,6 +679,10 @@ typedef enum _D3DBLEND { D3DBLEND_BOTHINVSRCALPHA = 13, D3DBLEND_BLENDFACTOR = 14, D3DBLEND_INVBLENDFACTOR = 15, +#ifndef D3D_DISABLE_9EX + D3DBLEND_SRCCOLOR2 = 16, + D3DBLEND_INVSRCCOLOR2 = 17, +#endif D3DBLEND_FORCE_DWORD = 0x7fffffff } D3DBLEND;
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- Also fix a bunch of d3d9ex-only defines and enum values and clean up whitespace a little.
include/d3d9caps.h | 37 +++++++++++-------- include/d3d9types.h | 101 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 88 insertions(+), 50 deletions(-)
diff --git a/include/d3d9caps.h b/include/d3d9caps.h index 24ba14cd5e..58fd3d91d0 100644 --- a/include/d3d9caps.h +++ b/include/d3d9caps.h @@ -27,7 +27,8 @@ /* * Definitions */ -#define D3DCAPS_READ_SCANLINE 0x20000 +#define D3DCAPS_OVERLAY __MSABI_LONG(0x00000800) +#define D3DCAPS_READ_SCANLINE __MSABI_LONG(0x00020000)
#define D3DCURSORCAPS_COLOR 1 #define D3DCURSORCAPS_LOWRES 2 @@ -119,7 +120,6 @@ #define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS __MSABI_LONG(0x00040000) #define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING __MSABI_LONG(0x00080000) #define D3DPMISCCAPS_FOGVERTEXCLAMPED __MSABI_LONG(0x00100000) - #ifndef D3D_DISABLE_9EX #define D3DPMISCCAPS_POSTBLENDSRGBCONVERT __MSABI_LONG(0x00200000) #endif @@ -180,18 +180,21 @@ #define D3DPTEXTURECAPS_VOLUMEMAP_POW2 __MSABI_LONG(0x00040000) #define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV __MSABI_LONG(0x00200000)
-#define D3DPTFILTERCAPS_MINFPOINT 0x00000100 -#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200 -#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400 -#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x00000800 -#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x00001000 -#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000 -#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000 -#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000 -#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000 -#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000 -#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000 -#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000 +#define D3DPTFILTERCAPS_MINFPOINT __MSABI_LONG(0x00000100) +#define D3DPTFILTERCAPS_MINFLINEAR __MSABI_LONG(0x00000200) +#define D3DPTFILTERCAPS_MINFANISOTROPIC __MSABI_LONG(0x00000400) +#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD __MSABI_LONG(0x00000800) +#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD __MSABI_LONG(0x00001000) +#define D3DPTFILTERCAPS_MIPFPOINT __MSABI_LONG(0x00010000) +#define D3DPTFILTERCAPS_MIPFLINEAR __MSABI_LONG(0x00020000) +#ifndef D3D_DISABLE_9EX +#define D3DPTFILTERCAPS_CONVOLUTIONMONO __MSABI_LONG(0x00040000) +#endif +#define D3DPTFILTERCAPS_MAGFPOINT __MSABI_LONG(0x01000000) +#define D3DPTFILTERCAPS_MAGFLINEAR __MSABI_LONG(0x02000000) +#define D3DPTFILTERCAPS_MAGFANISOTROPIC __MSABI_LONG(0x04000000) +#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD __MSABI_LONG(0x08000000) +#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD __MSABI_LONG(0x10000000)
#define D3DSTENCILCAPS_KEEP 0x01 #define D3DSTENCILCAPS_ZERO 0x02 @@ -254,6 +257,8 @@ #define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION __MSABI_LONG(0x00000080) #define D3DCAPS3_COPY_TO_VIDMEM __MSABI_LONG(0x00000100) #define D3DCAPS3_COPY_TO_SYSTEMMEM __MSABI_LONG(0x00000200) +#define D3DCAPS3_DXVAHD __MSABI_LONG(0x00000400) +#define D3DCAPS3_DXVAHD_LIMITED __MSABI_LONG(0x00000800) #define D3DCAPS3_RESERVED __MSABI_LONG(0x8000001F)
#define D3DCAPS2_NO2DDURING3DSCENE __MSABI_LONG(0x00000002) @@ -264,7 +269,9 @@ #define D3DCAPS2_CANMANAGERESOURCE __MSABI_LONG(0x10000000) #define D3DCAPS2_DYNAMICTEXTURES __MSABI_LONG(0x20000000) #define D3DCAPS2_CANAUTOGENMIPMAP __MSABI_LONG(0x40000000) - +#ifndef D3D_DISABLE_9EX +#define D3DCAPS2_CANSHARERESOURCE __MSABI_LONG(0x80000000) +#endif
#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 #define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 diff --git a/include/d3d9types.h b/include/d3d9types.h index bb7e3a03e8..4891858b3d 100644 --- a/include/d3d9types.h +++ b/include/d3d9types.h @@ -118,14 +118,15 @@ #define D3DUSAGE_RESTRICTED_CONTENT __MSABI_LONG(0x00000800) #define D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER __MSABI_LONG(0x00001000) #define D3DUSAGE_RESTRICT_SHARED_RESOURCE __MSABI_LONG(0x00002000) +#define D3DUSAGE_NONSECURE __MSABI_LONG(0x00800000) #define D3DUSAGE_TEXTAPI __MSABI_LONG(0x10000000) #endif /* D3D_DISABLE_9EX */
-#define D3DUSAGE_QUERY_FILTER __MSABI_LONG(0x00020000) #define D3DUSAGE_QUERY_LEGACYBUMPMAP __MSABI_LONG(0x00008000) -#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000) #define D3DUSAGE_QUERY_SRGBREAD __MSABI_LONG(0x00010000) +#define D3DUSAGE_QUERY_FILTER __MSABI_LONG(0x00020000) #define D3DUSAGE_QUERY_SRGBWRITE __MSABI_LONG(0x00040000) +#define D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING __MSABI_LONG(0x00080000) #define D3DUSAGE_QUERY_VERTEXTEXTURE __MSABI_LONG(0x00100000) #define D3DUSAGE_QUERY_WRAPANDMIP __MSABI_LONG(0x00200000)
@@ -211,14 +212,21 @@
/* Constants used by D3DPRESENT_PARAMETERS. when creating a device or swapchain */
-#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 /* Create a lockable backbuffer */ -#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x00000002 /* Discard Z buffer */ -#define D3DPRESENTFLAG_DEVICECLIP 0x00000004 /* Clip the window blited into the client area 2k + xp only */ -#define D3DPRESENTFLAG_VIDEO 0x00000010 /* backbuffer 'may' contain video data */ -#define D3DPRESENTFLAG_NOAUTOROTATE 0x00000020 /* d3d9ex, ignore display rotation */ -#define D3DPRESENTFLAG_UNPRUNEDMODE 0x00000040 /* d3d9ex, specify invalid display modes */ +#define D3DPRESENTFLAG_LOCKABLE_BACKBUFFER 0x00000001 /* Create a lockable backbuffer */ +#define D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL 0x00000002 /* Discard Z buffer */ +#define D3DPRESENTFLAG_DEVICECLIP 0x00000004 /* Clip the window blited into the client area 2k + xp only */ +#define D3DPRESENTFLAG_VIDEO 0x00000010 /* backbuffer 'may' contain video data */ +#ifndef D3D_DISABLE_9EX +#define D3DPRESENTFLAG_NOAUTOROTATE 0x00000020 /* d3d9ex, ignore display rotation */ +#define D3DPRESENTFLAG_UNPRUNEDMODE 0x00000040 /* d3d9ex, specify invalid display modes */ +#define D3DPRESENTFLAG_OVERLAY_LIMITEDRGB 0x00000080 +#define D3DPRESENTFLAG_OVERLAY_YCbCr_BT709 0x00000100 +#define D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC 0x00000200 +#define D3DPRESENTFLAG_RESTRICTED_CONTENT 0x00000400 +#define D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER 0x00000800 +#endif
-#define D3DPRESENT_RATE_DEFAULT 0x00000000 +#define D3DPRESENT_RATE_DEFAULT 0x00000000
/**************************** * Vertex Shaders Declaration @@ -308,7 +316,9 @@ typedef enum _D3DQUERYTYPE { D3DQUERYTYPE_PIXELTIMINGS = 16, D3DQUERYTYPE_BANDWIDTHTIMINGS = 17, D3DQUERYTYPE_CACHEUTILIZATION = 18, +#ifndef D3D_DISABLE_9EX D3DQUERYTYPE_MEMORYPRESSURE = 19, +#endif } D3DQUERYTYPE;
#define D3DISSUE_BEGIN (1 << 1) @@ -515,31 +525,32 @@ typedef enum _D3DSHADER_PARAM_DSTMOD_TYPE { #define D3DSP_REGTYPE_MASK (0x7 << D3DSP_REGTYPE_SHIFT) #define D3DSP_REGTYPE_MASK2 0x00001800
-typedef enum _D3DSHADER_PARAM_REGISTER_TYPE { - D3DSPR_TEMP = 0, - D3DSPR_INPUT = 1, - D3DSPR_CONST = 2, - D3DSPR_ADDR = 3, - D3DSPR_TEXTURE = 3, - D3DSPR_RASTOUT = 4, - D3DSPR_ATTROUT = 5, - D3DSPR_TEXCRDOUT = 6, - D3DSPR_OUTPUT = 6, - D3DSPR_CONSTINT = 7, - D3DSPR_COLOROUT = 8, - D3DSPR_DEPTHOUT = 9, - D3DSPR_SAMPLER = 10, - D3DSPR_CONST2 = 11, - D3DSPR_CONST3 = 12, - D3DSPR_CONST4 = 13, - D3DSPR_CONSTBOOL = 14, - D3DSPR_LOOP = 15, - D3DSPR_TEMPFLOAT16 = 16, - D3DSPR_MISCTYPE = 17, - D3DSPR_LABEL = 18, - D3DSPR_PREDICATE = 19, - - D3DSPR_FORCE_DWORD = 0x7FFFFFFF +typedef enum _D3DSHADER_PARAM_REGISTER_TYPE +{ + D3DSPR_TEMP = 0, + D3DSPR_INPUT = 1, + D3DSPR_CONST = 2, + D3DSPR_ADDR = 3, + D3DSPR_TEXTURE = 3, + D3DSPR_RASTOUT = 4, + D3DSPR_ATTROUT = 5, + D3DSPR_TEXCRDOUT = 6, + D3DSPR_OUTPUT = 6, + D3DSPR_CONSTINT = 7, + D3DSPR_COLOROUT = 8, + D3DSPR_DEPTHOUT = 9, + D3DSPR_SAMPLER = 10, + D3DSPR_CONST2 = 11, + D3DSPR_CONST3 = 12, + D3DSPR_CONST4 = 13, + D3DSPR_CONSTBOOL = 14, + D3DSPR_LOOP = 15, + D3DSPR_TEMPFLOAT16 = 16, + D3DSPR_MISCTYPE = 17, + D3DSPR_LABEL = 18, + D3DSPR_PREDICATE = 19, + + D3DSPR_FORCE_DWORD = 0x7fffffff } D3DSHADER_PARAM_REGISTER_TYPE;
typedef enum _D3DSHADER_MISCTYPE_OFFSETS { @@ -827,6 +838,10 @@ typedef enum _D3DFORMAT { D3DFMT_L16 = 81, D3DFMT_D32F_LOCKABLE = 82, D3DFMT_D24FS8 = 83, +#ifndef D3D_DISABLE_9EX + D3DFMT_D32_LOCKABLE = 84, + D3DFMT_S8_LOCKABLE = 85, +#endif
D3DFMT_VERTEXDATA = 100, D3DFMT_INDEX16 = 101, @@ -843,7 +858,11 @@ typedef enum _D3DFORMAT { D3DFMT_A32B32G32R32F = 116,
D3DFMT_CxV8U8 = 117, - +#ifndef D3D_DISABLE_9EX + D3DFMT_A1 = 118, + D3DFMT_A2B10G10R10_XR_BIAS = 119, + D3DFMT_BINARYBUFFER = 199, +#endif
D3DFMT_FORCE_DWORD = 0xFFFFFFFF } D3DFORMAT; @@ -1078,8 +1097,10 @@ typedef enum _D3DSWAPEFFECT { D3DSWAPEFFECT_DISCARD = 1, D3DSWAPEFFECT_FLIP = 2, D3DSWAPEFFECT_COPY = 3, +#ifndef D3D_DISABLE_9EX D3DSWAPEFFECT_OVERLAY = 4, D3DSWAPEFFECT_FLIPEX = 5, +#endif D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF } D3DSWAPEFFECT;
@@ -1102,6 +1123,9 @@ typedef enum _D3DTEXTUREFILTERTYPE { D3DTEXF_GAUSSIANCUBIC = 5, D3DTEXF_PYRAMIDALQUAD = 6, D3DTEXF_GAUSSIANQUAD = 7, +#ifndef D3D_DISABLE_9EX + D3DTEXF_CONVOLUTIONMONO = 8, +#endif D3DTEXF_FORCE_DWORD = 0x7fffffff } D3DTEXTUREFILTERTYPE;
@@ -1566,6 +1590,13 @@ typedef enum D3DDISPLAYROTATION D3DDISPLAYROTATION_270 } D3DDISPLAYROTATION;
+typedef struct _D3DMEMORYPRESSURE +{ + UINT64 BytesEvictedFromProcess; + UINT64 SizeOfInefficientAllocation; + DWORD LevelOfEfficiency; +} D3DMEMORYPRESSURE; + typedef enum _D3DCOMPOSERECTSOP{ D3DCOMPOSERECTS_COPY = 1, D3DCOMPOSERECTS_OR,
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- include/d3d8caps.h | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/include/d3d8caps.h b/include/d3d8caps.h index d11a46fbc3..469dacec32 100644 --- a/include/d3d8caps.h +++ b/include/d3d8caps.h @@ -86,16 +86,17 @@ #define D3DPCMPCAPS_GREATEREQUAL 0x40 #define D3DPCMPCAPS_ALWAYS 0x80
-#define D3DPMISCCAPS_MASKZ 0x0002 -#define D3DPMISCCAPS_LINEPATTERNREP 0x0004 -#define D3DPMISCCAPS_CULLNONE 0x0010 -#define D3DPMISCCAPS_CULLCW 0x0020 -#define D3DPMISCCAPS_CULLCCW 0x0040 -#define D3DPMISCCAPS_COLORWRITEENABLE 0x0080 -#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x0100 -#define D3DPMISCCAPS_CLIPTLVERTS 0x0200 -#define D3DPMISCCAPS_TSSARGTEMP 0x0400 -#define D3DPMISCCAPS_BLENDOP 0x0800 +#define D3DPMISCCAPS_MASKZ __MSABI_LONG(0x00000002) +#define D3DPMISCCAPS_LINEPATTERNREP __MSABI_LONG(0x00000004) +#define D3DPMISCCAPS_CULLNONE __MSABI_LONG(0x00000010) +#define D3DPMISCCAPS_CULLCW __MSABI_LONG(0x00000020) +#define D3DPMISCCAPS_CULLCCW __MSABI_LONG(0x00000040) +#define D3DPMISCCAPS_COLORWRITEENABLE __MSABI_LONG(0x00000080) +#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS __MSABI_LONG(0x00000100) +#define D3DPMISCCAPS_CLIPTLVERTS __MSABI_LONG(0x00000200) +#define D3DPMISCCAPS_TSSARGTEMP __MSABI_LONG(0x00000400) +#define D3DPMISCCAPS_BLENDOP __MSABI_LONG(0x00000800) +#define D3DPMISCCAPS_NULLREFERENCE __MSABI_LONG(0x00001000)
#define D3DPRASTERCAPS_DITHER 0x00000001 #define D3DPRASTERCAPS_PAT 0x00000008 @@ -196,12 +197,13 @@ #define D3DTEXOPCAPS_MULTIPLYADD 0x1000000 #define D3DTEXOPCAPS_LERP 0x2000000
-#define D3DVTXPCAPS_TEXGEN 0x01 -#define D3DVTXPCAPS_MATERIALSOURCE7 0x02 -#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x08 -#define D3DVTXPCAPS_POSITIONALLIGHTS 0x10 -#define D3DVTXPCAPS_LOCALVIEWER 0x20 -#define D3DVTXPCAPS_TWEENING 0x40 +#define D3DVTXPCAPS_TEXGEN __MSABI_LONG(0x00000001) +#define D3DVTXPCAPS_MATERIALSOURCE7 __MSABI_LONG(0x00000002) +#define D3DVTXPCAPS_DIRECTIONALLIGHTS __MSABI_LONG(0x00000008) +#define D3DVTXPCAPS_POSITIONALLIGHTS __MSABI_LONG(0x00000010) +#define D3DVTXPCAPS_LOCALVIEWER __MSABI_LONG(0x00000020) +#define D3DVTXPCAPS_TWEENING __MSABI_LONG(0x00000040) +#define D3DVTXPCAPS_NO_VSDT_UBYTE4 __MSABI_LONG(0x00000080)
#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020 #define D3DCAPS3_RESERVED 0x8000001f
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3d8/device.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 5daf6f46c2..9f92d3c079 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -343,6 +343,57 @@ void d3dcaps_from_wined3dcaps(D3DCAPS8 *caps, const WINED3DCAPS *wined3d_caps) caps->PixelShaderVersion = wined3d_caps->PixelShaderVersion; caps->MaxPixelShaderValue = wined3d_caps->PixelShader1xMaxValue;
+ caps->Caps2 &= D3DCAPS2_CANCALIBRATEGAMMA | D3DCAPS2_CANRENDERWINDOWED + | D3DCAPS2_CANMANAGERESOURCE | D3DCAPS2_DYNAMICTEXTURES | D3DCAPS2_FULLSCREENGAMMA + | D3DCAPS2_NO2DDURING3DSCENE | D3DCAPS2_RESERVED; + caps->Caps3 &= D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD | D3DCAPS3_RESERVED; + caps->PrimitiveMiscCaps &= D3DPMISCCAPS_MASKZ | D3DPMISCCAPS_LINEPATTERNREP + | D3DPMISCCAPS_CULLNONE | D3DPMISCCAPS_CULLCW | D3DPMISCCAPS_CULLCCW + | D3DPMISCCAPS_COLORWRITEENABLE | D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + | D3DPMISCCAPS_CLIPTLVERTS | D3DPMISCCAPS_TSSARGTEMP | D3DPMISCCAPS_BLENDOP + | D3DPMISCCAPS_NULLREFERENCE; + caps->RasterCaps &= D3DPRASTERCAPS_DITHER | D3DPRASTERCAPS_PAT | D3DPRASTERCAPS_ZTEST + | D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_FOGTABLE | D3DPRASTERCAPS_ANTIALIASEDGES + | D3DPRASTERCAPS_MIPMAPLODBIAS | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZBUFFERLESSHSR + | D3DPRASTERCAPS_FOGRANGE | D3DPRASTERCAPS_ANISOTROPY | D3DPRASTERCAPS_WBUFFER + | D3DPRASTERCAPS_WFOG | D3DPRASTERCAPS_ZFOG | D3DPRASTERCAPS_COLORPERSPECTIVE + | D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE; + caps->SrcBlendCaps &= D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA; + caps->DestBlendCaps &= D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA; + caps->TextureCaps &= D3DPTEXTURECAPS_PERSPECTIVE | D3DPTEXTURECAPS_POW2 | D3DPTEXTURECAPS_ALPHA + | D3DPTEXTURECAPS_SQUAREONLY | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE + | D3DPTEXTURECAPS_ALPHAPALETTE | D3DPTEXTURECAPS_NONPOW2CONDITIONAL + | D3DPTEXTURECAPS_PROJECTED | D3DPTEXTURECAPS_CUBEMAP | D3DPTEXTURECAPS_VOLUMEMAP + | D3DPTEXTURECAPS_MIPMAP | D3DPTEXTURECAPS_MIPVOLUMEMAP | D3DPTEXTURECAPS_MIPCUBEMAP + | D3DPTEXTURECAPS_CUBEMAP_POW2 | D3DPTEXTURECAPS_VOLUMEMAP_POW2; + caps->TextureFilterCaps &= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC; + caps->CubeTextureFilterCaps &= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC; + caps->VolumeTextureFilterCaps &= D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC; + caps->StencilCaps &= ~WINED3DSTENCILCAPS_TWOSIDED; + caps->VertexProcessingCaps &= D3DVTXPCAPS_TEXGEN | D3DVTXPCAPS_MATERIALSOURCE7 + | D3DVTXPCAPS_DIRECTIONALLIGHTS | D3DVTXPCAPS_POSITIONALLIGHTS | D3DVTXPCAPS_LOCALVIEWER + | D3DVTXPCAPS_TWEENING | D3DVTXPCAPS_NO_VSDT_UBYTE4; + /* D3D8 doesn't support SM 2.0 or higher, so clamp to 1.x */ if (caps->PixelShaderVersion) caps->PixelShaderVersion = D3DPS_VERSION(1, 4); @@ -353,8 +404,6 @@ void d3dcaps_from_wined3dcaps(D3DCAPS8 *caps, const WINED3DCAPS *wined3d_caps) else caps->VertexShaderVersion = D3DVS_VERSION(0, 0); caps->MaxVertexShaderConst = min(D3D8_MAX_VERTEX_SHADER_CONSTANTF, caps->MaxVertexShaderConst); - - caps->StencilCaps &= ~WINED3DSTENCILCAPS_TWOSIDED; }
/* Handle table functions */
Signed-off-by: Henri Verbeet hverbeet@codeweavers.com
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- Actually I'm not 100% sure I did retest the latest version of this patch on AMD. I'm going to doublecheck that in a bit...
dlls/d3d8/tests/device.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+)
diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c index 6ae17829b8..4964771487 100644 --- a/dlls/d3d8/tests/device.c +++ b/dlls/d3d8/tests/device.c @@ -8547,6 +8547,120 @@ static void test_swapchain_multisample_reset(void) DestroyWindow(window); }
+static void test_device_caps(void) +{ + IDirect3DDevice8 *device; + IDirect3D8 *d3d; + ULONG refcount; + D3DCAPS8 caps; + HWND window; + HRESULT hr; + + window = CreateWindowA("static", "d3d8_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, NULL, NULL, NULL, NULL); + d3d = Direct3DCreate8(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + if (!(device = create_device(d3d, window, NULL))) + { + skip("Failed to create a D3D device.\n"); + IDirect3D8_Release(d3d); + DestroyWindow(window); + return; + } + + hr = IDirect3DDevice8_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + + ok(!(caps.Caps & ~D3DCAPS_READ_SCANLINE), "Caps field has unexpected flags %#x.\n", caps.Caps); + ok(!(caps.Caps2 & ~(D3DCAPS2_CANCALIBRATEGAMMA | D3DCAPS2_CANRENDERWINDOWED + | D3DCAPS2_CANMANAGERESOURCE | D3DCAPS2_DYNAMICTEXTURES | D3DCAPS2_FULLSCREENGAMMA + | D3DCAPS2_NO2DDURING3DSCENE | D3DCAPS2_RESERVED)), + "Caps2 field has unexpected flags %#x.\n", caps.Caps2); + /* Nvidia returns that 0x400 flag, which is is probably Vista+ + * D3DCAPS3_DXVAHD from d3d9caps.h */ + /* AMD doesn't filter all the ddraw / d3d9 caps. Consider that behavior + * broken. */ + ok(!(caps.Caps3 & ~(D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD | D3DCAPS3_RESERVED | 0x400)) + || broken(!(caps.Caps3 & ~(D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD | 0x80))), + "Caps3 field has unexpected flags %#x.\n", caps.Caps3); + ok(!(caps.PrimitiveMiscCaps & ~(D3DPMISCCAPS_MASKZ | D3DPMISCCAPS_LINEPATTERNREP + | D3DPMISCCAPS_CULLNONE | D3DPMISCCAPS_CULLCW | D3DPMISCCAPS_CULLCCW + | D3DPMISCCAPS_COLORWRITEENABLE | D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + | D3DPMISCCAPS_CLIPTLVERTS | D3DPMISCCAPS_TSSARGTEMP | D3DPMISCCAPS_BLENDOP + | D3DPMISCCAPS_NULLREFERENCE)) + || broken(!(caps.PrimitiveMiscCaps & ~0x003fdff6)), + "PrimitiveMiscCaps field has unexpected flags %#x.\n", caps.PrimitiveMiscCaps); + ok(!(caps.RasterCaps & ~(D3DPRASTERCAPS_DITHER | D3DPRASTERCAPS_PAT | D3DPRASTERCAPS_ZTEST + | D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_FOGTABLE | D3DPRASTERCAPS_ANTIALIASEDGES + | D3DPRASTERCAPS_MIPMAPLODBIAS | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZBUFFERLESSHSR + | D3DPRASTERCAPS_FOGRANGE | D3DPRASTERCAPS_ANISOTROPY | D3DPRASTERCAPS_WBUFFER + | D3DPRASTERCAPS_WFOG | D3DPRASTERCAPS_ZFOG | D3DPRASTERCAPS_COLORPERSPECTIVE + | D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE)) + || broken(!(caps.RasterCaps & ~0x0ff7f199)), + "RasterCaps field has unexpected flags %#x.\n", caps.RasterCaps); + ok(!(caps.SrcBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA)), + "SrcBlendCaps field has unexpected flags %#x.\n", caps.SrcBlendCaps); + ok(!(caps.DestBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA)), + "DestBlendCaps field has unexpected flags %#x.\n", caps.DestBlendCaps); + ok(!(caps.TextureCaps & ~(D3DPTEXTURECAPS_PERSPECTIVE | D3DPTEXTURECAPS_POW2 + | D3DPTEXTURECAPS_ALPHA | D3DPTEXTURECAPS_SQUAREONLY + | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE | D3DPTEXTURECAPS_ALPHAPALETTE + | D3DPTEXTURECAPS_NONPOW2CONDITIONAL | D3DPTEXTURECAPS_PROJECTED + | D3DPTEXTURECAPS_CUBEMAP | D3DPTEXTURECAPS_VOLUMEMAP | D3DPTEXTURECAPS_MIPMAP + | D3DPTEXTURECAPS_MIPVOLUMEMAP | D3DPTEXTURECAPS_MIPCUBEMAP + | D3DPTEXTURECAPS_CUBEMAP_POW2 | D3DPTEXTURECAPS_VOLUMEMAP_POW2)) + || broken(!(caps.TextureCaps & ~0x0703073f)), + "TextureCaps field has unexpected flags %#x.\n", caps.TextureCaps); + ok(!(caps.TextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC)), + "TextureFilterCaps field has unexpected flags %#x.\n", caps.TextureFilterCaps); + ok(!(caps.CubeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC)), + "CubeTextureFilterCaps field has unexpected flags %#x.\n", caps.CubeTextureFilterCaps); + ok(!(caps.VolumeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFAFLATCUBIC + | D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC)), + "VolumeTextureFilterCaps field has unexpected flags %#x.\n", caps.VolumeTextureFilterCaps); + ok(!(caps.LineCaps & ~(D3DLINECAPS_TEXTURE | D3DLINECAPS_ZTEST | D3DLINECAPS_BLEND + | D3DLINECAPS_ALPHACMP | D3DLINECAPS_FOG)), + "LineCaps field has unexpected flags %#x.\n", caps.LineCaps); + ok(!(caps.StencilCaps & ~(D3DSTENCILCAPS_KEEP | D3DSTENCILCAPS_ZERO | D3DSTENCILCAPS_REPLACE + | D3DSTENCILCAPS_INCRSAT | D3DSTENCILCAPS_DECRSAT | D3DSTENCILCAPS_INVERT + | D3DSTENCILCAPS_INCR | D3DSTENCILCAPS_DECR)), + "StencilCaps field has unexpected flags %#x.\n", caps.StencilCaps); + ok(!(caps.VertexProcessingCaps & ~(D3DVTXPCAPS_TEXGEN | D3DVTXPCAPS_MATERIALSOURCE7 + | D3DVTXPCAPS_DIRECTIONALLIGHTS | D3DVTXPCAPS_POSITIONALLIGHTS | D3DVTXPCAPS_LOCALVIEWER + | D3DVTXPCAPS_TWEENING | D3DVTXPCAPS_NO_VSDT_UBYTE4)), + "VertexProcessingCaps field has unexpected flags %#x.\n", caps.VertexProcessingCaps); + /* Both Nvidia and AMD give 10 here. */ + ok(caps.MaxActiveLights <= 10, + "MaxActiveLights field has unexpected value %u.\n", caps.MaxActiveLights); + /* AMD gives 6, Nvidia returns 8. */ + ok(caps.MaxUserClipPlanes <= 8, + "MaxUserClipPlanes field has unexpected value %u.\n", caps.MaxUserClipPlanes); + + refcount = IDirect3DDevice8_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + IDirect3D8_Release(d3d); + DestroyWindow(window); +} + START_TEST(device) { HMODULE d3d8_handle = GetModuleHandleA("d3d8.dll"); @@ -8656,6 +8770,7 @@ START_TEST(device) test_destroyed_window(); test_clip_planes_limits(); test_swapchain_multisample_reset(); + test_device_caps();
UnregisterClassA("d3d8_test_wc", GetModuleHandleA(NULL)); }
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=36594
Your paranoid android.
=== build (build) === Patch failed to apply
2018-03-09 12:10 GMT-06:00 Matteo Bruni mbruni@codeweavers.com:
Signed-off-by: Matteo Bruni mbruni@codeweavers.com
Actually I'm not 100% sure I did retest the latest version of this patch on AMD. I'm going to doublecheck that in a bit...
... and indeed it failed :/ Patches 9 and 10 fail on the testbot instead (it turns out d3d9 / d3d9ex WARP also claims support for dual source blending). Let's just ignore these last 3 patches of the series for the time being, I'll resend them fixed later on. There are no expected implementation changes so the rest of the series should be okay (at least as far as testing is concerned). Patch 3/10 passed the manual testbot run, which is at https://testbot.winehq.org/JobDetails.pl?Key=36597.
Sorry for the noise...
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3d9/tests/device.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+)
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c index 9fa6a7ebec..3990b18c41 100644 --- a/dlls/d3d9/tests/device.c +++ b/dlls/d3d9/tests/device.c @@ -12418,6 +12418,130 @@ static void test_stretch_rect(void) DestroyWindow(window); }
+static void test_device_caps(void) +{ + IDirect3DDevice9 *device; + IDirect3D9 *d3d; + ULONG refcount; + D3DCAPS9 caps; + HWND window; + HRESULT hr; + + window = CreateWindowA("d3d9_test_wc", "d3d9_test", WS_OVERLAPPEDWINDOW, + 0, 0, 640, 480, 0, 0, 0, 0); + d3d = Direct3DCreate9(D3D_SDK_VERSION); + ok(!!d3d, "Failed to create a D3D object.\n"); + + if (!(device = create_device(d3d, window, NULL))) + { + skip("Failed to create a D3D device.\n"); + IDirect3D9_Release(d3d); + DestroyWindow(window); + return; + } + + hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + + ok(!(caps.Caps & ~D3DCAPS_READ_SCANLINE), "Caps field has unexpected flags %#x.\n", caps.Caps); + ok(!(caps.Caps2 & ~(D3DCAPS2_NO2DDURING3DSCENE | D3DCAPS2_FULLSCREENGAMMA + | D3DCAPS2_CANRENDERWINDOWED | D3DCAPS2_CANCALIBRATEGAMMA | D3DCAPS2_RESERVED + | D3DCAPS2_CANMANAGERESOURCE | D3DCAPS2_DYNAMICTEXTURES | D3DCAPS2_CANAUTOGENMIPMAP + | D3DCAPS2_CANSHARERESOURCE)), + "Caps2 field has unexpected flags %#x.\n", caps.Caps2); + /* AMD doesn't filter all the ddraw / d3d9 caps. Consider that behavior + * broken. */ + ok(!(caps.Caps3 & ~(D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD + | D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION | D3DCAPS3_COPY_TO_VIDMEM + | D3DCAPS3_COPY_TO_SYSTEMMEM | D3DCAPS3_DXVAHD | D3DCAPS3_DXVAHD_LIMITED + | D3DCAPS3_RESERVED)), + "Caps3 field has unexpected flags %#x.\n", caps.Caps3); + ok(!(caps.PrimitiveMiscCaps & ~(D3DPMISCCAPS_MASKZ | D3DPMISCCAPS_LINEPATTERNREP + | D3DPMISCCAPS_CULLNONE | D3DPMISCCAPS_CULLCW | D3DPMISCCAPS_CULLCCW + | D3DPMISCCAPS_COLORWRITEENABLE | D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + | D3DPMISCCAPS_CLIPTLVERTS | D3DPMISCCAPS_TSSARGTEMP | D3DPMISCCAPS_BLENDOP + | D3DPMISCCAPS_NULLREFERENCE | D3DPMISCCAPS_INDEPENDENTWRITEMASKS + | D3DPMISCCAPS_PERSTAGECONSTANT | D3DPMISCCAPS_FOGANDSPECULARALPHA + | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS + | D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING | D3DPMISCCAPS_FOGVERTEXCLAMPED + | D3DPMISCCAPS_POSTBLENDSRGBCONVERT)), + "PrimitiveMiscCaps field has unexpected flags %#x.\n", caps.PrimitiveMiscCaps); + ok(!(caps.RasterCaps & ~(D3DPRASTERCAPS_DITHER | D3DPRASTERCAPS_PAT | D3DPRASTERCAPS_ZTEST + | D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_FOGTABLE | D3DPRASTERCAPS_ANTIALIASEDGES + | D3DPRASTERCAPS_MIPMAPLODBIAS | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZBUFFERLESSHSR + | D3DPRASTERCAPS_FOGRANGE | D3DPRASTERCAPS_ANISOTROPY | D3DPRASTERCAPS_WBUFFER + | D3DPRASTERCAPS_WFOG | D3DPRASTERCAPS_ZFOG | D3DPRASTERCAPS_COLORPERSPECTIVE + | D3DPRASTERCAPS_SCISSORTEST | D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS + | D3DPRASTERCAPS_DEPTHBIAS | D3DPRASTERCAPS_MULTISAMPLE_TOGGLE)), + "RasterCaps field has unexpected flags %#x.\n", caps.RasterCaps); + ok(!(caps.SrcBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA | D3DPBLENDCAPS_BLENDFACTOR)), + "SrcBlendCaps field has unexpected flags %#x.\n", caps.SrcBlendCaps); + ok(!(caps.DestBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA | D3DPBLENDCAPS_BLENDFACTOR)), + "DestBlendCaps field has unexpected flags %#x.\n", caps.DestBlendCaps); + ok(!(caps.TextureCaps & ~(D3DPTEXTURECAPS_PERSPECTIVE | D3DPTEXTURECAPS_POW2 + | D3DPTEXTURECAPS_ALPHA | D3DPTEXTURECAPS_SQUAREONLY + | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE | D3DPTEXTURECAPS_ALPHAPALETTE + | D3DPTEXTURECAPS_NONPOW2CONDITIONAL | D3DPTEXTURECAPS_PROJECTED + | D3DPTEXTURECAPS_CUBEMAP | D3DPTEXTURECAPS_VOLUMEMAP | D3DPTEXTURECAPS_MIPMAP + | D3DPTEXTURECAPS_MIPVOLUMEMAP | D3DPTEXTURECAPS_MIPCUBEMAP + | D3DPTEXTURECAPS_CUBEMAP_POW2 | D3DPTEXTURECAPS_VOLUMEMAP_POW2 + | D3DPTEXTURECAPS_NOPROJECTEDBUMPENV)), + "TextureCaps field has unexpected flags %#x.\n", caps.TextureCaps); + ok(!(caps.TextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_CONVOLUTIONMONO + | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "TextureFilterCaps field has unexpected flags %#x.\n", caps.TextureFilterCaps); + ok(!(caps.CubeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "CubeTextureFilterCaps field has unexpected flags %#x.\n", caps.CubeTextureFilterCaps); + ok(!(caps.VolumeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "VolumeTextureFilterCaps field has unexpected flags %#x.\n", caps.VolumeTextureFilterCaps); + ok(!(caps.LineCaps & ~(D3DLINECAPS_TEXTURE | D3DLINECAPS_ZTEST | D3DLINECAPS_BLEND + | D3DLINECAPS_ALPHACMP | D3DLINECAPS_FOG | D3DLINECAPS_ANTIALIAS)), + "LineCaps field has unexpected flags %#x.\n", caps.LineCaps); + ok(!(caps.StencilCaps & ~(D3DSTENCILCAPS_KEEP | D3DSTENCILCAPS_ZERO | D3DSTENCILCAPS_REPLACE + | D3DSTENCILCAPS_INCRSAT | D3DSTENCILCAPS_DECRSAT | D3DSTENCILCAPS_INVERT + | D3DSTENCILCAPS_INCR | D3DSTENCILCAPS_DECR | D3DSTENCILCAPS_TWOSIDED)), + "StencilCaps field has unexpected flags %#x.\n", caps.StencilCaps); + ok(!(caps.VertexProcessingCaps & ~(D3DVTXPCAPS_TEXGEN | D3DVTXPCAPS_MATERIALSOURCE7 + | D3DVTXPCAPS_DIRECTIONALLIGHTS | D3DVTXPCAPS_POSITIONALLIGHTS | D3DVTXPCAPS_LOCALVIEWER + | D3DVTXPCAPS_TWEENING | D3DVTXPCAPS_TEXGEN_SPHEREMAP + | D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER)), + "VertexProcessingCaps field has unexpected flags %#x.\n", caps.VertexProcessingCaps); + /* Both Nvidia and AMD give 10 here. */ + ok(caps.MaxActiveLights <= 10, + "MaxActiveLights field has unexpected value %u.\n", caps.MaxActiveLights); + /* AMD gives 6, Nvidia returns 8. */ + ok(caps.MaxUserClipPlanes <= 8, + "MaxUserClipPlanes field has unexpected value %u.\n", caps.MaxUserClipPlanes); + + refcount = IDirect3DDevice9_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + IDirect3D9_Release(d3d); + DestroyWindow(window); +} + START_TEST(device) { WNDCLASSA wc = {0}; @@ -12541,6 +12665,7 @@ START_TEST(device) test_clip_planes_limits(); test_swapchain_multisample_reset(); test_stretch_rect(); + test_device_caps();
UnregisterClassA("d3d9_test_wc", GetModuleHandleA(NULL)); }
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=36595
Your paranoid android.
=== build (build) === Patch failed to apply
Signed-off-by: Matteo Bruni mbruni@codeweavers.com --- dlls/d3d9/tests/d3d9ex.c | 121 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+)
diff --git a/dlls/d3d9/tests/d3d9ex.c b/dlls/d3d9/tests/d3d9ex.c index 6d7bd2282a..cc6055312e 100644 --- a/dlls/d3d9/tests/d3d9ex.c +++ b/dlls/d3d9/tests/d3d9ex.c @@ -3911,6 +3911,126 @@ static void test_format_unknown(void) DestroyWindow(window); }
+static void test_device_caps(void) +{ + IDirect3DDevice9Ex *device; + ULONG refcount; + D3DCAPS9 caps; + HWND window; + HRESULT hr; + + window = create_window(); + if (!(device = create_device(window, NULL))) + { + skip("Failed to create a D3D device.\n"); + DestroyWindow(window); + return; + } + + hr = IDirect3DDevice9Ex_GetDeviceCaps(device, &caps); + ok(SUCCEEDED(hr), "Failed to get caps, hr %#x.\n", hr); + + ok(!(caps.Caps & ~(D3DCAPS_OVERLAY | D3DCAPS_READ_SCANLINE)), + "Caps field has unexpected flags %#x.\n", caps.Caps); + ok(!(caps.Caps2 & ~(D3DCAPS2_NO2DDURING3DSCENE | D3DCAPS2_FULLSCREENGAMMA + | D3DCAPS2_CANRENDERWINDOWED | D3DCAPS2_CANCALIBRATEGAMMA | D3DCAPS2_RESERVED + | D3DCAPS2_CANMANAGERESOURCE | D3DCAPS2_DYNAMICTEXTURES | D3DCAPS2_CANAUTOGENMIPMAP + | D3DCAPS2_CANSHARERESOURCE)), + "Caps2 field has unexpected flags %#x.\n", caps.Caps2); + /* AMD doesn't filter all the ddraw / d3d9 caps. Consider that behavior + * broken. */ + ok(!(caps.Caps3 & ~(D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD + | D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION | D3DCAPS3_COPY_TO_VIDMEM + | D3DCAPS3_COPY_TO_SYSTEMMEM | D3DCAPS3_DXVAHD | D3DCAPS3_DXVAHD_LIMITED + | D3DCAPS3_RESERVED)), + "Caps3 field has unexpected flags %#x.\n", caps.Caps3); + ok(!(caps.PrimitiveMiscCaps & ~(D3DPMISCCAPS_MASKZ | D3DPMISCCAPS_LINEPATTERNREP + | D3DPMISCCAPS_CULLNONE | D3DPMISCCAPS_CULLCW | D3DPMISCCAPS_CULLCCW + | D3DPMISCCAPS_COLORWRITEENABLE | D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + | D3DPMISCCAPS_CLIPTLVERTS | D3DPMISCCAPS_TSSARGTEMP | D3DPMISCCAPS_BLENDOP + | D3DPMISCCAPS_NULLREFERENCE | D3DPMISCCAPS_INDEPENDENTWRITEMASKS + | D3DPMISCCAPS_PERSTAGECONSTANT | D3DPMISCCAPS_FOGANDSPECULARALPHA + | D3DPMISCCAPS_SEPARATEALPHABLEND | D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS + | D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING | D3DPMISCCAPS_FOGVERTEXCLAMPED + | D3DPMISCCAPS_POSTBLENDSRGBCONVERT)), + "PrimitiveMiscCaps field has unexpected flags %#x.\n", caps.PrimitiveMiscCaps); + ok(!(caps.RasterCaps & ~(D3DPRASTERCAPS_DITHER | D3DPRASTERCAPS_PAT | D3DPRASTERCAPS_ZTEST + | D3DPRASTERCAPS_FOGVERTEX | D3DPRASTERCAPS_FOGTABLE | D3DPRASTERCAPS_ANTIALIASEDGES + | D3DPRASTERCAPS_MIPMAPLODBIAS | D3DPRASTERCAPS_ZBIAS | D3DPRASTERCAPS_ZBUFFERLESSHSR + | D3DPRASTERCAPS_FOGRANGE | D3DPRASTERCAPS_ANISOTROPY | D3DPRASTERCAPS_WBUFFER + | D3DPRASTERCAPS_WFOG | D3DPRASTERCAPS_ZFOG | D3DPRASTERCAPS_COLORPERSPECTIVE + | D3DPRASTERCAPS_SCISSORTEST | D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS + | D3DPRASTERCAPS_DEPTHBIAS | D3DPRASTERCAPS_MULTISAMPLE_TOGGLE)), + "RasterCaps field has unexpected flags %#x.\n", caps.RasterCaps); + /* D3DPBLENDCAPS_SRCCOLOR2 and D3DPBLENDCAPS_INVSRCCOLOR2 aren't + * advertised on d3d9ex devices either. */ + ok(!(caps.SrcBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA | D3DPBLENDCAPS_BLENDFACTOR)), + "SrcBlendCaps field has unexpected flags %#x.\n", caps.SrcBlendCaps); + ok(!(caps.DestBlendCaps & ~(D3DPBLENDCAPS_ZERO | D3DPBLENDCAPS_ONE | D3DPBLENDCAPS_SRCCOLOR + | D3DPBLENDCAPS_INVSRCCOLOR | D3DPBLENDCAPS_SRCALPHA | D3DPBLENDCAPS_INVSRCALPHA + | D3DPBLENDCAPS_DESTALPHA | D3DPBLENDCAPS_INVDESTALPHA | D3DPBLENDCAPS_DESTCOLOR + | D3DPBLENDCAPS_INVDESTCOLOR | D3DPBLENDCAPS_SRCALPHASAT | D3DPBLENDCAPS_BOTHSRCALPHA + | D3DPBLENDCAPS_BOTHINVSRCALPHA | D3DPBLENDCAPS_BLENDFACTOR)), + "DestBlendCaps field has unexpected flags %#x.\n", caps.DestBlendCaps); + ok(!(caps.TextureCaps & ~(D3DPTEXTURECAPS_PERSPECTIVE | D3DPTEXTURECAPS_POW2 + | D3DPTEXTURECAPS_ALPHA | D3DPTEXTURECAPS_SQUAREONLY + | D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE | D3DPTEXTURECAPS_ALPHAPALETTE + | D3DPTEXTURECAPS_NONPOW2CONDITIONAL | D3DPTEXTURECAPS_PROJECTED + | D3DPTEXTURECAPS_CUBEMAP | D3DPTEXTURECAPS_VOLUMEMAP | D3DPTEXTURECAPS_MIPMAP + | D3DPTEXTURECAPS_MIPVOLUMEMAP | D3DPTEXTURECAPS_MIPCUBEMAP + | D3DPTEXTURECAPS_CUBEMAP_POW2 | D3DPTEXTURECAPS_VOLUMEMAP_POW2 + | D3DPTEXTURECAPS_NOPROJECTEDBUMPENV)), + "TextureCaps field has unexpected flags %#x.\n", caps.TextureCaps); + ok(!(caps.TextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_CONVOLUTIONMONO + | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "TextureFilterCaps field has unexpected flags %#x.\n", caps.TextureFilterCaps); + ok(!(caps.CubeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "CubeTextureFilterCaps field has unexpected flags %#x.\n", caps.CubeTextureFilterCaps); + ok(!(caps.VolumeTextureFilterCaps & ~(D3DPTFILTERCAPS_MINFPOINT | D3DPTFILTERCAPS_MINFLINEAR + | D3DPTFILTERCAPS_MINFANISOTROPIC | D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MINFGAUSSIANQUAD | D3DPTFILTERCAPS_MIPFPOINT + | D3DPTFILTERCAPS_MIPFLINEAR | D3DPTFILTERCAPS_MAGFPOINT | D3DPTFILTERCAPS_MAGFLINEAR + | D3DPTFILTERCAPS_MAGFANISOTROPIC | D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + | D3DPTFILTERCAPS_MAGFGAUSSIANQUAD)), + "VolumeTextureFilterCaps field has unexpected flags %#x.\n", caps.VolumeTextureFilterCaps); + ok(!(caps.LineCaps & ~(D3DLINECAPS_TEXTURE | D3DLINECAPS_ZTEST | D3DLINECAPS_BLEND + | D3DLINECAPS_ALPHACMP | D3DLINECAPS_FOG | D3DLINECAPS_ANTIALIAS)), + "LineCaps field has unexpected flags %#x.\n", caps.LineCaps); + ok(!(caps.StencilCaps & ~(D3DSTENCILCAPS_KEEP | D3DSTENCILCAPS_ZERO | D3DSTENCILCAPS_REPLACE + | D3DSTENCILCAPS_INCRSAT | D3DSTENCILCAPS_DECRSAT | D3DSTENCILCAPS_INVERT + | D3DSTENCILCAPS_INCR | D3DSTENCILCAPS_DECR | D3DSTENCILCAPS_TWOSIDED)), + "StencilCaps field has unexpected flags %#x.\n", caps.StencilCaps); + ok(!(caps.VertexProcessingCaps & ~(D3DVTXPCAPS_TEXGEN | D3DVTXPCAPS_MATERIALSOURCE7 + | D3DVTXPCAPS_DIRECTIONALLIGHTS | D3DVTXPCAPS_POSITIONALLIGHTS | D3DVTXPCAPS_LOCALVIEWER + | D3DVTXPCAPS_TWEENING | D3DVTXPCAPS_TEXGEN_SPHEREMAP + | D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER)), + "VertexProcessingCaps field has unexpected flags %#x.\n", caps.VertexProcessingCaps); + /* Both Nvidia and AMD give 10 here, surprisingly. */ + ok(caps.MaxActiveLights <= 10, + "MaxActiveLights field has unexpected value %u.\n", caps.MaxActiveLights); + /* AMD gives 6, Nvidia returns 8. */ + ok(caps.MaxUserClipPlanes <= 8, + "MaxUserClipPlanes field has unexpected value %u.\n", caps.MaxUserClipPlanes); + + refcount = IDirect3DDevice9Ex_Release(device); + ok(!refcount, "Device has %u references left.\n", refcount); + DestroyWindow(window); +} + START_TEST(d3d9ex) { DEVMODEW current_mode; @@ -3960,4 +4080,5 @@ START_TEST(d3d9ex) test_swapchain_parameters(); test_backbuffer_resize(); test_format_unknown(); + test_device_caps(); }
Hi,
While running your changed tests on Windows, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check? Full results can be found at https://testbot.winehq.org/JobDetails.pl?Key=36596
Your paranoid android.
=== build (build) === Patch failed to apply