Mesa (master): zink: add shader key for vs shaders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jan 29 15:46:06 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue Aug 18 15:05:15 2020 -0400

zink: add shader key for vs shaders

we're reusing these for tes/gs for now too

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

---

 src/gallium/drivers/zink/zink_program.c     | 28 +++++++++++++++-------------
 src/gallium/drivers/zink/zink_shader_keys.h | 13 +++++++++++++
 2 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index bf45e0ad518..85ded82b0f0 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -169,6 +169,17 @@ create_pipeline_layout(VkDevice dev, VkDescriptorSetLayout dsl)
 }
 
  
+static void
+shader_key_vs_gen(struct zink_context *ctx, struct zink_shader *zs,
+                  struct zink_shader *shaders[ZINK_SHADER_COUNT], struct zink_shader_key *key)
+{
+   struct zink_vs_key *vs_key = &key->key.vs;
+   key->size = sizeof(struct zink_vs_key);
+
+   vs_key->shader_id = zs->shader_id;
+   vs_key->clip_halfz = ctx->rast_state->base.clip_halfz;
+}
+
 static void
 shader_key_fs_gen(struct zink_context *ctx, struct zink_shader *zs,
                   struct zink_shader *shaders[ZINK_SHADER_COUNT], struct zink_shader_key *key)
@@ -199,25 +210,16 @@ shader_key_tcs_gen(struct zink_context *ctx, struct zink_shader *zs,
    tcs_key->vs_outputs_written = shaders[PIPE_SHADER_VERTEX]->nir->info.outputs_written;
 }
 
-static void
-shader_key_dummy_gen(struct zink_context *ctx, struct zink_shader *zs,
-                     struct zink_shader *shaders[ZINK_SHADER_COUNT], struct zink_shader_key *key)
-{
-   struct zink_fs_key *fs_key = &key->key.fs;
-   key->size = sizeof(uint32_t);
- 
-   fs_key->shader_id = zs->shader_id;
-}
-
 typedef void (*zink_shader_key_gen)(struct zink_context *ctx, struct zink_shader *zs,
                                     struct zink_shader *shaders[ZINK_SHADER_COUNT],
                                     struct zink_shader_key *key);
 static zink_shader_key_gen shader_key_vtbl[] =
 {
-   [MESA_SHADER_VERTEX] = shader_key_dummy_gen,
+   [MESA_SHADER_VERTEX] = shader_key_vs_gen,
    [MESA_SHADER_TESS_CTRL] = shader_key_tcs_gen,
-   [MESA_SHADER_TESS_EVAL] = shader_key_dummy_gen,
-   [MESA_SHADER_GEOMETRY] = shader_key_dummy_gen,
+   /* reusing vs key for now since we're only using clip_halfz */
+   [MESA_SHADER_TESS_EVAL] = shader_key_vs_gen,
+   [MESA_SHADER_GEOMETRY] = shader_key_vs_gen,
    [MESA_SHADER_FRAGMENT] = shader_key_fs_gen,
 };
 
diff --git a/src/gallium/drivers/zink/zink_shader_keys.h b/src/gallium/drivers/zink/zink_shader_keys.h
index 962651f1e6d..873a0e815e7 100644
--- a/src/gallium/drivers/zink/zink_shader_keys.h
+++ b/src/gallium/drivers/zink/zink_shader_keys.h
@@ -26,6 +26,11 @@
 #ifndef ZINK_SHADER_KEYS_H
 # define ZINK_SHADER_KEYS_H
 
+struct zink_vs_key {
+   unsigned shader_id;
+   bool clip_halfz;
+};
+
 struct zink_fs_key {
    unsigned shader_id;
    //bool flat_shade;
@@ -45,6 +50,8 @@ struct zink_tcs_key {
  */
 struct zink_shader_key {
    union {
+      /* reuse vs key for now with tes/gs since we only use clip_halfz */
+      struct zink_vs_key vs;
       struct zink_fs_key fs;
       struct zink_tcs_key tcs;
    } key;
@@ -57,6 +64,12 @@ zink_fs_key(const struct zink_shader_key *key)
    return &key->key.fs;
 }
 
+static inline const struct zink_vs_key *
+zink_vs_key(const struct zink_shader_key *key)
+{
+   return &key->key.vs;
+}
+
 
 
 #endif



More information about the mesa-commit mailing list