d3d9/tests: Cleanup test_display_formats() a bit.
This commit is contained in:
parent
1438c74b74
commit
71d018b25b
|
@ -2271,59 +2271,57 @@ cleanup:
|
||||||
if(d3d9) IDirect3D9_Release(d3d9);
|
if(d3d9) IDirect3D9_Release(d3d9);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct format {
|
/* Direct3D9 offers 4 display formats: R5G6B5, X1R5G5B5, X8R8G8B8 and
|
||||||
D3DFORMAT format;
|
* A2R10G10B10. Next to these there are 6 different back buffer formats. Only
|
||||||
D3DFORMAT alpha_format;
|
* a fixed number of combinations are possible in fullscreen mode. In windowed
|
||||||
const char* name;
|
* mode more combinations are allowed due to format conversion and this is
|
||||||
BOOL display;
|
* likely driver dependent. */
|
||||||
BOOL windowed;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct format formats[] =
|
|
||||||
{
|
|
||||||
#define FORMAT(f, a, d, w) { f, a, #f, d, w }
|
|
||||||
FORMAT(D3DFMT_R5G6B5, 0, TRUE, TRUE),
|
|
||||||
FORMAT(D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, TRUE, TRUE),
|
|
||||||
FORMAT(D3DFMT_A1R5G5B5, D3DFMT_A1R5G5B5, FALSE, FALSE),
|
|
||||||
FORMAT(D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, TRUE, TRUE),
|
|
||||||
FORMAT(D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE, FALSE),
|
|
||||||
FORMAT(D3DFMT_A2R10G10B10, 0, TRUE, FALSE),
|
|
||||||
FORMAT(D3DFMT_UNKNOWN, 0, FALSE, FALSE),
|
|
||||||
#undef FORMAT
|
|
||||||
};
|
|
||||||
|
|
||||||
static void test_display_formats(void)
|
static void test_display_formats(void)
|
||||||
{
|
{
|
||||||
/* Direct3D9 offers 4 display formats R5G6B5, X1R5G5B5, X8R8G8B8 and A2R10G10B10.
|
D3DDEVTYPE device_type = D3DDEVTYPE_HAL;
|
||||||
* Next to these there are 6 different backbuffer formats. Only a fixed number of
|
unsigned int backbuffer, display;
|
||||||
* combinations are possible in FULLSCREEN mode. In windowed mode more combinations are
|
unsigned int windowed;
|
||||||
* allowed due to depth conversion and this is likely driver dependent. */
|
IDirect3D9 *d3d9;
|
||||||
|
BOOL should_pass;
|
||||||
|
BOOL has_modes;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
UINT Adapter = D3DADAPTER_DEFAULT;
|
static const struct
|
||||||
D3DDEVTYPE DeviceType = D3DDEVTYPE_HAL;
|
|
||||||
int display;
|
|
||||||
|
|
||||||
IDirect3D9 *d3d9 = pDirect3DCreate9( D3D_SDK_VERSION );
|
|
||||||
ok(d3d9 != NULL, "Failed to create IDirect3D9 object\n");
|
|
||||||
if(!d3d9) return;
|
|
||||||
|
|
||||||
for (display = 0; display < sizeof(formats) / sizeof(formats[0]); display++)
|
|
||||||
{
|
{
|
||||||
int nmodes, windowed;
|
const char *name;
|
||||||
|
D3DFORMAT format;
|
||||||
|
D3DFORMAT alpha_format;
|
||||||
|
BOOL display;
|
||||||
|
BOOL windowed;
|
||||||
|
}
|
||||||
|
formats[] =
|
||||||
|
{
|
||||||
|
{"D3DFMT_R5G6B5", D3DFMT_R5G6B5, 0, TRUE, TRUE},
|
||||||
|
{"D3DFMT_X1R5G5B5", D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, TRUE, TRUE},
|
||||||
|
{"D3DFMT_A1R5G5B5", D3DFMT_A1R5G5B5, D3DFMT_A1R5G5B5, FALSE, FALSE},
|
||||||
|
{"D3DFMT_X8R8G8B8", D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, TRUE, TRUE},
|
||||||
|
{"D3DFMT_A8R8G8B8", D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, FALSE, FALSE},
|
||||||
|
{"D3DFMT_A2R10G10B10", D3DFMT_A2R10G10B10, 0, TRUE, FALSE},
|
||||||
|
{"D3DFMT_UNKNOWN", D3DFMT_UNKNOWN, 0, FALSE, FALSE},
|
||||||
|
};
|
||||||
|
|
||||||
nmodes = IDirect3D9_GetAdapterModeCount(d3d9, D3DADAPTER_DEFAULT, formats[display].format);
|
if (!(d3d9 = pDirect3DCreate9(D3D_SDK_VERSION)))
|
||||||
|
{
|
||||||
|
skip("Failed to create an IDirect3D9 object, skipping test.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (windowed = 0; windowed <= 1; windowed++)
|
for (display = 0; display < sizeof(formats) / sizeof(*formats); ++display)
|
||||||
|
{
|
||||||
|
has_modes = IDirect3D9_GetAdapterModeCount(d3d9, D3DADAPTER_DEFAULT, formats[display].format);
|
||||||
|
|
||||||
|
for (windowed = 0; windowed <= 1; ++windowed)
|
||||||
{
|
{
|
||||||
int backbuffer;
|
for (backbuffer = 0; backbuffer < sizeof(formats) / sizeof(*formats); ++backbuffer)
|
||||||
for (backbuffer = 0; backbuffer < sizeof(formats) / sizeof(formats[0]); backbuffer++)
|
|
||||||
{
|
{
|
||||||
BOOL shouldPass;
|
should_pass = FALSE;
|
||||||
HRESULT hr;
|
|
||||||
|
|
||||||
if (!formats[display].display || (windowed && !formats[display].windowed) || (!windowed && !nmodes))
|
if (formats[display].display && (formats[display].windowed || !windowed) && (has_modes || windowed))
|
||||||
shouldPass = FALSE;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
D3DFORMAT backbuffer_format;
|
D3DFORMAT backbuffer_format;
|
||||||
|
|
||||||
|
@ -2332,36 +2330,33 @@ static void test_display_formats(void)
|
||||||
else
|
else
|
||||||
backbuffer_format = formats[backbuffer].format;
|
backbuffer_format = formats[backbuffer].format;
|
||||||
|
|
||||||
hr = IDirect3D9_CheckDeviceFormat(d3d9, Adapter, DeviceType, formats[display].format, D3DUSAGE_RENDERTARGET,
|
hr = IDirect3D9_CheckDeviceFormat(d3d9, D3DADAPTER_DEFAULT, device_type, formats[display].format,
|
||||||
D3DRTYPE_SURFACE, backbuffer_format);
|
D3DUSAGE_RENDERTARGET, D3DRTYPE_SURFACE, backbuffer_format);
|
||||||
if (hr == D3D_OK)
|
if (hr == D3D_OK)
|
||||||
{
|
{
|
||||||
if (windowed)
|
if (windowed)
|
||||||
{
|
{
|
||||||
hr = IDirect3D9_CheckDeviceFormatConversion(d3d9, Adapter, DeviceType, backbuffer_format, formats[display].format);
|
hr = IDirect3D9_CheckDeviceFormatConversion(d3d9, D3DADAPTER_DEFAULT, device_type,
|
||||||
shouldPass = (hr == D3D_OK);
|
backbuffer_format, formats[display].format);
|
||||||
|
should_pass = (hr == D3D_OK);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
shouldPass = (formats[display].format == formats[backbuffer].format ||
|
should_pass = (formats[display].format == formats[backbuffer].format
|
||||||
(formats[display].alpha_format && formats[display].alpha_format == formats[backbuffer].alpha_format));
|
|| (formats[display].alpha_format
|
||||||
|
&& formats[display].alpha_format == formats[backbuffer].alpha_format));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
shouldPass = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hr = IDirect3D9_CheckDeviceType(d3d9, Adapter, DeviceType, formats[display].format, formats[backbuffer].format, windowed);
|
hr = IDirect3D9_CheckDeviceType(d3d9, D3DADAPTER_DEFAULT, device_type,
|
||||||
|
formats[display].format, formats[backbuffer].format, windowed);
|
||||||
if (shouldPass)
|
ok(SUCCEEDED(hr) == should_pass,
|
||||||
ok(hr == D3D_OK, "CheckDeviceType(..., %s, %s, windowed=%d) failed with hr=%#08x\n", formats[display].name,
|
"Got unexpected hr %#x for %s / %s, windowed %#x, should_pass %#x.\n",
|
||||||
formats[backbuffer].name, windowed, hr);
|
hr, formats[display].name, formats[backbuffer].name, windowed, should_pass);
|
||||||
else
|
|
||||||
ok(hr != D3D_OK, "CheckDeviceType(..., %s, %s, windowed=%d) succeeded when it was expected to fail\n", formats[display].name,
|
|
||||||
formats[backbuffer].name, windowed);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(d3d9) IDirect3D9_Release(d3d9);
|
IDirect3D9_Release(d3d9);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_scissor_size(void)
|
static void test_scissor_size(void)
|
||||||
|
|
Loading…
Reference in New Issue