zink: add has_edgeflags flag to zink_shader and zink_gfx_program

Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21238>
This commit is contained in:
antonino 2023-02-21 10:27:54 +01:00 committed by Marge Bot
parent 24535ffb3d
commit a93685ef55
3 changed files with 8 additions and 0 deletions

View file

@ -4330,6 +4330,9 @@ zink_shader_create(struct zink_screen *screen, struct nir_shader *nir,
struct zink_shader *ret = rzalloc(NULL, struct zink_shader); struct zink_shader *ret = rzalloc(NULL, struct zink_shader);
bool have_psiz = false; bool have_psiz = false;
ret->has_edgeflags = nir->info.stage == MESA_SHADER_VERTEX &&
nir_find_variable_with_location(nir, nir_var_shader_out, VARYING_SLOT_EDGE);
ret->sinfo.have_vulkan_memory_model = screen->info.have_KHR_vulkan_memory_model; ret->sinfo.have_vulkan_memory_model = screen->info.have_KHR_vulkan_memory_model;
util_queue_fence_init(&ret->precompile.fence); util_queue_fence_init(&ret->precompile.fence);

View file

@ -367,6 +367,7 @@ update_gfx_shader_modules(struct zink_context *ctx,
bool default_variants = true; bool default_variants = true;
assert(prog->modules[MESA_SHADER_VERTEX]); assert(prog->modules[MESA_SHADER_VERTEX]);
uint32_t variant_hash = prog->last_variant_hash; uint32_t variant_hash = prog->last_variant_hash;
prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags;
for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) { for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) {
if (!(mask & BITFIELD_BIT(i))) if (!(mask & BITFIELD_BIT(i)))
continue; continue;
@ -1034,6 +1035,8 @@ zink_create_gfx_program(struct zink_context *ctx,
prog->gfx_hash = gfx_hash; prog->gfx_hash = gfx_hash;
prog->base.removed = true; prog->base.removed = true;
prog->has_edgeflags = prog->shaders[MESA_SHADER_VERTEX] &&
prog->shaders[MESA_SHADER_VERTEX]->has_edgeflags;
for (int i = 0; i < ZINK_GFX_SHADER_COUNT; ++i) { for (int i = 0; i < ZINK_GFX_SHADER_COUNT; ++i) {
util_dynarray_init(&prog->shader_cache[i][0][0], prog); util_dynarray_init(&prog->shader_cache[i][0][0], prog);
util_dynarray_init(&prog->shader_cache[i][0][1], prog); util_dynarray_init(&prog->shader_cache[i][0][1], prog);

View file

@ -736,6 +736,7 @@ struct zink_shader {
bool bindless; bool bindless;
bool can_inline; bool can_inline;
bool has_uniforms; bool has_uniforms;
bool has_edgeflags;
struct spirv_shader *spirv; struct spirv_shader *spirv;
struct { struct {
@ -1022,6 +1023,7 @@ struct zink_gfx_program {
unsigned inlined_variant_count[ZINK_GFX_SHADER_COUNT]; unsigned inlined_variant_count[ZINK_GFX_SHADER_COUNT];
uint32_t default_variant_hash; uint32_t default_variant_hash;
uint8_t inline_variants; //which stages are using inlined uniforms uint8_t inline_variants; //which stages are using inlined uniforms
bool has_edgeflags;
/* separable */ /* separable */
struct zink_gfx_program *full_prog; struct zink_gfx_program *full_prog;