mesa/st/glsl_to_tgsi:rename lifetime to register_live_range
[mesa.git] / src / mesa / state_tracker / st_shader_cache.c
index 8eccf7c9211454402f54b97d69dc71216c3d3f33..c82ce3eaa2d8dc32e199f196e7d68d4659929203 100644 (file)
@@ -74,6 +74,9 @@ static void
 st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog,
                         bool nir)
 {
+   if (prog->driver_cache_blob)
+      return;
+
    struct blob blob;
    blob_init(&blob);
 
@@ -84,6 +87,8 @@ st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog,
       blob_write_uint32(&blob, stvp->num_inputs);
       blob_write_bytes(&blob, stvp->index_to_input,
                        sizeof(stvp->index_to_input));
+      blob_write_bytes(&blob, stvp->input_to_index,
+                       sizeof(stvp->input_to_index));
       blob_write_bytes(&blob, stvp->result_to_output,
                        sizeof(stvp->result_to_output));
 
@@ -206,6 +211,8 @@ st_deserialise_ir_program(struct gl_context *ctx,
       stvp->num_inputs = blob_read_uint32(&blob_reader);
       blob_copy_bytes(&blob_reader, (uint8_t *) stvp->index_to_input,
                       sizeof(stvp->index_to_input));
+      blob_copy_bytes(&blob_reader, (uint8_t *) stvp->input_to_index,
+                      sizeof(stvp->input_to_index));
       blob_copy_bytes(&blob_reader, (uint8_t *) stvp->result_to_output,
                       sizeof(stvp->result_to_output));
 
@@ -215,6 +222,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          stvp->tgsi.type = PIPE_SHADER_IR_NIR;
          stvp->shader_program = shProg;
          stvp->tgsi.ir.nir = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = stvp->tgsi.ir.nir;
       } else {
          read_tgsi_from_cache(&blob_reader, &stvp->tgsi.tokens,
                               &stvp->num_tgsi_tokens);
@@ -237,6 +245,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          sttcp->tgsi.type = PIPE_SHADER_IR_NIR;
          sttcp->shader_program = shProg;
          sttcp->tgsi.ir.nir = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = sttcp->tgsi.ir.nir;
       } else {
          read_tgsi_from_cache(&blob_reader, &sttcp->tgsi.tokens,
                               &sttcp->num_tgsi_tokens);
@@ -259,6 +268,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          sttep->tgsi.type = PIPE_SHADER_IR_NIR;
          sttep->shader_program = shProg;
          sttep->tgsi.ir.nir = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = sttep->tgsi.ir.nir;
       } else {
          read_tgsi_from_cache(&blob_reader, &sttep->tgsi.tokens,
                               &sttep->num_tgsi_tokens);
@@ -281,6 +291,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          stgp->tgsi.type = PIPE_SHADER_IR_NIR;
          stgp->shader_program = shProg;
          stgp->tgsi.ir.nir = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = stgp->tgsi.ir.nir;
       } else {
          read_tgsi_from_cache(&blob_reader, &stgp->tgsi.tokens,
                               &stgp->num_tgsi_tokens);
@@ -300,6 +311,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          stfp->tgsi.type = PIPE_SHADER_IR_NIR;
          stfp->shader_program = shProg;
          stfp->tgsi.ir.nir = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = stfp->tgsi.ir.nir;
       } else {
          read_tgsi_from_cache(&blob_reader, &stfp->tgsi.tokens,
                               &stfp->num_tgsi_tokens);
@@ -319,6 +331,7 @@ st_deserialise_ir_program(struct gl_context *ctx,
          stcp->tgsi.ir_type = PIPE_SHADER_IR_NIR;
          stcp->shader_program = shProg;
          stcp->tgsi.prog = nir_deserialize(NULL, options, &blob_reader);
+         prog->nir = (nir_shader *) stcp->tgsi.prog;
       } else {
          read_tgsi_from_cache(&blob_reader,
                               (const struct tgsi_token**) &stcp->tgsi.prog,
@@ -401,6 +414,14 @@ st_serialise_tgsi_program(struct gl_context *ctx, struct gl_program *prog)
    st_serialise_ir_program(ctx, prog, false);
 }
 
+void
+st_serialise_tgsi_program_binary(struct gl_context *ctx,
+                                 struct gl_shader_program *shProg,
+                                 struct gl_program *prog)
+{
+   st_serialise_ir_program(ctx, prog, false);
+}
+
 void
 st_deserialise_tgsi_program(struct gl_context *ctx,
                             struct gl_shader_program *shProg,
@@ -408,3 +429,25 @@ st_deserialise_tgsi_program(struct gl_context *ctx,
 {
    st_deserialise_ir_program(ctx, shProg, prog, false);
 }
+
+void
+st_serialise_nir_program(struct gl_context *ctx, struct gl_program *prog)
+{
+   st_serialise_ir_program(ctx, prog, true);
+}
+
+void
+st_serialise_nir_program_binary(struct gl_context *ctx,
+                                struct gl_shader_program *shProg,
+                                struct gl_program *prog)
+{
+   st_serialise_ir_program(ctx, prog, true);
+}
+
+void
+st_deserialise_nir_program(struct gl_context *ctx,
+                           struct gl_shader_program *shProg,
+                           struct gl_program *prog)
+{
+   st_deserialise_ir_program(ctx, shProg, prog, true);
+}