From 89bea3ea8bebdfe2cb9c9581ef31218ac77da212 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 22 Apr 2024 17:42:33 +0100 Subject: [PATCH] Add new shader enums for RT shader stages --- qrenderdoc/Code/QRDUtils.cpp | 12 ++++++ renderdoc/api/replay/renderdoc_tostr.inl | 12 ++++++ renderdoc/api/replay/replay_enums.h | 41 ++++++++++++++++++- renderdoc/driver/ihv/amd/amd_isa.cpp | 30 ++++++++++++++ .../driver/shaders/dxbc/dxbc_container.cpp | 6 +++ renderdoc/driver/vulkan/vk_common.cpp | 6 +++ .../vulkan/wrappers/vk_shader_funcs.cpp | 21 ++++++++-- 7 files changed, 123 insertions(+), 5 deletions(-) diff --git a/qrenderdoc/Code/QRDUtils.cpp b/qrenderdoc/Code/QRDUtils.cpp index 88bc2a542..307f7ed2a 100644 --- a/qrenderdoc/Code/QRDUtils.cpp +++ b/qrenderdoc/Code/QRDUtils.cpp @@ -1645,6 +1645,12 @@ QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype) case ShaderStage::Compute: return lit("Compute"); case ShaderStage::Amplification: return lit("Amplif."); case ShaderStage::Mesh: return lit("Mesh"); + case ShaderStage::RayGen: return lit("RayGen"); + case ShaderStage::Intersection: return lit("Intersection"); + case ShaderStage::AnyHit: return lit("AnyHit"); + case ShaderStage::ClosestHit: return lit("ClosestHit"); + case ShaderStage::Miss: return lit("Miss"); + case ShaderStage::Callable: return lit("Callable"); default: break; } } @@ -1660,6 +1666,12 @@ QString ToQStr(const ShaderStage stage, const GraphicsAPI apitype) case ShaderStage::Compute: return lit("Compute"); case ShaderStage::Task: return lit("Task"); case ShaderStage::Mesh: return lit("Mesh"); + case ShaderStage::RayGen: return lit("RayGen"); + case ShaderStage::Intersection: return lit("Intersection"); + case ShaderStage::AnyHit: return lit("AnyHit"); + case ShaderStage::ClosestHit: return lit("ClosestHit"); + case ShaderStage::Miss: return lit("Miss"); + case ShaderStage::Callable: return lit("Callable"); default: break; } } diff --git a/renderdoc/api/replay/renderdoc_tostr.inl b/renderdoc/api/replay/renderdoc_tostr.inl index 4a3555f9b..238d6c016 100644 --- a/renderdoc/api/replay/renderdoc_tostr.inl +++ b/renderdoc/api/replay/renderdoc_tostr.inl @@ -986,6 +986,12 @@ rdcstr DoStringise(const ShaderStage &el) STRINGISE_ENUM_CLASS(Compute); STRINGISE_ENUM_CLASS(Task); STRINGISE_ENUM_CLASS(Mesh); + STRINGISE_ENUM_CLASS(RayGen); + STRINGISE_ENUM_CLASS(Intersection); + STRINGISE_ENUM_CLASS(AnyHit); + STRINGISE_ENUM_CLASS(ClosestHit); + STRINGISE_ENUM_CLASS(Miss); + STRINGISE_ENUM_CLASS(Callable); } END_ENUM_STRINGISE(); } @@ -1300,6 +1306,12 @@ rdcstr DoStringise(const ShaderStageMask &el) STRINGISE_BITFIELD_CLASS_BIT(Compute); STRINGISE_BITFIELD_CLASS_BIT(Task); STRINGISE_BITFIELD_CLASS_BIT(Mesh); + STRINGISE_BITFIELD_CLASS_BIT(RayGen); + STRINGISE_BITFIELD_CLASS_BIT(Intersection); + STRINGISE_BITFIELD_CLASS_BIT(AnyHit); + STRINGISE_BITFIELD_CLASS_BIT(ClosestHit); + STRINGISE_BITFIELD_CLASS_BIT(Miss); + STRINGISE_BITFIELD_CLASS_BIT(Callable); } END_BITFIELD_STRINGISE(); } diff --git a/renderdoc/api/replay/replay_enums.h b/renderdoc/api/replay/replay_enums.h index 7f1118589..50fe376f2 100644 --- a/renderdoc/api/replay/replay_enums.h +++ b/renderdoc/api/replay/replay_enums.h @@ -2580,6 +2580,31 @@ DOCUMENT(R"(The stage in a pipeline where a shader runs .. data:: Mesh The mesh shader. + +.. data:: RayGen + + A ray generation shader, called from a ray dispatch command to launch initial rays. + +.. data:: Intersection + + An intersection shader, used for procedural objects in a BLAS to calculate hits. + +.. data:: AnyHit + + An any-hit shader, called in an indeterminate order and number when a ray intersection has been + found with an object but may not be the final hit. + +.. data:: ClosestHit + + A closest-hit shader, called once the closest hit on a ray has been found. + +.. data:: Miss + + A miss shader, called when a ray has no valid closest hit at all. + +.. data:: Callable + + A callable shader, called by shader code via index during ray processing. )"); enum class ShaderStage : uint8_t { @@ -2604,6 +2629,13 @@ enum class ShaderStage : uint8_t Mesh, + RayGen, + Intersection, + AnyHit, + ClosestHit, + Miss, + Callable, + Count, }; @@ -4763,7 +4795,14 @@ enum class ShaderStageMask : uint16_t Task = 1 << uint32_t(ShaderStage::Task), Amplification = Task, Mesh = 1 << uint32_t(ShaderStage::Mesh), - All = Vertex | Hull | Domain | Geometry | Pixel | Compute | Task | Mesh, + RayGen = 1 << uint32_t(ShaderStage::RayGen), + Intersection = 1 << uint32_t(ShaderStage::Intersection), + AnyHit = 1 << uint32_t(ShaderStage::AnyHit), + ClosestHit = 1 << uint32_t(ShaderStage::ClosestHit), + Miss = 1 << uint32_t(ShaderStage::Miss), + Callable = 1 << uint32_t(ShaderStage::Callable), + All = Vertex | Hull | Domain | Geometry | Pixel | Compute | Task | Mesh | RayGen | Intersection | + AnyHit | ClosestHit | Miss | Callable, }; BITMASK_OPERATORS(ShaderStageMask); diff --git a/renderdoc/driver/ihv/amd/amd_isa.cpp b/renderdoc/driver/ihv/amd/amd_isa.cpp index bb7c512ba..bf157d3f8 100644 --- a/renderdoc/driver/ihv/amd/amd_isa.cpp +++ b/renderdoc/driver/ihv/amd/amd_isa.cpp @@ -298,6 +298,12 @@ rdcstr DisassembleSPIRV(ShaderStage stage, const bytebuf &shaderBytes, const rdc case ShaderStage::Compute: stageName = "comp"; break; case ShaderStage::Task: stageName = "task"; break; case ShaderStage::Mesh: stageName = "mesh"; break; + case ShaderStage::RayGen: stageName = "rgen"; break; + case ShaderStage::Intersection: stageName = "rint"; break; + case ShaderStage::AnyHit: stageName = "rahit"; break; + case ShaderStage::ClosestHit: stageName = "rchit"; break; + case ShaderStage::Miss: stageName = "rmiss"; break; + case ShaderStage::Callable: stageName = "rcall"; break; case ShaderStage::Count: return "; Cannot identify shader type"; } @@ -410,6 +416,30 @@ rdcstr DisassembleGLSL(ShaderStage stage, const bytebuf &shaderBytes, const rdcs stageIndex = 7; stageName = "mesh"; break; + case ShaderStage::RayGen: + stageIndex = 8; + stageName = "rgen"; + break; + case ShaderStage::Intersection: + stageIndex = 9; + stageName = "rint"; + break; + case ShaderStage::AnyHit: + stageIndex = 10; + stageName = "rahit"; + break; + case ShaderStage::ClosestHit: + stageIndex = 11; + stageName = "rchit"; + break; + case ShaderStage::Miss: + stageIndex = 12; + stageName = "rmiss"; + break; + case ShaderStage::Callable: + stageIndex = 13; + stageName = "rcall"; + break; case ShaderStage::Count: return "; Cannot identify shader type"; } diff --git a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp index 00fd79043..6ec0e1f90 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_container.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_container.cpp @@ -302,6 +302,12 @@ ShaderStage GetShaderStage(ShaderType type) case DXBC::ShaderType::Compute: return ShaderStage::Compute; case DXBC::ShaderType::Amplification: return ShaderStage::Amplification; case DXBC::ShaderType::Mesh: return ShaderStage::Mesh; + case DXBC::ShaderType::RayGeneration: return ShaderStage::RayGen; + case DXBC::ShaderType::Intersection: return ShaderStage::Intersection; + case DXBC::ShaderType::AnyHit: return ShaderStage::AnyHit; + case DXBC::ShaderType::ClosestHit: return ShaderStage::ClosestHit; + case DXBC::ShaderType::Miss: return ShaderStage::Miss; + case DXBC::ShaderType::Callable: return ShaderStage::Callable; default: RDCERR("Unexpected DXBC shader type %u", type); return ShaderStage::Vertex; } } diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index e39341686..1877ca921 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -569,6 +569,12 @@ VkShaderStageFlags ShaderMaskFromIndex(size_t index) VK_SHADER_STAGE_COMPUTE_BIT, VK_SHADER_STAGE_TASK_BIT_EXT, VK_SHADER_STAGE_MESH_BIT_EXT, + VK_SHADER_STAGE_RAYGEN_BIT_KHR, + VK_SHADER_STAGE_INTERSECTION_BIT_KHR, + VK_SHADER_STAGE_ANY_HIT_BIT_KHR, + VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, + VK_SHADER_STAGE_MISS_BIT_KHR, + VK_SHADER_STAGE_CALLABLE_BIT_KHR, }; RDCCOMPILE_ASSERT(ARRAY_COUNT(mask) == NumShaderStages, "Array is out of date"); diff --git a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp index 595fc32b9..e838535be 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_shader_funcs.cpp @@ -517,10 +517,23 @@ bool WrappedVulkan::Serialise_vkCreateGraphicsPipelines( DerivedResource(device, shadId); DerivedResource(pipe, shadId); - const char *names[] = {" vertex shader", " tess control shader", - " tess eval shader", " geometry shader", - " fragment shader", NULL, - " task shader", " mesh shader"}; + const char *names[] = { + " vertex shader", + " tess control shader", + " tess eval shader", + " geometry shader", + " fragment shader", + NULL, + " task shader", + " mesh shader", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + }; + RDCCOMPILE_ASSERT(ARRAY_COUNT(names) == NumShaderStages, "Array is out of date"); if(shadName) GetReplay()->GetResourceDesc(shadId).SetCustomName(shadName->pObjectName);