radv: only initialize non-zero values for the default dynamic state

This avoids a big memcpy and cut the function time by 2x.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20960>
This commit is contained in:
Samuel Pitoiset
2023-01-27 18:34:48 +01:00
committed by Marge Bot
parent 912a19e630
commit 2f93398047
3 changed files with 12 additions and 97 deletions

View File

@@ -1040,15 +1040,24 @@ radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline,
const struct vk_graphics_pipeline_state *state)
{
uint64_t needed_states = radv_pipeline_needed_dynamic_state(pipeline, state);
struct radv_dynamic_state *dynamic = &pipeline->dynamic_state;
uint64_t states = needed_states;
pipeline->dynamic_state = default_dynamic_state;
/* Initialize non-zero values for default dynamic state. */
dynamic->vk.rs.line.width = 1.0f;
dynamic->vk.fsr.fragment_size.width = 1u;
dynamic->vk.fsr.fragment_size.height = 1u;
dynamic->vk.ds.depth.bounds_test.max = 1.0f;
dynamic->vk.ds.stencil.front.compare_mask = ~0;
dynamic->vk.ds.stencil.front.write_mask = ~0;
dynamic->vk.ds.stencil.back.compare_mask = ~0;
dynamic->vk.ds.stencil.back.write_mask = ~0;
dynamic->vk.ms.rasterization_samples = VK_SAMPLE_COUNT_1_BIT;
pipeline->needed_dynamic_state = needed_states;
states &= ~pipeline->dynamic_states;
struct radv_dynamic_state *dynamic = &pipeline->dynamic_state;
/* Input assembly. */
if (states & RADV_DYNAMIC_PRIMITIVE_TOPOLOGY) {
dynamic->vk.ia.primitive_topology = si_translate_prim(state->ia->primitive_topology);