mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-30 22:36:46 +08:00 
			
		
		
		
	Merge pull request #8076 from ameerj/nv-vk-msaa-scale
Vulkan: Use 3D helpers for MSAA scaling on NV drivers 510+
This commit is contained in:
		
						commit
						9b52ee4558
					
				| @ -367,17 +367,14 @@ BlitImageHelper::BlitImageHelper(const Device& device_, VKScheduler& scheduler_, | |||||||
|           PipelineLayoutCreateInfo(two_textures_set_layout.address()))), |           PipelineLayoutCreateInfo(two_textures_set_layout.address()))), | ||||||
|       full_screen_vert(BuildShader(device, FULL_SCREEN_TRIANGLE_VERT_SPV)), |       full_screen_vert(BuildShader(device, FULL_SCREEN_TRIANGLE_VERT_SPV)), | ||||||
|       blit_color_to_color_frag(BuildShader(device, VULKAN_BLIT_COLOR_FLOAT_FRAG_SPV)), |       blit_color_to_color_frag(BuildShader(device, VULKAN_BLIT_COLOR_FLOAT_FRAG_SPV)), | ||||||
|  |       blit_depth_stencil_frag(BuildShader(device, VULKAN_BLIT_DEPTH_STENCIL_FRAG_SPV)), | ||||||
|       convert_depth_to_float_frag(BuildShader(device, CONVERT_DEPTH_TO_FLOAT_FRAG_SPV)), |       convert_depth_to_float_frag(BuildShader(device, CONVERT_DEPTH_TO_FLOAT_FRAG_SPV)), | ||||||
|       convert_float_to_depth_frag(BuildShader(device, CONVERT_FLOAT_TO_DEPTH_FRAG_SPV)), |       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_abgr8_to_d24s8_frag(BuildShader(device, CONVERT_ABGR8_TO_D24S8_FRAG_SPV)), | ||||||
|       convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), |       convert_d24s8_to_abgr8_frag(BuildShader(device, CONVERT_D24S8_TO_ABGR8_FRAG_SPV)), | ||||||
|       convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)), |       convert_s8d24_to_abgr8_frag(BuildShader(device, CONVERT_S8D24_TO_ABGR8_FRAG_SPV)), | ||||||
|       linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_LINEAR>)), |       linear_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_LINEAR>)), | ||||||
|       nearest_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_NEAREST>)) { |       nearest_sampler(device.GetLogical().CreateSampler(SAMPLER_CREATE_INFO<VK_FILTER_NEAREST>)) {} | ||||||
|     if (device.IsExtShaderStencilExportSupported()) { |  | ||||||
|         blit_depth_stencil_frag = BuildShader(device, VULKAN_BLIT_DEPTH_STENCIL_FRAG_SPV); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| BlitImageHelper::~BlitImageHelper() = default; | BlitImageHelper::~BlitImageHelper() = default; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1451,8 +1451,7 @@ bool Image::BlitScaleHelper(bool scale_up) { | |||||||
| 
 | 
 | ||||||
|         runtime->blit_image_helper.BlitColor(blit_framebuffer.get(), color_view, dst_region, |         runtime->blit_image_helper.BlitColor(blit_framebuffer.get(), color_view, dst_region, | ||||||
|                                              src_region, operation, BLIT_OPERATION); |                                              src_region, operation, BLIT_OPERATION); | ||||||
|     } else if (!runtime->device.IsBlitDepthStencilSupported() && |     } else if (aspect_mask == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { | ||||||
|                aspect_mask == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { |  | ||||||
|         if (!blit_framebuffer) { |         if (!blit_framebuffer) { | ||||||
|             blit_framebuffer = std::make_unique<Framebuffer>(*runtime, nullptr, view_ptr, extent); |             blit_framebuffer = std::make_unique<Framebuffer>(*runtime, nullptr, view_ptr, extent); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -621,6 +621,11 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||||||
|             khr_push_descriptor = false; |             khr_push_descriptor = false; | ||||||
|             break; |             break; | ||||||
|         } |         } | ||||||
|  |         const u32 nv_major_version = (properties.driverVersion >> 22) & 0x3ff; | ||||||
|  |         if (nv_major_version >= 510) { | ||||||
|  |             LOG_WARNING(Render_Vulkan, "NVIDIA Drivers >= 510 do not support MSAA image blits"); | ||||||
|  |             cant_blit_msaa = true; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     const bool is_radv = driver_id == VK_DRIVER_ID_MESA_RADV; |     const bool is_radv = driver_id == VK_DRIVER_ID_MESA_RADV; | ||||||
|     if (ext_extended_dynamic_state && is_radv) { |     if (ext_extended_dynamic_state && is_radv) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user