Properly fix usage realted validation error by setting Extended Usage image creation flag.
This commit is contained in:
parent
2a9514c942
commit
cc4f6016fd
3 changed files with 6 additions and 8 deletions
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue