tests: Add command-line option to force WARP device.

This commit is contained in:
Józef Kucia 2017-08-15 12:24:44 +02:00
parent 6c237a91f6
commit bdee037a1c

View File

@ -47,7 +47,9 @@ typedef int HRESULT;
#define WIDL_C_INLINE_WRAPPERS #define WIDL_C_INLINE_WRAPPERS
#include "d3d12.h" #include "d3d12.h"
#ifndef _WIN32 #ifdef _WIN32
# include "dxgi1_4.h"
#else
# include <pthread.h> # include <pthread.h>
# include "vkd3d_utils.h" # include "vkd3d_utils.h"
#endif #endif
@ -911,11 +913,44 @@ static void check_sub_resource_vec4_(unsigned int line, ID3D12Resource *texture,
got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y); got.x, got.y, got.z, got.w, expected->x, expected->y, expected->z, expected->w, x, y);
} }
#ifdef _WIN32
static IUnknown *create_warp_adapter(void)
{
IDXGIFactory4 *factory;
IUnknown *adapter;
HRESULT hr;
hr = CreateDXGIFactory1(&IID_IDXGIFactory4, (void **)&factory);
ok(SUCCEEDED(hr), "Failed to create IDXGIFactory4, hr %#x.\n", hr);
adapter = NULL;
hr = IDXGIFactory4_EnumWarpAdapter(factory, &IID_IUnknown, (void **)&adapter);
IDXGIFactory4_Release(factory);
if (FAILED(hr))
trace("Failed to get WARP adapter, hr %#x.\n", hr);
return adapter;
}
#else
static IUnknown *create_warp_adapter(void)
{
return NULL;
}
#endif
static bool use_warp_device;
static ID3D12Device *create_device(void) static ID3D12Device *create_device(void)
{ {
IUnknown *adapter = NULL;
ID3D12Device *device; ID3D12Device *device;
if (FAILED(D3D12CreateDevice(NULL, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device))) if (use_warp_device && !(adapter = create_warp_adapter()))
{
trace("Failed to create WARP device.\n");
return NULL;
}
if (FAILED(D3D12CreateDevice(adapter, D3D_FEATURE_LEVEL_11_0, &IID_ID3D12Device, (void **)&device)))
return NULL; return NULL;
return device; return device;
@ -929,7 +964,7 @@ static bool is_min_max_filtering_supported(ID3D12Device *device)
if (FAILED(hr = ID3D12Device_CheckFeatureSupport(device, if (FAILED(hr = ID3D12Device_CheckFeatureSupport(device,
D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options)))) D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options))))
{ {
trace("CheckFeatureSupport failed, hr %#x.\n", hr); trace("Failed to check feature support, hr %#x.\n", hr);
return false; return false;
} }
@ -8900,11 +8935,17 @@ static void test_cs_uav_store(void)
START_TEST(d3d12) START_TEST(d3d12)
{ {
BOOL enable_debug_layer = FALSE; bool enable_debug_layer = false;
ID3D12Debug *debug; ID3D12Debug *debug;
unsigned int i;
if (argc >= 2 && !strcmp(argv[1], "--validate")) for (i = 1; i < argc; ++i)
enable_debug_layer = TRUE; {
if (!strcmp(argv[i], "--validate"))
enable_debug_layer = true;
else if (!strcmp(argv[i], "--warp"))
use_warp_device = true;
}
if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug))) if (enable_debug_layer && SUCCEEDED(D3D12GetDebugInterface(&IID_ID3D12Debug, (void **)&debug)))
{ {