Add serialization for state object desc

Co-authored-by: Nate, High <nate.high@amd.com>
This commit is contained in:
Amit Prakash
2023-08-17 07:32:09 -04:00
committed by baldurk
parent b52bb00101
commit 38ff2b859d
4 changed files with 539 additions and 0 deletions
+28
View File
@@ -815,6 +815,12 @@ DECLARE_REFLECTION_ENUM(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_TYPE);
DECLARE_REFLECTION_ENUM(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS);
DECLARE_REFLECTION_ENUM(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE);
DECLARE_REFLECTION_ENUM(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE);
DECLARE_REFLECTION_ENUM(D3D12_STATE_OBJECT_TYPE);
DECLARE_REFLECTION_ENUM(D3D12_STATE_SUBOBJECT_TYPE);
DECLARE_REFLECTION_ENUM(D3D12_STATE_OBJECT_FLAGS);
DECLARE_REFLECTION_ENUM(D3D12_EXPORT_FLAGS);
DECLARE_REFLECTION_ENUM(D3D12_HIT_GROUP_TYPE);
DECLARE_REFLECTION_ENUM(D3D12_RAYTRACING_PIPELINE_FLAGS);
DECLARE_REFLECTION_STRUCT(D3D12_RESOURCE_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_COMMAND_QUEUE_DESC);
@@ -941,6 +947,21 @@ DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO
DECLARE_REFLECTION_STRUCT(D3D12_GPU_VIRTUAL_ADDRESS_AND_STRIDE);
DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV);
DECLARE_REFLECTION_STRUCT(D3D12_STATE_OBJECT_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_STATE_SUBOBJECT);
DECLARE_REFLECTION_STRUCT(D3D12_STATE_OBJECT_CONFIG);
DECLARE_REFLECTION_STRUCT(D3D12_GLOBAL_ROOT_SIGNATURE);
DECLARE_REFLECTION_STRUCT(D3D12_LOCAL_ROOT_SIGNATURE);
DECLARE_REFLECTION_STRUCT(D3D12_NODE_MASK);
DECLARE_REFLECTION_STRUCT(D3D12_DXIL_LIBRARY_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_EXISTING_COLLECTION_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
DECLARE_REFLECTION_STRUCT(D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_SHADER_CONFIG);
DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_PIPELINE_CONFIG);
DECLARE_REFLECTION_STRUCT(D3D12_HIT_GROUP_DESC);
DECLARE_REFLECTION_STRUCT(D3D12_RAYTRACING_PIPELINE_CONFIG1);
DECLARE_REFLECTION_STRUCT(D3D12_EXPORT_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_DISCARD_REGION);
DECLARE_DESERIALISE_TYPE(D3D12_GRAPHICS_PIPELINE_STATE_DESC);
@@ -951,6 +972,13 @@ DECLARE_DESERIALISE_TYPE(D3D12_RENDER_PASS_RENDER_TARGET_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_RENDER_PASS_DEPTH_STENCIL_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_BARRIER_GROUP);
DECLARE_DESERIALISE_TYPE(D3D12_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_STATE_OBJECT_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_DXIL_LIBRARY_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_EXISTING_COLLECTION_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
DECLARE_DESERIALISE_TYPE(D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
DECLARE_DESERIALISE_TYPE(D3D12_HIT_GROUP_DESC);
DECLARE_DESERIALISE_TYPE(D3D12_EXPORT_DESC);
enum class D3D12Chunk : uint32_t
{
+1
View File
@@ -49,6 +49,7 @@ enum D3D12ResourceType
Resource_PipelineLibrary,
Resource_ProtectedResourceSession,
Resource_ShaderCacheSession,
Resource_StateObject
};
DECLARE_REFLECTION_ENUM(D3D12ResourceType);
+431
View File
@@ -27,6 +27,18 @@
#include "d3d12_common.h"
#include "d3d12_resources.h"
wchar_t *AllocateWideCharArray(rdcstr src)
{
if(src.empty())
{
return NULL;
}
rdcwstr wstr = StringFormat::UTF82Wide(src);
wchar_t *dest = new wchar_t[wstr.length() + 1];
wcscpy_s(dest, wstr.length() + 1, wstr.c_str());
return dest;
}
// some helper enums with custom stringise to handle special cases
enum D3D12ResourceBarrierSubresource
{
@@ -1973,6 +1985,410 @@ void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SR
SERIALISE_MEMBER_TYPED(D3D12BufferLocation, Location);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_STATE_OBJECT_DESC &el)
{
SERIALISE_MEMBER(Type);
SERIALISE_MEMBER(NumSubobjects);
if(ser.IsReading())
{
el.pSubobjects = new D3D12_STATE_SUBOBJECT[el.NumSubobjects];
}
ser.SetStructArg((uintptr_t)el.pSubobjects);
ser.Serialise("pSubobjects"_lit, el.pSubobjects, el.NumSubobjects);
}
template <>
void Deserialise(const D3D12_STATE_OBJECT_DESC &el)
{
for(size_t i = 0; i < el.NumSubobjects; i++)
{
if(el.pSubobjects[i].pDesc != NULL)
{
switch(el.pSubobjects[i].Type)
{
case D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG:
{
D3D12_STATE_OBJECT_CONFIG *temp = (D3D12_STATE_OBJECT_CONFIG *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE:
{
D3D12_GLOBAL_ROOT_SIGNATURE *temp = (D3D12_GLOBAL_ROOT_SIGNATURE *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE:
{
D3D12_LOCAL_ROOT_SIGNATURE *temp = (D3D12_LOCAL_ROOT_SIGNATURE *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK:
{
D3D12_NODE_MASK *temp = (D3D12_NODE_MASK *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY:
{
D3D12_DXIL_LIBRARY_DESC *temp = (D3D12_DXIL_LIBRARY_DESC *)el.pSubobjects[i].pDesc;
Deserialise(*temp);
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION:
{
D3D12_EXISTING_COLLECTION_DESC *temp =
(D3D12_EXISTING_COLLECTION_DESC *)el.pSubobjects[i].pDesc;
Deserialise(*temp);
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION:
{
D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION *temp =
(D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION *)el.pSubobjects[i].pDesc;
Deserialise(*temp);
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION:
{
D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION *temp =
(D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION *)el.pSubobjects[i].pDesc;
Deserialise(*temp);
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG:
{
D3D12_RAYTRACING_SHADER_CONFIG *temp =
(D3D12_RAYTRACING_SHADER_CONFIG *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG:
{
D3D12_RAYTRACING_PIPELINE_CONFIG *temp =
(D3D12_RAYTRACING_PIPELINE_CONFIG *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP:
{
D3D12_HIT_GROUP_DESC *temp = (D3D12_HIT_GROUP_DESC *)el.pSubobjects[i].pDesc;
Deserialise(*temp);
delete temp;
break;
}
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1:
{
D3D12_RAYTRACING_PIPELINE_CONFIG1 *temp =
(D3D12_RAYTRACING_PIPELINE_CONFIG1 *)el.pSubobjects[i].pDesc;
delete temp;
break;
}
default: RDCERR("Unsupported state sub-object type"); break;
}
}
}
delete[] el.pSubobjects;
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_STATE_SUBOBJECT &el)
{
SERIALISE_MEMBER(Type);
switch(el.Type)
{
case D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG:
ser.SerialiseNullable("pDesc"_lit, (D3D12_STATE_OBJECT_CONFIG *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE:
ser.SerialiseNullable("pDesc"_lit, (D3D12_GLOBAL_ROOT_SIGNATURE *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE:
ser.SerialiseNullable("pDesc"_lit, (D3D12_LOCAL_ROOT_SIGNATURE *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK:
ser.SerialiseNullable("pDesc"_lit, (D3D12_NODE_MASK *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY:
ser.SerialiseNullable("pDesc"_lit, (D3D12_DXIL_LIBRARY_DESC *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION:
ser.SerialiseNullable("pDesc"_lit, (D3D12_EXISTING_COLLECTION_DESC *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION:
ser.SerialiseNullable("pDesc"_lit, (D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION:
ser.SerialiseNullable("pDesc"_lit, (D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG:
ser.SerialiseNullable("pDesc"_lit, (D3D12_RAYTRACING_SHADER_CONFIG *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG:
ser.SerialiseNullable("pDesc"_lit, (D3D12_RAYTRACING_PIPELINE_CONFIG *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP:
ser.SerialiseNullable("pDesc"_lit, (D3D12_HIT_GROUP_DESC *&)el.pDesc);
break;
case D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1:
ser.SerialiseNullable("pDesc"_lit, (D3D12_RAYTRACING_PIPELINE_CONFIG1 *&)el.pDesc);
break;
default: RDCERR("Unsupported state sub-object type"); break;
}
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_STATE_OBJECT_CONFIG &el)
{
SERIALISE_MEMBER(Flags);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_GLOBAL_ROOT_SIGNATURE &el)
{
SERIALISE_MEMBER(pGlobalRootSignature);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_LOCAL_ROOT_SIGNATURE &el)
{
SERIALISE_MEMBER(pLocalRootSignature);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_NODE_MASK &el)
{
SERIALISE_MEMBER(NodeMask);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_DXIL_LIBRARY_DESC &el)
{
SERIALISE_MEMBER(DXILLibrary);
SERIALISE_MEMBER(NumExports);
SERIALISE_MEMBER_ARRAY(pExports, NumExports);
}
template <>
void Deserialise(const D3D12_DXIL_LIBRARY_DESC &el)
{
FreeAlignedBuffer((byte *)(el.DXILLibrary.pShaderBytecode));
for(size_t i = 0; i < el.NumExports; i++)
{
Deserialise(el.pExports[i]);
}
delete[] el.pExports;
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_EXISTING_COLLECTION_DESC &el)
{
// AMD TODO
RDCERR("D3D12_EXISTING_COLLECTION_DESC serialization is not handled");
}
template <>
void Deserialise(const D3D12_EXISTING_COLLECTION_DESC &el)
{
// AMD TODO
RDCERR("D3D12_EXISTING_COLLECTION_DESC de-serialization is not handled");
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el)
{
uint64_t subobjectToAssociateIndex;
rdcarray<rdcstr> exports;
if(ser.IsWriting())
{
subobjectToAssociateIndex =
el.pSubobjectToAssociate - (D3D12_STATE_SUBOBJECT *)ser.GetStructArg();
exports.resize(el.NumExports);
for(size_t i = 0; i < el.NumExports; i++)
{
exports[i] = StringFormat::Wide2UTF8(el.pExports[i]);
}
}
SERIALISE_ELEMENT(subobjectToAssociateIndex).Named("pSubobjectToAssociate");
SERIALISE_MEMBER(NumExports);
SERIALISE_ELEMENT(exports).Named("pExports");
if(ser.IsReading())
{
#if ENABLED(RDOC_WIN32)
RDCASSERT(subobjectToAssociateIndex == (uintptr_t)subobjectToAssociateIndex);
#endif
el.pSubobjectToAssociate =
(D3D12_STATE_SUBOBJECT *)ser.GetStructArg() + subobjectToAssociateIndex;
el.pExports = new LPCWSTR[el.NumExports];
for(size_t i = 0; i < el.NumExports; i++)
{
el.pExports[i] = AllocateWideCharArray(exports[i]);
}
}
}
template <>
void Deserialise(const D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el)
{
for(size_t i = 0; i < el.NumExports; i++)
{
delete[] el.pExports[i];
}
delete[] el.pExports;
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el)
{
rdcstr subobjectToAssociate;
rdcarray<rdcstr> exports;
if(ser.IsWriting())
{
subobjectToAssociate =
el.SubobjectToAssociate ? StringFormat::Wide2UTF8(el.SubobjectToAssociate) : "";
exports.resize(el.NumExports);
for(size_t i = 0; i < el.NumExports; i++)
{
exports[i] = StringFormat::Wide2UTF8(el.pExports[i]);
}
}
SERIALISE_ELEMENT(subobjectToAssociate).Named("SubobjectToAssociate");
SERIALISE_MEMBER(NumExports);
SERIALISE_ELEMENT(exports).Named("pExports");
if(ser.IsReading())
{
el.SubobjectToAssociate = AllocateWideCharArray(subobjectToAssociate);
el.pExports = new LPCWSTR[el.NumExports];
for(size_t i = 0; i < el.NumExports; i++)
{
el.pExports[i] = AllocateWideCharArray(exports[i]);
}
}
}
template <>
void Deserialise(const D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el)
{
delete[] el.SubobjectToAssociate;
for(size_t i = 0; i < el.NumExports; i++)
{
delete[] el.pExports[i];
}
delete[] el.pExports;
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_SHADER_CONFIG &el)
{
SERIALISE_MEMBER(MaxPayloadSizeInBytes);
SERIALISE_MEMBER(MaxAttributeSizeInBytes);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_PIPELINE_CONFIG &el)
{
SERIALISE_MEMBER(MaxTraceRecursionDepth);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_HIT_GROUP_DESC &el)
{
rdcstr hitGroupExport;
rdcstr anyHitShaderImport;
rdcstr closestHitShaderImport;
rdcstr intersectionShaderImport;
if(ser.IsWriting())
{
hitGroupExport = el.HitGroupExport ? StringFormat::Wide2UTF8(el.HitGroupExport) : "";
anyHitShaderImport = el.AnyHitShaderImport ? StringFormat::Wide2UTF8(el.AnyHitShaderImport) : "";
closestHitShaderImport =
el.ClosestHitShaderImport ? StringFormat::Wide2UTF8(el.ClosestHitShaderImport) : "";
intersectionShaderImport =
el.IntersectionShaderImport ? StringFormat::Wide2UTF8(el.IntersectionShaderImport) : "";
}
SERIALISE_ELEMENT(hitGroupExport).Named("HitGroupExport");
SERIALISE_MEMBER(Type);
SERIALISE_ELEMENT(anyHitShaderImport).Named("AnyHitShaderImport");
SERIALISE_ELEMENT(closestHitShaderImport).Named("ClosestHitShaderImport");
SERIALISE_ELEMENT(intersectionShaderImport).Named("IntersectionShaderImport");
if(ser.IsReading())
{
el.HitGroupExport = AllocateWideCharArray(hitGroupExport);
el.AnyHitShaderImport = AllocateWideCharArray(anyHitShaderImport);
el.ClosestHitShaderImport = AllocateWideCharArray(closestHitShaderImport);
el.IntersectionShaderImport = AllocateWideCharArray(intersectionShaderImport);
}
}
template <>
void Deserialise(const D3D12_HIT_GROUP_DESC &el)
{
delete[] el.HitGroupExport;
delete[] el.AnyHitShaderImport;
delete[] el.ClosestHitShaderImport;
delete[] el.IntersectionShaderImport;
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_PIPELINE_CONFIG1 &el)
{
SERIALISE_MEMBER(MaxTraceRecursionDepth);
SERIALISE_MEMBER(Flags);
}
template <class SerialiserType>
void DoSerialise(SerialiserType &ser, D3D12_EXPORT_DESC &el)
{
rdcstr name;
rdcstr exportToRename;
if(ser.IsWriting())
{
name = el.Name ? StringFormat::Wide2UTF8(el.Name) : "";
exportToRename = el.ExportToRename ? StringFormat::Wide2UTF8(el.ExportToRename) : "";
}
SERIALISE_ELEMENT(name).Named("Name");
SERIALISE_ELEMENT(exportToRename).Named("ExportToRename");
SERIALISE_MEMBER(Flags);
if(ser.IsReading())
{
el.Name = AllocateWideCharArray(name);
el.ExportToRename = AllocateWideCharArray(exportToRename);
}
}
template <>
void Deserialise(const D3D12_EXPORT_DESC &el)
{
delete[] el.Name;
delete[] el.ExportToRename;
}
INSTANTIATE_SERIALISE_TYPE(D3D12RootSignature);
INSTANTIATE_SERIALISE_TYPE(PortableHandle);
INSTANTIATE_SERIALISE_TYPE(D3D12_CPU_DESCRIPTOR_HANDLE);
@@ -2042,3 +2458,18 @@ INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_GEOMETRY_AABBS_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_ACCELERATION_STRUCTURE_SRV);
INSTANTIATE_SERIALISE_TYPE(D3D12_STATE_OBJECT_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_STATE_SUBOBJECT);
INSTANTIATE_SERIALISE_TYPE(D3D12_STATE_OBJECT_CONFIG);
INSTANTIATE_SERIALISE_TYPE(D3D12_GLOBAL_ROOT_SIGNATURE);
INSTANTIATE_SERIALISE_TYPE(D3D12_LOCAL_ROOT_SIGNATURE);
INSTANTIATE_SERIALISE_TYPE(D3D12_NODE_MASK);
INSTANTIATE_SERIALISE_TYPE(D3D12_DXIL_LIBRARY_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_EXISTING_COLLECTION_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
INSTANTIATE_SERIALISE_TYPE(D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_SHADER_CONFIG);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_PIPELINE_CONFIG);
INSTANTIATE_SERIALISE_TYPE(D3D12_HIT_GROUP_DESC);
INSTANTIATE_SERIALISE_TYPE(D3D12_RAYTRACING_PIPELINE_CONFIG1);
INSTANTIATE_SERIALISE_TYPE(D3D12_EXPORT_DESC);
@@ -1546,3 +1546,82 @@ rdcstr DoStringise(const D3D12_RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE &el)
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_STATE_SUBOBJECT_TYPE &el)
{
BEGIN_ENUM_STRINGISE(D3D12_STATE_SUBOBJECT_TYPE);
{
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_STATE_OBJECT_CONFIG);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_GLOBAL_ROOT_SIGNATURE);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_LOCAL_ROOT_SIGNATURE);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_NODE_MASK);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_DXIL_LIBRARY);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_EXISTING_COLLECTION);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_SHADER_CONFIG);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_HIT_GROUP);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_RAYTRACING_PIPELINE_CONFIG1);
STRINGISE_ENUM(D3D12_STATE_SUBOBJECT_TYPE_MAX_VALID);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_STATE_OBJECT_FLAGS &el)
{
BEGIN_ENUM_STRINGISE(D3D12_STATE_OBJECT_FLAGS);
{
STRINGISE_ENUM(D3D12_STATE_OBJECT_FLAG_NONE);
STRINGISE_ENUM(D3D12_STATE_OBJECT_FLAG_ALLOW_LOCAL_DEPENDENCIES_ON_EXTERNAL_DEFINITIONS);
STRINGISE_ENUM(D3D12_STATE_OBJECT_FLAG_ALLOW_EXTERNAL_DEPENDENCIES_ON_LOCAL_DEFINITIONS);
STRINGISE_ENUM(D3D12_STATE_OBJECT_FLAG_ALLOW_STATE_OBJECT_ADDITIONS);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_EXPORT_FLAGS &el)
{
BEGIN_ENUM_STRINGISE(D3D12_EXPORT_FLAGS);
{
STRINGISE_ENUM(D3D12_EXPORT_FLAG_NONE);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_HIT_GROUP_TYPE &el)
{
BEGIN_ENUM_STRINGISE(D3D12_HIT_GROUP_TYPE);
{
STRINGISE_ENUM(D3D12_HIT_GROUP_TYPE_TRIANGLES);
STRINGISE_ENUM(D3D12_HIT_GROUP_TYPE_PROCEDURAL_PRIMITIVE);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_RAYTRACING_PIPELINE_FLAGS &el)
{
BEGIN_ENUM_STRINGISE(D3D12_RAYTRACING_PIPELINE_FLAGS);
{
STRINGISE_ENUM(D3D12_RAYTRACING_PIPELINE_FLAG_NONE);
STRINGISE_ENUM(D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_TRIANGLES);
STRINGISE_ENUM(D3D12_RAYTRACING_PIPELINE_FLAG_SKIP_PROCEDURAL_PRIMITIVES);
}
END_ENUM_STRINGISE();
}
template <>
rdcstr DoStringise(const D3D12_STATE_OBJECT_TYPE &el)
{
BEGIN_ENUM_STRINGISE(D3D12_STATE_OBJECT_TYPE);
{
STRINGISE_ENUM(D3D12_STATE_OBJECT_TYPE_COLLECTION);
STRINGISE_ENUM(D3D12_STATE_OBJECT_TYPE_RAYTRACING_PIPELINE);
}
END_ENUM_STRINGISE();
}