freedreno: Handle full blit discards by invalidating the resource.
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.