Skip to content

freedreno: Handle full blit discards by invalidating the resource.

Emma Anholt requested to merge anholt/mesa:fd-blit-whole into main

The previous implementation had several issues:

  • It wasn't checking all the conditions necessary for "this blit updates the whole surface", like PIPE_MASK_Z but not S on a depth/stencil buffer.
  • It would reset the previous batchbuffer, even if that batch had side effects on other buffers.
  • The layering was painful to follow and made any recursion extra dangerous.

Now, we use a more conservative test (enough for the resource shadowing case) and just invalidate the buffer up front, which should have the right logic for discarding drawing to that resource.

I found I had to add fd_bc_flush_writer() to the end of fd_blitter_blit() -- a flush was happening at fb state restore time when the discard flag was set, and losing that flush breaks dEQP-GLES31.functional.stencil_texturing.format.stencil_index8_cube.

Merge request reports