}
case nir_intrinsic_load_ray_launch_size_addr_amd: {
Temp dst = get_ssa_temp(ctx, &instr->dest.ssa);
- Temp addr = convert_pointer_to_64_bit(ctx, get_arg(ctx, ctx->args->ac.ray_launch_size_addr));
+ Temp addr = get_arg(ctx, ctx->args->ac.ray_launch_size_addr);
+ assert(addr.regClass() == s2);
bld.copy(Definition(dst), Operand(addr));
break;
}
radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_RAY_LAUNCH_SIZE_ADDR);
if (size_loc->sgpr_idx != -1) {
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
- base_reg + size_loc->sgpr_idx * 4, launch_size_va, false);
+ base_reg + size_loc->sgpr_idx * 4, launch_size_va, true);
}
radv_dispatch(cmd_buffer, &info, pipeline, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR);
set_loc_shader_ptr(struct radv_shader_args *args, int idx, uint8_t *sgpr_idx)
{
bool use_32bit_pointers = idx != AC_UD_SCRATCH_RING_OFFSETS &&
- idx != AC_UD_CS_TASK_RING_OFFSETS;
+ idx != AC_UD_CS_TASK_RING_OFFSETS &&
+ idx != AC_UD_CS_RAY_LAUNCH_SIZE_ADDR;
set_loc_shader(args, idx, sgpr_idx, use_32bit_pointers ? 1 : 2);
}
if (info->cs.uses_grid_size)
user_sgpr_count += args->load_grid_size_from_user_sgpr ? 3 : 2;
if (info->cs.uses_ray_launch_size)
- user_sgpr_count++;
+ user_sgpr_count += 2;
if (info->vs.needs_draw_id)
user_sgpr_count += 1;
if (info->cs.uses_task_rings)
}
if (info->cs.uses_ray_launch_size) {
- ac_add_arg(&args->ac, AC_ARG_SGPR, 1, AC_ARG_CONST_PTR, &args->ac.ray_launch_size_addr);
+ ac_add_arg(&args->ac, AC_ARG_SGPR, 2, AC_ARG_CONST_PTR, &args->ac.ray_launch_size_addr);
}
if (info->vs.needs_draw_id) {