/ src / Ryujinx.Graphics.Shader / TextureFormat.cs
TextureFormat.cs
  1  using Ryujinx.Graphics.Shader.Translation;
  2  
  3  namespace Ryujinx.Graphics.Shader
  4  {
  5      public enum TextureFormat
  6      {
  7          Unknown,
  8          R8Unorm,
  9          R8Snorm,
 10          R8Uint,
 11          R8Sint,
 12          R16Float,
 13          R16Unorm,
 14          R16Snorm,
 15          R16Uint,
 16          R16Sint,
 17          R32Float,
 18          R32Uint,
 19          R32Sint,
 20          R8G8Unorm,
 21          R8G8Snorm,
 22          R8G8Uint,
 23          R8G8Sint,
 24          R16G16Float,
 25          R16G16Unorm,
 26          R16G16Snorm,
 27          R16G16Uint,
 28          R16G16Sint,
 29          R32G32Float,
 30          R32G32Uint,
 31          R32G32Sint,
 32          R8G8B8A8Unorm,
 33          R8G8B8A8Snorm,
 34          R8G8B8A8Uint,
 35          R8G8B8A8Sint,
 36          R16G16B16A16Float,
 37          R16G16B16A16Unorm,
 38          R16G16B16A16Snorm,
 39          R16G16B16A16Uint,
 40          R16G16B16A16Sint,
 41          R32G32B32A32Float,
 42          R32G32B32A32Uint,
 43          R32G32B32A32Sint,
 44          R10G10B10A2Unorm,
 45          R10G10B10A2Uint,
 46          R11G11B10Float,
 47      }
 48  
 49      static class TextureFormatExtensions
 50      {
 51          public static string ToGlslFormat(this TextureFormat format)
 52          {
 53              return format switch
 54              {
 55  #pragma warning disable IDE0055 // Disable formatting
 56                  TextureFormat.R8Unorm           => "r8",
 57                  TextureFormat.R8Snorm           => "r8_snorm",
 58                  TextureFormat.R8Uint            => "r8ui",
 59                  TextureFormat.R8Sint            => "r8i",
 60                  TextureFormat.R16Float          => "r16f",
 61                  TextureFormat.R16Unorm          => "r16",
 62                  TextureFormat.R16Snorm          => "r16_snorm",
 63                  TextureFormat.R16Uint           => "r16ui",
 64                  TextureFormat.R16Sint           => "r16i",
 65                  TextureFormat.R32Float          => "r32f",
 66                  TextureFormat.R32Uint           => "r32ui",
 67                  TextureFormat.R32Sint           => "r32i",
 68                  TextureFormat.R8G8Unorm         => "rg8",
 69                  TextureFormat.R8G8Snorm         => "rg8_snorm",
 70                  TextureFormat.R8G8Uint          => "rg8ui",
 71                  TextureFormat.R8G8Sint          => "rg8i",
 72                  TextureFormat.R16G16Float       => "rg16f",
 73                  TextureFormat.R16G16Unorm       => "rg16",
 74                  TextureFormat.R16G16Snorm       => "rg16_snorm",
 75                  TextureFormat.R16G16Uint        => "rg16ui",
 76                  TextureFormat.R16G16Sint        => "rg16i",
 77                  TextureFormat.R32G32Float       => "rg32f",
 78                  TextureFormat.R32G32Uint        => "rg32ui",
 79                  TextureFormat.R32G32Sint        => "rg32i",
 80                  TextureFormat.R8G8B8A8Unorm     => "rgba8",
 81                  TextureFormat.R8G8B8A8Snorm     => "rgba8_snorm",
 82                  TextureFormat.R8G8B8A8Uint      => "rgba8ui",
 83                  TextureFormat.R8G8B8A8Sint      => "rgba8i",
 84                  TextureFormat.R16G16B16A16Float => "rgba16f",
 85                  TextureFormat.R16G16B16A16Unorm => "rgba16",
 86                  TextureFormat.R16G16B16A16Snorm => "rgba16_snorm",
 87                  TextureFormat.R16G16B16A16Uint  => "rgba16ui",
 88                  TextureFormat.R16G16B16A16Sint  => "rgba16i",
 89                  TextureFormat.R32G32B32A32Float => "rgba32f",
 90                  TextureFormat.R32G32B32A32Uint  => "rgba32ui",
 91                  TextureFormat.R32G32B32A32Sint  => "rgba32i",
 92                  TextureFormat.R10G10B10A2Unorm  => "rgb10_a2",
 93                  TextureFormat.R10G10B10A2Uint   => "rgb10_a2ui",
 94                  TextureFormat.R11G11B10Float    => "r11f_g11f_b10f",
 95                  _                               => string.Empty,
 96  #pragma warning restore IDE0055
 97              };
 98          }
 99  
100          public static AggregateType GetComponentType(this TextureFormat format)
101          {
102              switch (format)
103              {
104                  case TextureFormat.R8Uint:
105                  case TextureFormat.R16Uint:
106                  case TextureFormat.R32Uint:
107                  case TextureFormat.R8G8Uint:
108                  case TextureFormat.R16G16Uint:
109                  case TextureFormat.R32G32Uint:
110                  case TextureFormat.R8G8B8A8Uint:
111                  case TextureFormat.R16G16B16A16Uint:
112                  case TextureFormat.R32G32B32A32Uint:
113                  case TextureFormat.R10G10B10A2Uint:
114                      return AggregateType.U32;
115                  case TextureFormat.R8Sint:
116                  case TextureFormat.R16Sint:
117                  case TextureFormat.R32Sint:
118                  case TextureFormat.R8G8Sint:
119                  case TextureFormat.R16G16Sint:
120                  case TextureFormat.R32G32Sint:
121                  case TextureFormat.R8G8B8A8Sint:
122                  case TextureFormat.R16G16B16A16Sint:
123                  case TextureFormat.R32G32B32A32Sint:
124                      return AggregateType.S32;
125              }
126  
127              return AggregateType.FP32;
128          }
129      }
130  }