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 <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4083>
This commit is contained in:
Boris Brezillon 2020-03-05 17:24:39 +01:00
parent 24db276d11
commit a0402f7960
3 changed files with 5 additions and 2 deletions

View file

@ -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]);

View file

@ -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);

View file

@ -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);