/ src / Ryujinx.Graphics.GAL / Capabilities.cs
Capabilities.cs
  1  using Ryujinx.Graphics.Shader.Translation;
  2  
  3  namespace Ryujinx.Graphics.GAL
  4  {
  5      public readonly struct Capabilities
  6      {
  7          public readonly TargetApi Api;
  8          public readonly string VendorName;
  9          public readonly SystemMemoryType MemoryType;
 10  
 11          public readonly bool HasFrontFacingBug;
 12          public readonly bool HasVectorIndexingBug;
 13          public readonly bool NeedsFragmentOutputSpecialization;
 14          public readonly bool ReduceShaderPrecision;
 15  
 16          public readonly bool SupportsAstcCompression;
 17          public readonly bool SupportsBc123Compression;
 18          public readonly bool SupportsBc45Compression;
 19          public readonly bool SupportsBc67Compression;
 20          public readonly bool SupportsEtc2Compression;
 21          public readonly bool Supports3DTextureCompression;
 22          public readonly bool SupportsBgraFormat;
 23          public readonly bool SupportsR4G4Format;
 24          public readonly bool SupportsR4G4B4A4Format;
 25          public readonly bool SupportsScaledVertexFormats;
 26          public readonly bool SupportsSnormBufferTextureFormat;
 27          public readonly bool SupportsSparseBuffer;
 28          public readonly bool Supports5BitComponentFormat;
 29          public readonly bool SupportsBlendEquationAdvanced;
 30          public readonly bool SupportsFragmentShaderInterlock;
 31          public readonly bool SupportsFragmentShaderOrderingIntel;
 32          public readonly bool SupportsGeometryShader;
 33          public readonly bool SupportsGeometryShaderPassthrough;
 34          public readonly bool SupportsTransformFeedback;
 35          public readonly bool SupportsImageLoadFormatted;
 36          public readonly bool SupportsLayerVertexTessellation;
 37          public readonly bool SupportsMismatchingViewFormat;
 38          public readonly bool SupportsCubemapView;
 39          public readonly bool SupportsNonConstantTextureOffset;
 40          public readonly bool SupportsQuads;
 41          public readonly bool SupportsSeparateSampler;
 42          public readonly bool SupportsShaderBallot;
 43          public readonly bool SupportsShaderBarrierDivergence;
 44          public readonly bool SupportsShaderFloat64;
 45          public readonly bool SupportsTextureGatherOffsets;
 46          public readonly bool SupportsTextureShadowLod;
 47          public readonly bool SupportsVertexStoreAndAtomics;
 48          public readonly bool SupportsViewportIndexVertexTessellation;
 49          public readonly bool SupportsViewportMask;
 50          public readonly bool SupportsViewportSwizzle;
 51          public readonly bool SupportsIndirectParameters;
 52          public readonly bool SupportsDepthClipControl;
 53  
 54          public readonly int UniformBufferSetIndex;
 55          public readonly int StorageBufferSetIndex;
 56          public readonly int TextureSetIndex;
 57          public readonly int ImageSetIndex;
 58          public readonly int ExtraSetBaseIndex;
 59          public readonly int MaximumExtraSets;
 60  
 61          public readonly uint MaximumUniformBuffersPerStage;
 62          public readonly uint MaximumStorageBuffersPerStage;
 63          public readonly uint MaximumTexturesPerStage;
 64          public readonly uint MaximumImagesPerStage;
 65  
 66          public readonly int MaximumComputeSharedMemorySize;
 67          public readonly float MaximumSupportedAnisotropy;
 68          public readonly int ShaderSubgroupSize;
 69          public readonly int StorageBufferOffsetAlignment;
 70          public readonly int TextureBufferOffsetAlignment;
 71  
 72          public readonly int GatherBiasPrecision;
 73  
 74          public readonly ulong MaximumGpuMemory;
 75  
 76          public Capabilities(
 77              TargetApi api,
 78              string vendorName,
 79              SystemMemoryType memoryType,
 80              bool hasFrontFacingBug,
 81              bool hasVectorIndexingBug,
 82              bool needsFragmentOutputSpecialization,
 83              bool reduceShaderPrecision,
 84              bool supportsAstcCompression,
 85              bool supportsBc123Compression,
 86              bool supportsBc45Compression,
 87              bool supportsBc67Compression,
 88              bool supportsEtc2Compression,
 89              bool supports3DTextureCompression,
 90              bool supportsBgraFormat,
 91              bool supportsR4G4Format,
 92              bool supportsR4G4B4A4Format,
 93              bool supportsScaledVertexFormats,
 94              bool supportsSnormBufferTextureFormat,
 95              bool supports5BitComponentFormat,
 96              bool supportsSparseBuffer,
 97              bool supportsBlendEquationAdvanced,
 98              bool supportsFragmentShaderInterlock,
 99              bool supportsFragmentShaderOrderingIntel,
100              bool supportsGeometryShader,
101              bool supportsGeometryShaderPassthrough,
102              bool supportsTransformFeedback,
103              bool supportsImageLoadFormatted,
104              bool supportsLayerVertexTessellation,
105              bool supportsMismatchingViewFormat,
106              bool supportsCubemapView,
107              bool supportsNonConstantTextureOffset,
108              bool supportsQuads,
109              bool supportsSeparateSampler,
110              bool supportsShaderBallot,
111              bool supportsShaderBarrierDivergence,
112              bool supportsShaderFloat64,
113              bool supportsTextureGatherOffsets,
114              bool supportsTextureShadowLod,
115              bool supportsVertexStoreAndAtomics,
116              bool supportsViewportIndexVertexTessellation,
117              bool supportsViewportMask,
118              bool supportsViewportSwizzle,
119              bool supportsIndirectParameters,
120              bool supportsDepthClipControl,
121              int uniformBufferSetIndex,
122              int storageBufferSetIndex,
123              int textureSetIndex,
124              int imageSetIndex,
125              int extraSetBaseIndex,
126              int maximumExtraSets,
127              uint maximumUniformBuffersPerStage,
128              uint maximumStorageBuffersPerStage,
129              uint maximumTexturesPerStage,
130              uint maximumImagesPerStage,
131              int maximumComputeSharedMemorySize,
132              float maximumSupportedAnisotropy,
133              int shaderSubgroupSize,
134              int storageBufferOffsetAlignment,
135              int textureBufferOffsetAlignment,
136              int gatherBiasPrecision,
137              ulong maximumGpuMemory)
138          {
139              Api = api;
140              VendorName = vendorName;
141              MemoryType = memoryType;
142              HasFrontFacingBug = hasFrontFacingBug;
143              HasVectorIndexingBug = hasVectorIndexingBug;
144              NeedsFragmentOutputSpecialization = needsFragmentOutputSpecialization;
145              ReduceShaderPrecision = reduceShaderPrecision;
146              SupportsAstcCompression = supportsAstcCompression;
147              SupportsBc123Compression = supportsBc123Compression;
148              SupportsBc45Compression = supportsBc45Compression;
149              SupportsBc67Compression = supportsBc67Compression;
150              SupportsEtc2Compression = supportsEtc2Compression;
151              Supports3DTextureCompression = supports3DTextureCompression;
152              SupportsBgraFormat = supportsBgraFormat;
153              SupportsR4G4Format = supportsR4G4Format;
154              SupportsR4G4B4A4Format = supportsR4G4B4A4Format;
155              SupportsScaledVertexFormats = supportsScaledVertexFormats;
156              SupportsSnormBufferTextureFormat = supportsSnormBufferTextureFormat;
157              Supports5BitComponentFormat = supports5BitComponentFormat;
158              SupportsSparseBuffer = supportsSparseBuffer;
159              SupportsBlendEquationAdvanced = supportsBlendEquationAdvanced;
160              SupportsFragmentShaderInterlock = supportsFragmentShaderInterlock;
161              SupportsFragmentShaderOrderingIntel = supportsFragmentShaderOrderingIntel;
162              SupportsGeometryShader = supportsGeometryShader;
163              SupportsGeometryShaderPassthrough = supportsGeometryShaderPassthrough;
164              SupportsTransformFeedback = supportsTransformFeedback;
165              SupportsImageLoadFormatted = supportsImageLoadFormatted;
166              SupportsLayerVertexTessellation = supportsLayerVertexTessellation;
167              SupportsMismatchingViewFormat = supportsMismatchingViewFormat;
168              SupportsCubemapView = supportsCubemapView;
169              SupportsNonConstantTextureOffset = supportsNonConstantTextureOffset;
170              SupportsQuads = supportsQuads;
171              SupportsSeparateSampler = supportsSeparateSampler;
172              SupportsShaderBallot = supportsShaderBallot;
173              SupportsShaderBarrierDivergence = supportsShaderBarrierDivergence;
174              SupportsShaderFloat64 = supportsShaderFloat64;
175              SupportsTextureGatherOffsets = supportsTextureGatherOffsets;
176              SupportsTextureShadowLod = supportsTextureShadowLod;
177              SupportsVertexStoreAndAtomics = supportsVertexStoreAndAtomics;
178              SupportsViewportIndexVertexTessellation = supportsViewportIndexVertexTessellation;
179              SupportsViewportMask = supportsViewportMask;
180              SupportsViewportSwizzle = supportsViewportSwizzle;
181              SupportsIndirectParameters = supportsIndirectParameters;
182              SupportsDepthClipControl = supportsDepthClipControl;
183              UniformBufferSetIndex = uniformBufferSetIndex;
184              StorageBufferSetIndex = storageBufferSetIndex;
185              TextureSetIndex = textureSetIndex;
186              ImageSetIndex = imageSetIndex;
187              ExtraSetBaseIndex = extraSetBaseIndex;
188              MaximumExtraSets = maximumExtraSets;
189              MaximumUniformBuffersPerStage = maximumUniformBuffersPerStage;
190              MaximumStorageBuffersPerStage = maximumStorageBuffersPerStage;
191              MaximumTexturesPerStage = maximumTexturesPerStage;
192              MaximumImagesPerStage = maximumImagesPerStage;
193              MaximumComputeSharedMemorySize = maximumComputeSharedMemorySize;
194              MaximumSupportedAnisotropy = maximumSupportedAnisotropy;
195              ShaderSubgroupSize = shaderSubgroupSize;
196              StorageBufferOffsetAlignment = storageBufferOffsetAlignment;
197              TextureBufferOffsetAlignment = textureBufferOffsetAlignment;
198              GatherBiasPrecision = gatherBiasPrecision;
199              MaximumGpuMemory = maximumGpuMemory;
200          }
201      }
202  }