EnumConversion.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. using OpenTK.Graphics.OpenGL;
  2. using Ryujinx.Common.Logging;
  3. using Ryujinx.Graphics.GAL;
  4. namespace Ryujinx.Graphics.OpenGL
  5. {
  6. static class EnumConversion
  7. {
  8. public static TextureWrapMode Convert(this AddressMode mode)
  9. {
  10. switch (mode)
  11. {
  12. case AddressMode.Clamp:
  13. return TextureWrapMode.Clamp;
  14. case AddressMode.Repeat:
  15. return TextureWrapMode.Repeat;
  16. case AddressMode.MirrorClamp:
  17. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt;
  18. case AddressMode.MirrorClampToEdge:
  19. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt;
  20. case AddressMode.MirrorClampToBorder:
  21. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt;
  22. case AddressMode.ClampToBorder:
  23. return TextureWrapMode.ClampToBorder;
  24. case AddressMode.MirroredRepeat:
  25. return TextureWrapMode.MirroredRepeat;
  26. case AddressMode.ClampToEdge:
  27. return TextureWrapMode.ClampToEdge;
  28. }
  29. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(AddressMode)} enum value: {mode}.");
  30. return TextureWrapMode.Clamp;
  31. }
  32. public static All Convert(this BlendFactor factor)
  33. {
  34. switch (factor)
  35. {
  36. case BlendFactor.Zero:
  37. case BlendFactor.ZeroGl:
  38. return All.Zero;
  39. case BlendFactor.One:
  40. case BlendFactor.OneGl:
  41. return All.One;
  42. case BlendFactor.SrcColor:
  43. case BlendFactor.SrcColorGl:
  44. return All.SrcColor;
  45. case BlendFactor.OneMinusSrcColor:
  46. case BlendFactor.OneMinusSrcColorGl:
  47. return All.OneMinusSrcColor;
  48. case BlendFactor.SrcAlpha:
  49. case BlendFactor.SrcAlphaGl:
  50. return All.SrcAlpha;
  51. case BlendFactor.OneMinusSrcAlpha:
  52. case BlendFactor.OneMinusSrcAlphaGl:
  53. return All.OneMinusSrcAlpha;
  54. case BlendFactor.DstAlpha:
  55. case BlendFactor.DstAlphaGl:
  56. return All.DstAlpha;
  57. case BlendFactor.OneMinusDstAlpha:
  58. case BlendFactor.OneMinusDstAlphaGl:
  59. return All.OneMinusDstAlpha;
  60. case BlendFactor.DstColor:
  61. case BlendFactor.DstColorGl:
  62. return All.DstColor;
  63. case BlendFactor.OneMinusDstColor:
  64. case BlendFactor.OneMinusDstColorGl:
  65. return All.OneMinusDstColor;
  66. case BlendFactor.SrcAlphaSaturate:
  67. case BlendFactor.SrcAlphaSaturateGl:
  68. return All.SrcAlphaSaturate;
  69. case BlendFactor.Src1Color:
  70. case BlendFactor.Src1ColorGl:
  71. return All.Src1Color;
  72. case BlendFactor.OneMinusSrc1Color:
  73. case BlendFactor.OneMinusSrc1ColorGl:
  74. return All.OneMinusSrc1Color;
  75. case BlendFactor.Src1Alpha:
  76. case BlendFactor.Src1AlphaGl:
  77. return All.Src1Alpha;
  78. case BlendFactor.OneMinusSrc1Alpha:
  79. case BlendFactor.OneMinusSrc1AlphaGl:
  80. return All.OneMinusSrc1Alpha;
  81. case BlendFactor.ConstantColor:
  82. return All.ConstantColor;
  83. case BlendFactor.OneMinusConstantColor:
  84. return All.OneMinusConstantColor;
  85. case BlendFactor.ConstantAlpha:
  86. return All.ConstantAlpha;
  87. case BlendFactor.OneMinusConstantAlpha:
  88. return All.OneMinusConstantAlpha;
  89. }
  90. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(BlendFactor)} enum value: {factor}.");
  91. return All.Zero;
  92. }
  93. public static BlendEquationMode Convert(this BlendOp op)
  94. {
  95. switch (op)
  96. {
  97. case BlendOp.Add:
  98. case BlendOp.AddGl:
  99. return BlendEquationMode.FuncAdd;
  100. case BlendOp.Subtract:
  101. case BlendOp.SubtractGl:
  102. return BlendEquationMode.FuncSubtract;
  103. case BlendOp.ReverseSubtract:
  104. case BlendOp.ReverseSubtractGl:
  105. return BlendEquationMode.FuncReverseSubtract;
  106. case BlendOp.Minimum:
  107. case BlendOp.MinimumGl:
  108. return BlendEquationMode.Min;
  109. case BlendOp.Maximum:
  110. case BlendOp.MaximumGl:
  111. return BlendEquationMode.Max;
  112. }
  113. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(BlendOp)} enum value: {op}.");
  114. return BlendEquationMode.FuncAdd;
  115. }
  116. public static TextureCompareMode Convert(this CompareMode mode)
  117. {
  118. switch (mode)
  119. {
  120. case CompareMode.None:
  121. return TextureCompareMode.None;
  122. case CompareMode.CompareRToTexture:
  123. return TextureCompareMode.CompareRToTexture;
  124. }
  125. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(CompareMode)} enum value: {mode}.");
  126. return TextureCompareMode.None;
  127. }
  128. public static All Convert(this CompareOp op)
  129. {
  130. switch (op)
  131. {
  132. case CompareOp.Never:
  133. case CompareOp.NeverGl:
  134. return All.Never;
  135. case CompareOp.Less:
  136. case CompareOp.LessGl:
  137. return All.Less;
  138. case CompareOp.Equal:
  139. case CompareOp.EqualGl:
  140. return All.Equal;
  141. case CompareOp.LessOrEqual:
  142. case CompareOp.LessOrEqualGl:
  143. return All.Lequal;
  144. case CompareOp.Greater:
  145. case CompareOp.GreaterGl:
  146. return All.Greater;
  147. case CompareOp.NotEqual:
  148. case CompareOp.NotEqualGl:
  149. return All.Notequal;
  150. case CompareOp.GreaterOrEqual:
  151. case CompareOp.GreaterOrEqualGl:
  152. return All.Gequal;
  153. case CompareOp.Always:
  154. case CompareOp.AlwaysGl:
  155. return All.Always;
  156. }
  157. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(CompareOp)} enum value: {op}.");
  158. return All.Never;
  159. }
  160. public static ClipDepthMode Convert(this DepthMode mode)
  161. {
  162. switch (mode)
  163. {
  164. case DepthMode.MinusOneToOne:
  165. return ClipDepthMode.NegativeOneToOne;
  166. case DepthMode.ZeroToOne:
  167. return ClipDepthMode.ZeroToOne;
  168. }
  169. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(DepthMode)} enum value: {mode}.");
  170. return ClipDepthMode.NegativeOneToOne;
  171. }
  172. public static All Convert(this DepthStencilMode mode)
  173. {
  174. switch (mode)
  175. {
  176. case DepthStencilMode.Depth:
  177. return All.Depth;
  178. case DepthStencilMode.Stencil:
  179. return All.Stencil;
  180. }
  181. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(DepthStencilMode)} enum value: {mode}.");
  182. return All.Depth;
  183. }
  184. public static CullFaceMode Convert(this Face face)
  185. {
  186. switch (face)
  187. {
  188. case Face.Back:
  189. return CullFaceMode.Back;
  190. case Face.Front:
  191. return CullFaceMode.Front;
  192. case Face.FrontAndBack:
  193. return CullFaceMode.FrontAndBack;
  194. }
  195. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(Face)} enum value: {face}.");
  196. return CullFaceMode.Back;
  197. }
  198. public static FrontFaceDirection Convert(this FrontFace frontFace)
  199. {
  200. switch (frontFace)
  201. {
  202. case FrontFace.Clockwise:
  203. return FrontFaceDirection.Cw;
  204. case FrontFace.CounterClockwise:
  205. return FrontFaceDirection.Ccw;
  206. }
  207. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(FrontFace)} enum value: {frontFace}.");
  208. return FrontFaceDirection.Cw;
  209. }
  210. public static DrawElementsType Convert(this IndexType type)
  211. {
  212. switch (type)
  213. {
  214. case IndexType.UByte:
  215. return DrawElementsType.UnsignedByte;
  216. case IndexType.UShort:
  217. return DrawElementsType.UnsignedShort;
  218. case IndexType.UInt:
  219. return DrawElementsType.UnsignedInt;
  220. }
  221. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(IndexType)} enum value: {type}.");
  222. return DrawElementsType.UnsignedByte;
  223. }
  224. public static TextureMagFilter Convert(this MagFilter filter)
  225. {
  226. switch (filter)
  227. {
  228. case MagFilter.Nearest:
  229. return TextureMagFilter.Nearest;
  230. case MagFilter.Linear:
  231. return TextureMagFilter.Linear;
  232. }
  233. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(MagFilter)} enum value: {filter}.");
  234. return TextureMagFilter.Nearest;
  235. }
  236. public static TextureMinFilter Convert(this MinFilter filter)
  237. {
  238. switch (filter)
  239. {
  240. case MinFilter.Nearest:
  241. return TextureMinFilter.Nearest;
  242. case MinFilter.Linear:
  243. return TextureMinFilter.Linear;
  244. case MinFilter.NearestMipmapNearest:
  245. return TextureMinFilter.NearestMipmapNearest;
  246. case MinFilter.LinearMipmapNearest:
  247. return TextureMinFilter.LinearMipmapNearest;
  248. case MinFilter.NearestMipmapLinear:
  249. return TextureMinFilter.NearestMipmapLinear;
  250. case MinFilter.LinearMipmapLinear:
  251. return TextureMinFilter.LinearMipmapLinear;
  252. }
  253. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(MinFilter)} enum value: {filter}.");
  254. return TextureMinFilter.Nearest;
  255. }
  256. public static PrimitiveType Convert(this PrimitiveTopology topology)
  257. {
  258. switch (topology)
  259. {
  260. case PrimitiveTopology.Points:
  261. return PrimitiveType.Points;
  262. case PrimitiveTopology.Lines:
  263. return PrimitiveType.Lines;
  264. case PrimitiveTopology.LineLoop:
  265. return PrimitiveType.LineLoop;
  266. case PrimitiveTopology.LineStrip:
  267. return PrimitiveType.LineStrip;
  268. case PrimitiveTopology.Triangles:
  269. return PrimitiveType.Triangles;
  270. case PrimitiveTopology.TriangleStrip:
  271. return PrimitiveType.TriangleStrip;
  272. case PrimitiveTopology.TriangleFan:
  273. return PrimitiveType.TriangleFan;
  274. case PrimitiveTopology.Quads:
  275. return PrimitiveType.Quads;
  276. case PrimitiveTopology.QuadStrip:
  277. return PrimitiveType.QuadStrip;
  278. case PrimitiveTopology.Polygon:
  279. return PrimitiveType.Polygon;
  280. case PrimitiveTopology.LinesAdjacency:
  281. return PrimitiveType.LinesAdjacency;
  282. case PrimitiveTopology.LineStripAdjacency:
  283. return PrimitiveType.LineStripAdjacency;
  284. case PrimitiveTopology.TrianglesAdjacency:
  285. return PrimitiveType.TrianglesAdjacency;
  286. case PrimitiveTopology.TriangleStripAdjacency:
  287. return PrimitiveType.TriangleStripAdjacency;
  288. case PrimitiveTopology.Patches:
  289. return PrimitiveType.Patches;
  290. }
  291. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(PrimitiveTopology)} enum value: {topology}.");
  292. return PrimitiveType.Points;
  293. }
  294. public static OpenTK.Graphics.OpenGL.StencilOp Convert(this GAL.StencilOp op)
  295. {
  296. switch (op)
  297. {
  298. case GAL.StencilOp.Keep:
  299. return OpenTK.Graphics.OpenGL.StencilOp.Keep;
  300. case GAL.StencilOp.Zero:
  301. return OpenTK.Graphics.OpenGL.StencilOp.Zero;
  302. case GAL.StencilOp.Replace:
  303. return OpenTK.Graphics.OpenGL.StencilOp.Replace;
  304. case GAL.StencilOp.IncrementAndClamp:
  305. return OpenTK.Graphics.OpenGL.StencilOp.Incr;
  306. case GAL.StencilOp.DecrementAndClamp:
  307. return OpenTK.Graphics.OpenGL.StencilOp.Decr;
  308. case GAL.StencilOp.Invert:
  309. return OpenTK.Graphics.OpenGL.StencilOp.Invert;
  310. case GAL.StencilOp.IncrementAndWrap:
  311. return OpenTK.Graphics.OpenGL.StencilOp.IncrWrap;
  312. case GAL.StencilOp.DecrementAndWrap:
  313. return OpenTK.Graphics.OpenGL.StencilOp.DecrWrap;
  314. }
  315. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(GAL.StencilOp)} enum value: {op}.");
  316. return OpenTK.Graphics.OpenGL.StencilOp.Keep;
  317. }
  318. public static All Convert(this SwizzleComponent swizzleComponent)
  319. {
  320. switch (swizzleComponent)
  321. {
  322. case SwizzleComponent.Zero:
  323. return All.Zero;
  324. case SwizzleComponent.One:
  325. return All.One;
  326. case SwizzleComponent.Red:
  327. return All.Red;
  328. case SwizzleComponent.Green:
  329. return All.Green;
  330. case SwizzleComponent.Blue:
  331. return All.Blue;
  332. case SwizzleComponent.Alpha:
  333. return All.Alpha;
  334. }
  335. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(SwizzleComponent)} enum value: {swizzleComponent}.");
  336. return All.Zero;
  337. }
  338. public static ImageTarget ConvertToImageTarget(this Target target)
  339. {
  340. return (ImageTarget)target.Convert();
  341. }
  342. public static TextureTarget Convert(this Target target)
  343. {
  344. switch (target)
  345. {
  346. case Target.Texture1D:
  347. return TextureTarget.Texture1D;
  348. case Target.Texture2D:
  349. return TextureTarget.Texture2D;
  350. case Target.Texture3D:
  351. return TextureTarget.Texture3D;
  352. case Target.Texture1DArray:
  353. return TextureTarget.Texture1DArray;
  354. case Target.Texture2DArray:
  355. return TextureTarget.Texture2DArray;
  356. case Target.Texture2DMultisample:
  357. return TextureTarget.Texture2DMultisample;
  358. case Target.Rectangle:
  359. return TextureTarget.TextureRectangle;
  360. case Target.Cubemap:
  361. return TextureTarget.TextureCubeMap;
  362. case Target.CubemapArray:
  363. return TextureTarget.TextureCubeMapArray;
  364. case Target.TextureBuffer:
  365. return TextureTarget.TextureBuffer;
  366. }
  367. Logger.PrintDebug(LogClass.Gpu, $"Invalid {nameof(Target)} enum value: {target}.");
  368. return TextureTarget.Texture2D;
  369. }
  370. }
  371. }