diff options
| author | FengChen <vonchenplus@gmail.com> | 2023-01-12 22:42:56 +0800 |
|---|---|---|
| committer | Feng Chen <vonchenplus@gmail.com> | 2023-01-28 12:53:05 +0800 |
| commit | 667f2331d17db5d73158ea34365e05554a74fef3 (patch) | |
| tree | 8414eb07600d9e8b2ec8db6bda1218d453afef40 /src/video_core/renderer_vulkan/vk_rasterizer.cpp | |
| parent | 5a53999a741d5b6a7af677f00f433beabdf9d80c (diff) | |
video_core: Implement vulkan clear specified channel
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 86ef0daeb6..719edbcfbe 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -394,7 +394,15 @@ void RasterizerVulkan::Clear(u32 layer_count) { cmdbuf.ClearAttachments(attachment, clear_rect); }); } else { - UNIMPLEMENTED_MSG("Unimplemented Clear only the specified channel"); + u8 color_mask = static_cast<u8>(regs.clear_surface.R | regs.clear_surface.G << 1 | + regs.clear_surface.B << 2 | regs.clear_surface.A << 3); + Region2D dst_region = { + Offset2D{.x = clear_rect.rect.offset.x, .y = clear_rect.rect.offset.y}, + Offset2D{.x = clear_rect.rect.offset.x + + static_cast<s32>(clear_rect.rect.extent.width), + .y = clear_rect.rect.offset.y + + static_cast<s32>(clear_rect.rect.extent.height)}}; + blit_image.ClearColor(framebuffer, color_mask, regs.clear_color, dst_region); } } |
