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);
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));
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));
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);
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);
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);
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);
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);
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,
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,
{
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);
+}