EnumConversion.cs 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. using OpenTK.Graphics.OpenGL;
  2. using Ryujinx.Common.Logging;
  3. using Ryujinx.Graphics.GAL;
  4. using Ryujinx.Graphics.Shader;
  5. namespace Ryujinx.Graphics.OpenGL
  6. {
  7. static class EnumConversion
  8. {
  9. public static TextureWrapMode Convert(this AddressMode mode)
  10. {
  11. switch (mode)
  12. {
  13. case AddressMode.Clamp:
  14. return TextureWrapMode.Clamp;
  15. case AddressMode.Repeat:
  16. return TextureWrapMode.Repeat;
  17. case AddressMode.MirrorClamp:
  18. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampExt;
  19. case AddressMode.MirrorClampToEdge:
  20. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToEdgeExt;
  21. case AddressMode.MirrorClampToBorder:
  22. return (TextureWrapMode)ExtTextureMirrorClamp.MirrorClampToBorderExt;
  23. case AddressMode.ClampToBorder:
  24. return TextureWrapMode.ClampToBorder;
  25. case AddressMode.MirroredRepeat:
  26. return TextureWrapMode.MirroredRepeat;
  27. case AddressMode.ClampToEdge:
  28. return TextureWrapMode.ClampToEdge;
  29. }
  30. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(AddressMode)} enum value: {mode}.");
  31. return TextureWrapMode.Clamp;
  32. }
  33. public static NvBlendEquationAdvanced Convert(this AdvancedBlendOp op)
  34. {
  35. switch (op)
  36. {
  37. case AdvancedBlendOp.Zero:
  38. return NvBlendEquationAdvanced.Zero;
  39. case AdvancedBlendOp.Src:
  40. return NvBlendEquationAdvanced.SrcNv;
  41. case AdvancedBlendOp.Dst:
  42. return NvBlendEquationAdvanced.DstNv;
  43. case AdvancedBlendOp.SrcOver:
  44. return NvBlendEquationAdvanced.SrcOverNv;
  45. case AdvancedBlendOp.DstOver:
  46. return NvBlendEquationAdvanced.DstOverNv;
  47. case AdvancedBlendOp.SrcIn:
  48. return NvBlendEquationAdvanced.SrcInNv;
  49. case AdvancedBlendOp.DstIn:
  50. return NvBlendEquationAdvanced.DstInNv;
  51. case AdvancedBlendOp.SrcOut:
  52. return NvBlendEquationAdvanced.SrcOutNv;
  53. case AdvancedBlendOp.DstOut:
  54. return NvBlendEquationAdvanced.DstOutNv;
  55. case AdvancedBlendOp.SrcAtop:
  56. return NvBlendEquationAdvanced.SrcAtopNv;
  57. case AdvancedBlendOp.DstAtop:
  58. return NvBlendEquationAdvanced.DstAtopNv;
  59. case AdvancedBlendOp.Xor:
  60. return NvBlendEquationAdvanced.XorNv;
  61. case AdvancedBlendOp.Plus:
  62. return NvBlendEquationAdvanced.PlusNv;
  63. case AdvancedBlendOp.PlusClamped:
  64. return NvBlendEquationAdvanced.PlusClampedNv;
  65. case AdvancedBlendOp.PlusClampedAlpha:
  66. return NvBlendEquationAdvanced.PlusClampedAlphaNv;
  67. case AdvancedBlendOp.PlusDarker:
  68. return NvBlendEquationAdvanced.PlusDarkerNv;
  69. case AdvancedBlendOp.Multiply:
  70. return NvBlendEquationAdvanced.MultiplyNv;
  71. case AdvancedBlendOp.Screen:
  72. return NvBlendEquationAdvanced.ScreenNv;
  73. case AdvancedBlendOp.Overlay:
  74. return NvBlendEquationAdvanced.OverlayNv;
  75. case AdvancedBlendOp.Darken:
  76. return NvBlendEquationAdvanced.DarkenNv;
  77. case AdvancedBlendOp.Lighten:
  78. return NvBlendEquationAdvanced.LightenNv;
  79. case AdvancedBlendOp.ColorDodge:
  80. return NvBlendEquationAdvanced.ColordodgeNv;
  81. case AdvancedBlendOp.ColorBurn:
  82. return NvBlendEquationAdvanced.ColorburnNv;
  83. case AdvancedBlendOp.HardLight:
  84. return NvBlendEquationAdvanced.HardlightNv;
  85. case AdvancedBlendOp.SoftLight:
  86. return NvBlendEquationAdvanced.SoftlightNv;
  87. case AdvancedBlendOp.Difference:
  88. return NvBlendEquationAdvanced.DifferenceNv;
  89. case AdvancedBlendOp.Minus:
  90. return NvBlendEquationAdvanced.MinusNv;
  91. case AdvancedBlendOp.MinusClamped:
  92. return NvBlendEquationAdvanced.MinusClampedNv;
  93. case AdvancedBlendOp.Exclusion:
  94. return NvBlendEquationAdvanced.ExclusionNv;
  95. case AdvancedBlendOp.Contrast:
  96. return NvBlendEquationAdvanced.ContrastNv;
  97. case AdvancedBlendOp.Invert:
  98. return NvBlendEquationAdvanced.Invert;
  99. case AdvancedBlendOp.InvertRGB:
  100. return NvBlendEquationAdvanced.InvertRgbNv;
  101. case AdvancedBlendOp.InvertOvg:
  102. return NvBlendEquationAdvanced.InvertOvgNv;
  103. case AdvancedBlendOp.LinearDodge:
  104. return NvBlendEquationAdvanced.LineardodgeNv;
  105. case AdvancedBlendOp.LinearBurn:
  106. return NvBlendEquationAdvanced.LinearburnNv;
  107. case AdvancedBlendOp.VividLight:
  108. return NvBlendEquationAdvanced.VividlightNv;
  109. case AdvancedBlendOp.LinearLight:
  110. return NvBlendEquationAdvanced.LinearlightNv;
  111. case AdvancedBlendOp.PinLight:
  112. return NvBlendEquationAdvanced.PinlightNv;
  113. case AdvancedBlendOp.HardMix:
  114. return NvBlendEquationAdvanced.HardmixNv;
  115. case AdvancedBlendOp.Red:
  116. return NvBlendEquationAdvanced.RedNv;
  117. case AdvancedBlendOp.Green:
  118. return NvBlendEquationAdvanced.GreenNv;
  119. case AdvancedBlendOp.Blue:
  120. return NvBlendEquationAdvanced.BlueNv;
  121. case AdvancedBlendOp.HslHue:
  122. return NvBlendEquationAdvanced.HslHueNv;
  123. case AdvancedBlendOp.HslSaturation:
  124. return NvBlendEquationAdvanced.HslSaturationNv;
  125. case AdvancedBlendOp.HslColor:
  126. return NvBlendEquationAdvanced.HslColorNv;
  127. case AdvancedBlendOp.HslLuminosity:
  128. return NvBlendEquationAdvanced.HslLuminosityNv;
  129. }
  130. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(AdvancedBlendOp)} enum value: {op}.");
  131. return NvBlendEquationAdvanced.Zero;
  132. }
  133. public static All Convert(this AdvancedBlendOverlap overlap)
  134. {
  135. switch (overlap)
  136. {
  137. case AdvancedBlendOverlap.Uncorrelated:
  138. return All.UncorrelatedNv;
  139. case AdvancedBlendOverlap.Disjoint:
  140. return All.DisjointNv;
  141. case AdvancedBlendOverlap.Conjoint:
  142. return All.ConjointNv;
  143. }
  144. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(AdvancedBlendOverlap)} enum value: {overlap}.");
  145. return All.UncorrelatedNv;
  146. }
  147. public static All Convert(this BlendFactor factor)
  148. {
  149. switch (factor)
  150. {
  151. case BlendFactor.Zero:
  152. case BlendFactor.ZeroGl:
  153. return All.Zero;
  154. case BlendFactor.One:
  155. case BlendFactor.OneGl:
  156. return All.One;
  157. case BlendFactor.SrcColor:
  158. case BlendFactor.SrcColorGl:
  159. return All.SrcColor;
  160. case BlendFactor.OneMinusSrcColor:
  161. case BlendFactor.OneMinusSrcColorGl:
  162. return All.OneMinusSrcColor;
  163. case BlendFactor.SrcAlpha:
  164. case BlendFactor.SrcAlphaGl:
  165. return All.SrcAlpha;
  166. case BlendFactor.OneMinusSrcAlpha:
  167. case BlendFactor.OneMinusSrcAlphaGl:
  168. return All.OneMinusSrcAlpha;
  169. case BlendFactor.DstAlpha:
  170. case BlendFactor.DstAlphaGl:
  171. return All.DstAlpha;
  172. case BlendFactor.OneMinusDstAlpha:
  173. case BlendFactor.OneMinusDstAlphaGl:
  174. return All.OneMinusDstAlpha;
  175. case BlendFactor.DstColor:
  176. case BlendFactor.DstColorGl:
  177. return All.DstColor;
  178. case BlendFactor.OneMinusDstColor:
  179. case BlendFactor.OneMinusDstColorGl:
  180. return All.OneMinusDstColor;
  181. case BlendFactor.SrcAlphaSaturate:
  182. case BlendFactor.SrcAlphaSaturateGl:
  183. return All.SrcAlphaSaturate;
  184. case BlendFactor.Src1Color:
  185. case BlendFactor.Src1ColorGl:
  186. return All.Src1Color;
  187. case BlendFactor.OneMinusSrc1Color:
  188. case BlendFactor.OneMinusSrc1ColorGl:
  189. return All.OneMinusSrc1Color;
  190. case BlendFactor.Src1Alpha:
  191. case BlendFactor.Src1AlphaGl:
  192. return All.Src1Alpha;
  193. case BlendFactor.OneMinusSrc1Alpha:
  194. case BlendFactor.OneMinusSrc1AlphaGl:
  195. return All.OneMinusSrc1Alpha;
  196. case BlendFactor.ConstantColor:
  197. return All.ConstantColor;
  198. case BlendFactor.OneMinusConstantColor:
  199. return All.OneMinusConstantColor;
  200. case BlendFactor.ConstantAlpha:
  201. return All.ConstantAlpha;
  202. case BlendFactor.OneMinusConstantAlpha:
  203. return All.OneMinusConstantAlpha;
  204. }
  205. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(BlendFactor)} enum value: {factor}.");
  206. return All.Zero;
  207. }
  208. public static BlendEquationMode Convert(this BlendOp op)
  209. {
  210. switch (op)
  211. {
  212. case BlendOp.Add:
  213. case BlendOp.AddGl:
  214. return BlendEquationMode.FuncAdd;
  215. case BlendOp.Minimum:
  216. case BlendOp.MinimumGl:
  217. return BlendEquationMode.Min;
  218. case BlendOp.Maximum:
  219. case BlendOp.MaximumGl:
  220. return BlendEquationMode.Max;
  221. case BlendOp.Subtract:
  222. case BlendOp.SubtractGl:
  223. return BlendEquationMode.FuncSubtract;
  224. case BlendOp.ReverseSubtract:
  225. case BlendOp.ReverseSubtractGl:
  226. return BlendEquationMode.FuncReverseSubtract;
  227. }
  228. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(BlendOp)} enum value: {op}.");
  229. return BlendEquationMode.FuncAdd;
  230. }
  231. public static TextureCompareMode Convert(this CompareMode mode)
  232. {
  233. switch (mode)
  234. {
  235. case CompareMode.None:
  236. return TextureCompareMode.None;
  237. case CompareMode.CompareRToTexture:
  238. return TextureCompareMode.CompareRToTexture;
  239. }
  240. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(CompareMode)} enum value: {mode}.");
  241. return TextureCompareMode.None;
  242. }
  243. public static All Convert(this CompareOp op)
  244. {
  245. switch (op)
  246. {
  247. case CompareOp.Never:
  248. case CompareOp.NeverGl:
  249. return All.Never;
  250. case CompareOp.Less:
  251. case CompareOp.LessGl:
  252. return All.Less;
  253. case CompareOp.Equal:
  254. case CompareOp.EqualGl:
  255. return All.Equal;
  256. case CompareOp.LessOrEqual:
  257. case CompareOp.LessOrEqualGl:
  258. return All.Lequal;
  259. case CompareOp.Greater:
  260. case CompareOp.GreaterGl:
  261. return All.Greater;
  262. case CompareOp.NotEqual:
  263. case CompareOp.NotEqualGl:
  264. return All.Notequal;
  265. case CompareOp.GreaterOrEqual:
  266. case CompareOp.GreaterOrEqualGl:
  267. return All.Gequal;
  268. case CompareOp.Always:
  269. case CompareOp.AlwaysGl:
  270. return All.Always;
  271. }
  272. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(CompareOp)} enum value: {op}.");
  273. return All.Never;
  274. }
  275. public static ClipDepthMode Convert(this DepthMode mode)
  276. {
  277. switch (mode)
  278. {
  279. case DepthMode.MinusOneToOne:
  280. return ClipDepthMode.NegativeOneToOne;
  281. case DepthMode.ZeroToOne:
  282. return ClipDepthMode.ZeroToOne;
  283. }
  284. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(DepthMode)} enum value: {mode}.");
  285. return ClipDepthMode.NegativeOneToOne;
  286. }
  287. public static All Convert(this DepthStencilMode mode)
  288. {
  289. switch (mode)
  290. {
  291. case DepthStencilMode.Depth:
  292. return All.DepthComponent;
  293. case DepthStencilMode.Stencil:
  294. return All.StencilIndex;
  295. }
  296. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(DepthStencilMode)} enum value: {mode}.");
  297. return All.Depth;
  298. }
  299. public static CullFaceMode Convert(this Face face)
  300. {
  301. switch (face)
  302. {
  303. case Face.Back:
  304. return CullFaceMode.Back;
  305. case Face.Front:
  306. return CullFaceMode.Front;
  307. case Face.FrontAndBack:
  308. return CullFaceMode.FrontAndBack;
  309. }
  310. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(Face)} enum value: {face}.");
  311. return CullFaceMode.Back;
  312. }
  313. public static FrontFaceDirection Convert(this FrontFace frontFace)
  314. {
  315. switch (frontFace)
  316. {
  317. case FrontFace.Clockwise:
  318. return FrontFaceDirection.Cw;
  319. case FrontFace.CounterClockwise:
  320. return FrontFaceDirection.Ccw;
  321. }
  322. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(FrontFace)} enum value: {frontFace}.");
  323. return FrontFaceDirection.Cw;
  324. }
  325. public static DrawElementsType Convert(this IndexType type)
  326. {
  327. switch (type)
  328. {
  329. case IndexType.UByte:
  330. return DrawElementsType.UnsignedByte;
  331. case IndexType.UShort:
  332. return DrawElementsType.UnsignedShort;
  333. case IndexType.UInt:
  334. return DrawElementsType.UnsignedInt;
  335. }
  336. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(IndexType)} enum value: {type}.");
  337. return DrawElementsType.UnsignedByte;
  338. }
  339. public static TextureMagFilter Convert(this MagFilter filter)
  340. {
  341. switch (filter)
  342. {
  343. case MagFilter.Nearest:
  344. return TextureMagFilter.Nearest;
  345. case MagFilter.Linear:
  346. return TextureMagFilter.Linear;
  347. }
  348. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(MagFilter)} enum value: {filter}.");
  349. return TextureMagFilter.Nearest;
  350. }
  351. public static TextureMinFilter Convert(this MinFilter filter)
  352. {
  353. switch (filter)
  354. {
  355. case MinFilter.Nearest:
  356. return TextureMinFilter.Nearest;
  357. case MinFilter.Linear:
  358. return TextureMinFilter.Linear;
  359. case MinFilter.NearestMipmapNearest:
  360. return TextureMinFilter.NearestMipmapNearest;
  361. case MinFilter.LinearMipmapNearest:
  362. return TextureMinFilter.LinearMipmapNearest;
  363. case MinFilter.NearestMipmapLinear:
  364. return TextureMinFilter.NearestMipmapLinear;
  365. case MinFilter.LinearMipmapLinear:
  366. return TextureMinFilter.LinearMipmapLinear;
  367. }
  368. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(MinFilter)} enum value: {filter}.");
  369. return TextureMinFilter.Nearest;
  370. }
  371. public static OpenTK.Graphics.OpenGL.PolygonMode Convert(this GAL.PolygonMode mode)
  372. {
  373. switch (mode)
  374. {
  375. case GAL.PolygonMode.Point:
  376. return OpenTK.Graphics.OpenGL.PolygonMode.Point;
  377. case GAL.PolygonMode.Line:
  378. return OpenTK.Graphics.OpenGL.PolygonMode.Line;
  379. case GAL.PolygonMode.Fill:
  380. return OpenTK.Graphics.OpenGL.PolygonMode.Fill;
  381. }
  382. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(GAL.PolygonMode)} enum value: {mode}.");
  383. return OpenTK.Graphics.OpenGL.PolygonMode.Fill;
  384. }
  385. public static PrimitiveType Convert(this PrimitiveTopology topology)
  386. {
  387. switch (topology)
  388. {
  389. case PrimitiveTopology.Points:
  390. return PrimitiveType.Points;
  391. case PrimitiveTopology.Lines:
  392. return PrimitiveType.Lines;
  393. case PrimitiveTopology.LineLoop:
  394. return PrimitiveType.LineLoop;
  395. case PrimitiveTopology.LineStrip:
  396. return PrimitiveType.LineStrip;
  397. case PrimitiveTopology.Triangles:
  398. return PrimitiveType.Triangles;
  399. case PrimitiveTopology.TriangleStrip:
  400. return PrimitiveType.TriangleStrip;
  401. case PrimitiveTopology.TriangleFan:
  402. return PrimitiveType.TriangleFan;
  403. case PrimitiveTopology.Quads:
  404. return PrimitiveType.Quads;
  405. case PrimitiveTopology.QuadStrip:
  406. return PrimitiveType.QuadStrip;
  407. case PrimitiveTopology.Polygon:
  408. return PrimitiveType.TriangleFan;
  409. case PrimitiveTopology.LinesAdjacency:
  410. return PrimitiveType.LinesAdjacency;
  411. case PrimitiveTopology.LineStripAdjacency:
  412. return PrimitiveType.LineStripAdjacency;
  413. case PrimitiveTopology.TrianglesAdjacency:
  414. return PrimitiveType.TrianglesAdjacency;
  415. case PrimitiveTopology.TriangleStripAdjacency:
  416. return PrimitiveType.TriangleStripAdjacency;
  417. case PrimitiveTopology.Patches:
  418. return PrimitiveType.Patches;
  419. }
  420. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(PrimitiveTopology)} enum value: {topology}.");
  421. return PrimitiveType.Points;
  422. }
  423. public static TransformFeedbackPrimitiveType ConvertToTfType(this PrimitiveTopology topology)
  424. {
  425. switch (topology)
  426. {
  427. case PrimitiveTopology.Points:
  428. return TransformFeedbackPrimitiveType.Points;
  429. case PrimitiveTopology.Lines:
  430. case PrimitiveTopology.LineLoop:
  431. case PrimitiveTopology.LineStrip:
  432. case PrimitiveTopology.LinesAdjacency:
  433. case PrimitiveTopology.LineStripAdjacency:
  434. return TransformFeedbackPrimitiveType.Lines;
  435. case PrimitiveTopology.Triangles:
  436. case PrimitiveTopology.TriangleStrip:
  437. case PrimitiveTopology.TriangleFan:
  438. case PrimitiveTopology.TrianglesAdjacency:
  439. case PrimitiveTopology.TriangleStripAdjacency:
  440. return TransformFeedbackPrimitiveType.Triangles;
  441. }
  442. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(PrimitiveTopology)} enum value: {topology}.");
  443. return TransformFeedbackPrimitiveType.Points;
  444. }
  445. public static OpenTK.Graphics.OpenGL.StencilOp Convert(this GAL.StencilOp op)
  446. {
  447. switch (op)
  448. {
  449. case GAL.StencilOp.Keep:
  450. case GAL.StencilOp.KeepGl:
  451. return OpenTK.Graphics.OpenGL.StencilOp.Keep;
  452. case GAL.StencilOp.Zero:
  453. case GAL.StencilOp.ZeroGl:
  454. return OpenTK.Graphics.OpenGL.StencilOp.Zero;
  455. case GAL.StencilOp.Replace:
  456. case GAL.StencilOp.ReplaceGl:
  457. return OpenTK.Graphics.OpenGL.StencilOp.Replace;
  458. case GAL.StencilOp.IncrementAndClamp:
  459. case GAL.StencilOp.IncrementAndClampGl:
  460. return OpenTK.Graphics.OpenGL.StencilOp.Incr;
  461. case GAL.StencilOp.DecrementAndClamp:
  462. case GAL.StencilOp.DecrementAndClampGl:
  463. return OpenTK.Graphics.OpenGL.StencilOp.Decr;
  464. case GAL.StencilOp.Invert:
  465. case GAL.StencilOp.InvertGl:
  466. return OpenTK.Graphics.OpenGL.StencilOp.Invert;
  467. case GAL.StencilOp.IncrementAndWrap:
  468. case GAL.StencilOp.IncrementAndWrapGl:
  469. return OpenTK.Graphics.OpenGL.StencilOp.IncrWrap;
  470. case GAL.StencilOp.DecrementAndWrap:
  471. case GAL.StencilOp.DecrementAndWrapGl:
  472. return OpenTK.Graphics.OpenGL.StencilOp.DecrWrap;
  473. }
  474. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(GAL.StencilOp)} enum value: {op}.");
  475. return OpenTK.Graphics.OpenGL.StencilOp.Keep;
  476. }
  477. public static All Convert(this SwizzleComponent swizzleComponent)
  478. {
  479. switch (swizzleComponent)
  480. {
  481. case SwizzleComponent.Zero:
  482. return All.Zero;
  483. case SwizzleComponent.One:
  484. return All.One;
  485. case SwizzleComponent.Red:
  486. return All.Red;
  487. case SwizzleComponent.Green:
  488. return All.Green;
  489. case SwizzleComponent.Blue:
  490. return All.Blue;
  491. case SwizzleComponent.Alpha:
  492. return All.Alpha;
  493. }
  494. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(SwizzleComponent)} enum value: {swizzleComponent}.");
  495. return All.Zero;
  496. }
  497. public static ImageTarget ConvertToImageTarget(this Target target)
  498. {
  499. return (ImageTarget)target.Convert();
  500. }
  501. public static TextureTarget Convert(this Target target)
  502. {
  503. switch (target)
  504. {
  505. case Target.Texture1D:
  506. return TextureTarget.Texture1D;
  507. case Target.Texture2D:
  508. return TextureTarget.Texture2D;
  509. case Target.Texture3D:
  510. return TextureTarget.Texture3D;
  511. case Target.Texture1DArray:
  512. return TextureTarget.Texture1DArray;
  513. case Target.Texture2DArray:
  514. return TextureTarget.Texture2DArray;
  515. case Target.Texture2DMultisample:
  516. return TextureTarget.Texture2DMultisample;
  517. case Target.Texture2DMultisampleArray:
  518. return TextureTarget.Texture2DMultisampleArray;
  519. case Target.Cubemap:
  520. return TextureTarget.TextureCubeMap;
  521. case Target.CubemapArray:
  522. return TextureTarget.TextureCubeMapArray;
  523. case Target.TextureBuffer:
  524. return TextureTarget.TextureBuffer;
  525. }
  526. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(Target)} enum value: {target}.");
  527. return TextureTarget.Texture2D;
  528. }
  529. public static NvViewportSwizzle Convert(this ViewportSwizzle swizzle)
  530. {
  531. switch (swizzle)
  532. {
  533. case ViewportSwizzle.PositiveX:
  534. return NvViewportSwizzle.ViewportSwizzlePositiveXNv;
  535. case ViewportSwizzle.PositiveY:
  536. return NvViewportSwizzle.ViewportSwizzlePositiveYNv;
  537. case ViewportSwizzle.PositiveZ:
  538. return NvViewportSwizzle.ViewportSwizzlePositiveZNv;
  539. case ViewportSwizzle.PositiveW:
  540. return NvViewportSwizzle.ViewportSwizzlePositiveWNv;
  541. case ViewportSwizzle.NegativeX:
  542. return NvViewportSwizzle.ViewportSwizzleNegativeXNv;
  543. case ViewportSwizzle.NegativeY:
  544. return NvViewportSwizzle.ViewportSwizzleNegativeYNv;
  545. case ViewportSwizzle.NegativeZ:
  546. return NvViewportSwizzle.ViewportSwizzleNegativeZNv;
  547. case ViewportSwizzle.NegativeW:
  548. return NvViewportSwizzle.ViewportSwizzleNegativeWNv;
  549. }
  550. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(ViewportSwizzle)} enum value: {swizzle}.");
  551. return NvViewportSwizzle.ViewportSwizzlePositiveXNv;
  552. }
  553. public static All Convert(this LogicalOp op)
  554. {
  555. switch (op)
  556. {
  557. case LogicalOp.Clear:
  558. return All.Clear;
  559. case LogicalOp.And:
  560. return All.And;
  561. case LogicalOp.AndReverse:
  562. return All.AndReverse;
  563. case LogicalOp.Copy:
  564. return All.Copy;
  565. case LogicalOp.AndInverted:
  566. return All.AndInverted;
  567. case LogicalOp.Noop:
  568. return All.Noop;
  569. case LogicalOp.Xor:
  570. return All.Xor;
  571. case LogicalOp.Or:
  572. return All.Or;
  573. case LogicalOp.Nor:
  574. return All.Nor;
  575. case LogicalOp.Equiv:
  576. return All.Equiv;
  577. case LogicalOp.Invert:
  578. return All.Invert;
  579. case LogicalOp.OrReverse:
  580. return All.OrReverse;
  581. case LogicalOp.CopyInverted:
  582. return All.CopyInverted;
  583. case LogicalOp.OrInverted:
  584. return All.OrInverted;
  585. case LogicalOp.Nand:
  586. return All.Nand;
  587. case LogicalOp.Set:
  588. return All.Set;
  589. }
  590. Logger.Debug?.Print(LogClass.Gpu, $"Invalid {nameof(LogicalOp)} enum value: {op}.");
  591. return All.Never;
  592. }
  593. public static ShaderType Convert(this ShaderStage stage)
  594. {
  595. return stage switch
  596. {
  597. ShaderStage.Compute => ShaderType.ComputeShader,
  598. ShaderStage.Vertex => ShaderType.VertexShader,
  599. ShaderStage.TessellationControl => ShaderType.TessControlShader,
  600. ShaderStage.TessellationEvaluation => ShaderType.TessEvaluationShader,
  601. ShaderStage.Geometry => ShaderType.GeometryShader,
  602. ShaderStage.Fragment => ShaderType.FragmentShader,
  603. _ => ShaderType.VertexShader
  604. };
  605. }
  606. }
  607. }