freedreno: Work around UBWC flakiness.

In trying to track down the new failure in #2670, I found that I could get
the flaky test set down to 4 tests, and dropping any remaining test
wouldn't trigger the failure (a bad 8x4 block in the middle of
dEQP-GLES3.functional.fbo.msaa.4_samples.r16f's render target).  Disabling
gmem or bypass didn't help, and adding lots of CCU flushing didn't help.
What did help was disabling blitting, or this memset to initialize the
UBWC area after we (presumably) pull a BO out of the BO cache.  My guess
is that the 2D blitter can't handle some rare set of state in the flags
buffer and emits some garbage.

I've run 8 gles3 and 7 gles31 runs with this branch now so hopefully I've got the4 right set of flakes marked for removal.

Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2670
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4290>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4290>
This commit is contained in:
Eric Anholt
2020-03-23 14:55:50 -07:00
committed by Marge Bot
parent d0b3ccb060
commit 92afe94d28
2 changed files with 13 additions and 29 deletions

View File

@@ -22,32 +22,6 @@ dEQP-GLES31.functional.ssbo.layout.random.all_shared_buffer.48
# Flakes reported more than once during Jan-Feb 2020
dEQP-GLES31.functional.layout_binding.ssbo.fragment_binding_array
dEQP-GLES31.functional.stencil_texturing.format.depth24_stencil8_2d
dEQP-GLES31.functional.stencil_texturing.format.stencil_index8_2d
dEQP-GLES31.functional.stencil_texturing.misc.compare_mode_effect
dEQP-GLES31.functional.texture.border_clamp.formats.stencil_index8.nearest_size_npot
dEQP-GLES31.functional.texture.border_clamp.formats.stencil_index8.nearest_size_pot
dEQP-GLES31.functional.texture.border_clamp.sampler.uint_stencil
dEQP-GLES31.functional.texture.specification.texstorage3d.format.r16f_cube_array
dEQP-GLES31.functional.texture.specification.texsubimage3d_pbo.r16ui_cube_array
dEQP-GLES3.functional.buffer.write.recreate_store.random_1
dEQP-GLES3.functional.draw.draw_elements.line_loop.instanced_attributes
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_r11f_g11f_b10f
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_r16f
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_r32f
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_r8
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_rgb5_a1
dEQP-GLES3.functional.fbo.blit.conversion.r16f_to_srgb8_alpha8
dEQP-GLES3.functional.fbo.blit.conversion.r16i_to_rg16i
dEQP-GLES3.functional.fbo.blit.conversion.r16ui_to_r8ui
dEQP-GLES3.functional.fbo.blit.conversion.r32f_to_r16f
dEQP-GLES3.functional.fbo.blit.conversion.r8_to_r16f
dEQP-GLES3.functional.fbo.blit.conversion.rgb5_a1_to_r16f
dEQP-GLES3.functional.fbo.blit.conversion.rgba32f_to_r16f
dEQP-GLES3.functional.fbo.blit.conversion.rgba32i_to_r16i
dEQP-GLES3.functional.fbo.blit.conversion.rgba32ui_to_r16ui
dEQP-GLES3.functional.fbo.msaa.2_samples.stencil_index8
dEQP-GLES3.functional.fbo.msaa.4_samples.r16f
dEQP-GLES3.functional.fragment_out.random.0
dEQP-GLES3.functional.fragment_out.random.1
dEQP-GLES3.functional.fragment_out.random.12
@@ -84,9 +58,6 @@ dEQP-GLES3.functional.fragment_out.random.91
dEQP-GLES3.functional.fragment_out.random.93
dEQP-GLES3.functional.fragment_out.random.95
dEQP-GLES3.functional.fragment_out.random.96
dEQP-GLES3.functional.texture.format.sized.2d_array.r16ui_npot
dEQP-GLES3.functional.texture.specification.basic_teximage3d.r16f_2d_array
dEQP-GLES3.functional.texture.specification.texsubimage3d_pbo.r16i_2d_array
dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.highp_mat2x3
dEQP-GLES3.functional.transform_feedback.array_element.interleaved.triangles.lowp_mat2x4
dEQP-GLES3.functional.transform_feedback.array_element.separate.triangles.lowp_mat2x4

View File

@@ -133,6 +133,19 @@ realloc_bo(struct fd_resource *rsc, uint32_t size)
rsc->bo = fd_bo_new(screen->dev, size, flags, "%ux%ux%u@%u:%x",
prsc->width0, prsc->height0, prsc->depth0, rsc->layout.cpp, prsc->bind);
/* Zero out the UBWC area on allocation. This fixes intermittent failures
* with UBWC, which I suspect are due to the HW having a hard time
* interpreting arbitrary values populating the flags buffer when the BO
* was recycled through the bo cache (instead of fresh allocations from
* the kernel, which are zeroed). sleep(1) in this spot didn't work
* around the issue, but any memset value seems to.
*/
if (rsc->layout.ubwc) {
void *buf = fd_bo_map(rsc->bo);
memset(buf, 0, rsc->layout.slices[0].offset);
}
rsc->seqno = p_atomic_inc_return(&screen->rsc_seqno);
util_range_set_empty(&rsc->valid_buffer_range);
fd_bc_invalidate_resource(rsc, true);