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:
parent
079f348a5c
commit
03971d8ddc
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue