Mesa (main): ir3: Add functions to serialize variants
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri May 13 17:52:17 UTC 2022
Module: Mesa
Branch: main
Commit: c7a62936357ec6166c8aae9fe16996e56baf51b7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7a62936357ec6166c8aae9fe16996e56baf51b7
Author: Connor Abbott <cwabbott0 at gmail.com>
Date: Mon Apr 25 12:11:17 2022 +0200
ir3: Add functions to serialize variants
This will be used by turnip to create free-floating variant objects that
integrate into the Vulkan cache system.
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16147>
---
src/freedreno/ir3/ir3_compiler.h | 8 +++++--
src/freedreno/ir3/ir3_disk_cache.c | 49 ++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/src/freedreno/ir3/ir3_compiler.h b/src/freedreno/ir3/ir3_compiler.h
index 0bc300f92a1..65239119ac6 100644
--- a/src/freedreno/ir3/ir3_compiler.h
+++ b/src/freedreno/ir3/ir3_compiler.h
@@ -208,9 +208,13 @@ struct ir3_compiler *ir3_compiler_create(struct fd_device *dev,
void ir3_disk_cache_init(struct ir3_compiler *compiler);
void ir3_disk_cache_init_shader_key(struct ir3_compiler *compiler,
struct ir3_shader *shader);
-bool ir3_disk_cache_retrieve(struct ir3_compiler *compiler,
+struct ir3_shader_variant *ir3_retrieve_variant(struct blob_reader *blob,
+ struct ir3_compiler *compiler,
+ void *mem_ctx);
+void ir3_store_variant(struct blob *blob, struct ir3_shader_variant *v);
+bool ir3_disk_cache_retrieve(struct ir3_shader *shader,
struct ir3_shader_variant *v);
-void ir3_disk_cache_store(struct ir3_compiler *compiler,
+void ir3_disk_cache_store(struct ir3_shader *shader,
struct ir3_shader_variant *v);
const nir_shader_compiler_options *
diff --git a/src/freedreno/ir3/ir3_disk_cache.c b/src/freedreno/ir3/ir3_disk_cache.c
index 332e45e249f..9dd6fbc6987 100644
--- a/src/freedreno/ir3/ir3_disk_cache.c
+++ b/src/freedreno/ir3/ir3_disk_cache.c
@@ -163,6 +163,55 @@ store_variant(struct blob *blob, struct ir3_shader_variant *v)
}
}
+struct ir3_shader_variant *
+ir3_retrieve_variant(struct blob_reader *blob, struct ir3_compiler *compiler,
+ void *mem_ctx)
+{
+ struct ir3_shader_variant *v = rzalloc_size(mem_ctx, sizeof(*v));
+
+ v->id = 0;
+ v->compiler = compiler;
+ v->binning_pass = false;
+ v->nonbinning = NULL;
+ v->binning = NULL;
+ blob_copy_bytes(blob, &v->key, sizeof(v->key));
+ v->type = blob_read_uint32(blob);
+ v->mergedregs = blob_read_uint32(blob);
+ v->const_state = rzalloc_size(v, sizeof(*v->const_state));
+
+ retrieve_variant(blob, v);
+
+ if (v->type == MESA_SHADER_VERTEX && ir3_has_binning_vs(&v->key)) {
+ v->binning = rzalloc_size(v, sizeof(*v->binning));
+ v->binning->id = 0;
+ v->binning->compiler = compiler;
+ v->binning->binning_pass = true;
+ v->binning->nonbinning = v;
+ v->binning->key = v->key;
+ v->binning->type = MESA_SHADER_VERTEX;
+ v->binning->mergedregs = v->mergedregs;
+ v->binning->const_state = v->const_state;
+
+ retrieve_variant(blob, v->binning);
+ }
+
+ return v;
+}
+
+void
+ir3_store_variant(struct blob *blob, struct ir3_shader_variant *v)
+{
+ blob_write_bytes(blob, &v->key, sizeof(v->key));
+ blob_write_uint32(blob, v->type);
+ blob_write_uint32(blob, v->mergedregs);
+
+ store_variant(blob, v);
+
+ if (v->type == MESA_SHADER_VERTEX && ir3_has_binning_vs(&v->key)) {
+ store_variant(blob, v->binning);
+ }
+}
+
bool
ir3_disk_cache_retrieve(struct ir3_shader *shader,
struct ir3_shader_variant *v)
More information about the mesa-commit
mailing list