tests: Test clearing a NULL UAV.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-05-27 12:25:00 +02:00
parent 9983a1720f
commit 47f978fec3
1 changed files with 28 additions and 2 deletions

View File

@ -5523,6 +5523,7 @@ static void test_clear_unordered_access_view_buffer(void)
unsigned int values[4];
unsigned int expected;
bool is_float;
bool is_null_descriptor;
}
tests[] =
{
@ -5532,6 +5533,8 @@ static void test_clear_unordered_access_view_buffer(void)
{0, 0, 0, 0}, 0},
{DXGI_FORMAT_R32_UINT, { 0, BUFFER_SIZE / sizeof(uint32_t), 0, 0, D3D12_BUFFER_UAV_FLAG_NONE},
{1, 0, 0, 0}, 1},
{DXGI_FORMAT_R32_UINT, { 0, BUFFER_SIZE / sizeof(uint32_t), 0, 0, D3D12_BUFFER_UAV_FLAG_NONE},
{1, 0, 0, 0}, 0, false, true},
{DXGI_FORMAT_R32_UINT, {64, BUFFER_SIZE / sizeof(uint32_t) - 64, 0, 0, D3D12_BUFFER_UAV_FLAG_NONE},
{2, 0, 0, 0}, 2},
{DXGI_FORMAT_R32_UINT, {64, BUFFER_SIZE / sizeof(uint32_t) - 64, 0, 0, D3D12_BUFFER_UAV_FLAG_NONE},
@ -5547,6 +5550,8 @@ static void test_clear_unordered_access_view_buffer(void)
{0, 0, 0, 0}, 0},
{DXGI_FORMAT_R32_TYPELESS, { 0, BUFFER_SIZE / sizeof(uint32_t), 0, 0, D3D12_BUFFER_UAV_FLAG_RAW},
{6, 0, 0, 0}, 6},
{DXGI_FORMAT_R32_TYPELESS, { 0, BUFFER_SIZE / sizeof(uint32_t), 0, 0, D3D12_BUFFER_UAV_FLAG_RAW},
{6, 0, 0, 0}, 0, false, true},
{DXGI_FORMAT_R32_TYPELESS, {64, BUFFER_SIZE / sizeof(uint32_t) - 64, 0, 0, D3D12_BUFFER_UAV_FLAG_RAW},
{7, 0, 0, 0}, 7},
{DXGI_FORMAT_R32_TYPELESS, {64, BUFFER_SIZE / sizeof(uint32_t) - 64, 0, 0, D3D12_BUFFER_UAV_FLAG_RAW},
@ -5638,7 +5643,7 @@ static void test_clear_unordered_access_view_buffer(void)
D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);
for (j = 0; j < ARRAY_SIZE(clear_value); ++j)
clear_value[j] = tests[i].expected ? 0 : ~0u;
clear_value[j] = tests[i].expected || tests[i].is_null_descriptor ? 0 : ~0u;
memset(&uav_desc, 0, sizeof(uav_desc));
uav_desc.Format = DXGI_FORMAT_R32_UINT;
@ -5657,6 +5662,15 @@ static void test_clear_unordered_access_view_buffer(void)
ID3D12Device_CreateUnorderedAccessView(device, buffer, NULL, &uav_desc,
get_cpu_descriptor_handle(&context, gpu_heap, 0));
if (tests[i].is_null_descriptor)
{
/* Test that we can clear out any knowledge about the existing descriptor. */
ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL, &uav_desc,
get_cpu_descriptor_handle(&context, cpu_heap, 0));
ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL, &uav_desc,
get_cpu_descriptor_handle(&context, gpu_heap, 0));
}
ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(command_list,
get_gpu_descriptor_handle(&context, gpu_heap, 1),
get_cpu_descriptor_handle(&context, cpu_heap, 1),
@ -5737,14 +5751,17 @@ static void test_clear_unordered_access_view_image(void)
unsigned int values[4];
unsigned int expected;
bool is_float;
bool is_null_descriptor;
}
tests[] =
{
/* Test clearing a specific mip level. */
{DXGI_FORMAT_R32_FLOAT, 2, 1, 0, 0, 1, 0, {{0}}, {1, 0, 0, 0}, 1},
{DXGI_FORMAT_R32_FLOAT, 2, 1, 0, 0, 1, 0, {{0}}, {1, 0, 0, 0}, 0, false, true},
{DXGI_FORMAT_R32_FLOAT, 2, 1, 1, 0, 1, 0, {{0}}, {1, 0, 0, 0}, 1},
{DXGI_FORMAT_R32_FLOAT, 2, 1, 0, 0, 1, 0, {{0}}, {0x3f000000, 0, 0, 0}, 0x3f000000, true},
{DXGI_FORMAT_R32_FLOAT, 2, 1, 1, 0, 1, 0, {{0}}, {0x3f000000, 0, 0, 0}, 0x3f000000, true},
{DXGI_FORMAT_R32_FLOAT, 2, 1, 1, 0, 1, 0, {{0}}, {0x3f000000, 0, 0, 0}, 0, true, true},
/* Test clearing specific array layers. */
{DXGI_FORMAT_R32_FLOAT, 1, IMAGE_SIZE, 0, 0, IMAGE_SIZE, 0, {{0}}, {1, 0, 0, 0}, 1},
{DXGI_FORMAT_R32_FLOAT, 1, IMAGE_SIZE, 0, 3, 2, 0, {{0}}, {1, 0, 0, 0}, 1},
@ -5892,9 +5909,18 @@ static void test_clear_unordered_access_view_image(void)
&uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, j));
}
if (tests[i].is_null_descriptor)
{
/* Test that we can clear out any knowledge about the existing descriptor. */
ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL,
&uav_desc, get_cpu_descriptor_handle(&context, cpu_heap, 0));
ID3D12Device_CreateUnorderedAccessView(device, NULL, NULL,
&uav_desc, get_cpu_descriptor_handle(&context, gpu_heap, 0));
}
for (j = 0; j < 4; ++j)
{
clear_value[j] = tests[i].expected ? 0u : ~0u;
clear_value[j] = tests[i].expected || tests[i].is_null_descriptor ? 0u : ~0u;
}
ID3D12GraphicsCommandList_ClearUnorderedAccessViewUint(command_list,