Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

On Mon, Oct 23, 2017 at 2:10 AM, Timothy Arceri <tarc...@itsqueeze.com> wrote:
> SaschaWillems Vulkan demo tessellation:
>
> ~4300fps -> ~4800fps
> ---
>  src/amd/vulkan/radv_pipeline.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
> index d0e47383d7..69bda152e2 100644
> --- a/src/amd/vulkan/radv_pipeline.c
> +++ b/src/amd/vulkan/radv_pipeline.c
> @@ -1760,20 +1760,21 @@ void radv_create_shaders(struct radv_pipeline 
> *pipeline,
>         }
>
>         if (!modules[MESA_SHADER_FRAGMENT] && !modules[MESA_SHADER_COMPUTE]) {
>                 nir_builder fs_b;
>                 nir_builder_init_simple_shader(&fs_b, NULL, 
> MESA_SHADER_FRAGMENT, NULL);
>                 fs_b.shader->info.name = ralloc_strdup(fs_b.shader, 
> "noop_fs");
>                 fs_m.nir = fs_b.shader;
>                 modules[MESA_SHADER_FRAGMENT] = &fs_m;
>         }
>
> +       int prev = -1;
>         for (unsigned i = 0; i < MESA_SHADER_STAGES; ++i) {
>                 const VkPipelineShaderStageCreateInfo *stage = pStages[i];
>
>                 if (!modules[i])
>                         continue;
>
>                 nir[i] = radv_shader_compile_to_nir(device, modules[i],
>                                                     stage ? stage->pName : 
> "main", i,
>                                                     stage ? 
> stage->pSpecializationInfo : NULL);
>                 pipeline->active_stages |= mesa_to_vk_shader_stage(i);
> @@ -1790,20 +1791,32 @@ void radv_create_shaders(struct radv_pipeline 
> *pipeline,
>
>                         if (i != first)
>                                 mask = mask | nir_var_shader_in;
>
>                         if (i != last)
>                                 mask = mask | nir_var_shader_out;
>
>                         nir_lower_io_to_scalar_early(nir[i], mask);
>                         radv_optimize_nir(nir[i]);
>                 }
> +
> +               if (prev != -1) {
> +                       nir_compact_varyings(nir[prev], nir[i], true);
> +
> +                       /* TODO: In future nir_compact_varyings() should 
> update the varying
> +                        * input/output mask to reflect the packing it has 
> just done. However
> +                        * until we have an array/matrix splitting pass we 
> would just be
> +                        * duplicating the complex partial marking code in 
> nir_gather_info().
> +                        */
> +                       nir_shader_gather_info(nir[i], 
> nir_shader_get_entrypoint(nir[i]));
> +               }
> +               prev = i;
>         }
>
>         if (nir[MESA_SHADER_TESS_CTRL]) {
>                 /* TODO: This is no longer used as a key we should refactor 
> this */
>                 if (keys)
>                         keys[MESA_SHADER_TESS_CTRL].tcs.primitive_mode = 
> nir[MESA_SHADER_TESS_EVAL]->info.tess.primitive_mode;
>
>                 keys[MESA_SHADER_TESS_CTRL].tcs.tes_reads_tess_factors = 
> !!(nir[MESA_SHADER_TESS_EVAL]->info.inputs_read & 
> (VARYING_BIT_TESS_LEVEL_INNER | VARYING_BIT_TESS_LEVEL_OUTER));
>                 nir_lower_tes_patch_vertices(nir[MESA_SHADER_TESS_EVAL], 
> nir[MESA_SHADER_TESS_CTRL]->info.tess.tcs_vertices_out);
>         }
> --
> 2.13.6
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to