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