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 }