tests: Add test coverage for two stages of AddToStateObject().
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
b9c575d678
commit
b817f972f4
|
@ -1448,12 +1448,13 @@ static ID3D12StateObject *rt_pso_factory_compile(struct raytracing_test_context
|
|||
return rt_pso;
|
||||
}
|
||||
|
||||
static ID3D12StateObject *rt_pso_add_to_state_object(ID3D12Device5 *device, ID3D12StateObject *parent, ID3D12StateObject *addition)
|
||||
static ID3D12StateObject *rt_pso_add_to_state_object(ID3D12Device5 *device, ID3D12StateObject *parent, ID3D12StateObject *addition,
|
||||
const D3D12_HIT_GROUP_DESC *hit_group)
|
||||
{
|
||||
D3D12_EXISTING_COLLECTION_DESC existing;
|
||||
ID3D12StateObject *new_state_object;
|
||||
D3D12_STATE_OBJECT_CONFIG config;
|
||||
D3D12_STATE_SUBOBJECT subobj[2];
|
||||
D3D12_STATE_SUBOBJECT subobj[3];
|
||||
D3D12_STATE_OBJECT_DESC desc;
|
||||
ID3D12Device7 *device7;
|
||||
HRESULT hr;
|
||||
|
@ -1467,6 +1468,13 @@ static ID3D12StateObject *rt_pso_add_to_state_object(ID3D12Device5 *device, ID3D
|
|||
existing.pExports = NULL;
|
||||
existing.pExistingCollection = addition;
|
||||
|
||||
if (hit_group)
|
||||
{
|
||||
subobj[desc.NumSubobjects].Type = D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP;
|
||||
subobj[desc.NumSubobjects].pDesc = hit_group;
|
||||
desc.NumSubobjects++;
|
||||
}
|
||||
|
||||
if (FAILED(ID3D12Device5_QueryInterface(device, &IID_ID3D12Device7, (void**)&device7)))
|
||||
{
|
||||
skip("Failed to query ID3D12Device7.\n");
|
||||
|
@ -1478,9 +1486,9 @@ static ID3D12StateObject *rt_pso_add_to_state_object(ID3D12Device5 *device, ID3D
|
|||
ok(hr == E_INVALIDARG, "Unexpected hr #%x.\n", hr);
|
||||
|
||||
config.Flags = D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS;
|
||||
subobj[1].Type = D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG;
|
||||
subobj[1].pDesc = &config;
|
||||
desc.NumSubobjects = 2;
|
||||
subobj[desc.NumSubobjects].Type = D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG;
|
||||
subobj[desc.NumSubobjects].pDesc = &config;
|
||||
desc.NumSubobjects++;
|
||||
|
||||
/* Type must be RAYTRACING_PIPELINE. */
|
||||
desc.Type = D3D12_STATE_OBJECT_TYPE_COLLECTION;
|
||||
|
@ -1790,27 +1798,28 @@ static void test_raytracing_pipeline(enum rt_test_mode mode, D3D12_RAYTRACING_TI
|
|||
rt_pso_factory_add_subobject_to_exports_association(&factory,
|
||||
local_rs_index, 0, NULL);
|
||||
|
||||
rt_pso_factory_add_existing_collection(&factory, rt_object_library_tri, 0, NULL);
|
||||
|
||||
/* Defer this. */
|
||||
if (mode != TEST_MODE_PSO_ADD_TO_STATE_OBJECT)
|
||||
{
|
||||
rt_pso_factory_add_existing_collection(&factory, rt_object_library_tri, 0, NULL);
|
||||
rt_pso_factory_add_existing_collection(&factory, rt_object_library_aabb, 0, NULL);
|
||||
|
||||
memset(&hit_group, 0, sizeof(hit_group));
|
||||
hit_group.Type = D3D12_HIT_GROUP_TYPE_TRIANGLES;
|
||||
hit_group.ClosestHitShaderImport = u"XRayClosest";
|
||||
hit_group.HitGroupExport = u"XRayHit2";
|
||||
rt_pso_factory_add_hit_group(&factory, &hit_group);
|
||||
memset(&hit_group, 0, sizeof(hit_group));
|
||||
hit_group.Type = D3D12_HIT_GROUP_TYPE_TRIANGLES;
|
||||
hit_group.ClosestHitShaderImport = u"XRayClosest";
|
||||
hit_group.HitGroupExport = u"XRayHit2";
|
||||
rt_pso_factory_add_hit_group(&factory, &hit_group);
|
||||
}
|
||||
|
||||
rt_pso = rt_pso_factory_compile(&context, &factory, D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE);
|
||||
|
||||
/* Docs say there should be ref-count of the collection, but apparently, that refcount is private. */
|
||||
ref_count = ID3D12StateObject_AddRef(rt_object_library_tri);
|
||||
ok(ref_count == 2, "Collection ref count is %u.\n", ref_count);
|
||||
ID3D12StateObject_Release(rt_object_library_tri);
|
||||
|
||||
if (mode != TEST_MODE_PSO_ADD_TO_STATE_OBJECT)
|
||||
{
|
||||
/* Docs say there should be ref-count of the collection, but apparently, that refcount is private. */
|
||||
ref_count = ID3D12StateObject_AddRef(rt_object_library_tri);
|
||||
ok(ref_count == 2, "Collection ref count is %u.\n", ref_count);
|
||||
ID3D12StateObject_Release(rt_object_library_tri);
|
||||
|
||||
ref_count = ID3D12StateObject_AddRef(rt_object_library_aabb);
|
||||
ok(ref_count == 2, "Collection ref count is %u.\n", ref_count);
|
||||
ID3D12StateObject_Release(rt_object_library_aabb);
|
||||
|
@ -1819,6 +1828,24 @@ static void test_raytracing_pipeline(enum rt_test_mode mode, D3D12_RAYTRACING_TI
|
|||
else
|
||||
rt_pso = NULL;
|
||||
|
||||
/* Add two iterations of AddToStateObject so we have test coverage of that scenario. */
|
||||
if (mode == TEST_MODE_PSO_ADD_TO_STATE_OBJECT && rt_pso)
|
||||
{
|
||||
D3D12_HIT_GROUP_DESC hit_group;
|
||||
|
||||
memset(&hit_group, 0, sizeof(hit_group));
|
||||
hit_group.Type = D3D12_HIT_GROUP_TYPE_TRIANGLES;
|
||||
hit_group.ClosestHitShaderImport = u"XRayClosest";
|
||||
hit_group.HitGroupExport = u"XRayHit2";
|
||||
|
||||
rt_pso_added = rt_pso_add_to_state_object(context.device5, rt_pso, rt_object_library_tri, &hit_group);
|
||||
ID3D12StateObject_Release(rt_pso);
|
||||
rt_pso = rt_pso_added;
|
||||
ref_count = ID3D12StateObject_AddRef(rt_object_library_tri);
|
||||
ok(ref_count == 2, "Collection ref count is %u.\n", ref_count);
|
||||
ID3D12StateObject_Release(rt_object_library_tri);
|
||||
}
|
||||
|
||||
if (mode == TEST_MODE_PSO_ADD_TO_STATE_OBJECT && rt_pso)
|
||||
{
|
||||
uint8_t pre_ray_miss_data[D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES];
|
||||
|
@ -1852,7 +1879,7 @@ static void test_raytracing_pipeline(enum rt_test_mode mode, D3D12_RAYTRACING_TI
|
|||
memcpy(pre_ray_gen_data, pre_ray_gen, sizeof(pre_ray_gen_data));
|
||||
memcpy(pre_hit_data, pre_hit, sizeof(pre_hit_data));
|
||||
|
||||
rt_pso_added = rt_pso_add_to_state_object(context.device5, rt_pso, rt_object_library_aabb);
|
||||
rt_pso_added = rt_pso_add_to_state_object(context.device5, rt_pso, rt_object_library_aabb, NULL);
|
||||
ID3D12StateObject_QueryInterface(rt_pso, &IID_ID3D12StateObjectProperties, (void**)&post_props);
|
||||
ID3D12StateObject_QueryInterface(rt_pso_added, &IID_ID3D12StateObjectProperties, (void**)&combined_props);
|
||||
|
||||
|
|
Loading…
Reference in New Issue