diff --git a/src/core/gpu_hw_d3d11.cpp b/src/core/gpu_hw_d3d11.cpp index aab4a6b09..02811b710 100644 --- a/src/core/gpu_hw_d3d11.cpp +++ b/src/core/gpu_hw_d3d11.cpp @@ -773,6 +773,10 @@ void GPU_HW_D3D11::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 widt m_context->PSSetShaderResources(0, 1, m_vram_read_texture.GetD3DSRVArray()); DrawUtilityShader(m_vram_copy_pixel_shader.Get(), &uniforms, sizeof(uniforms)); RestoreGraphicsAPIState(); + + if (m_GPUSTAT.check_mask_before_draw) + m_current_depth++; + return; } @@ -782,9 +786,6 @@ void GPU_HW_D3D11::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 widt if (m_vram_dirty_rect.Intersects(Common::Rectangle::FromExtents(src_x, src_y, width, height))) UpdateVRAMReadTexture(); - if (m_GPUSTAT.IsMaskingEnabled()) - Log_WarningPrintf("Masking enabled on VRAM copy - not implemented"); - GPU_HW::CopyVRAM(src_x, src_y, dst_x, dst_y, width, height); src_x *= m_resolution_scale; diff --git a/src/core/gpu_hw_opengl.cpp b/src/core/gpu_hw_opengl.cpp index 4e38328db..fb093f6d2 100644 --- a/src/core/gpu_hw_opengl.cpp +++ b/src/core/gpu_hw_opengl.cpp @@ -895,6 +895,10 @@ void GPU_HW_OpenGL::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 wid glDrawArrays(GL_TRIANGLES, 0, 3); RestoreGraphicsAPIState(); + + if (m_GPUSTAT.check_mask_before_draw) + m_current_depth++; + return; } diff --git a/src/core/gpu_hw_vulkan.cpp b/src/core/gpu_hw_vulkan.cpp index 749bdee82..9be263f06 100644 --- a/src/core/gpu_hw_vulkan.cpp +++ b/src/core/gpu_hw_vulkan.cpp @@ -1156,16 +1156,19 @@ void GPU_HW_Vulkan::CopyVRAM(u32 src_x, u32 src_y, u32 dst_x, u32 dst_y, u32 wid m_vram_copy_pipelines[BoolToUInt8(m_GPUSTAT.check_mask_before_draw)]); vkCmdBindDescriptorSets(cmdbuf, VK_PIPELINE_BIND_POINT_GRAPHICS, m_single_sampler_pipeline_layout, 0, 1, &m_vram_copy_descriptor_set, 0, nullptr); + vkCmdPushConstants(cmdbuf, m_single_sampler_pipeline_layout, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, + sizeof(uniforms), &uniforms); Vulkan::Util::SetViewportAndScissor(cmdbuf, dst_bounds_scaled.left, dst_bounds_scaled.top, dst_bounds_scaled.GetWidth(), dst_bounds_scaled.GetHeight()); vkCmdDraw(cmdbuf, 3, 1, 0, 0); RestoreGraphicsAPIState(); + + if (m_GPUSTAT.check_mask_before_draw) + m_current_depth++; + return; } - if (m_GPUSTAT.IsMaskingEnabled()) - Log_WarningPrintf("Masking enabled on VRAM copy - not implemented"); - GPU_HW::CopyVRAM(src_x, src_y, dst_x, dst_y, width, height); src_x *= m_resolution_scale;