early-access version 2225
This commit is contained in:
		| @@ -1,7 +1,7 @@ | ||||
| yuzu emulator early access | ||||
| ============= | ||||
|  | ||||
| This is the source code for early-access 2224. | ||||
| This is the source code for early-access 2225. | ||||
|  | ||||
| ## Legal Notice | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,7 @@ set(SHADER_FILES | ||||
|     convert_d24s8_to_r16g16.frag | ||||
|     convert_depth_to_float.frag | ||||
|     convert_float_to_depth.frag | ||||
|     convert_r16g16_to_d24s8.frag | ||||
|     full_screen_triangle.vert | ||||
|     fxaa.frag | ||||
|     fxaa.vert | ||||
|   | ||||
							
								
								
									
										18
									
								
								src/video_core/host_shaders/convert_r16g16_to_d24s8.frag
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								src/video_core/host_shaders/convert_r16g16_to_d24s8.frag
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| // Copyright 2021 yuzu Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #version 450 | ||||
| // #extension GL_ARB_shader_stencil_export : require | ||||
|  | ||||
| layout(binding = 0) uniform sampler2D color_texture; | ||||
|  | ||||
| void main() { | ||||
|     ivec2 coord = ivec2(gl_FragCoord.xy); | ||||
|     vec4 color = texelFetch(color_texture, coord, 0).rgba; | ||||
|     uint depth_stencil_unorm = (uint(color.r * (exp2(16) - 1.0f)) << 16) | ||||
|                       | (uint(color.g * (exp2(16) - 1.0f)) << 16); | ||||
|  | ||||
|     gl_FragDepth = float(depth_stencil_unorm >> 8) / (exp2(24.0) - 1.0f); | ||||
|     // gl_FragStencilRefARB = int(depth_stencil_unorm & 0x00FF); | ||||
| } | ||||
| @@ -11,6 +11,7 @@ | ||||
| #include "video_core/host_shaders/convert_d24s8_to_r16g16_frag_spv.h" | ||||
| #include "video_core/host_shaders/convert_depth_to_float_frag_spv.h" | ||||
| #include "video_core/host_shaders/convert_float_to_depth_frag_spv.h" | ||||
| #include "video_core/host_shaders/convert_r16g16_to_d24s8_frag_spv.h" | ||||
| #include "video_core/host_shaders/full_screen_triangle_vert_spv.h" | ||||
| #include "video_core/host_shaders/vulkan_blit_color_float_frag_spv.h" | ||||
| #include "video_core/host_shaders/vulkan_blit_depth_stencil_frag_spv.h" | ||||
| @@ -361,6 +362,7 @@ BlitImageHelper::BlitImageHelper(const Device& device_, VKScheduler& scheduler_, | ||||
|       convert_float_to_depth_frag(BuildShader(device, CONVERT_FLOAT_TO_DEPTH_FRAG_SPV)), | ||||
|       convert_abgr8_to_d24s8_frag(BuildShader(device, CONVERT_ABGR8_TO_D24S8_FRAG_SPV)), | ||||
|       convert_b10g11r11_to_d24s8_frag(BuildShader(device, CONVERT_B10G11R11_TO_D24S8_FRAG_SPV)), | ||||
|       convert_r16g16_to_d24s8_frag(BuildShader(device, CONVERT_R16G16_TO_D24S8_FRAG_SPV)), | ||||
|       convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), | ||||
|       convert_d24s8_to_b10g11r11_frag(BuildShader(device, CONVERT_D24S8_TO_B10G11R11_FRAG_SPV)), | ||||
|       convert_d24s8_to_r16g16_frag(BuildShader(device, CONVERT_D24S8_TO_R16G16_FRAG_SPV)), | ||||
| @@ -476,6 +478,15 @@ void BlitImageHelper::ConvertB10G11R11ToD24S8(const Framebuffer* dst_framebuffer | ||||
|             down_shift); | ||||
| } | ||||
|  | ||||
| void BlitImageHelper::ConvertR16G16ToD24S8(const Framebuffer* dst_framebuffer, | ||||
|                                            const ImageView& src_image_view, u32 up_scale, | ||||
|                                            u32 down_shift) { | ||||
|     ConvertPipelineDepthTargetEx(convert_r16g16_to_d24s8_pipeline, dst_framebuffer->RenderPass(), | ||||
|                                  convert_r16g16_to_d24s8_frag, true); | ||||
|     Convert(*convert_r16g16_to_d24s8_pipeline, dst_framebuffer, src_image_view, up_scale, | ||||
|             down_shift); | ||||
| } | ||||
|  | ||||
| void BlitImageHelper::ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, | ||||
|                                           ImageView& src_image_view, u32 up_scale, u32 down_shift) { | ||||
|     ConvertPipelineColorTargetEx(convert_d24s8_to_abgr8_pipeline, dst_framebuffer->RenderPass(), | ||||
|   | ||||
| @@ -62,6 +62,9 @@ public: | ||||
|     void ConvertB10G11R11ToD24S8(const Framebuffer* dst_framebuffer, | ||||
|                                  const ImageView& src_image_view, u32 up_scale, u32 down_shift); | ||||
|  | ||||
|     void ConvertR16G16ToD24S8(const Framebuffer* dst_framebuffer, const ImageView& src_image_view, | ||||
|                               u32 up_scale, u32 down_shift); | ||||
|  | ||||
|     void ConvertD24S8ToABGR8(const Framebuffer* dst_framebuffer, ImageView& src_image_view, | ||||
|                              u32 up_scale, u32 down_shift); | ||||
|  | ||||
| @@ -109,6 +112,7 @@ private: | ||||
|     vk::ShaderModule convert_float_to_depth_frag; | ||||
|     vk::ShaderModule convert_abgr8_to_d24s8_frag; | ||||
|     vk::ShaderModule convert_b10g11r11_to_d24s8_frag; | ||||
|     vk::ShaderModule convert_r16g16_to_d24s8_frag; | ||||
|     vk::ShaderModule convert_d24s8_to_abgr8_frag; | ||||
|     vk::ShaderModule convert_d24s8_to_b10g11r11_frag; | ||||
|     vk::ShaderModule convert_d24s8_to_r16g16_frag; | ||||
| @@ -125,6 +129,7 @@ private: | ||||
|     vk::Pipeline convert_r16_to_d16_pipeline; | ||||
|     vk::Pipeline convert_abgr8_to_d24s8_pipeline; | ||||
|     vk::Pipeline convert_b10g11r11_to_d24s8_pipeline; | ||||
|     vk::Pipeline convert_r16g16_to_d24s8_pipeline; | ||||
|     vk::Pipeline convert_d24s8_to_abgr8_pipeline; | ||||
|     vk::Pipeline convert_d24s8_to_b10g11r11_pipeline; | ||||
|     vk::Pipeline convert_d24s8_to_r16g16_pipeline; | ||||
|   | ||||
| @@ -920,6 +920,9 @@ void TextureCacheRuntime::ConvertImage(Framebuffer* dst, ImageView& dst_view, Im | ||||
|         if (src_view.format == PixelFormat::B10G11R11_FLOAT) { | ||||
|             return blit_image_helper.ConvertB10G11R11ToD24S8(dst, src_view, up_scale, down_shift); | ||||
|         } | ||||
|         if (src_view.format == PixelFormat::R16G16_UNORM) { | ||||
|             return blit_image_helper.ConvertR16G16ToD24S8(dst, src_view, up_scale, down_shift); | ||||
|         } | ||||
|         break; | ||||
|     case PixelFormat::D32_FLOAT: | ||||
|         if (src_view.format == PixelFormat::R32_FLOAT) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user