mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
panfrost: Set the MALI_WRITES_{Z,S} flags when needed
In order to make Z/S writes from fragment shaders effective, we need
to set the MALI_WRITES_{Z,S} flags when the shader has a
FRAG_RESULT_{DEPTH,STENCIL} output variable.
Now that shaders can change the S value, we can expose the
STENCIL_EXPORT cap.
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/3697>
This commit is contained in:
parent
8ed94d38b4
commit
38c20696a5
4 changed files with 17 additions and 1 deletions
|
|
@ -114,6 +114,10 @@ panfrost_shader_compile(
|
|||
case MESA_SHADER_FRAGMENT:
|
||||
meta->attribute_count = 0;
|
||||
meta->varying_count = util_bitcount64(s->info.inputs_read);
|
||||
if (s->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_DEPTH))
|
||||
state->writes_depth = true;
|
||||
if (s->info.outputs_written & BITFIELD64_BIT(FRAG_RESULT_STENCIL))
|
||||
state->writes_stencil = true;
|
||||
break;
|
||||
case MESA_SHADER_COMPUTE:
|
||||
/* TODO: images */
|
||||
|
|
|
|||
|
|
@ -961,7 +961,14 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
|
|||
/* Depending on whether it's legal to in the given shader, we
|
||||
* try to enable early-z testing (or forward-pixel kill?) */
|
||||
|
||||
SET_BIT(ctx->fragment_shader_core.midgard1.flags_lo, MALI_EARLY_Z, !variant->can_discard);
|
||||
SET_BIT(ctx->fragment_shader_core.midgard1.flags_lo, MALI_EARLY_Z,
|
||||
!variant->can_discard && !variant->writes_depth);
|
||||
|
||||
/* Add the writes Z/S flags if needed. */
|
||||
SET_BIT(ctx->fragment_shader_core.midgard1.flags_lo,
|
||||
MALI_WRITES_Z, variant->writes_depth);
|
||||
SET_BIT(ctx->fragment_shader_core.midgard1.flags_hi,
|
||||
MALI_WRITES_S, variant->writes_stencil);
|
||||
|
||||
/* Any time texturing is used, derivatives are implicitly
|
||||
* calculated, so we need to enable helper invocations */
|
||||
|
|
|
|||
|
|
@ -210,6 +210,8 @@ struct panfrost_shader_state {
|
|||
int uniform_count;
|
||||
bool can_discard;
|
||||
bool writes_point_size;
|
||||
bool writes_depth;
|
||||
bool writes_stencil;
|
||||
bool reads_point_coord;
|
||||
bool reads_face;
|
||||
bool reads_frag_coord;
|
||||
|
|
|
|||
|
|
@ -245,6 +245,9 @@ panfrost_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||
return (int)(system_memory >> 20);
|
||||
}
|
||||
|
||||
case PIPE_CAP_SHADER_STENCIL_EXPORT:
|
||||
return 1;
|
||||
|
||||
case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
|
||||
return 4;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue