rtx: improve shader binding indexing
This commit is contained in:
parent
24f11bccc7
commit
b7e6581e29
|
@ -55,9 +55,7 @@ bool shadowed(vec3 pos, vec3 dir, float dist) {
|
|||
traceRayEXT(tlas,
|
||||
flags,
|
||||
GEOMETRY_BIT_OPAQUE,
|
||||
0, 0, 1 /* miss index */,
|
||||
pos, 0., dir, dist - shadow_offset_fudge, 1 /* payload location */);
|
||||
return shadow;
|
||||
0, 0, SHADER_OFFSET_MISS_SHADOW,
|
||||
}
|
||||
|
||||
const float color_factor = 1000.;
|
||||
|
|
|
@ -23,7 +23,12 @@ layout (constant_id = 3) const uint MAX_VISIBLE_SURFACE_LIGHTS = 255;
|
|||
|
||||
#define GEOMETRY_BIT_OPAQUE 0x01
|
||||
#define GEOMETRY_BIT_ADDITIVE 0x02
|
||||
#define GEOMETRY_BIT_ANY 0xff
|
||||
|
||||
#define SHADER_OFFSET_MISS_REGULAR 0
|
||||
#define SHADER_OFFSET_MISS_SHADOW 1
|
||||
|
||||
#define SHADER_OFFSET_HIT_REGULAR 0
|
||||
#define SHADER_OFFSET_HIT_ALPHA_TEST 1
|
||||
|
||||
struct Kusok {
|
||||
uint index_offset;
|
||||
|
|
|
@ -22,10 +22,13 @@
|
|||
|
||||
enum {
|
||||
ShaderBindingTable_RayGen,
|
||||
|
||||
ShaderBindingTable_Miss,
|
||||
ShaderBindingTable_Miss_Shadow,
|
||||
|
||||
ShaderBindingTable_Hit,
|
||||
ShaderBindingTable_HitWithAlphaMask,
|
||||
ShaderBindingTable_Hit_WithAlphaTest,
|
||||
|
||||
ShaderBindingTable_COUNT
|
||||
};
|
||||
|
||||
|
@ -362,12 +365,12 @@ static void createPipeline( void )
|
|||
ShaderStageIndex_Miss,
|
||||
ShaderStageIndex_Miss_Shadow,
|
||||
ShaderStageIndex_ClosestHit,
|
||||
ShaderStageIndex_AnyHit_AlphaMask,
|
||||
ShaderStageIndex_AnyHit_AlphaTest,
|
||||
ShaderStageIndex_COUNT,
|
||||
};
|
||||
|
||||
#define DEFINE_SHADER(filename, bit, index) \
|
||||
shaders[ShaderStageIndex_##index] = (VkPipelineShaderStageCreateInfo){ \
|
||||
#define DEFINE_SHADER(filename, bit, sbt_index) \
|
||||
shaders[sbt_index] = (VkPipelineShaderStageCreateInfo){ \
|
||||
.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, \
|
||||
.stage = VK_SHADER_STAGE_##bit##_BIT_KHR, \
|
||||
.module = loadShader(filename), \
|
||||
|
@ -389,11 +392,20 @@ static void createPipeline( void )
|
|||
.layout = g_rtx.descriptors.pipeline_layout,
|
||||
};
|
||||
|
||||
DEFINE_SHADER("ray.rgen.spv", RAYGEN, RayGen);
|
||||
DEFINE_SHADER("ray.rmiss.spv", MISS, Miss);
|
||||
DEFINE_SHADER("shadow.rmiss.spv", MISS, Miss_Shadow);
|
||||
DEFINE_SHADER("ray.rchit.spv", CLOSEST_HIT, ClosestHit);
|
||||
DEFINE_SHADER("alphamask.rahit.spv", ANY_HIT, AnyHit_AlphaMask);
|
||||
DEFINE_SHADER("ray.rgen.spv", RAYGEN, ShaderStageIndex_RayGen);
|
||||
DEFINE_SHADER("ray.rmiss.spv", MISS, ShaderStageIndex_Miss);
|
||||
DEFINE_SHADER("shadow.rmiss.spv", MISS, ShaderStageIndex_Miss_Shadow);
|
||||
DEFINE_SHADER("ray.rchit.spv", CLOSEST_HIT, ShaderStageIndex_ClosestHit);
|
||||
DEFINE_SHADER("alphamask.rahit.spv", ANY_HIT, ShaderStageIndex_AnyHit_AlphaTest);
|
||||
|
||||
#define ASSERT_SHADER_OFFSET(sbt_kind, sbt_index, offset) \
|
||||
ASSERT(offset == (sbt_index - sbt_kind))
|
||||
|
||||
ASSERT_SHADER_OFFSET(ShaderBindingTable_RayGen, ShaderBindingTable_RayGen, 0);
|
||||
ASSERT_SHADER_OFFSET(ShaderBindingTable_Miss, ShaderBindingTable_Miss, SHADER_OFFSET_MISS_REGULAR);
|
||||
ASSERT_SHADER_OFFSET(ShaderBindingTable_Miss, ShaderBindingTable_Miss_Shadow, SHADER_OFFSET_MISS_SHADOW);
|
||||
ASSERT_SHADER_OFFSET(ShaderBindingTable_Hit, ShaderBindingTable_Hit, SHADER_OFFSET_HIT_REGULAR);
|
||||
ASSERT_SHADER_OFFSET(ShaderBindingTable_Hit, ShaderBindingTable_Hit_WithAlphaTest, SHADER_OFFSET_HIT_ALPHA_TEST);
|
||||
|
||||
shader_groups[ShaderBindingTable_RayGen] = (VkRayTracingShaderGroupCreateInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR,
|
||||
|
@ -431,10 +443,10 @@ static void createPipeline( void )
|
|||
.intersectionShader = VK_SHADER_UNUSED_KHR,
|
||||
};
|
||||
|
||||
shader_groups[ShaderBindingTable_HitWithAlphaMask] = (VkRayTracingShaderGroupCreateInfoKHR) {
|
||||
shader_groups[ShaderBindingTable_Hit_WithAlphaTest] = (VkRayTracingShaderGroupCreateInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR,
|
||||
.type = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR,
|
||||
.anyHitShader = ShaderStageIndex_AnyHit_AlphaMask,
|
||||
.anyHitShader = ShaderStageIndex_AnyHit_AlphaTest,
|
||||
.closestHitShader = ShaderStageIndex_ClosestHit,
|
||||
.generalShader = VK_SHADER_UNUSED_KHR,
|
||||
.intersectionShader = VK_SHADER_UNUSED_KHR,
|
||||
|
|
Loading…
Reference in New Issue