[Mesa-dev] [PATCH 3/5] anv/pipeline: Use more fields from stage in compile_cs

Lionel Landwerlin lionel.g.landwerlin at intel.com
Fri Aug 17 15:22:50 UTC 2018


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 08/08/18 09:12, Jason Ekstrand wrote:
> ---
>   src/intel/vulkan/anv_pipeline.c | 37 +++++++++++++++++++--------------
>   1 file changed, 21 insertions(+), 16 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
> index 23af0f1c924..e6a97aa8ca7 100644
> --- a/src/intel/vulkan/anv_pipeline.c
> +++ b/src/intel/vulkan/anv_pipeline.c
> @@ -1115,6 +1115,9 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
>         .module = module,
>         .entrypoint = entrypoint,
>         .spec_info = spec_info,
> +      .cache_key = {
> +         .stage = MESA_SHADER_COMPUTE,
> +      }
>      };
>   
>      struct anv_shader_bin *bin = NULL;
> @@ -1123,13 +1126,11 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
>   
>      ANV_FROM_HANDLE(anv_pipeline_layout, layout, info->layout);
>   
> -   unsigned char sha1[20];
> -   anv_pipeline_hash_compute(pipeline, layout, &stage, sha1);
> -   bin = anv_device_search_for_kernel(pipeline->device, cache, sha1, 20);
> +   anv_pipeline_hash_compute(pipeline, layout, &stage, stage.cache_key.sha1);
> +   bin = anv_device_search_for_kernel(pipeline->device, cache, &stage.cache_key,
> +                                      sizeof(stage.cache_key));
>   
>      if (bin == NULL) {
> -      struct brw_cs_prog_data prog_data = {};
> -
>         stage.bind_map = (struct anv_pipeline_bind_map) {
>            .surface_to_descriptor = stage.surface_to_descriptor,
>            .sampler_to_descriptor = stage.sampler_to_descriptor
> @@ -1137,31 +1138,35 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline,
>   
>         void *mem_ctx = ralloc_context(NULL);
>   
> -      nir_shader *nir = anv_pipeline_compile(pipeline, mem_ctx, layout, &stage,
> -                                             &prog_data.base, &stage.bind_map);
> -      if (nir == NULL) {
> +      stage.nir = anv_pipeline_compile(pipeline, mem_ctx, layout, &stage,
> +                                       &stage.prog_data.base,
> +                                       &stage.bind_map);
> +      if (stage.nir == NULL) {
>            ralloc_free(mem_ctx);
>            return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>         }
>   
> -      NIR_PASS_V(nir, anv_nir_add_base_work_group_id, &prog_data);
> +      NIR_PASS_V(stage.nir, anv_nir_add_base_work_group_id,
> +                 &stage.prog_data.cs);
>   
> -      anv_fill_binding_table(&prog_data.base, 1);
> +      anv_fill_binding_table(&stage.prog_data.cs.base, 1);
>   
>         const unsigned *shader_code =
>            brw_compile_cs(compiler, NULL, mem_ctx, &stage.key.cs,
> -                        &prog_data, nir, -1, NULL);
> +                        &stage.prog_data.cs, stage.nir, -1, NULL);
>         if (shader_code == NULL) {
>            ralloc_free(mem_ctx);
>            return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
>         }
>   
> -      const unsigned code_size = prog_data.base.program_size;
> -      bin = anv_device_upload_kernel(pipeline->device, cache, sha1, 20,
> +      const unsigned code_size = stage.prog_data.base.program_size;
> +      bin = anv_device_upload_kernel(pipeline->device, cache,
> +                                     &stage.cache_key, sizeof(stage.cache_key),
>                                        shader_code, code_size,
> -                                     nir->constant_data,
> -                                     nir->constant_data_size,
> -                                     &prog_data.base, sizeof(prog_data),
> +                                     stage.nir->constant_data,
> +                                     stage.nir->constant_data_size,
> +                                     &stage.prog_data.base,
> +                                     sizeof(stage.prog_data.cs),
>                                        &stage.bind_map);
>         if (!bin) {
>            ralloc_free(mem_ctx);




More information about the mesa-dev mailing list