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@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8682>
This commit is contained in:
Mike Blumenkrantz 2020-08-18 15:05:15 -04:00 committed by Marge Bot
parent 079f348a5c
commit 03971d8ddc
2 changed files with 28 additions and 13 deletions

View File

@ -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,
};

View File

@ -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