Commit 2a78c96
csmartdalton
fix(renderer): Only apply barriers on drawGoup boundaries (#12347) 31aa875e47
We caught a bug where draws with multiple subpasses were being
interleaved together like this:
- drawA, subpass0
- dstBlendBarrier (because drawB has a dstBlend)
- drawB, subpass0
- drawA, subpass1
- drawB, subpass1
This was a problem because drawA was geting a dstBlend barrier between
subpasses. When dstBlend is implemented as a texture copy, it interrupts
the render pass and resolves MSAA, causing the MSAA data to be lost for
the next subpass.
Since drawA and drawB don't overlap, the correct solution to only apply
barriers on the first batch of a drawGroup:
- dstBlendBarrier (because drawB has a dstBlend)
- drawA, subpass0
- drawB, subpass0
- drawA, subpass1
- drawB, subpass11 parent a4fc6ae commit 2a78c96
2 files changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
Submodule rive-runtime updated 12 files
- .rive_head+1-1
- include/rive/rive_types.hpp+2-2
- renderer/include/rive/renderer/draw.hpp+27-11
- renderer/include/rive/renderer/gl/render_context_gl_impl.hpp+3
- renderer/include/rive/renderer/render_context.hpp+19-8
- renderer/src/draw.cpp+65-53
- renderer/src/gl/render_context_gl_impl.cpp+22
- renderer/src/render_context.cpp+196-125
- tests/gm/gmmain.cpp+1
- tests/gm/gmutils.hpp+3
- tests/gm/interleaved_subpasses_with_dst_blend.cpp+142
- tests/gm/retrofittedcubictriangles.cpp+11-9
0 commit comments