diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/host_shaders/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/video_core/host_shaders/convert_d32f_to_abgr8.frag | 14 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/blit_image.cpp | 9 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/blit_image.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_texture_cache.cpp | 3 |
5 files changed, 31 insertions, 0 deletions
diff --git a/src/video_core/host_shaders/CMakeLists.txt b/src/video_core/host_shaders/CMakeLists.txt index 6b912027f..8bb429578 100644 --- a/src/video_core/host_shaders/CMakeLists.txt +++ b/src/video_core/host_shaders/CMakeLists.txt | |||
| @@ -19,6 +19,7 @@ set(SHADER_FILES | |||
| 19 | block_linear_unswizzle_2d.comp | 19 | block_linear_unswizzle_2d.comp |
| 20 | block_linear_unswizzle_3d.comp | 20 | block_linear_unswizzle_3d.comp |
| 21 | convert_abgr8_to_d24s8.frag | 21 | convert_abgr8_to_d24s8.frag |
| 22 | convert_d32f_to_abgr8.frag | ||
| 22 | convert_d24s8_to_abgr8.frag | 23 | convert_d24s8_to_abgr8.frag |
| 23 | convert_depth_to_float.frag | 24 | convert_depth_to_float.frag |
| 24 | convert_float_to_depth.frag | 25 | convert_float_to_depth.frag |
diff --git a/src/video_core/host_shaders/convert_d32f_to_abgr8.frag b/src/video_core/host_shaders/convert_d32f_to_abgr8.frag new file mode 100644 index 000000000..b7012a61d --- /dev/null +++ b/src/video_core/host_shaders/convert_d32f_to_abgr8.frag | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | |||
| 4 | #version 450 | ||
| 5 | |||
| 6 | layout(binding = 0) uniform sampler2D depth_tex; | ||
| 7 | |||
| 8 | layout(location = 0) out vec4 color; | ||
| 9 | |||
| 10 | void main() { | ||
| 11 | ivec2 coord = ivec2(gl_FragCoord.xy); | ||
| 12 | float depth = textureLod(depth_tex, coord, 0).r; | ||
| 13 | color = vec4(vec3(depth), 1.0); // Convert depth to grayscale color | ||
| 14 | } | ||
diff --git a/src/video_core/renderer_vulkan/blit_image.cpp b/src/video_core/renderer_vulkan/blit_image.cpp index 1032c9d12..b971973dc 100644 --- a/src/video_core/renderer_vulkan/blit_image.cpp +++ b/src/video_core/renderer_vulkan/blit_image.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "common/settings.h" | 8 | #include "common/settings.h" |
| 9 | #include "video_core/host_shaders/blit_color_float_frag_spv.h" | 9 | #include "video_core/host_shaders/blit_color_float_frag_spv.h" |
| 10 | #include "video_core/host_shaders/convert_abgr8_to_d24s8_frag_spv.h" | 10 | #include "video_core/host_shaders/convert_abgr8_to_d24s8_frag_spv.h" |
| 11 | #include "video_core/host_shaders/convert_d32f_to_abgr8_frag_spv.h" | ||
| 11 | #include "video_core/host_shaders/convert_d24s8_to_abgr8_frag_spv.h" | 12 | #include "video_core/host_shaders/convert_d24s8_to_abgr8_frag_spv.h" |
| 12 | #include "video_core/host_shaders/convert_depth_to_float_frag_spv.h" | 13 | #include "video_core/host_shaders/convert_depth_to_float_frag_spv.h" |
| 13 | #include "video_core/host_shaders/convert_float_to_depth_frag_spv.h" | 14 | #include "video_core/host_shaders/convert_float_to_depth_frag_spv.h" |
| @@ -433,6 +434,7 @@ BlitImageHelper::BlitImageHelper(const Device& device_, Scheduler& scheduler_, | |||
| 433 | convert_depth_to_float_frag(BuildShader(device, CONVERT_DEPTH_TO_FLOAT_FRAG_SPV)), | 434 | convert_depth_to_float_frag(BuildShader(device, CONVERT_DEPTH_TO_FLOAT_FRAG_SPV)), |
| 434 | convert_float_to_depth_frag(BuildShader(device, CONVERT_FLOAT_TO_DEPTH_FRAG_SPV)), | 435 | convert_float_to_depth_frag(BuildShader(device, CONVERT_FLOAT_TO_DEPTH_FRAG_SPV)), |
| 435 | convert_abgr8_to_d24s8_frag(BuildShader(device, CONVERT_ABGR8_TO_D24S8_FRAG_SPV)), | 436 | convert_abgr8_to_d24s8_frag(BuildShader(device, CONVERT_ABGR8_TO_D24S8_FRAG_SPV)), |
| 437 | convert_d32f_to_abgr8_frag(BuildShader(device, CONVERT_D32F_TO_ABGR8_FRAG_SPV)), | ||
| 436 | convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), | 438 | convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), |
| 437 | convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)), | 439 | convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)), |
| 438 | linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_LINEAR>)), | 440 | linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_LINEAR>)), |
| @@ -557,6 +559,13 @@ void BlitImageHelper::ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer, | |||
| 557 | Convert(*convert_abgr8_to_d24s8_pipeline, dst_framebuffer, src_image_view); | 559 | Convert(*convert_abgr8_to_d24s8_pipeline, dst_framebuffer, src_image_view); |
| 558 | } | 560 | } |
| 559 | 561 | ||
| 562 | void BlitImageHelper::ConvertD32FToABGR8(const Framebuffer* dst_framebuffer, | ||
| 563 | ImageView& src_image_view) { | ||
| 564 | ConvertPipelineColorTargetEx(convert_d32f_to_abgr8_pipeline, dst_framebuffer->RenderPass(), | ||
| 565 | convert_d32f_to_abgr8_frag); | ||
| 566 | ConvertDepthStencil(*convert_d32f_to_abgr8_pipeline, dst_framebuffer, src_image_view); | ||
| 567 | } | ||
| 568 | |||
| 560 | void BlitImageHelper::ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, | 569 | void BlitImageHelper::ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, |
| 561 | ImageView& src_image_view) { | 570 | ImageView& src_image_view) { |
| 562 | ConvertPipelineColorTargetEx(convert_d24s8_to_abgr8_pipeline, dst_framebuffer->RenderPass(), | 571 | ConvertPipelineColorTargetEx(convert_d24s8_to_abgr8_pipeline, dst_framebuffer->RenderPass(), |
diff --git a/src/video_core/renderer_vulkan/blit_image.h b/src/video_core/renderer_vulkan/blit_image.h index dcfe217aa..a032c71fb 100644 --- a/src/video_core/renderer_vulkan/blit_image.h +++ b/src/video_core/renderer_vulkan/blit_image.h | |||
| @@ -67,6 +67,8 @@ public: | |||
| 67 | 67 | ||
| 68 | void ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); | 68 | void ConvertABGR8ToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view); |
| 69 | 69 | ||
| 70 | void ConvertD32FToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); | ||
| 71 | |||
| 70 | void ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); | 72 | void ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); |
| 71 | 73 | ||
| 72 | void ConvertS8D24ToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); | 74 | void ConvertS8D24ToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view); |
| @@ -128,6 +130,7 @@ private: | |||
| 128 | vk::ShaderModule convert_depth_to_float_frag; | 130 | vk::ShaderModule convert_depth_to_float_frag; |
| 129 | vk::ShaderModule convert_float_to_depth_frag; | 131 | vk::ShaderModule convert_float_to_depth_frag; |
| 130 | vk::ShaderModule convert_abgr8_to_d24s8_frag; | 132 | vk::ShaderModule convert_abgr8_to_d24s8_frag; |
| 133 | vk::ShaderModule convert_d32f_to_abgr8_frag; | ||
| 131 | vk::ShaderModule convert_d24s8_to_abgr8_frag; | 134 | vk::ShaderModule convert_d24s8_to_abgr8_frag; |
| 132 | vk::ShaderModule convert_s8d24_to_abgr8_frag; | 135 | vk::ShaderModule convert_s8d24_to_abgr8_frag; |
| 133 | vk::Sampler linear_sampler; | 136 | vk::Sampler linear_sampler; |
| @@ -146,6 +149,7 @@ private: | |||
| 146 | vk::Pipeline convert_d16_to_r16_pipeline; | 149 | vk::Pipeline convert_d16_to_r16_pipeline; |
| 147 | vk::Pipeline convert_r16_to_d16_pipeline; | 150 | vk::Pipeline convert_r16_to_d16_pipeline; |
| 148 | vk::Pipeline convert_abgr8_to_d24s8_pipeline; | 151 | vk::Pipeline convert_abgr8_to_d24s8_pipeline; |
| 152 | vk::Pipeline convert_d32f_to_abgr8_pipeline; | ||
| 149 | vk::Pipeline convert_d24s8_to_abgr8_pipeline; | 153 | vk::Pipeline convert_d24s8_to_abgr8_pipeline; |
| 150 | vk::Pipeline convert_s8d24_to_abgr8_pipeline; | 154 | vk::Pipeline convert_s8d24_to_abgr8_pipeline; |
| 151 | }; | 155 | }; |
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 71fdec809..f02d3e8b8 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp | |||
| @@ -1200,6 +1200,9 @@ void TextureCacheRuntime::ConvertImage(Framebuffer* dst, ImageView& dst_view, Im | |||
| 1200 | if (src_view.format == PixelFormat::D24_UNORM_S8_UINT) { | 1200 | if (src_view.format == PixelFormat::D24_UNORM_S8_UINT) { |
| 1201 | return blit_image_helper.ConvertS8D24ToABGR8(dst, src_view); | 1201 | return blit_image_helper.ConvertS8D24ToABGR8(dst, src_view); |
| 1202 | } | 1202 | } |
| 1203 | if (src_view.format == PixelFormat::D32_FLOAT) { | ||
| 1204 | return blit_image_helper.ConvertD32FToABGR8(dst, src_view); | ||
| 1205 | } | ||
| 1203 | break; | 1206 | break; |
| 1204 | case PixelFormat::R32_FLOAT: | 1207 | case PixelFormat::R32_FLOAT: |
| 1205 | if (src_view.format == PixelFormat::D32_FLOAT) { | 1208 | if (src_view.format == PixelFormat::D32_FLOAT) { |