diff --git a/renderdoc/driver/d3d12/d3d12_common.h b/renderdoc/driver/d3d12/d3d12_common.h index 676ac3d83..1f5599406 100644 --- a/renderdoc/driver/d3d12/d3d12_common.h +++ b/renderdoc/driver/d3d12/d3d12_common.h @@ -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 { diff --git a/renderdoc/driver/d3d12/d3d12_manager.h b/renderdoc/driver/d3d12/d3d12_manager.h index dec30e4d4..c330d255d 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.h +++ b/renderdoc/driver/d3d12/d3d12_manager.h @@ -49,6 +49,7 @@ enum D3D12ResourceType Resource_PipelineLibrary, Resource_ProtectedResourceSession, Resource_ShaderCacheSession, + Resource_StateObject }; DECLARE_REFLECTION_ENUM(D3D12ResourceType); diff --git a/renderdoc/driver/d3d12/d3d12_serialise.cpp b/renderdoc/driver/d3d12/d3d12_serialise.cpp index ea8f68b15..09dd4e0e9 100644 --- a/renderdoc/driver/d3d12/d3d12_serialise.cpp +++ b/renderdoc/driver/d3d12/d3d12_serialise.cpp @@ -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 +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 +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 +void DoSerialise(SerialiserType &ser, D3D12_STATE_OBJECT_CONFIG &el) +{ + SERIALISE_MEMBER(Flags); +} + +template +void DoSerialise(SerialiserType &ser, D3D12_GLOBAL_ROOT_SIGNATURE &el) +{ + SERIALISE_MEMBER(pGlobalRootSignature); +} + +template +void DoSerialise(SerialiserType &ser, D3D12_LOCAL_ROOT_SIGNATURE &el) +{ + SERIALISE_MEMBER(pLocalRootSignature); +} + +template +void DoSerialise(SerialiserType &ser, D3D12_NODE_MASK &el) +{ + SERIALISE_MEMBER(NodeMask); +} + +template +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 +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 +void DoSerialise(SerialiserType &ser, D3D12_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el) +{ + uint64_t subobjectToAssociateIndex; + rdcarray 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 +void DoSerialise(SerialiserType &ser, D3D12_DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION &el) +{ + rdcstr subobjectToAssociate; + rdcarray 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 +void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_SHADER_CONFIG &el) +{ + SERIALISE_MEMBER(MaxPayloadSizeInBytes); + SERIALISE_MEMBER(MaxAttributeSizeInBytes); +} + +template +void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_PIPELINE_CONFIG &el) +{ + SERIALISE_MEMBER(MaxTraceRecursionDepth); +} + +template +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 +void DoSerialise(SerialiserType &ser, D3D12_RAYTRACING_PIPELINE_CONFIG1 &el) +{ + SERIALISE_MEMBER(MaxTraceRecursionDepth); + SERIALISE_MEMBER(Flags); +} + +template +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); \ No newline at end of file diff --git a/renderdoc/driver/d3d12/d3d12_stringise.cpp b/renderdoc/driver/d3d12/d3d12_stringise.cpp index 4ca65f2f1..ed4a8a461 100644 --- a/renderdoc/driver/d3d12/d3d12_stringise.cpp +++ b/renderdoc/driver/d3d12/d3d12_stringise.cpp @@ -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(); +} \ No newline at end of file