mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
radv: add DI_PT_RECTLIST to si_conv_prim_to_gs_out()
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22105>
This commit is contained in:
parent
5e9ea15484
commit
66fec16238
3 changed files with 12 additions and 10 deletions
|
|
@ -2157,7 +2157,7 @@ radv_emit_provoking_vertex_mode(struct radv_cmd_buffer *cmd_buffer)
|
|||
|
||||
if (d->vk.rs.provoking_vertex == VK_PROVOKING_VERTEX_MODE_LAST_VERTEX_EXT) {
|
||||
if (stage == MESA_SHADER_VERTEX) {
|
||||
provoking_vtx = si_conv_prim_to_gs_out(d->vk.ia.primitive_topology);
|
||||
provoking_vtx = si_conv_prim_to_gs_out(d->vk.ia.primitive_topology, pipeline->is_ngg);
|
||||
} else {
|
||||
assert(stage == MESA_SHADER_GEOMETRY);
|
||||
struct radv_shader *gs = pipeline->base.shaders[stage];
|
||||
|
|
@ -2194,7 +2194,7 @@ radv_emit_primitive_topology(struct radv_cmd_buffer *cmd_buffer)
|
|||
|
||||
base_reg = pipeline->base.user_data_0[stage];
|
||||
radeon_set_sh_reg(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4,
|
||||
si_conv_prim_to_gs_out(d->vk.ia.primitive_topology) + 1);
|
||||
si_conv_prim_to_gs_out(d->vk.ia.primitive_topology, pipeline->is_ngg) + 1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -3505,7 +3505,7 @@ radv_emit_guardband_state(struct radv_cmd_buffer *cmd_buffer)
|
|||
/* Ignore dynamic primitive topology for TES/GS/MS stages. */
|
||||
rast_prim = pipeline->rast_prim;
|
||||
} else {
|
||||
rast_prim = si_conv_prim_to_gs_out(d->vk.ia.primitive_topology);
|
||||
rast_prim = si_conv_prim_to_gs_out(d->vk.ia.primitive_topology, pipeline->is_ngg);
|
||||
}
|
||||
|
||||
si_write_guardband(cmd_buffer->cs, d->vk.vp.viewport_count, d->vk.vp.viewports, rast_prim,
|
||||
|
|
@ -8622,7 +8622,8 @@ radv_get_ngg_culling_settings(struct radv_cmd_buffer *cmd_buffer, bool vp_y_inve
|
|||
* because we don't know the primitive topology at compile time, so we should
|
||||
* disable it dynamically for points or lines.
|
||||
*/
|
||||
const unsigned num_vertices_per_prim = si_conv_prim_to_gs_out(d->vk.ia.primitive_topology) + 1;
|
||||
const unsigned num_vertices_per_prim =
|
||||
si_conv_prim_to_gs_out(d->vk.ia.primitive_topology, true) + 1;
|
||||
if (num_vertices_per_prim != 3)
|
||||
return radv_nggc_none;
|
||||
|
||||
|
|
|
|||
|
|
@ -4772,7 +4772,7 @@ radv_pipeline_init_vgt_gs_out(struct radv_graphics_pipeline *pipeline,
|
|||
gs_out =
|
||||
si_conv_gl_prim_to_gs_out(pipeline->base.shaders[MESA_SHADER_MESH]->info.ms.output_prim);
|
||||
} else {
|
||||
gs_out = si_conv_prim_to_gs_out(si_translate_prim(state->ia->primitive_topology));
|
||||
gs_out = si_conv_prim_to_gs_out(si_translate_prim(state->ia->primitive_topology), false);
|
||||
}
|
||||
|
||||
return gs_out;
|
||||
|
|
@ -4802,9 +4802,8 @@ radv_pipeline_init_extra(struct radv_graphics_pipeline *pipeline,
|
|||
struct radv_dynamic_state *dynamic = &pipeline->dynamic_state;
|
||||
dynamic->vk.ia.primitive_topology = V_008958_DI_PT_RECTLIST;
|
||||
|
||||
*vgt_gs_out_prim_type = V_028A6C_TRISTRIP;
|
||||
if (radv_pipeline_has_ngg(pipeline))
|
||||
*vgt_gs_out_prim_type = V_028A6C_RECTLIST;
|
||||
*vgt_gs_out_prim_type =
|
||||
si_conv_prim_to_gs_out(dynamic->vk.ia.primitive_topology, radv_pipeline_has_ngg(pipeline));
|
||||
|
||||
pipeline->rast_prim = *vgt_gs_out_prim_type;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3202,7 +3202,7 @@ void radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer,
|
|||
const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo);
|
||||
|
||||
static inline uint32_t
|
||||
si_conv_prim_to_gs_out(uint32_t topology)
|
||||
si_conv_prim_to_gs_out(uint32_t topology, bool is_ngg)
|
||||
{
|
||||
switch (topology) {
|
||||
case V_008958_DI_PT_POINTLIST:
|
||||
|
|
@ -3219,6 +3219,8 @@ si_conv_prim_to_gs_out(uint32_t topology)
|
|||
case V_008958_DI_PT_TRILIST_ADJ:
|
||||
case V_008958_DI_PT_TRISTRIP_ADJ:
|
||||
return V_028A6C_TRISTRIP;
|
||||
case V_008958_DI_PT_RECTLIST:
|
||||
return is_ngg ? V_028A6C_RECTLIST : V_028A6C_TRISTRIP;
|
||||
default:
|
||||
assert(0);
|
||||
return 0;
|
||||
|
|
@ -3319,7 +3321,7 @@ radv_get_num_vertices_per_prim(const struct radv_pipeline_key *pipeline_key)
|
|||
return 3;
|
||||
} else {
|
||||
/* Need to add 1, because: V_028A6C_POINTLIST=0, V_028A6C_LINESTRIP=1, V_028A6C_TRISTRIP=2, etc. */
|
||||
return si_conv_prim_to_gs_out(pipeline_key->vs.topology) + 1;
|
||||
return si_conv_prim_to_gs_out(pipeline_key->vs.topology, false) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue