radv: do not force per-vertex VRS if there is no pixel shader

This has no effect.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14907>
This commit is contained in:
Samuel Pitoiset
2022-02-07 11:12:15 +01:00
parent 2451290bc4
commit d0171dffe1
+8 -2
View File
@@ -3630,7 +3630,7 @@ radv_upload_shaders(struct radv_device *device, struct radv_pipeline *pipeline,
}
static bool
radv_consider_force_vrs(const struct radv_pipeline *pipeline, nir_shader **nir)
radv_consider_force_vrs(const struct radv_pipeline *pipeline, bool noop_fs, nir_shader **nir)
{
struct radv_device *device = pipeline->device;
@@ -3646,6 +3646,10 @@ radv_consider_force_vrs(const struct radv_pipeline *pipeline, nir_shader **nir)
if (last_vgt_shader->info.outputs_written & BITFIELD64_BIT(VARYING_SLOT_PRIMITIVE_SHADING_RATE))
return false;
/* VRS has no effect if there is no pixel shader. */
if (noop_fs)
return false;
return true;
}
@@ -3676,6 +3680,7 @@ radv_create_shaders(struct radv_pipeline *pipeline, struct radv_pipeline_layout
struct radv_pipeline_shader_stack_size **stack_sizes =
pipeline->type == RADV_PIPELINE_COMPUTE ? &pipeline->compute.rt_stack_sizes : NULL;
uint32_t *num_stack_sizes = stack_sizes ? &pipeline->compute.group_count : NULL;
bool noop_fs = false;
radv_start_feedback(pipeline_feedback);
@@ -3732,6 +3737,7 @@ radv_create_shaders(struct radv_pipeline *pipeline, struct radv_pipeline_layout
nir_builder fs_b = radv_meta_init_shader(MESA_SHADER_FRAGMENT, "noop_fs");
fs_m = vk_shader_module_from_nir(fs_b.shader);
modules[MESA_SHADER_FRAGMENT] = &fs_m;
noop_fs = true;
}
for (unsigned i = 0; i < MESA_VULKAN_SHADER_STAGES; ++i) {
@@ -3750,7 +3756,7 @@ radv_create_shaders(struct radv_pipeline *pipeline, struct radv_pipeline_layout
}
/* Force per-vertex VRS. */
if (radv_consider_force_vrs(pipeline, nir)) {
if (radv_consider_force_vrs(pipeline, noop_fs, nir)) {
assert(pipeline->graphics.last_vgt_api_stage == MESA_SHADER_VERTEX ||
pipeline->graphics.last_vgt_api_stage == MESA_SHADER_GEOMETRY);
nir_shader *last_vgt_shader = nir[pipeline->graphics.last_vgt_api_stage];