tests: Collect D3D12 test options in a dedicated structure.

This commit is contained in:
Giovanni Mascellani 2023-01-28 21:44:21 +01:00 committed by Alexandre Julliard
parent 8d7159b4be
commit c8a05a8b10
Notes: Alexandre Julliard 2023-03-10 21:36:20 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Approved-by: Zebediah Figura (@zfigura)
Approved-by: Alexandre Julliard (@julliard)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/117
5 changed files with 42 additions and 40 deletions

View File

@ -455,7 +455,7 @@ static void check_buffer_uint_(unsigned int line, ID3D12Resource *buffer,
static bool broken_on_warp(bool condition) static bool broken_on_warp(bool condition)
{ {
return broken(use_warp_device && condition); return broken(test_options.use_warp_device && condition);
} }
static bool is_min_max_filtering_supported(ID3D12Device *device) static bool is_min_max_filtering_supported(ID3D12Device *device)
@ -2347,7 +2347,8 @@ static void test_create_reserved_resource(void)
hr = ID3D12Device_CreateReservedResource(device, hr = ID3D12Device_CreateReservedResource(device,
&resource_desc, D3D12_RESOURCE_STATE_COMMON, NULL, &resource_desc, D3D12_RESOURCE_STATE_COMMON, NULL,
&IID_ID3D12Resource, (void **)&resource); &IID_ID3D12Resource, (void **)&resource);
ok(hr == (standard_swizzle ? S_OK : E_INVALIDARG) || broken(use_warp_device), "Got unexpected hr %#x.\n", hr); ok(hr == (standard_swizzle ? S_OK : E_INVALIDARG) || broken(test_options.use_warp_device),
"Got unexpected hr %#x.\n", hr);
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
ID3D12Resource_Release(resource); ID3D12Resource_Release(resource);
@ -5302,7 +5303,7 @@ static void test_draw_instanced(void)
ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL);
if (!use_warp_device) if (!test_options.use_warp_device)
{ {
/* This draw call is ignored. */ /* This draw call is ignored. */
ID3D12GraphicsCommandList_DrawInstanced(command_list, 3, 1, 0, 0); ID3D12GraphicsCommandList_DrawInstanced(command_list, 3, 1, 0, 0);
@ -5347,7 +5348,7 @@ static void test_draw_indexed_instanced(void)
ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL); ID3D12GraphicsCommandList_ClearRenderTargetView(command_list, context.rtv, white, 0, NULL);
if (!use_warp_device) if (!test_options.use_warp_device)
{ {
/* This draw call is ignored. */ /* This draw call is ignored. */
ID3D12GraphicsCommandList_DrawIndexedInstanced(command_list, 3, 1, 0, 0, 0); ID3D12GraphicsCommandList_DrawIndexedInstanced(command_list, 3, 1, 0, 0, 0);
@ -7430,7 +7431,7 @@ static void test_bundle_state_inheritance(void)
return; return;
} }
if (use_warp_device) if (test_options.use_warp_device)
{ {
skip("Bundle state inheritance test crashes on WARP.\n"); skip("Bundle state inheritance test crashes on WARP.\n");
return; return;
@ -10430,7 +10431,7 @@ static void test_shader_instructions(void)
{ {
vkd3d_test_set_context("%u:%s", i, tests[i].ps->name); vkd3d_test_set_context("%u:%s", i, tests[i].ps->name);
if (tests[i].skip_on_warp && use_warp_device) if (tests[i].skip_on_warp && test_options.use_warp_device)
{ {
skip("Skipping shader '%s' test on WARP.\n", tests[i].ps->name); skip("Skipping shader '%s' test on WARP.\n", tests[i].ps->name);
continue; continue;
@ -10483,7 +10484,7 @@ static void test_shader_instructions(void)
{ {
vkd3d_test_set_context("%u:%s", i, uint_tests[i].ps->name); vkd3d_test_set_context("%u:%s", i, uint_tests[i].ps->name);
if (uint_tests[i].skip_on_warp && use_warp_device) if (uint_tests[i].skip_on_warp && test_options.use_warp_device)
{ {
skip("Skipping shader '%s' test on WARP.\n", uint_tests[i].ps->name); skip("Skipping shader '%s' test on WARP.\n", uint_tests[i].ps->name);
continue; continue;
@ -13652,7 +13653,7 @@ static void test_texture_ld(void)
{{ 3, 3, 3, 3}, 0x55555555}, {{ 3, 3, 3, 3}, 0x55555555},
}; };
if (use_warp_device) if (test_options.use_warp_device)
{ {
skip("WARP device is removed when ps_ld is used.\n"); skip("WARP device is removed when ps_ld is used.\n");
return; return;
@ -31927,7 +31928,7 @@ static void test_multisample_rendering(void)
static const D3D12_SHADER_BYTECODE ps_resolve = {ps_resolve_code, sizeof(ps_resolve_code)}; static const D3D12_SHADER_BYTECODE ps_resolve = {ps_resolve_code, sizeof(ps_resolve_code)};
static const unsigned int expected_colors[] = {0xff0000ff, 0xff00ff00, 0xffff0000, 0xff000000}; static const unsigned int expected_colors[] = {0xff0000ff, 0xff00ff00, 0xffff0000, 0xff000000};
if (use_warp_device) if (test_options.use_warp_device)
{ {
skip("Sample shading tests fail on WARP.\n"); skip("Sample shading tests fail on WARP.\n");
return; return;
@ -32166,7 +32167,7 @@ static void test_coverage(void)
{ ~0u, 0xff00ff00}, { ~0u, 0xff00ff00},
}; };
if (use_warp_device) if (test_options.use_warp_device)
{ {
skip("Sample shading tests fail on WARP.\n"); skip("Sample shading tests fail on WARP.\n");
return; return;
@ -32577,7 +32578,7 @@ static void test_shader_eval_attribute(void)
static const struct vec4 expected_vec4 = {0.0f, 0.0f, 0.0f, 1.0f}; static const struct vec4 expected_vec4 = {0.0f, 0.0f, 0.0f, 1.0f};
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f}; static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
if (use_warp_device) if (test_options.use_warp_device)
{ {
skip("Sample shading tests fail on WARP.\n"); skip("Sample shading tests fail on WARP.\n");
return; return;
@ -36106,7 +36107,7 @@ static void test_clock_calibration(void)
START_TEST(d3d12) START_TEST(d3d12)
{ {
parse_args(argc, argv); parse_args(argc, argv);
enable_d3d12_debug_layer(argc, argv); enable_d3d12_debug_layer();
init_adapter_info(); init_adapter_info();
pfn_D3D12CreateVersionedRootSignatureDeserializer = get_d3d12_pfn(D3D12CreateVersionedRootSignatureDeserializer); pfn_D3D12CreateVersionedRootSignatureDeserializer = get_d3d12_pfn(D3D12CreateVersionedRootSignatureDeserializer);

View File

@ -258,8 +258,13 @@ static void wait_queue_idle_(unsigned int line, ID3D12Device *device, ID3D12Comm
ID3D12Fence_Release(fence); ID3D12Fence_Release(fence);
} }
static bool use_warp_device; static struct test_options
static unsigned int use_adapter_idx; {
bool use_warp_device;
unsigned int adapter_idx;
bool enable_debug_layer;
bool enable_gpu_based_validation;
} test_options;
#ifdef VKD3D_CROSSTEST #ifdef VKD3D_CROSSTEST
static IUnknown *create_warp_adapter(IDXGIFactory4 *factory) static IUnknown *create_warp_adapter(IDXGIFactory4 *factory)
@ -283,13 +288,13 @@ static IUnknown *create_adapter(void)
hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory); hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
ok(hr == S_OK, "Failed to create IDXGIFactory4, hr %#x.\n", hr); ok(hr == S_OK, "Failed to create IDXGIFactory4, hr %#x.\n", hr);
if (use_warp_device && (adapter = create_warp_adapter(factory))) if (test_options.use_warp_device && (adapter = create_warp_adapter(factory)))
{ {
IDXGIFactory4_Release(factory); IDXGIFactory4_Release(factory);
return adapter; return adapter;
} }
hr = IDXGIFactory4_EnumAdapters(factory, use_adapter_idx, (IDXGIAdapter **)&adapter); hr = IDXGIFactory4_EnumAdapters(factory, test_options.adapter_idx, (IDXGIAdapter **)&adapter);
IDXGIFactory4_Release(factory); IDXGIFactory4_Release(factory);
if (FAILED(hr)) if (FAILED(hr))
trace("Failed to get adapter, hr %#x.\n", hr); trace("Failed to get adapter, hr %#x.\n", hr);
@ -302,7 +307,8 @@ static ID3D12Device *create_device(void)
ID3D12Device *device; ID3D12Device *device;
HRESULT hr; HRESULT hr;
if ((use_warp_device || use_adapter_idx) && !(adapter = create_adapter())) if ((test_options.use_warp_device || test_options.adapter_idx)
&& !(adapter = create_adapter()))
{ {
trace("Failed to create adapter.\n"); trace("Failed to create adapter.\n");
return NULL; return NULL;
@ -344,7 +350,7 @@ static void init_adapter_info(void)
if (desc.VendorId == 0x1414 && desc.DeviceId == 0x008c) if (desc.VendorId == 0x1414 && desc.DeviceId == 0x008c)
{ {
trace("Using WARP device.\n"); trace("Using WARP device.\n");
use_warp_device = true; test_options.use_warp_device = true;
} }
IDXGIAdapter_Release(dxgi_adapter); IDXGIAdapter_Release(dxgi_adapter);
@ -493,9 +499,9 @@ static VkPhysicalDevice select_physical_device(struct vkd3d_instance *instance)
vr = vkEnumeratePhysicalDevices(vk_instance, &count, NULL); vr = vkEnumeratePhysicalDevices(vk_instance, &count, NULL);
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr); ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
if (use_adapter_idx >= count) if (test_options.adapter_idx >= count)
{ {
trace("Invalid physical device index %u.\n", use_adapter_idx); trace("Invalid physical device index %u.\n", test_options.adapter_idx);
return VK_NULL_HANDLE; return VK_NULL_HANDLE;
} }
@ -504,7 +510,7 @@ static VkPhysicalDevice select_physical_device(struct vkd3d_instance *instance)
vr = vkEnumeratePhysicalDevices(vk_instance, &count, vk_physical_devices); vr = vkEnumeratePhysicalDevices(vk_instance, &count, vk_physical_devices);
ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr); ok(vr == VK_SUCCESS, "Got unexpected VkResult %d.\n", vr);
vk_physical_device = vk_physical_devices[use_adapter_idx]; vk_physical_device = vk_physical_devices[test_options.adapter_idx];
free(vk_physical_devices); free(vk_physical_devices);
@ -676,34 +682,28 @@ static void parse_args(int argc, char **argv)
for (i = 1; i < argc; ++i) for (i = 1; i < argc; ++i)
{ {
if (!strcmp(argv[i], "--warp")) if (!strcmp(argv[i], "--warp"))
use_warp_device = true; test_options.use_warp_device = true;
else if (!strcmp(argv[i], "--adapter") && i + 1 < argc) else if (!strcmp(argv[i], "--adapter") && i + 1 < argc)
use_adapter_idx = atoi(argv[++i]); test_options.adapter_idx = atoi(argv[++i]);
else if (!strcmp(argv[i], "--validate"))
test_options.enable_debug_layer = true;
else if (!strcmp(argv[i], "--gbv"))
test_options.enable_gpu_based_validation = true;
} }
} }
static void enable_d3d12_debug_layer(int argc, char **argv) static void enable_d3d12_debug_layer(void)
{ {
bool enable_debug_layer = false, enable_gpu_based_validation = false;
ID3D12Debug1 *debug1; ID3D12Debug1 *debug1;
ID3D12Debug *debug; ID3D12Debug *debug;
unsigned int i;
for (i = 1; i < argc; ++i) if (test_options.enable_gpu_based_validation)
{
if (!strcmp(argv[i], "--validate"))
enable_debug_layer = true;
else if (!strcmp(argv[i], "--gbv"))
enable_gpu_based_validation = true;
}
if (enable_gpu_based_validation)
{ {
if (SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug1, (void **)&debug1))) if (SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug1, (void **)&debug1)))
{ {
ID3D12Debug1_SetEnableGPUBasedValidation(debug1, true); ID3D12Debug1_SetEnableGPUBasedValidation(debug1, true);
ID3D12Debug1_Release(debug1); ID3D12Debug1_Release(debug1);
enable_debug_layer = true; test_options.enable_debug_layer = true;
} }
else else
{ {
@ -711,7 +711,8 @@ static void enable_d3d12_debug_layer(int argc, char **argv)
} }
} }
if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug))) if (test_options.enable_debug_layer
&& SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
{ {
ID3D12Debug_EnableDebugLayer(debug); ID3D12Debug_EnableDebugLayer(debug);
ID3D12Debug_Release(debug); ID3D12Debug_Release(debug);

View File

@ -327,7 +327,7 @@ static void test_invalid_unordered_access_views(void)
START_TEST(d3d12_invalid_usage) START_TEST(d3d12_invalid_usage)
{ {
parse_args(argc, argv); parse_args(argc, argv);
enable_d3d12_debug_layer(argc, argv); enable_d3d12_debug_layer();
init_adapter_info(); init_adapter_info();
run_test(test_invalid_resource_barriers); run_test(test_invalid_resource_barriers);

View File

@ -576,7 +576,7 @@ static void test_thread_id(void)
START_TEST(hlsl_d3d12) START_TEST(hlsl_d3d12)
{ {
parse_args(argc, argv); parse_args(argc, argv);
enable_d3d12_debug_layer(argc, argv); enable_d3d12_debug_layer();
init_adapter_info(); init_adapter_info();
run_test(test_preprocess); run_test(test_preprocess);

View File

@ -523,7 +523,7 @@ void run_shader_tests_d3d12(int argc, char **argv)
HRESULT hr; HRESULT hr;
parse_args(argc, argv); parse_args(argc, argv);
enable_d3d12_debug_layer(argc, argv); enable_d3d12_debug_layer();
init_adapter_info(); init_adapter_info();
init_test_context(&runner.test_context, &desc); init_test_context(&runner.test_context, &desc);
device = runner.test_context.device; device = runner.test_context.device;