mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-27 14:28:22 +02:00
panvk/csf: Inline the SPD addr helpers
We're already grabbing the VS for VERTEX_VARY_SPD on v11 and earlier and we're already carrying the code to check for IA_PRIMITIVE_TOPOLOGY. It makes sense to have the code which selects shader descriptor there, too. Otherwise the helper is a little too magic and can lead to bugs if someone isn't paying attention. (See also the previous commit.) Signed-off-by: Olivia Lee <olivia.lee@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41638>
This commit is contained in:
parent
a56b15edc6
commit
d90cbf263f
1 changed files with 16 additions and 33 deletions
|
|
@ -837,34 +837,6 @@ prepare_vp(struct panvk_cmd_buffer *cmdbuf)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if PAN_ARCH >= 12
|
||||
static inline uint64_t
|
||||
get_vs_all_spd(const struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
const struct panvk_shader_variant *vs =
|
||||
panvk_shader_hw_variant(cmdbuf->state.gfx.vs.shader);
|
||||
assert(vs);
|
||||
const struct vk_input_assembly_state *ia =
|
||||
&cmdbuf->vk.dynamic_graphics_state.ia;
|
||||
return ia->primitive_topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST
|
||||
? panvk_priv_mem_dev_addr(vs->spds.all_points)
|
||||
: panvk_priv_mem_dev_addr(vs->spds.all_triangles);
|
||||
}
|
||||
#else
|
||||
static inline uint64_t
|
||||
get_vs_pos_spd(const struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
const struct panvk_shader_variant *vs =
|
||||
panvk_shader_hw_variant(cmdbuf->state.gfx.vs.shader);
|
||||
assert(vs);
|
||||
const struct vk_input_assembly_state *ia =
|
||||
&cmdbuf->vk.dynamic_graphics_state.ia;
|
||||
return ia->primitive_topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST
|
||||
? panvk_priv_mem_dev_addr(vs->spds.pos_points)
|
||||
: panvk_priv_mem_dev_addr(vs->spds.pos_triangles);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
prepare_tiler_primitive_size(struct panvk_cmd_buffer *cmdbuf)
|
||||
{
|
||||
|
|
@ -1726,6 +1698,8 @@ get_render_ctx(struct panvk_cmd_buffer *cmdbuf)
|
|||
static VkResult
|
||||
prepare_vs(struct panvk_cmd_buffer *cmdbuf, const struct panvk_draw_info *draw)
|
||||
{
|
||||
const struct vk_input_assembly_state *ia =
|
||||
&cmdbuf->vk.dynamic_graphics_state.ia;
|
||||
struct panvk_descriptor_state *desc_state = &cmdbuf->state.gfx.desc_state;
|
||||
struct panvk_shader_desc_state *vs_desc_state = &cmdbuf->state.gfx.vs.desc;
|
||||
const struct panvk_shader_variant *vs =
|
||||
|
|
@ -1761,13 +1735,22 @@ prepare_vs(struct panvk_cmd_buffer *cmdbuf, const struct panvk_draw_info *draw)
|
|||
|
||||
#if PAN_ARCH >= 12
|
||||
if (gfx_state_dirty(cmdbuf, VS) ||
|
||||
dyn_gfx_state_dirty(cmdbuf, IA_PRIMITIVE_TOPOLOGY))
|
||||
cs_move64_to(b, cs_sr_reg64(b, IDVS, VERTEX_SPD), get_vs_all_spd(cmdbuf));
|
||||
dyn_gfx_state_dirty(cmdbuf, IA_PRIMITIVE_TOPOLOGY)) {
|
||||
const uint64_t spd_addr =
|
||||
ia->primitive_topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST
|
||||
? panvk_priv_mem_dev_addr(vs->spds.all_points)
|
||||
: panvk_priv_mem_dev_addr(vs->spds.all_triangles);
|
||||
cs_move64_to(b, cs_sr_reg64(b, IDVS, VERTEX_SPD), spd_addr);
|
||||
}
|
||||
#else
|
||||
if (gfx_state_dirty(cmdbuf, VS) ||
|
||||
dyn_gfx_state_dirty(cmdbuf, IA_PRIMITIVE_TOPOLOGY))
|
||||
cs_move64_to(b, cs_sr_reg64(b, IDVS, VERTEX_POS_SPD),
|
||||
get_vs_pos_spd(cmdbuf));
|
||||
dyn_gfx_state_dirty(cmdbuf, IA_PRIMITIVE_TOPOLOGY)) {
|
||||
const uint64_t pos_spd_addr =
|
||||
ia->primitive_topology == VK_PRIMITIVE_TOPOLOGY_POINT_LIST
|
||||
? panvk_priv_mem_dev_addr(vs->spds.pos_points)
|
||||
: panvk_priv_mem_dev_addr(vs->spds.pos_triangles);
|
||||
cs_move64_to(b, cs_sr_reg64(b, IDVS, VERTEX_POS_SPD), pos_spd_addr);
|
||||
}
|
||||
|
||||
if (gfx_state_dirty(cmdbuf, VS))
|
||||
cs_move64_to(b, cs_sr_reg64(b, IDVS, VERTEX_VARY_SPD),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue