glsl: store subroutine remap table in shader cache
V2: use new helpers to store/restore table entries. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:

committed by
Timothy Arceri

parent
787535fb11
commit
6761259958
@@ -446,8 +446,8 @@ write_uniform_remap_table_entry(struct blob *metadata,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
write_uniform_remap_table(struct blob *metadata,
|
write_uniform_remap_tables(struct blob *metadata,
|
||||||
struct gl_shader_program *prog)
|
struct gl_shader_program *prog)
|
||||||
{
|
{
|
||||||
blob_write_uint32(metadata, prog->NumUniformRemapTable);
|
blob_write_uint32(metadata, prog->NumUniformRemapTable);
|
||||||
|
|
||||||
@@ -455,6 +455,20 @@ write_uniform_remap_table(struct blob *metadata,
|
|||||||
write_uniform_remap_table_entry(metadata, prog->data->UniformStorage,
|
write_uniform_remap_table_entry(metadata, prog->data->UniformStorage,
|
||||||
prog->UniformRemapTable[i]);
|
prog->UniformRemapTable[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||||
|
struct gl_linked_shader *sh = prog->_LinkedShaders[i];
|
||||||
|
if (sh) {
|
||||||
|
struct gl_program *glprog = sh->Program;
|
||||||
|
blob_write_uint32(metadata, glprog->sh.NumSubroutineUniformRemapTable);
|
||||||
|
|
||||||
|
for (unsigned j = 0; j < glprog->sh.NumSubroutineUniformRemapTable; j++) {
|
||||||
|
write_uniform_remap_table_entry(metadata,
|
||||||
|
prog->data->UniformStorage,
|
||||||
|
glprog->sh.SubroutineUniformRemapTable[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -474,8 +488,8 @@ read_uniform_remap_table_entry(struct blob_reader *metadata,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_uniform_remap_table(struct blob_reader *metadata,
|
read_uniform_remap_tables(struct blob_reader *metadata,
|
||||||
struct gl_shader_program *prog)
|
struct gl_shader_program *prog)
|
||||||
{
|
{
|
||||||
prog->NumUniformRemapTable = blob_read_uint32(metadata);
|
prog->NumUniformRemapTable = blob_read_uint32(metadata);
|
||||||
|
|
||||||
@@ -489,6 +503,28 @@ read_uniform_remap_table(struct blob_reader *metadata,
|
|||||||
read_uniform_remap_table_entry(metadata, prog->data->UniformStorage,
|
read_uniform_remap_table_entry(metadata, prog->data->UniformStorage,
|
||||||
&prog->UniformRemapTable[i], type);
|
&prog->UniformRemapTable[i], type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
|
||||||
|
struct gl_linked_shader *sh = prog->_LinkedShaders[i];
|
||||||
|
if (sh) {
|
||||||
|
struct gl_program *glprog = sh->Program;
|
||||||
|
glprog->sh.NumSubroutineUniformRemapTable = blob_read_uint32(metadata);
|
||||||
|
|
||||||
|
glprog->sh.SubroutineUniformRemapTable =
|
||||||
|
rzalloc_array(glprog, struct gl_uniform_storage *,
|
||||||
|
glprog->sh.NumSubroutineUniformRemapTable);
|
||||||
|
|
||||||
|
for (unsigned j = 0; j < glprog->sh.NumSubroutineUniformRemapTable; j++) {
|
||||||
|
enum uniform_remap_type type =
|
||||||
|
(enum uniform_remap_type) blob_read_uint32(metadata);
|
||||||
|
|
||||||
|
read_uniform_remap_table_entry(metadata,
|
||||||
|
prog->data->UniformStorage,
|
||||||
|
&glprog->sh.SubroutineUniformRemapTable[j],
|
||||||
|
type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct whte_closure
|
struct whte_closure
|
||||||
@@ -918,7 +954,7 @@ shader_cache_write_program_metadata(struct gl_context *ctx,
|
|||||||
|
|
||||||
write_xfb(metadata, prog);
|
write_xfb(metadata, prog);
|
||||||
|
|
||||||
write_uniform_remap_table(metadata, prog);
|
write_uniform_remap_tables(metadata, prog);
|
||||||
|
|
||||||
write_subroutines(metadata, prog);
|
write_subroutines(metadata, prog);
|
||||||
|
|
||||||
@@ -1027,7 +1063,7 @@ shader_cache_read_program_metadata(struct gl_context *ctx,
|
|||||||
|
|
||||||
read_xfb(&metadata, prog);
|
read_xfb(&metadata, prog);
|
||||||
|
|
||||||
read_uniform_remap_table(&metadata, prog);
|
read_uniform_remap_tables(&metadata, prog);
|
||||||
|
|
||||||
read_subroutines(&metadata, prog);
|
read_subroutines(&metadata, prog);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user