| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- using Ryujinx.Graphics.Shader.StructuredIr;
- using System;
- namespace Ryujinx.Graphics.Shader
- {
- [Flags]
- public enum SamplerType
- {
- None = 0,
- Texture1D,
- TextureBuffer,
- Texture2D,
- Texture3D,
- TextureCube,
- Mask = 0xff,
- Array = 1 << 8,
- Indexed = 1 << 9,
- Multisample = 1 << 10,
- Shadow = 1 << 11
- }
- static class SamplerTypeExtensions
- {
- public static int GetDimensions(this SamplerType type)
- {
- switch (type & SamplerType.Mask)
- {
- case SamplerType.Texture1D: return 1;
- case SamplerType.TextureBuffer: return 1;
- case SamplerType.Texture2D: return 2;
- case SamplerType.Texture3D: return 3;
- case SamplerType.TextureCube: return 3;
- }
- throw new ArgumentException($"Invalid sampler type \"{type}\".");
- }
- public static string ToGlslSamplerType(this SamplerType type)
- {
- string typeName;
- switch (type & SamplerType.Mask)
- {
- case SamplerType.Texture1D: typeName = "sampler1D"; break;
- case SamplerType.TextureBuffer: typeName = "samplerBuffer"; break;
- case SamplerType.Texture2D: typeName = "sampler2D"; break;
- case SamplerType.Texture3D: typeName = "sampler3D"; break;
- case SamplerType.TextureCube: typeName = "samplerCube"; break;
- default: throw new ArgumentException($"Invalid sampler type \"{type}\".");
- }
- if ((type & SamplerType.Multisample) != 0)
- {
- typeName += "MS";
- }
- if ((type & SamplerType.Array) != 0)
- {
- typeName += "Array";
- }
- if ((type & SamplerType.Shadow) != 0)
- {
- typeName += "Shadow";
- }
- return typeName;
- }
- public static string ToGlslImageType(this SamplerType type, VariableType componentType)
- {
- string typeName;
- switch (type & SamplerType.Mask)
- {
- case SamplerType.Texture1D: typeName = "image1D"; break;
- case SamplerType.TextureBuffer: typeName = "imageBuffer"; break;
- case SamplerType.Texture2D: typeName = "image2D"; break;
- case SamplerType.Texture3D: typeName = "image3D"; break;
- case SamplerType.TextureCube: typeName = "imageCube"; break;
- default: throw new ArgumentException($"Invalid sampler type \"{type}\".");
- }
- if ((type & SamplerType.Multisample) != 0)
- {
- typeName += "MS";
- }
- if ((type & SamplerType.Array) != 0)
- {
- typeName += "Array";
- }
- switch (componentType)
- {
- case VariableType.U32: typeName = 'u' + typeName; break;
- case VariableType.S32: typeName = 'i' + typeName; break;
- }
- return typeName;
- }
- }
- }
|