aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Vulkan/EnumConversion.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2023-05-21 14:04:21 -0300
committerGitHub <noreply@github.com>2023-05-21 14:04:21 -0300
commit5626f2ca1c49342b20772224f956147df6957b5a (patch)
tree9e60d080754e3686d75cc8606db5967126d2c1b9 /src/Ryujinx.Graphics.Vulkan/EnumConversion.cs
parent402f05b8ef013807997589ecc0a8ff50267dcd23 (diff)
Replace ShaderBindings with new ResourceLayout structure for Vulkan (#5025)1.1.812
* Introduce ResourceLayout * Part 1: Use new ResourceSegments array on UpdateAndBind * Part 2: Use ResourceLayout to build PipelineLayout * Delete old code * XML docs * Fix shader cache load NRE * Fix typo
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/EnumConversion.cs')
-rw-r--r--src/Ryujinx.Graphics.Vulkan/EnumConversion.cs52
1 files changed, 51 insertions, 1 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/EnumConversion.cs b/src/Ryujinx.Graphics.Vulkan/EnumConversion.cs
index 1f03b68c..55868ee3 100644
--- a/src/Ryujinx.Graphics.Vulkan/EnumConversion.cs
+++ b/src/Ryujinx.Graphics.Vulkan/EnumConversion.cs
@@ -36,6 +36,56 @@ namespace Ryujinx.Graphics.Vulkan
};
}
+ public static ShaderStageFlags Convert(this ResourceStages stages)
+ {
+ ShaderStageFlags stageFlags = stages.HasFlag(ResourceStages.Compute)
+ ? ShaderStageFlags.ComputeBit
+ : ShaderStageFlags.None;
+
+ if (stages.HasFlag(ResourceStages.Vertex))
+ {
+ stageFlags |= ShaderStageFlags.VertexBit;
+ }
+
+ if (stages.HasFlag(ResourceStages.TessellationControl))
+ {
+ stageFlags |= ShaderStageFlags.TessellationControlBit;
+ }
+
+ if (stages.HasFlag(ResourceStages.TessellationEvaluation))
+ {
+ stageFlags |= ShaderStageFlags.TessellationEvaluationBit;
+ }
+
+ if (stages.HasFlag(ResourceStages.Geometry))
+ {
+ stageFlags |= ShaderStageFlags.GeometryBit;
+ }
+
+ if (stages.HasFlag(ResourceStages.Fragment))
+ {
+ stageFlags |= ShaderStageFlags.FragmentBit;
+ }
+
+ return stageFlags;
+ }
+
+ public static DescriptorType Convert(this ResourceType type)
+ {
+ return type switch
+ {
+ ResourceType.UniformBuffer => DescriptorType.UniformBuffer,
+ ResourceType.StorageBuffer => DescriptorType.StorageBuffer,
+ ResourceType.Texture => DescriptorType.SampledImage,
+ ResourceType.Sampler => DescriptorType.Sampler,
+ ResourceType.TextureAndSampler => DescriptorType.CombinedImageSampler,
+ ResourceType.Image => DescriptorType.StorageImage,
+ ResourceType.BufferTexture => DescriptorType.UniformTexelBuffer,
+ ResourceType.BufferImage => DescriptorType.StorageTexelBuffer,
+ _ => throw new ArgumentException($"Invalid resource type \"{type}\".")
+ };
+ }
+
public static SamplerAddressMode Convert(this AddressMode mode)
{
return mode switch
@@ -48,7 +98,7 @@ namespace Ryujinx.Graphics.Vulkan
AddressMode.ClampToBorder => SamplerAddressMode.ClampToBorder,
AddressMode.MirroredRepeat => SamplerAddressMode.MirroredRepeat,
AddressMode.ClampToEdge => SamplerAddressMode.ClampToEdge,
- _ => LogInvalidAndReturn(mode, nameof(AddressMode), SamplerAddressMode.ClampToEdge) // TODO: Should be clamp.
+ _ => LogInvalidAndReturn(mode, nameof(AddressMode), SamplerAddressMode.ClampToEdge) // TODO: Should be clamp.
};
}