Mesa (main): radv: Some acceleration structure cleanups
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 3 14:06:47 UTC 2022
Module: Mesa
Branch: main
Commit: ae19e9c292f8448c7bf6cfed9d0a581b666ebc0d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ae19e9c292f8448c7bf6cfed9d0a581b666ebc0d
Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date: Mon May 30 22:00:39 2022 +0200
radv: Some acceleration structure cleanups
Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16782>
---
src/amd/vulkan/radv_acceleration_structure.c | 33 ++++++++++++++--------------
1 file changed, 17 insertions(+), 16 deletions(-)
diff --git a/src/amd/vulkan/radv_acceleration_structure.c b/src/amd/vulkan/radv_acceleration_structure.c
index d69f1e529d3..c8ed3eec22c 100644
--- a/src/amd/vulkan/radv_acceleration_structure.c
+++ b/src/amd/vulkan/radv_acceleration_structure.c
@@ -1292,14 +1292,14 @@ build_leaf_shader(struct radv_device *dev)
nir_push_if(&b, nir_ine_imm(&b, nir_channel(&b, pconst2, 2), 0));
{
nir_ssa_def *ptr = nir_iadd(&b, nir_pack_64_2x32(&b, nir_channels(&b, pconst2, 0b0011)),
- nir_u2u64(&b, nir_imul(&b, global_id, nir_imm_int(&b, 8))));
+ nir_u2u64(&b, nir_imul_imm(&b, global_id, 8)));
nir_ssa_def *addr =
nir_pack_64_2x32(&b, nir_build_load_global(&b, 2, 32, ptr, .align_mul = 8));
nir_store_var(&b, instance_addr_var, addr, 1);
}
nir_push_else(&b, NULL);
{
- nir_ssa_def *addr = nir_iadd(&b, nir_pack_64_2x32(&b, nir_channels(&b, pconst2, 3)),
+ nir_ssa_def *addr = nir_iadd(&b, nir_pack_64_2x32(&b, nir_channels(&b, pconst2, 0b0011)),
nir_u2u64(&b, nir_imul_imm(&b, global_id, 64)));
nir_store_var(&b, instance_addr_var, addr, 1);
}
@@ -2083,10 +2083,12 @@ radv_CmdBuildAccelerationStructuresKHR(
const VkAccelerationStructureGeometryKHR *geom =
pInfos[i].pGeometries ? &pInfos[i].pGeometries[j] : pInfos[i].ppGeometries[j];
- if ((inst && geom->geometryType != VK_GEOMETRY_TYPE_INSTANCES_KHR) ||
- (!inst && geom->geometryType == VK_GEOMETRY_TYPE_INSTANCES_KHR))
+ if (!inst == (geom->geometryType == VK_GEOMETRY_TYPE_INSTANCES_KHR))
continue;
+ const VkAccelerationStructureBuildRangeInfoKHR *buildRangeInfo =
+ &ppBuildRangeInfos[i][j];
+
prim_consts.geometry_type = geom->geometryType;
prim_consts.geometry_id = j | (geom->flags << 28);
unsigned prim_size;
@@ -2094,17 +2096,17 @@ radv_CmdBuildAccelerationStructuresKHR(
case VK_GEOMETRY_TYPE_TRIANGLES_KHR:
prim_consts.vertex_addr =
geom->geometry.triangles.vertexData.deviceAddress +
- ppBuildRangeInfos[i][j].firstVertex * geom->geometry.triangles.vertexStride;
+ buildRangeInfo->firstVertex * geom->geometry.triangles.vertexStride;
prim_consts.index_addr = geom->geometry.triangles.indexData.deviceAddress;
if (geom->geometry.triangles.indexType == VK_INDEX_TYPE_NONE_KHR)
- prim_consts.vertex_addr += ppBuildRangeInfos[i][j].primitiveOffset;
+ prim_consts.vertex_addr += buildRangeInfo->primitiveOffset;
else
- prim_consts.index_addr += ppBuildRangeInfos[i][j].primitiveOffset;
+ prim_consts.index_addr += buildRangeInfo->primitiveOffset;
prim_consts.transform_addr = geom->geometry.triangles.transformData.deviceAddress;
if (prim_consts.transform_addr)
- prim_consts.transform_addr += ppBuildRangeInfos[i][j].transformOffset;
+ prim_consts.transform_addr += buildRangeInfo->transformOffset;
prim_consts.vertex_stride = geom->geometry.triangles.vertexStride;
prim_consts.vertex_format = geom->geometry.triangles.vertexFormat;
@@ -2113,16 +2115,16 @@ radv_CmdBuildAccelerationStructuresKHR(
break;
case VK_GEOMETRY_TYPE_AABBS_KHR:
prim_consts.aabb_addr =
- geom->geometry.aabbs.data.deviceAddress + ppBuildRangeInfos[i][j].primitiveOffset;
+ geom->geometry.aabbs.data.deviceAddress + buildRangeInfo->primitiveOffset;
prim_consts.aabb_stride = geom->geometry.aabbs.stride;
prim_size = 64;
break;
case VK_GEOMETRY_TYPE_INSTANCES_KHR:
- prim_consts.instance_data = geom->geometry.instances.data.deviceAddress +
- ppBuildRangeInfos[i][j].primitiveOffset;
+ prim_consts.instance_data =
+ geom->geometry.instances.data.deviceAddress + buildRangeInfo->primitiveOffset;
prim_consts.array_of_pointers = geom->geometry.instances.arrayOfPointers ? 1 : 0;
prim_size = 128;
- bvh_states[i].instance_count += ppBuildRangeInfos[i][j].primitiveCount;
+ bvh_states[i].instance_count += buildRangeInfo->primitiveCount;
break;
default:
unreachable("Unknown geometryType");
@@ -2131,10 +2133,9 @@ radv_CmdBuildAccelerationStructuresKHR(
radv_CmdPushConstants(
commandBuffer, cmd_buffer->device->meta_state.accel_struct_build.leaf_p_layout,
VK_SHADER_STAGE_COMPUTE_BIT, 0, sizeof(prim_consts), &prim_consts);
- radv_unaligned_dispatch(cmd_buffer, ppBuildRangeInfos[i][j].primitiveCount, 1, 1);
- prim_consts.dst_offset += prim_size * ppBuildRangeInfos[i][j].primitiveCount;
- prim_consts.dst_scratch_offset +=
- node_id_stride * ppBuildRangeInfos[i][j].primitiveCount;
+ radv_unaligned_dispatch(cmd_buffer, buildRangeInfo->primitiveCount, 1, 1);
+ prim_consts.dst_offset += prim_size * buildRangeInfo->primitiveCount;
+ prim_consts.dst_scratch_offset += node_id_stride * buildRangeInfo->primitiveCount;
}
}
bvh_states[i].node_offset = prim_consts.dst_offset;
More information about the mesa-commit
mailing list