/ src / Ryujinx.Graphics.Gpu / Image / TextureTarget.cs
TextureTarget.cs
 1  using Ryujinx.Graphics.GAL;
 2  using Ryujinx.Graphics.Shader;
 3  
 4  namespace Ryujinx.Graphics.Gpu.Image
 5  {
 6      /// <summary>
 7      /// Texture target.
 8      /// </summary>
 9      enum TextureTarget : byte
10      {
11          Texture1D,
12          Texture2D,
13          Texture3D,
14          Cubemap,
15          Texture1DArray,
16          Texture2DArray,
17          TextureBuffer,
18          Texture2DRect,
19          CubemapArray,
20      }
21  
22      static class TextureTargetConverter
23      {
24          /// <summary>
25          /// Converts the texture target enum to a host compatible, Graphics Abstraction Layer enum.
26          /// </summary>
27          /// <param name="target">The target enum to convert</param>
28          /// <param name="isMultisample">True if the texture is a multisampled texture</param>
29          /// <returns>The host compatible texture target</returns>
30          public static Target Convert(this TextureTarget target, bool isMultisample)
31          {
32              if (isMultisample)
33              {
34                  switch (target)
35                  {
36                      case TextureTarget.Texture2D:
37                          return Target.Texture2DMultisample;
38                      case TextureTarget.Texture2DArray:
39                          return Target.Texture2DMultisampleArray;
40                  }
41              }
42              else
43              {
44                  switch (target)
45                  {
46                      case TextureTarget.Texture1D:
47                          return Target.Texture1D;
48                      case TextureTarget.Texture2D:
49                          return Target.Texture2D;
50                      case TextureTarget.Texture2DRect:
51                          return Target.Texture2D;
52                      case TextureTarget.Texture3D:
53                          return Target.Texture3D;
54                      case TextureTarget.Texture1DArray:
55                          return Target.Texture1DArray;
56                      case TextureTarget.Texture2DArray:
57                          return Target.Texture2DArray;
58                      case TextureTarget.Cubemap:
59                          return Target.Cubemap;
60                      case TextureTarget.CubemapArray:
61                          return Target.CubemapArray;
62                      case TextureTarget.TextureBuffer:
63                          return Target.TextureBuffer;
64                  }
65              }
66  
67              return Target.Texture1D;
68          }
69  
70          /// <summary>
71          /// Converts the texture target enum to a shader sampler type.
72          /// </summary>
73          /// <param name="target">The target enum to convert</param>
74          /// <returns>The shader sampler type</returns>
75          public static SamplerType ConvertSamplerType(this TextureTarget target)
76          {
77              return target switch
78              {
79                  TextureTarget.Texture1D => SamplerType.Texture1D,
80                  TextureTarget.Texture2D => SamplerType.Texture2D,
81                  TextureTarget.Texture3D => SamplerType.Texture3D,
82                  TextureTarget.Cubemap => SamplerType.TextureCube,
83                  TextureTarget.Texture1DArray => SamplerType.Texture1D | SamplerType.Array,
84                  TextureTarget.Texture2DArray => SamplerType.Texture2D | SamplerType.Array,
85                  TextureTarget.TextureBuffer => SamplerType.TextureBuffer,
86                  TextureTarget.Texture2DRect => SamplerType.Texture2D,
87                  TextureTarget.CubemapArray => SamplerType.TextureCube | SamplerType.Array,
88                  _ => SamplerType.Texture2D,
89              };
90          }
91      }
92  }