tests: Add test for placed resource runtime validation.
Runtime validates resource size. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
6d1d60e898
commit
7ab0846242
|
@ -2321,6 +2321,72 @@ done:
|
|||
ok(!refcount, "ID3D12Device has %u references left.\n", (unsigned int)refcount);
|
||||
}
|
||||
|
||||
static void test_create_placed_resource_size(void)
|
||||
{
|
||||
D3D12_RESOURCE_ALLOCATION_INFO info;
|
||||
unsigned int mip_sizes[11], i;
|
||||
D3D12_HEAP_DESC heap_desc;
|
||||
D3D12_RESOURCE_DESC desc;
|
||||
ID3D12Resource *resource;
|
||||
ID3D12Device *device;
|
||||
ID3D12Heap *heap;
|
||||
HRESULT hr;
|
||||
|
||||
if (!(device = create_device()))
|
||||
{
|
||||
skip("Failed to create device.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
desc.Format = DXGI_FORMAT_R11G11B10_FLOAT;
|
||||
desc.DepthOrArraySize = 1;
|
||||
desc.Width = 540;
|
||||
desc.Height = 540;
|
||||
desc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
|
||||
desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
|
||||
desc.SampleDesc.Count = 1;
|
||||
desc.SampleDesc.Quality = 0;
|
||||
desc.Flags = D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS | D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;
|
||||
|
||||
for (i = 1; i < ARRAY_SIZE(mip_sizes); i++)
|
||||
{
|
||||
desc.MipLevels = i;
|
||||
info = ID3D12Device_GetResourceAllocationInfo(device, 0, 1, &desc);
|
||||
mip_sizes[i] = info.SizeInBytes;
|
||||
#if 0
|
||||
/* RADV fails this check, but native driver does not.
|
||||
* It is probably legal for a driver to have non-monotonic resource sizes here. */
|
||||
if (i > 1)
|
||||
ok(mip_sizes[i] >= mip_sizes[i - 1], "Resource size is not monotonically increasing (%u < %u).\n", mip_sizes[i], mip_sizes[i - 1]);
|
||||
#endif
|
||||
}
|
||||
|
||||
memset(&heap_desc, 0, sizeof(heap_desc));
|
||||
heap_desc.Alignment = 0;
|
||||
heap_desc.Properties.Type = D3D12_HEAP_TYPE_DEFAULT;
|
||||
heap_desc.SizeInBytes = mip_sizes[ARRAY_SIZE(mip_sizes) - 1];
|
||||
hr = ID3D12Device_CreateHeap(device, &heap_desc, &IID_ID3D12Heap, (void **)&heap);
|
||||
ok(SUCCEEDED(hr), "Failed to create heap, hr #%x.\n", hr);
|
||||
|
||||
hr = ID3D12Device_CreatePlacedResource(device, heap, 0, &desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&resource);
|
||||
ok(SUCCEEDED(hr), "Failed to create resource, hr #%x.\n", hr);
|
||||
|
||||
ID3D12Resource_Release(resource);
|
||||
ID3D12Heap_Release(heap);
|
||||
|
||||
heap_desc.SizeInBytes = 64 * 1024;
|
||||
hr = ID3D12Device_CreateHeap(device, &heap_desc, &IID_ID3D12Heap, (void **)&heap);
|
||||
ok(SUCCEEDED(hr), "Failed to create heap, hr #%x.\n", hr);
|
||||
|
||||
/* Runtime validates range, this must fail. */
|
||||
hr = ID3D12Device_CreatePlacedResource(device, heap, 0, &desc, D3D12_RESOURCE_STATE_RENDER_TARGET, NULL, &IID_ID3D12Resource, (void **)&resource);
|
||||
ok(hr == E_INVALIDARG, "Unexpected result, hr #%x.\n", hr);
|
||||
|
||||
ID3D12Heap_Release(heap);
|
||||
ID3D12Device_Release(device);
|
||||
}
|
||||
|
||||
static void test_create_placed_resource(void)
|
||||
{
|
||||
D3D12_GPU_VIRTUAL_ADDRESS gpu_address;
|
||||
|
@ -51447,6 +51513,7 @@ START_TEST(d3d12)
|
|||
run_test(test_create_committed_resource);
|
||||
run_test(test_create_heap);
|
||||
run_test(test_create_placed_resource);
|
||||
run_test(test_create_placed_resource_size);
|
||||
run_test(test_create_reserved_resource);
|
||||
run_test(test_create_descriptor_heap);
|
||||
run_test(test_create_sampler);
|
||||
|
|
Loading…
Reference in New Issue