radv: bind and emit mesh/task shaders with ESO
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27237>
This commit is contained in:

committed by
Marge Bot

parent
29491d36aa
commit
f23efd7093
@@ -9069,6 +9069,13 @@ radv_emit_shaders(struct radv_cmd_buffer *cmd_buffer)
|
||||
radv_emit_fragment_shader(device, cs, cs, cmd_buffer->state.shaders[MESA_SHADER_FRAGMENT]);
|
||||
radv_emit_ps_inputs(device, cs, last_vgt_shader, cmd_buffer->state.shaders[MESA_SHADER_FRAGMENT]);
|
||||
break;
|
||||
case MESA_SHADER_MESH:
|
||||
radv_emit_mesh_shader(device, cs, cs, cmd_buffer->state.shaders[MESA_SHADER_MESH]);
|
||||
break;
|
||||
case MESA_SHADER_TASK:
|
||||
radv_emit_compute_shader(device->physical_device, cmd_buffer->gang.cs,
|
||||
cmd_buffer->state.shaders[MESA_SHADER_TASK]);
|
||||
break;
|
||||
default:
|
||||
unreachable("invalid bind stage");
|
||||
}
|
||||
@@ -9083,6 +9090,11 @@ radv_emit_shaders(struct radv_cmd_buffer *cmd_buffer)
|
||||
.ngg_passthrough = last_vgt_shader->info.is_ngg_passthrough,
|
||||
};
|
||||
|
||||
if (cmd_buffer->state.shaders[MESA_SHADER_MESH]) {
|
||||
vgt_shader_cfg_key.mesh = 1;
|
||||
vgt_shader_cfg_key.mesh_scratch_ring = cmd_buffer->state.shaders[MESA_SHADER_MESH]->info.ms.needs_ms_scratch_ring;
|
||||
}
|
||||
|
||||
radv_emit_vgt_gs_mode(device, cs, last_vgt_shader);
|
||||
radv_emit_vgt_vertex_reuse(device, cs, radv_get_shader(cmd_buffer->state.shaders, MESA_SHADER_TESS_EVAL));
|
||||
radv_emit_vgt_shader_config(device, cs, &vgt_shader_cfg_key);
|
||||
@@ -9224,9 +9236,12 @@ radv_bind_graphics_shaders(struct radv_cmd_buffer *cmd_buffer)
|
||||
if (cmd_buffer->state.graphics_pipeline)
|
||||
return;
|
||||
|
||||
for (unsigned s = 0; s < MESA_SHADER_COMPUTE; s++) {
|
||||
for (unsigned s = 0; s <= MESA_SHADER_MESH; s++) {
|
||||
const struct radv_shader_object *shader_obj = cmd_buffer->state.shader_objs[s];
|
||||
|
||||
if (s == MESA_SHADER_COMPUTE)
|
||||
continue;
|
||||
|
||||
if (!shader_obj) {
|
||||
radv_bind_shader(cmd_buffer, NULL, s);
|
||||
continue;
|
||||
@@ -9417,6 +9432,10 @@ radv_before_taskmesh_draw(struct radv_cmd_buffer *cmd_buffer, const struct radv_
|
||||
if (unlikely(!info->count))
|
||||
return false;
|
||||
|
||||
if (cmd_buffer->state.dirty & RADV_CMD_DIRTY_SHADERS) {
|
||||
radv_bind_graphics_shaders(cmd_buffer);
|
||||
}
|
||||
|
||||
struct radeon_cmdbuf *ace_cs = cmd_buffer->gang.cs;
|
||||
struct radv_shader *task_shader = cmd_buffer->state.shaders[MESA_SHADER_TASK];
|
||||
|
||||
|
@@ -3237,7 +3237,7 @@ radv_emit_geometry_shader(const struct radv_device *device, struct radeon_cmdbuf
|
||||
radeon_set_context_reg(ctx_cs, R_028B38_VGT_GS_MAX_VERT_OUT, gs->info.gs.vertices_out);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
radv_emit_mesh_shader(const struct radv_device *device, struct radeon_cmdbuf *ctx_cs, struct radeon_cmdbuf *cs,
|
||||
const struct radv_shader *ms)
|
||||
{
|
||||
|
@@ -2375,6 +2375,9 @@ void radv_emit_geometry_shader(const struct radv_device *device, struct radeon_c
|
||||
const struct radv_shader *gs, const struct radv_shader *es,
|
||||
const struct radv_shader *gs_copy_shader);
|
||||
|
||||
void radv_emit_mesh_shader(const struct radv_device *device, struct radeon_cmdbuf *ctx_cs, struct radeon_cmdbuf *cs,
|
||||
const struct radv_shader *ms);
|
||||
|
||||
void radv_graphics_shaders_compile(struct radv_device *device, struct vk_pipeline_cache *cache,
|
||||
struct radv_shader_stage *stages, const struct radv_graphics_state_key *gfx_state,
|
||||
bool keep_executable_info, bool keep_statistic_info, bool is_internal,
|
||||
|
Reference in New Issue
Block a user