radv: Remove leaf_args::dst_offset

We can use first_id instead.

Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24756>
This commit is contained in:
Konstantin Seurer 2023-08-17 18:11:01 +02:00 committed by Marge Bot
parent 90a24c7cb3
commit 2943bc34e9
3 changed files with 4 additions and 13 deletions

View file

@ -41,7 +41,6 @@ struct leaf_args {
VOID_REF indices;
VOID_REF transform;
uint32_t dst_offset;
uint32_t first_id;
uint32_t geometry_type;
uint32_t geometry_id;

View file

@ -293,8 +293,9 @@ void
main(void)
{
uint32_t global_id = gl_GlobalInvocationID.x;
uint32_t primitive_id = args.first_id + global_id;
REF(key_id_pair) id_ptr = INDEX(key_id_pair, args.ids, args.first_id + global_id);
REF(key_id_pair) id_ptr = INDEX(key_id_pair, args.ids, primitive_id);
uint32_t src_offset = global_id * args.stride;
uint32_t dst_stride;
@ -310,7 +311,7 @@ main(void)
node_type = radv_ir_node_instance;
}
uint32_t dst_offset = args.dst_offset + global_id * dst_stride;
uint32_t dst_offset = primitive_id * dst_stride;
VOID_REF dst_ptr = OFFSET(args.bvh, dst_offset);
radv_aabb bounds;

View file

@ -640,7 +640,6 @@ build_leaves(VkCommandBuffer commandBuffer, uint32_t infoCount,
.bvh = pInfos[i].scratchData.deviceAddress + bvh_states[i].scratch.ir_offset,
.header = pInfos[i].scratchData.deviceAddress + bvh_states[i].scratch.header_offset,
.ids = pInfos[i].scratchData.deviceAddress + bvh_states[i].scratch.sort_buffer_offset[0],
.dst_offset = 0,
};
for (unsigned j = 0; j < pInfos[i].geometryCount; ++j) {
@ -653,7 +652,7 @@ build_leaves(VkCommandBuffer commandBuffer, uint32_t infoCount,
leaf_consts.geometry_type = geom->geometryType;
leaf_consts.geometry_id = pack_geometry_id_and_flags(j, geom->flags);
unsigned prim_size;
switch (geom->geometryType) {
case VK_GEOMETRY_TYPE_TRIANGLES_KHR:
assert(pInfos[i].type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR);
@ -674,16 +673,12 @@ build_leaves(VkCommandBuffer commandBuffer, uint32_t infoCount,
leaf_consts.stride = geom->geometry.triangles.vertexStride;
leaf_consts.vertex_format = geom->geometry.triangles.vertexFormat;
leaf_consts.index_format = geom->geometry.triangles.indexType;
prim_size = sizeof(struct radv_ir_triangle_node);
break;
case VK_GEOMETRY_TYPE_AABBS_KHR:
assert(pInfos[i].type == VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR);
leaf_consts.data = geom->geometry.aabbs.data.deviceAddress + buildRangeInfo->primitiveOffset;
leaf_consts.stride = geom->geometry.aabbs.stride;
prim_size = sizeof(struct radv_ir_aabb_node);
break;
case VK_GEOMETRY_TYPE_INSTANCES_KHR:
assert(pInfos[i].type == VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR);
@ -694,8 +689,6 @@ build_leaves(VkCommandBuffer commandBuffer, uint32_t infoCount,
leaf_consts.stride = 8;
else
leaf_consts.stride = sizeof(VkAccelerationStructureInstanceKHR);
prim_size = sizeof(struct radv_ir_instance_node);
break;
default:
unreachable("Unknown geometryType");
@ -705,8 +698,6 @@ build_leaves(VkCommandBuffer commandBuffer, uint32_t infoCount,
VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(leaf_consts), &leaf_consts);
radv_unaligned_dispatch(cmd_buffer, buildRangeInfo->primitiveCount, 1, 1);
leaf_consts.dst_offset += prim_size * buildRangeInfo->primitiveCount;
bvh_states[i].leaf_node_count += buildRangeInfo->primitiveCount;
bvh_states[i].node_count += buildRangeInfo->primitiveCount;
}