mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-10-31 23:02:48 +00:00 
			
		
		
		
	Resolve some Vulkan validation errors (#6915)
* Fix some validation errors * Whitespace correction * Resolve some runtime validation errors. * Whitespace * Properly fix usage realted validation error by setting Extended Usage image creation flag. * Only if supported * Remove checking extension for features that are core functionality of Vulkan 1.2
This commit is contained in:
		
							parent
							
								
									bd3335c143
								
							
						
					
					
						commit
						1a0a351a15
					
				| @ -103,12 +103,19 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|                 usage |= BufferUsageFlags.IndirectBufferBit; | ||||
|             } | ||||
| 
 | ||||
|             var externalMemoryBuffer = new ExternalMemoryBufferCreateInfo | ||||
|             { | ||||
|                 SType = StructureType.ExternalMemoryBufferCreateInfo, | ||||
|                 HandleTypes = ExternalMemoryHandleTypeFlags.HostAllocationBitExt, | ||||
|             }; | ||||
| 
 | ||||
|             var bufferCreateInfo = new BufferCreateInfo | ||||
|             { | ||||
|                 SType = StructureType.BufferCreateInfo, | ||||
|                 Size = (ulong)size, | ||||
|                 Usage = usage, | ||||
|                 SharingMode = SharingMode.Exclusive, | ||||
|                 PNext = &externalMemoryBuffer, | ||||
|             }; | ||||
| 
 | ||||
|             gd.Api.CreateBuffer(_device, in bufferCreateInfo, null, out var buffer).ThrowOnError(); | ||||
|  | ||||
| @ -80,7 +80,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
| 
 | ||||
|             var usage = GetImageUsage(info.Format, info.Target, gd.Capabilities.SupportsShaderStorageImageMultisample); | ||||
| 
 | ||||
|             var flags = ImageCreateFlags.CreateMutableFormatBit; | ||||
|             var flags = ImageCreateFlags.CreateMutableFormatBit | ImageCreateFlags.CreateExtendedUsageBit; | ||||
| 
 | ||||
|             // This flag causes mipmapped texture arrays to break on AMD GCN, so for that copy dependencies are forced for aliasing as cube. | ||||
|             bool isCube = info.Target == Target.Cubemap || info.Target == Target.CubemapArray; | ||||
|  | ||||
| @ -100,7 +100,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
| 
 | ||||
|             unsafe Auto<DisposableImageView> CreateImageView(ComponentMapping cm, ImageSubresourceRange sr, ImageViewType viewType, ImageUsageFlags usageFlags) | ||||
|             { | ||||
|                 var usage = new ImageViewUsageCreateInfo | ||||
|                 var imageViewUsage = new ImageViewUsageCreateInfo | ||||
|                 { | ||||
|                     SType = StructureType.ImageViewUsageCreateInfo, | ||||
|                     Usage = usageFlags, | ||||
| @ -114,7 +114,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|                     Format = format, | ||||
|                     Components = cm, | ||||
|                     SubresourceRange = sr, | ||||
|                     PNext = &usage, | ||||
|                     PNext = &imageViewUsage, | ||||
|                 }; | ||||
| 
 | ||||
|                 gd.Api.CreateImageView(device, imageCreateInfo, null, out var imageView).ThrowOnError(); | ||||
| @ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
| 
 | ||||
|             ImageUsageFlags shaderUsage = ImageUsageFlags.SampledBit; | ||||
| 
 | ||||
|             if (info.Format.IsImageCompatible()) | ||||
|             if (info.Format.IsImageCompatible() && (_gd.Capabilities.SupportsShaderStorageImageMultisample || !info.Target.IsMultisample())) | ||||
|             { | ||||
|                 shaderUsage |= ImageUsageFlags.StorageBit; | ||||
|             } | ||||
| @ -154,7 +154,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     subresourceRange = new ImageSubresourceRange(aspectFlags, (uint)firstLevel, levels, (uint)firstLayer, (uint)info.Depth); | ||||
|                     subresourceRange = new ImageSubresourceRange(aspectFlags, (uint)firstLevel, 1, (uint)firstLayer, (uint)info.Depth); | ||||
| 
 | ||||
|                     _imageView2dArray = CreateImageView(identityComponentMapping, subresourceRange, ImageViewType.Type2DArray, usage); | ||||
|                 } | ||||
|  | ||||
| @ -42,6 +42,8 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|             "VK_EXT_depth_clip_control", | ||||
|             "VK_KHR_portability_subset", // As per spec, we should enable this if present. | ||||
|             "VK_EXT_4444_formats", | ||||
|             "VK_KHR_8bit_storage", | ||||
|             "VK_KHR_maintenance2", | ||||
|         }; | ||||
| 
 | ||||
|         private static readonly string[] _requiredExtensions = { | ||||
| @ -355,6 +357,14 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|                 features2.PNext = &supportedFeaturesDepthClipControl; | ||||
|             } | ||||
| 
 | ||||
|             PhysicalDeviceVulkan12Features supportedPhysicalDeviceVulkan12Features = new() | ||||
|             { | ||||
|                 SType = StructureType.PhysicalDeviceVulkan12Features, | ||||
|                 PNext = features2.PNext, | ||||
|             }; | ||||
| 
 | ||||
|             features2.PNext = &supportedPhysicalDeviceVulkan12Features; | ||||
| 
 | ||||
|             api.GetPhysicalDeviceFeatures2(physicalDevice.PhysicalDevice, &features2); | ||||
| 
 | ||||
|             var supportedFeatures = features2.Features; | ||||
| @ -382,6 +392,7 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|                 TessellationShader = supportedFeatures.TessellationShader, | ||||
|                 VertexPipelineStoresAndAtomics = supportedFeatures.VertexPipelineStoresAndAtomics, | ||||
|                 RobustBufferAccess = useRobustBufferAccess, | ||||
|                 SampleRateShading = supportedFeatures.SampleRateShading, | ||||
|             }; | ||||
| 
 | ||||
|             void* pExtendedFeatures = null; | ||||
| @ -451,9 +462,11 @@ namespace Ryujinx.Graphics.Vulkan | ||||
|             { | ||||
|                 SType = StructureType.PhysicalDeviceVulkan12Features, | ||||
|                 PNext = pExtendedFeatures, | ||||
|                 DescriptorIndexing = physicalDevice.IsDeviceExtensionPresent("VK_EXT_descriptor_indexing"), | ||||
|                 DrawIndirectCount = physicalDevice.IsDeviceExtensionPresent(KhrDrawIndirectCount.ExtensionName), | ||||
|                 UniformBufferStandardLayout = physicalDevice.IsDeviceExtensionPresent("VK_KHR_uniform_buffer_standard_layout"), | ||||
|                 DescriptorIndexing = supportedPhysicalDeviceVulkan12Features.DescriptorIndexing, | ||||
|                 DrawIndirectCount = supportedPhysicalDeviceVulkan12Features.DrawIndirectCount, | ||||
|                 UniformBufferStandardLayout = supportedPhysicalDeviceVulkan12Features.UniformBufferStandardLayout, | ||||
|                 UniformAndStorageBuffer8BitAccess = supportedPhysicalDeviceVulkan12Features.UniformAndStorageBuffer8BitAccess, | ||||
|                 StorageBuffer8BitAccess = supportedPhysicalDeviceVulkan12Features.StorageBuffer8BitAccess, | ||||
|             }; | ||||
| 
 | ||||
|             pExtendedFeatures = &featuresVk12; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 sunshineinabox
						sunshineinabox