mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
tests: Add test for creating root signature.
This commit is contained in:
parent
aec10bd682
commit
39432ca5a3
@ -72,6 +72,33 @@ static void check_interface_(unsigned int line, IUnknown *iface, REFIID riid, BO
|
|||||||
IUnknown_Release(unk);
|
IUnknown_Release(unk);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define create_root_signature(a, b, c) create_root_signature_(__LINE__, a, b, c)
|
||||||
|
#if _WIN32
|
||||||
|
static HRESULT create_root_signature_(unsigned int line, ID3D12Device *device,
|
||||||
|
const D3D12_ROOT_SIGNATURE_DESC *desc, ID3D12RootSignature **root_signature)
|
||||||
|
{
|
||||||
|
ID3DBlob *blob;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (FAILED(hr = D3D12SerializeRootSignature(desc, D3D_ROOT_SIGNATURE_VERSION_1_0, &blob, NULL)))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = ID3D12Device_CreateRootSignature(device, 0, ID3D10Blob_GetBufferPointer(blob),
|
||||||
|
ID3D10Blob_GetBufferSize(blob), &IID_ID3D12RootSignature, (void **)root_signature);
|
||||||
|
ID3D10Blob_Release(blob);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* XXX: Root signature byte code is not supported yet. We allow to pass D3D12_ROOT_SIGNATURE_DESC
|
||||||
|
* directly to CreateRootSignature(). */
|
||||||
|
static HRESULT create_root_signature_(unsigned int line, ID3D12Device *device,
|
||||||
|
const D3D12_ROOT_SIGNATURE_DESC *desc, ID3D12RootSignature **root_signature)
|
||||||
|
{
|
||||||
|
return ID3D12Device_CreateRootSignature(device, 0, desc, ~0u,
|
||||||
|
&IID_ID3D12RootSignature, (void **)root_signature);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static ID3D12Device *create_device(void)
|
static ID3D12Device *create_device(void)
|
||||||
{
|
{
|
||||||
ID3D12Device *device;
|
ID3D12Device *device;
|
||||||
@ -617,6 +644,70 @@ static void test_create_descriptor_heap(void)
|
|||||||
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
|
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_create_root_signature(void)
|
||||||
|
{
|
||||||
|
D3D12_ROOT_SIGNATURE_DESC root_signature_desc;
|
||||||
|
D3D12_DESCRIPTOR_RANGE descriptor_ranges[1];
|
||||||
|
D3D12_ROOT_PARAMETER root_parameters[1];
|
||||||
|
ID3D12RootSignature *root_signature;
|
||||||
|
ID3D12Device *device, *tmp_device;
|
||||||
|
ULONG refcount;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
if (!(device = create_device()))
|
||||||
|
{
|
||||||
|
skip("Failed to create device.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
descriptor_ranges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
|
||||||
|
descriptor_ranges[0].NumDescriptors = 1;
|
||||||
|
descriptor_ranges[0].BaseShaderRegister = 0;
|
||||||
|
descriptor_ranges[0].RegisterSpace = 0;
|
||||||
|
descriptor_ranges[0].OffsetInDescriptorsFromTableStart = 0;
|
||||||
|
root_parameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
|
||||||
|
root_parameters[0].DescriptorTable.NumDescriptorRanges = 1;
|
||||||
|
root_parameters[0].DescriptorTable.pDescriptorRanges = descriptor_ranges;
|
||||||
|
root_parameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;
|
||||||
|
root_signature_desc.NumParameters = 1;
|
||||||
|
root_signature_desc.pParameters = root_parameters;
|
||||||
|
root_signature_desc.NumStaticSamplers = 0;
|
||||||
|
root_signature_desc.pStaticSamplers = NULL;
|
||||||
|
root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;
|
||||||
|
hr = create_root_signature(device, &root_signature_desc, &root_signature);
|
||||||
|
ok(SUCCEEDED(hr), "Failed to create root signature, hr %#x.\n", hr);
|
||||||
|
|
||||||
|
refcount = get_refcount(device);
|
||||||
|
ok(refcount == 2, "Got unexpected refcount %u.\n", (unsigned int)refcount);
|
||||||
|
hr = ID3D12RootSignature_GetDevice(root_signature, &IID_ID3D12Device, (void **)&tmp_device);
|
||||||
|
ok(SUCCEEDED(hr), "GetDevice failed, hr %#x.\n", hr);
|
||||||
|
refcount = get_refcount(device);
|
||||||
|
ok(refcount == 3, "Got unexpected refcount %u.\n", (unsigned int)refcount);
|
||||||
|
refcount = ID3D12Device_Release(tmp_device);
|
||||||
|
ok(refcount == 2, "Got unexpected refcount %u.\n", (unsigned int)refcount);
|
||||||
|
|
||||||
|
check_interface(root_signature, &IID_ID3D12Object, TRUE);
|
||||||
|
check_interface(root_signature, &IID_ID3D12DeviceChild, TRUE);
|
||||||
|
check_interface(root_signature, &IID_ID3D12Pageable, FALSE);
|
||||||
|
check_interface(root_signature, &IID_ID3D12RootSignature, TRUE);
|
||||||
|
|
||||||
|
refcount = ID3D12RootSignature_Release(root_signature);
|
||||||
|
ok(!refcount, "ID3D12RootSignature has %u references left.\n", (unsigned int)refcount);
|
||||||
|
|
||||||
|
root_signature_desc.NumParameters = 0;
|
||||||
|
root_signature_desc.pParameters = NULL;
|
||||||
|
root_signature_desc.NumStaticSamplers = 0;
|
||||||
|
root_signature_desc.pStaticSamplers = NULL;
|
||||||
|
root_signature_desc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;
|
||||||
|
hr = create_root_signature(device, &root_signature_desc, &root_signature);
|
||||||
|
ok(SUCCEEDED(hr), "Failed to create root signature, hr %#x.\n", hr);
|
||||||
|
refcount = ID3D12RootSignature_Release(root_signature);
|
||||||
|
ok(!refcount, "ID3D12RootSignature has %u references left.\n", (unsigned int)refcount);
|
||||||
|
|
||||||
|
refcount = ID3D12Device_Release(device);
|
||||||
|
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(d3d12)
|
START_TEST(d3d12)
|
||||||
{
|
{
|
||||||
ID3D12Debug *debug;
|
ID3D12Debug *debug;
|
||||||
@ -635,4 +726,5 @@ START_TEST(d3d12)
|
|||||||
test_create_command_queue();
|
test_create_command_queue();
|
||||||
test_create_committed_resource();
|
test_create_committed_resource();
|
||||||
test_create_descriptor_heap();
|
test_create_descriptor_heap();
|
||||||
|
test_create_root_signature();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user