Properly fix usage realted validation error by setting Extended Usage image creation flag.

This commit is contained in:
sunshineinabox 2024-06-05 13:28:55 -07:00
commit cc4f6016fd
3 changed files with 6 additions and 8 deletions

View file

@ -20,8 +20,6 @@ namespace Ryujinx.Graphics.Vulkan
ImageUsageFlags.TransferSrcBit | ImageUsageFlags.TransferSrcBit |
ImageUsageFlags.TransferDstBit; ImageUsageFlags.TransferDstBit;
public readonly ImageUsageFlags StorageImageUsageFlags;
public const AccessFlags DefaultAccessMask = public const AccessFlags DefaultAccessMask =
AccessFlags.ShaderReadBit | AccessFlags.ShaderReadBit |
AccessFlags.ShaderWriteBit | AccessFlags.ShaderWriteBit |
@ -80,9 +78,9 @@ namespace Ryujinx.Graphics.Vulkan
var sampleCountFlags = ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)info.Samples); var sampleCountFlags = ConvertToSampleCountFlags(gd.Capabilities.SupportedSampleCounts, (uint)info.Samples);
StorageImageUsageFlags = GetImageUsage(info.Format, info.Target, gd.Capabilities.SupportsShaderStorageImageMultisample); 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. // 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; bool isCube = info.Target == Target.Cubemap || info.Target == Target.CubemapArray;
@ -108,7 +106,7 @@ namespace Ryujinx.Graphics.Vulkan
ArrayLayers = layers, ArrayLayers = layers,
Samples = sampleCountFlags, Samples = sampleCountFlags,
Tiling = ImageTiling.Optimal, Tiling = ImageTiling.Optimal,
Usage = StorageImageUsageFlags, Usage = usage,
SharingMode = SharingMode.Exclusive, SharingMode = SharingMode.Exclusive,
InitialLayout = ImageLayout.Undefined, InitialLayout = ImageLayout.Undefined,
Flags = flags, Flags = flags,

View file

@ -60,7 +60,7 @@ namespace Ryujinx.Graphics.Vulkan
gd.Textures.Add(this); gd.Textures.Add(this);
var format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format); var format = _gd.FormatCapabilities.ConvertToVkFormat(info.Format);
var usage = storage.StorageImageUsageFlags; var usage = TextureStorage.GetImageUsage(info.Format, info.Target, gd.Capabilities.SupportsShaderStorageImageMultisample);
var levels = (uint)info.Levels; var levels = (uint)info.Levels;
var layers = (uint)info.GetLayers(); var layers = (uint)info.GetLayers();
@ -123,7 +123,7 @@ namespace Ryujinx.Graphics.Vulkan
ImageUsageFlags shaderUsage = ImageUsageFlags.SampledBit; ImageUsageFlags shaderUsage = ImageUsageFlags.SampledBit;
if (storage.Info.Format.IsImageCompatible()) if (info.Format.IsImageCompatible())
{ {
shaderUsage |= ImageUsageFlags.StorageBit; shaderUsage |= ImageUsageFlags.StorageBit;
} }

View file

@ -43,6 +43,7 @@ namespace Ryujinx.Graphics.Vulkan
"VK_KHR_portability_subset", // As per spec, we should enable this if present. "VK_KHR_portability_subset", // As per spec, we should enable this if present.
"VK_EXT_4444_formats", "VK_EXT_4444_formats",
"VK_KHR_8bit_storage", "VK_KHR_8bit_storage",
"VK_KHR_maintenance2",
}; };
private static readonly string[] _requiredExtensions = { private static readonly string[] _requiredExtensions = {
@ -466,7 +467,6 @@ namespace Ryujinx.Graphics.Vulkan
UniformBufferStandardLayout = physicalDevice.IsDeviceExtensionPresent("VK_KHR_uniform_buffer_standard_layout"), UniformBufferStandardLayout = physicalDevice.IsDeviceExtensionPresent("VK_KHR_uniform_buffer_standard_layout"),
UniformAndStorageBuffer8BitAccess = physicalDevice.IsDeviceExtensionPresent("VK_KHR_8bit_storage"), UniformAndStorageBuffer8BitAccess = physicalDevice.IsDeviceExtensionPresent("VK_KHR_8bit_storage"),
StorageBuffer8BitAccess = physicalDevice.IsDeviceExtensionPresent("VK_KHR_8bit_storage") || supportedPhysicalDeviceVulkan12Features.StorageBuffer8BitAccess, StorageBuffer8BitAccess = physicalDevice.IsDeviceExtensionPresent("VK_KHR_8bit_storage") || supportedPhysicalDeviceVulkan12Features.StorageBuffer8BitAccess,
}; };
pExtendedFeatures = &featuresVk12; pExtendedFeatures = &featuresVk12;