diff options
| author | 2021-10-22 19:44:10 +0200 | |
|---|---|---|
| committer | 2021-11-16 22:11:32 +0100 | |
| commit | 21a8ba0437989e4255b347c2b2cabbbc2a332fd3 (patch) | |
| tree | b44304762eb7ee10a6679bf0cf59615afe832da4 | |
| parent | Texture Cache: Fix blitting. (diff) | |
| download | yuzu-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.cpp | 42 |
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 | ||