Add new shader enums for RT shader stages

This commit is contained in:
baldurk
2024-04-22 17:42:33 +01:00
parent 5366ce7b4a
commit 89bea3ea8b
7 changed files with 123 additions and 5 deletions
+12
View File
@@ -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;
}
}
+12
View File
@@ -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();
}
+40 -1
View File
@@ -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);
+30
View File
@@ -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";
}
@@ -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;
}
}
+6
View File
@@ -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");
@@ -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);