From 03971d8ddcf1344d4080f3be78de04558a05a618 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 18 Aug 2020 15:05:15 -0400 Subject: [PATCH] zink: add shader key for vs shaders we're reusing these for tes/gs for now too Reviewed-by: Erik Faye-Lund Part-of: --- 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