radv/rt: Skip compiling a traversal shader
If we don't need one, we don't compile one. Reviewed-by: Friedrich Vock <friedrich.vock@gmx.de> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25224>
This commit is contained in:
@@ -6259,8 +6259,11 @@ radv_emit_compute_pipeline(struct radv_cmd_buffer *cmd_buffer, struct radv_compu
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs, cmd_buffer->state.shaders[MESA_SHADER_COMPUTE]->bo);
|
||||
} else {
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs, cmd_buffer->state.rt_prolog->bo);
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
|
||||
cmd_buffer->state.shaders[MESA_SHADER_INTERSECTION]->bo);
|
||||
|
||||
if (cmd_buffer->state.shaders[MESA_SHADER_INTERSECTION])
|
||||
radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
|
||||
cmd_buffer->state.shaders[MESA_SHADER_INTERSECTION]->bo);
|
||||
|
||||
struct radv_ray_tracing_pipeline *rt_pipeline = radv_pipeline_to_ray_tracing(&pipeline->base);
|
||||
for (unsigned i = 0; i < rt_pipeline->stage_count; ++i) {
|
||||
if (!radv_ray_tracing_stage_is_compiled(&rt_pipeline->stages[i]))
|
||||
@@ -10066,8 +10069,9 @@ radv_trace_rays(struct radv_cmd_buffer *cmd_buffer, VkTraceRaysIndirectCommand2K
|
||||
}
|
||||
|
||||
const struct radv_userdata_info *shader_loc = radv_get_user_sgpr(rt_prolog, AC_UD_CS_TRAVERSAL_SHADER_ADDR);
|
||||
if (shader_loc->sgpr_idx != -1) {
|
||||
uint64_t traversal_va = cmd_buffer->state.shaders[MESA_SHADER_INTERSECTION]->va | radv_rt_priority_traversal;
|
||||
struct radv_shader *traversal_shader = cmd_buffer->state.shaders[MESA_SHADER_INTERSECTION];
|
||||
if (shader_loc->sgpr_idx != -1 && traversal_shader) {
|
||||
uint64_t traversal_va = traversal_shader->va | radv_rt_priority_traversal;
|
||||
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs, base_reg + shader_loc->sgpr_idx * 4, traversal_va,
|
||||
true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user