diff --git a/src/amd/vulkan/bvh/build_interface.h b/src/amd/vulkan/bvh/build_interface.h index 6a1ee79063c..fe988711370 100644 --- a/src/amd/vulkan/bvh/build_interface.h +++ b/src/amd/vulkan/bvh/build_interface.h @@ -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; diff --git a/src/amd/vulkan/bvh/leaf.comp b/src/amd/vulkan/bvh/leaf.comp index 1b05281660b..be05c8f4f51 100644 --- a/src/amd/vulkan/bvh/leaf.comp +++ b/src/amd/vulkan/bvh/leaf.comp @@ -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; diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c index 99afaf936ff..5ae75331cfe 100644 --- a/src/amd/vulkan/radv_acceleration_structure.c +++ b/src/amd/vulkan/radv_acceleration_structure.c @@ -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; }