summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2021-10-22 19:44:10 +0200
committerGravatar Fernando Sahmkow2021-11-16 22:11:32 +0100
commit21a8ba0437989e4255b347c2b2cabbbc2a332fd3 (patch)
treeb44304762eb7ee10a6679bf0cf59615afe832da4
parentTexture Cache: Fix blitting. (diff)
downloadyuzu-21a8ba0437989e4255b347c2b2cabbbc2a332fd3.tar.gz
yuzu-21a8ba0437989e4255b347c2b2cabbbc2a332fd3.tar.xz
yuzu-21a8ba0437989e4255b347c2b2cabbbc2a332fd3.zip
Vulkan: Fix FXAA in AMD.
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.cpp42
1 files changed, 40 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.cpp b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
index c0abcc17a..2bed4f3c5 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.cpp
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.cpp
@@ -244,8 +244,35 @@ VkSemaphore VKBlitScreen::Draw(const Tegra::FramebufferConfig& framebuffer,
244 .width = (up_scale * framebuffer.width) >> down_shift, 244 .width = (up_scale * framebuffer.width) >> down_shift,
245 .height = (up_scale * framebuffer.height) >> down_shift, 245 .height = (up_scale * framebuffer.height) >> down_shift,
246 }; 246 };
247 source_image_view = *aa_image_view;
248 scheduler.Record([this, image_index, size, anti_alias_pass](vk::CommandBuffer cmdbuf) { 247 scheduler.Record([this, image_index, size, anti_alias_pass](vk::CommandBuffer cmdbuf) {
248 const VkImageMemoryBarrier base_barrier{
249 .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
250 .pNext = nullptr,
251 .srcAccessMask = 0,
252 .dstAccessMask = 0,
253 .oldLayout = VK_IMAGE_LAYOUT_GENERAL,
254 .newLayout = VK_IMAGE_LAYOUT_GENERAL,
255 .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
256 .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
257 .image = {},
258 .subresourceRange =
259 {
260 .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
261 .baseMipLevel = 0,
262 .levelCount = 1,
263 .baseArrayLayer = 0,
264 .layerCount = 1,
265 },
266 };
267
268 {
269 VkImageMemoryBarrier fsr_write_barrier = base_barrier;
270 fsr_write_barrier.image = *aa_image;
271 fsr_write_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
272 cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
273 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, fsr_write_barrier);
274 }
275
249 const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f; 276 const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f;
250 const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f; 277 const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f;
251 const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f; 278 const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f;
@@ -294,7 +321,18 @@ VkSemaphore VKBlitScreen::Draw(const Tegra::FramebufferConfig& framebuffer,
294 aa_descriptor_sets[image_index], {}); 321 aa_descriptor_sets[image_index], {});
295 cmdbuf.Draw(4, 1, 0, 0); 322 cmdbuf.Draw(4, 1, 0, 0);
296 cmdbuf.EndRenderPass(); 323 cmdbuf.EndRenderPass();
324
325 {
326 VkImageMemoryBarrier blit_read_barrier = base_barrier;
327 blit_read_barrier.image = *aa_image;
328 blit_read_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
329 blit_read_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
330
331 cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT ,
332 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, 0, blit_read_barrier);
333 }
297 }); 334 });
335 source_image_view = *aa_image_view;
298 } 336 }
299 337
300 if (fsr) { 338 if (fsr) {
@@ -485,7 +523,7 @@ void VKBlitScreen::CreateDescriptorPool() {
485 const std::array<VkDescriptorPoolSize, 1> pool_sizes_aa{{ 523 const std::array<VkDescriptorPoolSize, 1> pool_sizes_aa{{
486 { 524 {
487 .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 525 .type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
488 .descriptorCount = static_cast<u32>(2 * image_count), 526 .descriptorCount = static_cast<u32>(image_count * 2),
489 }, 527 },
490 }}; 528 }};
491 529