zink: move tess/geom shader info to vs shader key

now that there exists a shader key for vertex stages, we can stop modifying
the zink_shader values and instead use this as a more reliable method of detecting
the state

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
2021-01-23 10:42:48 -05:00
committed by Marge Bot
parent 9b8c121917
commit 26b009b054
4 changed files with 17 additions and 19 deletions

View File

@@ -168,7 +168,6 @@ create_pipeline_layout(VkDevice dev, VkDescriptorSetLayout dsl)
return layout;
}
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)
@@ -178,6 +177,19 @@ shader_key_vs_gen(struct zink_context *ctx, struct zink_shader *zs,
vs_key->shader_id = zs->shader_id;
vs_key->clip_halfz = ctx->rast_state->base.clip_halfz;
switch (zs->nir->info.stage) {
case MESA_SHADER_VERTEX:
vs_key->last_vertex_stage = !shaders[PIPE_SHADER_TESS_EVAL] && !shaders[PIPE_SHADER_GEOMETRY];
break;
case MESA_SHADER_TESS_EVAL:
vs_key->last_vertex_stage = !shaders[PIPE_SHADER_GEOMETRY];
break;
case MESA_SHADER_GEOMETRY:
vs_key->last_vertex_stage = true;
break;
default:
unreachable("impossible case");
}
}
static void
@@ -332,8 +344,6 @@ update_shader_modules(struct zink_context *ctx, struct zink_shader *stages[ZINK_
enum pipe_shader_type type = pipe_shader_type_from_mesa(i);
if (dirty[i]) {
struct zink_shader_module *zm;
dirty[i]->has_geometry_shader = dirty[MESA_SHADER_GEOMETRY] || stages[PIPE_SHADER_GEOMETRY];
dirty[i]->has_tess_shader = dirty[MESA_SHADER_TESS_EVAL] || stages[PIPE_SHADER_TESS_EVAL];
zm = get_shader_module_for_stage(ctx, dirty[i], prog);
zink_shader_module_reference(zink_screen(ctx->base.screen), &prog->modules[type], zm);
/* we probably need a new pipeline when we switch shader modules */