Просмотр исходного кода

Merge pull request #9127 from vonchenplus/vulkan_clear

video_core: Catch vulkan clear op not all channel need clear
bunnei 3 лет назад
Родитель
Сommit
84d15c7f47
1 измененных файлов с 13 добавлено и 8 удалено
  1. 13 8
      src/video_core/renderer_vulkan/vk_rasterizer.cpp

+ 13 - 8
src/video_core/renderer_vulkan/vk_rasterizer.cpp

@@ -305,14 +305,19 @@ void RasterizerVulkan::Clear() {
             }
         }
 
-        scheduler.Record([color_attachment, clear_value, clear_rect](vk::CommandBuffer cmdbuf) {
-            const VkClearAttachment attachment{
-                .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
-                .colorAttachment = color_attachment,
-                .clearValue = clear_value,
-            };
-            cmdbuf.ClearAttachments(attachment, clear_rect);
-        });
+        if (regs.clear_surface.R && regs.clear_surface.G && regs.clear_surface.B &&
+            regs.clear_surface.A) {
+            scheduler.Record([color_attachment, clear_value, clear_rect](vk::CommandBuffer cmdbuf) {
+                const VkClearAttachment attachment{
+                    .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
+                    .colorAttachment = color_attachment,
+                    .clearValue = clear_value,
+                };
+                cmdbuf.ClearAttachments(attachment, clear_rect);
+            });
+        } else {
+            UNIMPLEMENTED_MSG("Unimplemented Clear only the specified channel");
+        }
     }
 
     if (!use_depth && !use_stencil) {