[Mesa-dev] [PATCH v2 14/32] glsl/shader_cache: Save and restore serialized nir in gl_program

Timothy Arceri tarceri at itsqueeze.com
Thu Oct 19 22:03:57 UTC 2017


This and the previous patch feels wrong. The glsl shader cache shouldn't 
be handling writing nir to disk. IMO you should add this functionality 
to nir_serialize.c (maybe rename is nir_cache.c ??). That way we have 
continue with the nir is a toolkit theme and we can easily reused the 
util to write nir to disk in Vulkan which could be useful for reducing 
compile times.

Doing it this way we could deserialize it in brw_link() and serialize it 
in glsl_to_nir() no need for the extra serialized_nir params.

On 19/10/17 16:32, Jordan Justen wrote:
> Signed-off-by: Jordan Justen <jordan.l.justen at inir_serialize.cntel.com>
> ---
>   src/compiler/glsl/shader_cache.cpp | 16 ++++++++++++++++
>   1 file changed, 16 insertions(+)
> 
> diff --git a/src/compiler/glsl/shader_cache.cpp b/src/compiler/glsl/shader_cache.cpp
> index ca90cfde35..f43bd6b17e 100644
> --- a/src/compiler/glsl/shader_cache.cpp
> +++ b/src/compiler/glsl/shader_cache.cpp
> @@ -1062,6 +1062,14 @@ write_shader_metadata(struct blob *metadata, gl_linked_shader *shader)
>      }
>   
>      write_shader_parameters(metadata, glprog->Parameters);
> +
> +   assert((glprog->serialized_nir == NULL) ==
> +          (glprog->serialized_nir_size == 0));
> +   blob_write_uint32(metadata, (uint32_t)glprog->serialized_nir_size);
> +   if (glprog->serialized_nir_size > 0) {
> +      blob_write_bytes(metadata, glprog->serialized_nir,
> +                       glprog->serialized_nir_size);
> +   }
>   }
>   
>   static void
> @@ -1116,6 +1124,14 @@ read_shader_metadata(struct blob_reader *metadata,
>   
>      glprog->Parameters = _mesa_new_parameter_list();
>      read_shader_parameters(metadata, glprog->Parameters);
> +
> +   glprog->serialized_nir_size = (size_t)blob_read_uint32(metadata);
> +   if (glprog->serialized_nir_size > 0) {
> +      glprog->serialized_nir =
> +         (uint8_t*)ralloc_size(glprog, glprog->serialized_nir_size);
> +      blob_copy_bytes(metadata, glprog->serialized_nir,
> +                      glprog->serialized_nir_size);
> +   }
>   }
>   
>   static void
> 


More information about the mesa-dev mailing list