Mesa (master): zink: add extension loading framework for spirv builder

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 31 07:04:42 UTC 2020


Module: Mesa
Branch: master
Commit: f3509c07663bf72da43d3b47c391acd75d33430a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f3509c07663bf72da43d3b47c391acd75d33430a

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Fri Jul 17 09:50:35 2020 -0400

zink: add extension loading framework for spirv builder

Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5969>

---

 src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 12 ++++++++++++
 src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h |  4 ++++
 2 files changed, 16 insertions(+)

diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c
index 530036d3d70..1b7c676486a 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c
+++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c
@@ -96,6 +96,16 @@ spirv_builder_emit_cap(struct spirv_builder *b, SpvCapability cap)
    spirv_buffer_emit_word(&b->capabilities, cap);
 }
 
+void
+spirv_builder_emit_extension(struct spirv_builder *b, const char *name)
+{
+   size_t pos = b->extensions.num_words;
+   spirv_buffer_prepare(&b->extensions, b->mem_ctx, 1);
+   spirv_buffer_emit_word(&b->extensions, SpvOpExtension);
+   int len = spirv_buffer_emit_string(&b->extensions, b->mem_ctx, name);
+   b->extensions.words[pos] |= (1 + len) << 16;
+}
+
 void
 spirv_builder_emit_source(struct spirv_builder *b, SpvSourceLanguage lang,
                           uint32_t version)
@@ -1106,6 +1116,7 @@ spirv_builder_get_num_words(struct spirv_builder *b)
    const size_t header_size = 5;
    return header_size +
           b->capabilities.num_words +
+          b->extensions.num_words +
           b->imports.num_words +
           b->memory_model.num_words +
           b->entry_points.num_words +
@@ -1131,6 +1142,7 @@ spirv_builder_get_words(struct spirv_builder *b, uint32_t *words,
 
    const struct spirv_buffer *buffers[] = {
       &b->capabilities,
+      &b->extensions,
       &b->imports,
       &b->memory_model,
       &b->entry_points,
diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h
index 7b870e94808..a1e9b6c655e 100644
--- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h
+++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.h
@@ -42,6 +42,7 @@ struct spirv_builder {
    void *mem_ctx;
 
    struct spirv_buffer capabilities;
+   struct spirv_buffer extensions;
    struct spirv_buffer imports;
    struct spirv_buffer memory_model;
    struct spirv_buffer entry_points;
@@ -66,6 +67,9 @@ spirv_builder_new_id(struct spirv_builder *b)
 void
 spirv_builder_emit_cap(struct spirv_builder *b, SpvCapability cap);
 
+void
+spirv_builder_emit_extension(struct spirv_builder *b, const char *ext);
+
 void
 spirv_builder_emit_source(struct spirv_builder *b, SpvSourceLanguage lang,
                           uint32_t version);



More information about the mesa-commit mailing list