aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
diff options
context:
space:
mode:
authorMary <mary@mary.zone>2023-02-15 09:41:48 +0100
committerGitHub <noreply@github.com>2023-02-15 08:41:48 +0000
commit17078ad929f9942d2b03ede00b30867aeab924de (patch)
tree172280b47a38ecf7d1ff101d61907a37daa2802e /Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
parent32450d45de7889318e0f289fc52b3fffc62edf60 (diff)
vulkan: Respect VK_KHR_portability_subset vertex stride alignment (#4419)1.1.621
* vulkan: Respect VK_KHR_portability_subset vertex stride alignment We were hardcoding alignment to 4, but by specs it can be any values that is a power of 2. This also enable VK_KHR_portability_subset if present as per specs requirements. * address gdkchan's comment * Make NeedsVertexBufferAlignment internal
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/VulkanRenderer.cs')
-rw-r--r--Ryujinx.Graphics.Vulkan/VulkanRenderer.cs13
1 files changed, 8 insertions, 5 deletions
diff --git a/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
index 595e033c..a7b4b41a 100644
--- a/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
+++ b/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs
@@ -234,10 +234,12 @@ namespace Ryujinx.Graphics.Vulkan
Api.GetPhysicalDeviceFeatures2(_physicalDevice, &features2);
var portabilityFlags = PortabilitySubsetFlags.None;
+ uint vertexBufferAlignment = 1;
if (usePortability)
{
- portabilityFlags |= propertiesPortabilitySubset.MinVertexInputBindingStrideAlignment > 1 ? PortabilitySubsetFlags.VertexBufferAlignment4B : 0;
+ vertexBufferAlignment = propertiesPortabilitySubset.MinVertexInputBindingStrideAlignment;
+
portabilityFlags |= featuresPortabilitySubset.TriangleFans ? 0 : PortabilitySubsetFlags.NoTriangleFans;
portabilityFlags |= featuresPortabilitySubset.PointPolygons ? 0 : PortabilitySubsetFlags.NoPointMode;
portabilityFlags |= featuresPortabilitySubset.ImageView2DOn3DImage ? 0 : PortabilitySubsetFlags.No3DImageView;
@@ -278,7 +280,8 @@ namespace Ryujinx.Graphics.Vulkan
propertiesSubgroupSizeControl.MaxSubgroupSize,
propertiesSubgroupSizeControl.RequiredSubgroupSizeStages,
supportedSampleCounts,
- portabilityFlags);
+ portabilityFlags,
+ vertexBufferAlignment);
MemoryAllocator = new MemoryAllocator(Api, _physicalDevice, _device, properties.Limits.MaxMemoryAllocationCount);
@@ -636,11 +639,11 @@ namespace Ryujinx.Graphics.Vulkan
PrintGpuInformation();
}
- public bool NeedsVertexBufferAlignment(int attrScalarAlignment, out int alignment)
+ internal bool NeedsVertexBufferAlignment(int attrScalarAlignment, out int alignment)
{
- if (Capabilities.PortabilitySubset.HasFlag(PortabilitySubsetFlags.VertexBufferAlignment4B))
+ if (Capabilities.VertexBufferAlignment > 1)
{
- alignment = 4;
+ alignment = (int)Capabilities.VertexBufferAlignment;
return true;
}