Mesa (main): zink: keep a mask of stages present in a gfx program
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 7 03:30:53 UTC 2021
Module: Mesa
Branch: main
Commit: e551f2c55741ae9ff4f042f5d3f585db7fe113b4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e551f2c55741ae9ff4f042f5d3f585db7fe113b4
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Fri May 14 18:15:42 2021 -0400
zink: keep a mask of stages present in a gfx program
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11740>
---
src/gallium/drivers/zink/zink_program.c | 12 +++++++-----
src/gallium/drivers/zink/zink_program.h | 2 ++
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index ecb2aa6ba0f..798b53488e6 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -427,20 +427,22 @@ zink_create_gfx_program(struct zink_context *ctx,
pipe_reference_init(&prog->base.reference, 1);
for (int i = 0; i < ZINK_SHADER_COUNT; ++i) {
- if (stages[i] || prog->shaders[i])
+ if (stages[i]) {
_mesa_hash_table_init(&prog->base.shader_cache[i], prog, keybox_hash, keybox_equals);
- prog->shaders[i] = stages[i];
- /* always force shader creation during init */
- ctx->dirty_shader_stages |= BITFIELD_BIT(i);
+ prog->shaders[i] = stages[i];
+ prog->stages_present |= BITFIELD_BIT(i);
+ }
}
if (stages[PIPE_SHADER_TESS_EVAL] && !stages[PIPE_SHADER_TESS_CTRL]) {
prog->shaders[PIPE_SHADER_TESS_EVAL]->generated =
prog->shaders[PIPE_SHADER_TESS_CTRL] =
zink_shader_tcs_create(ctx, stages[PIPE_SHADER_VERTEX]);
_mesa_hash_table_init(&prog->base.shader_cache[PIPE_SHADER_TESS_CTRL], prog, keybox_hash, keybox_equals);
- ctx->dirty_shader_stages |= BITFIELD_BIT(PIPE_SHADER_TESS_CTRL);
+ prog->stages_present |= BITFIELD_BIT(PIPE_SHADER_TESS_CTRL);
}
+ /* always force shader creation during init */
+ ctx->dirty_shader_stages |= prog->stages_present;
assign_io(prog, prog->shaders);
update_shader_modules(ctx, prog->shaders, prog, false);
diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h
index 707a93bebe1..7548b45f213 100644
--- a/src/gallium/drivers/zink/zink_program.h
+++ b/src/gallium/drivers/zink/zink_program.h
@@ -89,7 +89,9 @@ struct zink_program {
struct zink_gfx_program {
struct zink_program base;
+ uint32_t stages_present; //mask of stages present in this program
struct nir_shader *nir[ZINK_SHADER_COUNT];
+
struct zink_shader_module *modules[ZINK_SHADER_COUNT]; // compute stage doesn't belong here
struct zink_shader_module *default_variants[ZINK_SHADER_COUNT][2]; //[default, no streamout]
More information about the mesa-commit
mailing list