TextureTarget.cs 3.2 KB

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