mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-31 09:50:08 +01:00
freedreno/a4xx: fix fragcoord.z + fragdepth
It seems like disabling earlyz on a4xx also, by defaults, disables fragcoord.z to the FS. For frag shaders that both read fragcoord(.z) and write fragdepth, we need to set some extra bits to prevent a lockup. This lets us get rid of the hack of disabling fragcoord.z (which prevented 0ad from lockups, but resulted in rendering corruption). Also fixes fbo-depth-sample-compare. Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
parent
cad0920d11
commit
e677b3047b
2 changed files with 5 additions and 5 deletions
|
|
@ -529,14 +529,16 @@ fd4_emit_state(struct fd_context *ctx, struct fd_ringbuffer *ring,
|
|||
|
||||
OUT_PKT0(ring, REG_A4XX_RB_DEPTH_CONTROL, 1);
|
||||
OUT_RING(ring, zsa->rb_depth_control |
|
||||
COND(fragz, A4XX_RB_DEPTH_CONTROL_EARLY_Z_DISABLE));
|
||||
COND(fragz, A4XX_RB_DEPTH_CONTROL_EARLY_Z_DISABLE) |
|
||||
COND(fragz && fp->frag_coord, A4XX_RB_DEPTH_CONTROL_FORCE_FRAGZ_TO_FS));
|
||||
|
||||
/* maybe this register/bitfield needs a better name.. this
|
||||
* appears to be just disabling early-z
|
||||
*/
|
||||
OUT_PKT0(ring, REG_A4XX_GRAS_ALPHA_CONTROL, 1);
|
||||
OUT_RING(ring, zsa->gras_alpha_control |
|
||||
COND(fragz, A4XX_GRAS_ALPHA_CONTROL_ALPHA_TEST_ENABLE));
|
||||
COND(fragz, A4XX_GRAS_ALPHA_CONTROL_ALPHA_TEST_ENABLE) |
|
||||
COND(fragz && fp->frag_coord, A4XX_GRAS_ALPHA_CONTROL_FORCE_FRAGZ_TO_FS));
|
||||
}
|
||||
|
||||
if (dirty & FD_DIRTY_RASTERIZER) {
|
||||
|
|
|
|||
|
|
@ -420,9 +420,7 @@ fd4_program_emit(struct fd_ringbuffer *ring, struct fd4_emit *emit,
|
|||
COND(s[FS].v->frag_face, A4XX_RB_RENDER_CONTROL2_FACENESS) |
|
||||
COND(s[FS].v->frag_coord, A4XX_RB_RENDER_CONTROL2_XCOORD |
|
||||
A4XX_RB_RENDER_CONTROL2_YCOORD |
|
||||
// TODO enabling gl_FragCoord.z is causing lockups on 0ad (but seems
|
||||
// to work everywhere else).
|
||||
// A4XX_RB_RENDER_CONTROL2_ZCOORD |
|
||||
A4XX_RB_RENDER_CONTROL2_ZCOORD |
|
||||
A4XX_RB_RENDER_CONTROL2_WCOORD));
|
||||
|
||||
OUT_PKT0(ring, REG_A4XX_RB_FS_OUTPUT_REG, 1);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue