radv: replace radv_lookup_user_sgpr() by radv_get_user_sgpr()
radv_get_user_sgpr() no longer relies on radv_pipeline which is another step for moving the shaders array outside of it. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21878>
This commit is contained in:

committed by
Marge Bot

parent
4066e3a951
commit
d7c5b6fb94
@@ -854,10 +854,9 @@ radv_save_descriptors(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bi
|
|||||||
radv_emit_write_data_packet(cmd_buffer, V_370_ME, va, MAX_SETS * 2, data);
|
radv_emit_write_data_packet(cmd_buffer, V_370_ME, va, MAX_SETS * 2, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct radv_userdata_info *
|
const struct radv_userdata_info *
|
||||||
radv_lookup_user_sgpr(const struct radv_pipeline *pipeline, gl_shader_stage stage, int idx)
|
radv_get_user_sgpr(const struct radv_shader *shader, int idx)
|
||||||
{
|
{
|
||||||
struct radv_shader *shader = radv_get_shader(pipeline, stage);
|
|
||||||
return &shader->info.user_sgprs_locs.shader_data[idx];
|
return &shader->info.user_sgprs_locs.shader_data[idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -866,7 +865,8 @@ radv_emit_userdata_address(struct radv_device *device, struct radeon_cmdbuf *cs,
|
|||||||
struct radv_pipeline *pipeline, gl_shader_stage stage, int idx,
|
struct radv_pipeline *pipeline, gl_shader_stage stage, int idx,
|
||||||
uint64_t va)
|
uint64_t va)
|
||||||
{
|
{
|
||||||
struct radv_userdata_info *loc = radv_lookup_user_sgpr(pipeline, stage, idx);
|
const struct radv_shader *shader = radv_get_shader(pipeline, stage);
|
||||||
|
const struct radv_userdata_info *loc = radv_get_user_sgpr(shader, idx);
|
||||||
uint32_t base_reg = pipeline->user_data_0[stage];
|
uint32_t base_reg = pipeline->user_data_0[stage];
|
||||||
if (loc->sgpr_idx == -1)
|
if (loc->sgpr_idx == -1)
|
||||||
return;
|
return;
|
||||||
@@ -1129,7 +1129,8 @@ radv_emit_inline_push_consts(struct radv_device *device, struct radeon_cmdbuf *c
|
|||||||
struct radv_pipeline *pipeline, gl_shader_stage stage, int idx,
|
struct radv_pipeline *pipeline, gl_shader_stage stage, int idx,
|
||||||
uint32_t *values)
|
uint32_t *values)
|
||||||
{
|
{
|
||||||
struct radv_userdata_info *loc = radv_lookup_user_sgpr(pipeline, stage, idx);
|
const struct radv_shader *shader = radv_get_shader(pipeline, stage);
|
||||||
|
const struct radv_userdata_info *loc = radv_get_user_sgpr(shader, idx);
|
||||||
uint32_t base_reg = pipeline->user_data_0[stage];
|
uint32_t base_reg = pipeline->user_data_0[stage];
|
||||||
if (loc->sgpr_idx == -1)
|
if (loc->sgpr_idx == -1)
|
||||||
return;
|
return;
|
||||||
@@ -2426,7 +2427,6 @@ radv_emit_patch_control_points(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
const struct radv_shader *tcs = pipeline->base.shaders[MESA_SHADER_TESS_CTRL];
|
const struct radv_shader *tcs = pipeline->base.shaders[MESA_SHADER_TESS_CTRL];
|
||||||
const struct radv_dynamic_state *d = &cmd_buffer->state.dynamic;
|
const struct radv_dynamic_state *d = &cmd_buffer->state.dynamic;
|
||||||
unsigned ls_hs_config, base_reg;
|
unsigned ls_hs_config, base_reg;
|
||||||
struct radv_userdata_info *loc;
|
|
||||||
|
|
||||||
ls_hs_config = S_028B58_NUM_PATCHES(cmd_buffer->state.tess_num_patches) |
|
ls_hs_config = S_028B58_NUM_PATCHES(cmd_buffer->state.tess_num_patches) |
|
||||||
S_028B58_HS_NUM_INPUT_CP(d->vk.ts.patch_control_points) |
|
S_028B58_HS_NUM_INPUT_CP(d->vk.ts.patch_control_points) |
|
||||||
@@ -2456,20 +2456,22 @@ radv_emit_patch_control_points(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Emit user SGPRs for dynamic patch control points. */
|
/* Emit user SGPRs for dynamic patch control points. */
|
||||||
loc = radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_TESS_CTRL, AC_UD_TCS_OFFCHIP_LAYOUT);
|
const struct radv_userdata_info *offchip =
|
||||||
if (loc->sgpr_idx == -1)
|
radv_get_user_sgpr(pipeline->base.shaders[MESA_SHADER_TESS_CTRL], AC_UD_TCS_OFFCHIP_LAYOUT);
|
||||||
|
if (offchip->sgpr_idx == -1)
|
||||||
return;
|
return;
|
||||||
assert(loc->num_sgprs == 1);
|
assert(offchip->num_sgprs == 1);
|
||||||
|
|
||||||
base_reg = pipeline->base.user_data_0[MESA_SHADER_TESS_CTRL];
|
base_reg = pipeline->base.user_data_0[MESA_SHADER_TESS_CTRL];
|
||||||
radeon_set_sh_reg(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4,
|
radeon_set_sh_reg(cmd_buffer->cs, base_reg + offchip->sgpr_idx * 4,
|
||||||
(cmd_buffer->state.tess_num_patches << 6) | d->vk.ts.patch_control_points);
|
(cmd_buffer->state.tess_num_patches << 6) | d->vk.ts.patch_control_points);
|
||||||
|
|
||||||
loc = radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_TESS_EVAL, AC_UD_TES_NUM_PATCHES);
|
const struct radv_userdata_info *num_patches = radv_get_user_sgpr(
|
||||||
assert(loc->sgpr_idx != -1 && loc->num_sgprs == 1);
|
radv_get_shader(&pipeline->base, MESA_SHADER_TESS_EVAL), AC_UD_TES_NUM_PATCHES);
|
||||||
|
assert(num_patches->sgpr_idx != -1 && num_patches->num_sgprs == 1);
|
||||||
|
|
||||||
base_reg = pipeline->base.user_data_0[MESA_SHADER_TESS_EVAL];
|
base_reg = pipeline->base.user_data_0[MESA_SHADER_TESS_EVAL];
|
||||||
radeon_set_sh_reg(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4,
|
radeon_set_sh_reg(cmd_buffer->cs, base_reg + num_patches->sgpr_idx * 4,
|
||||||
cmd_buffer->state.tess_num_patches);
|
cmd_buffer->state.tess_num_patches);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2572,8 +2574,8 @@ radv_emit_rasterization_samples(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
radeon_set_context_reg(cmd_buffer->cs, R_028A4C_PA_SC_MODE_CNTL_1, pa_sc_mode_cntl_1);
|
radeon_set_context_reg(cmd_buffer->cs, R_028A4C_PA_SC_MODE_CNTL_1, pa_sc_mode_cntl_1);
|
||||||
|
|
||||||
/* Pass the number of samples to the fragment shader because it might be needed. */
|
/* Pass the number of samples to the fragment shader because it might be needed. */
|
||||||
struct radv_userdata_info *loc =
|
const struct radv_userdata_info *loc =
|
||||||
radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_FRAGMENT, AC_UD_PS_NUM_SAMPLES);
|
radv_get_user_sgpr(pipeline->base.shaders[MESA_SHADER_FRAGMENT], AC_UD_PS_NUM_SAMPLES);
|
||||||
if (loc->sgpr_idx != -1) {
|
if (loc->sgpr_idx != -1) {
|
||||||
uint32_t base_reg = pipeline->base.user_data_0[MESA_SHADER_FRAGMENT];
|
uint32_t base_reg = pipeline->base.user_data_0[MESA_SHADER_FRAGMENT];
|
||||||
radeon_set_sh_reg(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4, rasterization_samples);
|
radeon_set_sh_reg(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4, rasterization_samples);
|
||||||
@@ -4555,8 +4557,8 @@ radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer, VkShaderStageFlags st
|
|||||||
static bool
|
static bool
|
||||||
radv_shader_loads_push_constants(struct radv_pipeline *pipeline, gl_shader_stage stage)
|
radv_shader_loads_push_constants(struct radv_pipeline *pipeline, gl_shader_stage stage)
|
||||||
{
|
{
|
||||||
struct radv_userdata_info *loc =
|
const struct radv_shader *shader = radv_get_shader(pipeline, stage);
|
||||||
radv_lookup_user_sgpr(pipeline, stage, AC_UD_PUSH_CONSTANTS);
|
const struct radv_userdata_info *loc = radv_get_user_sgpr(shader, AC_UD_PUSH_CONSTANTS);
|
||||||
return loc->sgpr_idx != -1;
|
return loc->sgpr_idx != -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7552,7 +7554,8 @@ static void
|
|||||||
radv_emit_view_index_per_stage(struct radeon_cmdbuf *cs, struct radv_graphics_pipeline *pipeline,
|
radv_emit_view_index_per_stage(struct radeon_cmdbuf *cs, struct radv_graphics_pipeline *pipeline,
|
||||||
unsigned stage, unsigned index)
|
unsigned stage, unsigned index)
|
||||||
{
|
{
|
||||||
struct radv_userdata_info *loc = radv_lookup_user_sgpr(&pipeline->base, stage, AC_UD_VIEW_INDEX);
|
const struct radv_shader *shader = radv_get_shader(&pipeline->base, stage);
|
||||||
|
const struct radv_userdata_info *loc = radv_get_user_sgpr(shader, AC_UD_VIEW_INDEX);
|
||||||
if (loc->sgpr_idx == -1)
|
if (loc->sgpr_idx == -1)
|
||||||
return;
|
return;
|
||||||
uint32_t base_reg = pipeline->base.user_data_0[stage];
|
uint32_t base_reg = pipeline->base.user_data_0[stage];
|
||||||
@@ -7768,8 +7771,8 @@ radv_cs_emit_dispatch_taskmesh_direct_ace_packet(struct radv_cmd_buffer *cmd_buf
|
|||||||
const uint32_t dispatch_initiator = cmd_buffer->device->dispatch_initiator_task |
|
const uint32_t dispatch_initiator = cmd_buffer->device->dispatch_initiator_task |
|
||||||
S_00B800_CS_W32_EN(task_shader->info.wave_size == 32);
|
S_00B800_CS_W32_EN(task_shader->info.wave_size == 32);
|
||||||
|
|
||||||
struct radv_userdata_info *ring_entry_loc =
|
const struct radv_userdata_info *ring_entry_loc =
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_TASK_RING_ENTRY);
|
radv_get_user_sgpr(task_shader, AC_UD_TASK_RING_ENTRY);
|
||||||
assert(ring_entry_loc && ring_entry_loc->sgpr_idx != -1 && ring_entry_loc->num_sgprs == 1);
|
assert(ring_entry_loc && ring_entry_loc->sgpr_idx != -1 && ring_entry_loc->num_sgprs == 1);
|
||||||
|
|
||||||
uint32_t ring_entry_reg =
|
uint32_t ring_entry_reg =
|
||||||
@@ -7802,11 +7805,11 @@ radv_cs_emit_dispatch_taskmesh_indirect_multi_ace_packet(struct radv_cmd_buffer
|
|||||||
S_00B800_CS_W32_EN(task_shader->info.wave_size == 32);
|
S_00B800_CS_W32_EN(task_shader->info.wave_size == 32);
|
||||||
|
|
||||||
const struct radv_userdata_info *ring_entry_loc =
|
const struct radv_userdata_info *ring_entry_loc =
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_TASK_RING_ENTRY);
|
radv_get_user_sgpr(task_shader, AC_UD_TASK_RING_ENTRY);
|
||||||
const struct radv_userdata_info *xyz_dim_loc =
|
const struct radv_userdata_info *xyz_dim_loc =
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_CS_GRID_SIZE);
|
radv_get_user_sgpr(task_shader, AC_UD_CS_GRID_SIZE);
|
||||||
const struct radv_userdata_info *draw_id_loc =
|
const struct radv_userdata_info *draw_id_loc =
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_CS_TASK_DRAW_ID);
|
radv_get_user_sgpr(task_shader, AC_UD_CS_TASK_DRAW_ID);
|
||||||
|
|
||||||
assert(ring_entry_loc->sgpr_idx != -1 && ring_entry_loc->num_sgprs == 1);
|
assert(ring_entry_loc->sgpr_idx != -1 && ring_entry_loc->num_sgprs == 1);
|
||||||
assert(!xyz_dim_enable || (xyz_dim_loc->sgpr_idx != -1 && xyz_dim_loc->num_sgprs == 3));
|
assert(!xyz_dim_enable || (xyz_dim_loc->sgpr_idx != -1 && xyz_dim_loc->num_sgprs == 3));
|
||||||
@@ -7951,10 +7954,10 @@ radv_emit_userdata_task_ib_only(struct radv_cmd_buffer *cmd_buffer, uint64_t ib_
|
|||||||
uint32_t ib_stride)
|
uint32_t ib_stride)
|
||||||
{
|
{
|
||||||
struct radv_pipeline *pipeline = &cmd_buffer->state.graphics_pipeline->base;
|
struct radv_pipeline *pipeline = &cmd_buffer->state.graphics_pipeline->base;
|
||||||
|
struct radv_shader *task_shader = pipeline->shaders[MESA_SHADER_TASK];
|
||||||
struct radeon_cmdbuf *cs = cmd_buffer->ace_internal.cs;
|
struct radeon_cmdbuf *cs = cmd_buffer->ace_internal.cs;
|
||||||
|
|
||||||
struct radv_userdata_info *task_ib_loc =
|
const struct radv_userdata_info *task_ib_loc = radv_get_user_sgpr(task_shader, AC_UD_CS_TASK_IB);
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_CS_TASK_IB);
|
|
||||||
|
|
||||||
if (task_ib_loc->sgpr_idx != -1) {
|
if (task_ib_loc->sgpr_idx != -1) {
|
||||||
assert(task_ib_loc->num_sgprs == 3);
|
assert(task_ib_loc->num_sgprs == 3);
|
||||||
@@ -7972,12 +7975,12 @@ radv_emit_userdata_task(struct radv_cmd_buffer *cmd_buffer, uint32_t x, uint32_t
|
|||||||
uint32_t draw_id, uint32_t first_task, uint64_t ib_va)
|
uint32_t draw_id, uint32_t first_task, uint64_t ib_va)
|
||||||
{
|
{
|
||||||
struct radv_pipeline *pipeline = &cmd_buffer->state.graphics_pipeline->base;
|
struct radv_pipeline *pipeline = &cmd_buffer->state.graphics_pipeline->base;
|
||||||
|
struct radv_shader *task_shader = pipeline->shaders[MESA_SHADER_TASK];
|
||||||
struct radeon_cmdbuf *cs = cmd_buffer->ace_internal.cs;
|
struct radeon_cmdbuf *cs = cmd_buffer->ace_internal.cs;
|
||||||
|
|
||||||
struct radv_userdata_info *xyz_loc =
|
const struct radv_userdata_info *xyz_loc = radv_get_user_sgpr(task_shader, AC_UD_CS_GRID_SIZE);
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_CS_GRID_SIZE);
|
const struct radv_userdata_info *draw_id_loc =
|
||||||
struct radv_userdata_info *draw_id_loc =
|
radv_get_user_sgpr(task_shader, AC_UD_CS_TASK_DRAW_ID);
|
||||||
radv_lookup_user_sgpr(pipeline, MESA_SHADER_TASK, AC_UD_CS_TASK_DRAW_ID);
|
|
||||||
|
|
||||||
if (xyz_loc->sgpr_idx != -1) {
|
if (xyz_loc->sgpr_idx != -1) {
|
||||||
assert(xyz_loc->num_sgprs == 3);
|
assert(xyz_loc->num_sgprs == 3);
|
||||||
@@ -9566,12 +9569,10 @@ radv_emit_dispatch_packets(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
struct radeon_winsys *ws = cmd_buffer->device->ws;
|
struct radeon_winsys *ws = cmd_buffer->device->ws;
|
||||||
bool predicating = cmd_buffer->state.predicating;
|
bool predicating = cmd_buffer->state.predicating;
|
||||||
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
struct radeon_cmdbuf *cs = cmd_buffer->cs;
|
||||||
struct radv_userdata_info *loc;
|
const struct radv_userdata_info *loc = radv_get_user_sgpr(compute_shader, AC_UD_CS_GRID_SIZE);
|
||||||
|
|
||||||
radv_describe_dispatch(cmd_buffer, info->blocks[0], info->blocks[1], info->blocks[2]);
|
radv_describe_dispatch(cmd_buffer, info->blocks[0], info->blocks[1], info->blocks[2]);
|
||||||
|
|
||||||
loc = radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_GRID_SIZE);
|
|
||||||
|
|
||||||
ASSERTED unsigned cdw_max = radeon_check_space(ws, cs, 30);
|
ASSERTED unsigned cdw_max = radeon_check_space(ws, cs, 30);
|
||||||
|
|
||||||
if (compute_shader->info.wave_size == 32) {
|
if (compute_shader->info.wave_size == 32) {
|
||||||
@@ -9875,7 +9876,8 @@ radv_trace_rays(struct radv_cmd_buffer *cmd_buffer, const VkTraceRaysIndirectCom
|
|||||||
|
|
||||||
/* Reserve scratch for stacks manually since it is not handled by the compute path. */
|
/* Reserve scratch for stacks manually since it is not handled by the compute path. */
|
||||||
uint32_t scratch_bytes_per_wave = pipeline->base.scratch_bytes_per_wave;
|
uint32_t scratch_bytes_per_wave = pipeline->base.scratch_bytes_per_wave;
|
||||||
uint32_t wave_size = pipeline->base.shaders[MESA_SHADER_COMPUTE]->info.wave_size;
|
const struct radv_shader *compute_shader = pipeline->base.shaders[MESA_SHADER_COMPUTE];
|
||||||
|
uint32_t wave_size = compute_shader->info.wave_size;
|
||||||
uint32_t stack_size = cmd_buffer->state.rt_pipeline->stack_size;
|
uint32_t stack_size = cmd_buffer->state.rt_pipeline->stack_size;
|
||||||
if (stack_size == -1u)
|
if (stack_size == -1u)
|
||||||
stack_size = cmd_buffer->state.rt_stack_size; /* dynamic stack size */
|
stack_size = cmd_buffer->state.rt_stack_size; /* dynamic stack size */
|
||||||
@@ -9921,30 +9923,30 @@ radv_trace_rays(struct radv_cmd_buffer *cmd_buffer, const VkTraceRaysIndirectCom
|
|||||||
|
|
||||||
ASSERTED unsigned cdw_max = radeon_check_space(cmd_buffer->device->ws, cmd_buffer->cs, 15);
|
ASSERTED unsigned cdw_max = radeon_check_space(cmd_buffer->device->ws, cmd_buffer->cs, 15);
|
||||||
|
|
||||||
struct radv_userdata_info *desc_loc =
|
const struct radv_userdata_info *desc_loc =
|
||||||
radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_SBT_DESCRIPTORS);
|
radv_get_user_sgpr(compute_shader, AC_UD_CS_SBT_DESCRIPTORS);
|
||||||
if (desc_loc->sgpr_idx != -1) {
|
if (desc_loc->sgpr_idx != -1) {
|
||||||
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
||||||
base_reg + desc_loc->sgpr_idx * 4, sbt_va, true);
|
base_reg + desc_loc->sgpr_idx * 4, sbt_va, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct radv_userdata_info *size_loc =
|
const struct radv_userdata_info *size_loc =
|
||||||
radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_RAY_LAUNCH_SIZE_ADDR);
|
radv_get_user_sgpr(compute_shader, AC_UD_CS_RAY_LAUNCH_SIZE_ADDR);
|
||||||
if (size_loc->sgpr_idx != -1) {
|
if (size_loc->sgpr_idx != -1) {
|
||||||
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
||||||
base_reg + size_loc->sgpr_idx * 4, launch_size_va, true);
|
base_reg + size_loc->sgpr_idx * 4, launch_size_va, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct radv_userdata_info *base_loc = radv_lookup_user_sgpr(
|
const struct radv_userdata_info *base_loc =
|
||||||
&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_RAY_DYNAMIC_CALLABLE_STACK_BASE);
|
radv_get_user_sgpr(compute_shader, AC_UD_CS_RAY_DYNAMIC_CALLABLE_STACK_BASE);
|
||||||
if (base_loc->sgpr_idx != -1) {
|
if (base_loc->sgpr_idx != -1) {
|
||||||
struct radv_shader_info *cs_info = &pipeline->base.shaders[MESA_SHADER_COMPUTE]->info;
|
const struct radv_shader_info *cs_info = &compute_shader->info;
|
||||||
radeon_set_sh_reg(cmd_buffer->cs, R_00B900_COMPUTE_USER_DATA_0 + base_loc->sgpr_idx * 4,
|
radeon_set_sh_reg(cmd_buffer->cs, R_00B900_COMPUTE_USER_DATA_0 + base_loc->sgpr_idx * 4,
|
||||||
pipeline->base.scratch_bytes_per_wave / cs_info->wave_size);
|
pipeline->base.scratch_bytes_per_wave / cs_info->wave_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct radv_userdata_info *shader_loc =
|
const struct radv_userdata_info *shader_loc =
|
||||||
radv_lookup_user_sgpr(&pipeline->base, MESA_SHADER_COMPUTE, AC_UD_CS_TRAVERSAL_SHADER_ADDR);
|
radv_get_user_sgpr(compute_shader, AC_UD_CS_TRAVERSAL_SHADER_ADDR);
|
||||||
if (shader_loc->sgpr_idx != -1) {
|
if (shader_loc->sgpr_idx != -1) {
|
||||||
uint64_t raygen_va = pipeline->base.shaders[MESA_SHADER_RAYGEN]->va;
|
uint64_t raygen_va = pipeline->base.shaders[MESA_SHADER_RAYGEN]->va;
|
||||||
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
|
||||||
|
@@ -1151,11 +1151,12 @@ radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
if (cmd_buffer->state.graphics_pipeline->uses_baseinstance)
|
if (cmd_buffer->state.graphics_pipeline->uses_baseinstance)
|
||||||
vtx_base_sgpr |= DGC_USES_BASEINSTANCE;
|
vtx_base_sgpr |= DGC_USES_BASEINSTANCE;
|
||||||
|
|
||||||
uint16_t vbo_sgpr =
|
const struct radv_shader *vertex_shader =
|
||||||
((radv_lookup_user_sgpr(&graphics_pipeline->base, MESA_SHADER_VERTEX, AC_UD_VS_VERTEX_BUFFERS)->sgpr_idx * 4 +
|
radv_get_shader(&graphics_pipeline->base, MESA_SHADER_VERTEX);
|
||||||
graphics_pipeline->base.user_data_0[MESA_SHADER_VERTEX]) -
|
uint16_t vbo_sgpr = ((radv_get_user_sgpr(vertex_shader, AC_UD_VS_VERTEX_BUFFERS)->sgpr_idx * 4 +
|
||||||
SI_SH_REG_OFFSET) >>
|
graphics_pipeline->base.user_data_0[MESA_SHADER_VERTEX]) -
|
||||||
2;
|
SI_SH_REG_OFFSET) >>
|
||||||
|
2;
|
||||||
struct radv_dgc_params params = {
|
struct radv_dgc_params params = {
|
||||||
.cmd_buf_stride = cmd_stride,
|
.cmd_buf_stride = cmd_stride,
|
||||||
.cmd_buf_size = cmd_buf_size,
|
.cmd_buf_size = cmd_buf_size,
|
||||||
|
@@ -4698,8 +4698,9 @@ radv_pipeline_get_streamout_shader(struct radv_graphics_pipeline *pipeline)
|
|||||||
static bool
|
static bool
|
||||||
radv_shader_need_indirect_descriptor_sets(struct radv_pipeline *pipeline, gl_shader_stage stage)
|
radv_shader_need_indirect_descriptor_sets(struct radv_pipeline *pipeline, gl_shader_stage stage)
|
||||||
{
|
{
|
||||||
struct radv_userdata_info *loc =
|
const struct radv_shader *shader = radv_get_shader(pipeline, stage);
|
||||||
radv_lookup_user_sgpr(pipeline, stage, AC_UD_INDIRECT_DESCRIPTOR_SETS);
|
const struct radv_userdata_info *loc =
|
||||||
|
radv_get_user_sgpr(shader, AC_UD_INDIRECT_DESCRIPTOR_SETS);
|
||||||
return loc->sgpr_idx != -1;
|
return loc->sgpr_idx != -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4724,8 +4725,9 @@ radv_pipeline_init_shader_stages_state(struct radv_graphics_pipeline *pipeline)
|
|||||||
gl_shader_stage first_stage =
|
gl_shader_stage first_stage =
|
||||||
radv_pipeline_has_stage(pipeline, MESA_SHADER_MESH) ? MESA_SHADER_MESH : MESA_SHADER_VERTEX;
|
radv_pipeline_has_stage(pipeline, MESA_SHADER_MESH) ? MESA_SHADER_MESH : MESA_SHADER_VERTEX;
|
||||||
|
|
||||||
struct radv_userdata_info *loc =
|
const struct radv_userdata_info *loc =
|
||||||
radv_lookup_user_sgpr(&pipeline->base, first_stage, AC_UD_VS_BASE_VERTEX_START_INSTANCE);
|
radv_get_user_sgpr(radv_get_shader(&pipeline->base, first_stage),
|
||||||
|
AC_UD_VS_BASE_VERTEX_START_INSTANCE);
|
||||||
if (loc->sgpr_idx != -1) {
|
if (loc->sgpr_idx != -1) {
|
||||||
pipeline->vtx_base_sgpr = pipeline->base.user_data_0[first_stage];
|
pipeline->vtx_base_sgpr = pipeline->base.user_data_0[first_stage];
|
||||||
pipeline->vtx_base_sgpr += loc->sgpr_idx * 4;
|
pipeline->vtx_base_sgpr += loc->sgpr_idx * 4;
|
||||||
|
@@ -2367,8 +2367,7 @@ bool radv_pipeline_has_ngg_passthrough(const struct radv_graphics_pipeline *pipe
|
|||||||
|
|
||||||
bool radv_pipeline_has_gs_copy_shader(const struct radv_pipeline *pipeline);
|
bool radv_pipeline_has_gs_copy_shader(const struct radv_pipeline *pipeline);
|
||||||
|
|
||||||
struct radv_userdata_info *radv_lookup_user_sgpr(const struct radv_pipeline *pipeline,
|
const struct radv_userdata_info *radv_get_user_sgpr(const struct radv_shader *shader, int idx);
|
||||||
gl_shader_stage stage, int idx);
|
|
||||||
|
|
||||||
struct radv_shader *radv_get_shader(const struct radv_pipeline *pipeline, gl_shader_stage stage);
|
struct radv_shader *radv_get_shader(const struct radv_pipeline *pipeline, gl_shader_stage stage);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user