GPU/HW: Split transparent draws if dual-source blend unsupported

The ordering is not correct otherwise. Ape Escape has a bunch of
overlapping sprites that have a mix of opaque and transparent texels,
and the transparent texels are repeated multiple times when the
opaque texels should cancel them out.

Only affects old Mali drivers.
This commit is contained in:
Stenzek 2025-02-09 13:06:32 +10:00
parent 2663ac9666
commit 06b02183cb
No known key found for this signature in database

View File

@ -3695,9 +3695,8 @@ void GPU_HW::PrepareDraw(const GPUBackendDrawCommand* cmd)
if (!IsFlushed())
{
if (texture_mode != m_batch.texture_mode || transparency_mode != m_batch.transparency_mode ||
(transparency_mode == GPUTransparencyMode::BackgroundMinusForeground && !m_allow_shader_blend) ||
dithering_enable != m_batch.dithering || m_texture_window_bits != cmd->window ||
m_batch.check_mask_before_draw != cmd->check_mask_before_draw ||
(!m_allow_shader_blend && NeedsTwoPassRendering()) || dithering_enable != m_batch.dithering ||
m_texture_window_bits != cmd->window || m_batch.check_mask_before_draw != cmd->check_mask_before_draw ||
m_batch.set_mask_while_drawing != cmd->set_mask_while_drawing ||
(texture_mode == BatchTextureMode::PageTexture && m_texture_cache_key != texture_cache_key))
{