From a0402f79601c69089cc3cefab51adab9c3331669 Mon Sep 17 00:00:00 2001 From: Boris Brezillon Date: Thu, 5 Mar 2020 17:24:39 +0100 Subject: [PATCH] panfrost: Assign primitive_size.pointer only if writes_point_size() returns true Checking vs->writes_point_size is not enough, as we might have a vertex shader writing point size, but a primitive that's not MALI_POINT. That currently works because emit_varying_descriptor() is called before the primitive_size.constant field is update, but let's make the logic more robust, just in case things are re-ordered at some point. Signed-off-by: Boris Brezillon Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_context.c | 2 +- src/gallium/drivers/panfrost/pan_context.h | 3 +++ src/gallium/drivers/panfrost/pan_varyings.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c index b72677b10bb..cc958469eda 100644 --- a/src/gallium/drivers/panfrost/pan_context.c +++ b/src/gallium/drivers/panfrost/pan_context.c @@ -353,7 +353,7 @@ panfrost_default_shader_backend(struct panfrost_context *ctx) memcpy(&ctx->fragment_shader_core, &shader, sizeof(shader)); } -static bool +bool panfrost_writes_point_size(struct panfrost_context *ctx) { assert(ctx->shader[PIPE_SHADER_VERTEX]); diff --git a/src/gallium/drivers/panfrost/pan_context.h b/src/gallium/drivers/panfrost/pan_context.h index bbef58292c6..1e3639d5016 100644 --- a/src/gallium/drivers/panfrost/pan_context.h +++ b/src/gallium/drivers/panfrost/pan_context.h @@ -278,6 +278,9 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags); void panfrost_invalidate_frame(struct panfrost_context *ctx); +bool +panfrost_writes_point_size(struct panfrost_context *ctx); + void panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data); diff --git a/src/gallium/drivers/panfrost/pan_varyings.c b/src/gallium/drivers/panfrost/pan_varyings.c index 0ec4d5633d2..63425491ab0 100644 --- a/src/gallium/drivers/panfrost/pan_varyings.c +++ b/src/gallium/drivers/panfrost/pan_varyings.c @@ -299,7 +299,7 @@ panfrost_emit_varying_descriptor( sizeof(float) * 4, vertex_count); - if (vs->writes_point_size) + if (panfrost_writes_point_size(ctx)) ctx->payloads[PIPE_SHADER_FRAGMENT].primitive_size.pointer = panfrost_emit_varyings(ctx, &varyings[gl_PointSize], 2, vertex_count); -- 2.30.2