From 8b287c3f925121d9389df9846024d9c350cbb235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 4 Nov 2021 09:56:49 -0400 Subject: [PATCH] gallium/u_blitter: work around broken sample shading in llvmpipe and zink Part-of: --- src/gallium/auxiliary/util/u_blitter.c | 7 +++++++ src/gallium/auxiliary/util/u_blitter.h | 1 + src/gallium/drivers/llvmpipe/lp_context.c | 1 + src/gallium/drivers/zink/zink_context.c | 2 ++ 4 files changed, 11 insertions(+) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index f23474325e1..ddf0341c935 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -349,6 +349,13 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe) return &ctx->base; } +void util_blitter_sample_shading_force_off(struct blitter_context *blitter) +{ + struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter; + + ctx->has_sample_shading = false; +} + void *util_blitter_get_noop_blend_state(struct blitter_context *blitter) { struct blitter_context_priv *ctx = (struct blitter_context_priv*)blitter; diff --git a/src/gallium/auxiliary/util/u_blitter.h b/src/gallium/auxiliary/util/u_blitter.h index 70157e5df4b..68424acbf85 100644 --- a/src/gallium/auxiliary/util/u_blitter.h +++ b/src/gallium/auxiliary/util/u_blitter.h @@ -154,6 +154,7 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe); */ void util_blitter_destroy(struct blitter_context *blitter); +void util_blitter_sample_shading_force_off(struct blitter_context *blitter); void util_blitter_cache_all_shaders(struct blitter_context *blitter); void *util_blitter_get_noop_blend_state(struct blitter_context *blitter); void *util_blitter_get_noop_dsa_state(struct blitter_context *blitter); diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c index 35f3618e8d7..e7dc5457e8e 100644 --- a/src/gallium/drivers/llvmpipe/lp_context.c +++ b/src/gallium/drivers/llvmpipe/lp_context.c @@ -268,6 +268,7 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, goto fail; } + util_blitter_sample_shading_force_off(llvmpipe->blitter); /* must be done before installing Draw stages */ util_blitter_cache_all_shaders(llvmpipe->blitter); diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 48d701a139e..2edcb1907c0 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -4153,6 +4153,8 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) if (!ctx->blitter) goto fail; + util_blitter_sample_shading_force_off(ctx->blitter); + ctx->gfx_pipeline_state.shader_keys.last_vertex.key.vs_base.last_vertex_stage = true; ctx->last_vertex_stage_dirty = true; ctx->gfx_pipeline_state.shader_keys.key[PIPE_SHADER_VERTEX].size = sizeof(struct zink_vs_key_base);