Enums.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Util/StdTypes.h>
  7. #include <AnKi/Util/Enum.h>
  8. #include <AnKi/Util/Array.h>
  9. namespace anki
  10. {
  11. /// @addtogroup graphics
  12. /// @{
  13. enum class ColorBit : U8
  14. {
  15. NONE = 0,
  16. RED = 1 << 0,
  17. GREEN = 1 << 1,
  18. BLUE = 1 << 2,
  19. ALPHA = 1 << 3,
  20. ALL = RED | GREEN | BLUE | ALPHA
  21. };
  22. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(ColorBit)
  23. enum class PrimitiveTopology : U8
  24. {
  25. POINTS,
  26. LINES,
  27. LINE_STRIP,
  28. TRIANGLES,
  29. TRIANGLE_STRIP,
  30. PATCHES
  31. };
  32. enum class FillMode : U8
  33. {
  34. POINTS,
  35. WIREFRAME,
  36. SOLID,
  37. COUNT
  38. };
  39. enum class FaceSelectionBit : U8
  40. {
  41. NONE = 0,
  42. FRONT = 1 << 0,
  43. BACK = 1 << 1,
  44. FRONT_AND_BACK = FRONT | BACK
  45. };
  46. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(FaceSelectionBit)
  47. enum class CompareOperation : U8
  48. {
  49. ALWAYS,
  50. LESS,
  51. EQUAL,
  52. LESS_EQUAL,
  53. GREATER,
  54. GREATER_EQUAL,
  55. NOT_EQUAL,
  56. NEVER,
  57. COUNT
  58. };
  59. enum class StencilOperation : U8
  60. {
  61. KEEP,
  62. ZERO,
  63. REPLACE,
  64. INCREMENT_AND_CLAMP,
  65. DECREMENT_AND_CLAMP,
  66. INVERT,
  67. INCREMENT_AND_WRAP,
  68. DECREMENT_AND_WRAP,
  69. COUNT
  70. };
  71. enum class BlendFactor : U8
  72. {
  73. ZERO,
  74. ONE,
  75. SRC_COLOR,
  76. ONE_MINUS_SRC_COLOR,
  77. DST_COLOR,
  78. ONE_MINUS_DST_COLOR,
  79. SRC_ALPHA,
  80. ONE_MINUS_SRC_ALPHA,
  81. DST_ALPHA,
  82. ONE_MINUS_DST_ALPHA,
  83. CONSTANT_COLOR,
  84. ONE_MINUS_CONSTANT_COLOR,
  85. CONSTANT_ALPHA,
  86. ONE_MINUS_CONSTANT_ALPHA,
  87. SRC_ALPHA_SATURATE,
  88. SRC1_COLOR,
  89. ONE_MINUS_SRC1_COLOR,
  90. SRC1_ALPHA,
  91. ONE_MINUS_SRC1_ALPHA,
  92. COUNT
  93. };
  94. enum class BlendOperation : U8
  95. {
  96. ADD,
  97. SUBTRACT,
  98. REVERSE_SUBTRACT,
  99. MIN,
  100. MAX,
  101. COUNT
  102. };
  103. enum class VertexStepRate : U8
  104. {
  105. VERTEX,
  106. INSTANCE,
  107. DRAW,
  108. COUNT
  109. };
  110. /// A way to distinguish the aspect of a depth stencil texture.
  111. enum class DepthStencilAspectBit : U8
  112. {
  113. NONE = 0,
  114. DEPTH = 1 << 0,
  115. STENCIL = 1 << 1,
  116. DEPTH_STENCIL = DEPTH | STENCIL
  117. };
  118. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(DepthStencilAspectBit)
  119. /// Pixel or vertex format.
  120. /// WARNING: Keep it the same as vulkan (one conversion less).
  121. enum class Format : U32
  122. {
  123. NONE = 0,
  124. #define ANKI_FORMAT_DEF(type, id, componentCount, texelSize, blockWidth, blockHeight, blockSize, shaderType, \
  125. depthStencil) \
  126. type = id,
  127. #include <AnKi/Gr/FormatDefs.h>
  128. #undef ANKI_FORMAT_DEF
  129. };
  130. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(Format)
  131. /// Contains info for a specific Format.
  132. class FormatInfo
  133. {
  134. public:
  135. U8 m_componentCount; ///< The number of components.
  136. U8 m_texelSize; ///< The size of the texel. Only for incompressed, zero for compressed.
  137. U8 m_blockWidth; ///< The width of the block size of compressed formats. Zero otherwise.
  138. U8 m_blockHeight; ///< The height of the block size of compressed formats. Zero otherwise.
  139. U8 m_blockSize; ///< The size of the block of a compressed format. Zero otherwise.
  140. U8 m_shaderType; ///< It's 0 if the shader sees it as float, 1 if uint and 2 if signed int.
  141. DepthStencilAspectBit m_depthStencil; ///< Depth/stencil mask.
  142. const char* m_name;
  143. };
  144. /// Get info for a specific Format.
  145. inline FormatInfo getFormatInfo(Format fmt)
  146. {
  147. ANKI_ASSERT(fmt != Format::NONE);
  148. FormatInfo out;
  149. switch(fmt)
  150. {
  151. #define ANKI_FORMAT_DEF(type, id, componentCount, texelSize, blockWidth, blockHeight, blockSize, shaderType, \
  152. depthStencil) \
  153. case Format::type: \
  154. out.m_componentCount = componentCount; \
  155. out.m_texelSize = texelSize; \
  156. out.m_blockWidth = blockWidth; \
  157. out.m_blockHeight = blockHeight; \
  158. out.m_blockSize = blockSize; \
  159. out.m_shaderType = shaderType; \
  160. out.m_depthStencil = DepthStencilAspectBit::depthStencil; \
  161. out.m_name = #type; \
  162. break;
  163. #include <AnKi/Gr/FormatDefs.h>
  164. #undef ANKI_FORMAT_DEF
  165. default:
  166. ANKI_ASSERT(0);
  167. out = {};
  168. }
  169. return out;
  170. }
  171. inline Bool formatIsDepthStencil(const Format fmt)
  172. {
  173. return getFormatInfo(fmt).m_depthStencil != DepthStencilAspectBit::NONE;
  174. }
  175. inline Bool formatIsDepth(const Format fmt)
  176. {
  177. return !!(getFormatInfo(fmt).m_depthStencil & DepthStencilAspectBit::DEPTH);
  178. }
  179. inline Bool formatIsStencil(const Format fmt)
  180. {
  181. return !!(getFormatInfo(fmt).m_depthStencil & DepthStencilAspectBit::STENCIL);
  182. }
  183. inline Bool formatIsCompressed(const Format fmt)
  184. {
  185. return getFormatInfo(fmt).m_blockSize > 0;
  186. }
  187. inline DepthStencilAspectBit computeFormatAspect(const Format fmt)
  188. {
  189. return getFormatInfo(fmt).m_depthStencil;
  190. }
  191. /// Texture type.
  192. enum class TextureType : U8
  193. {
  194. _1D,
  195. _2D,
  196. _3D,
  197. _2D_ARRAY,
  198. CUBE,
  199. CUBE_ARRAY,
  200. COUNT
  201. };
  202. inline Bool textureTypeIsCube(const TextureType t)
  203. {
  204. return t == TextureType::CUBE || t == TextureType::CUBE_ARRAY;
  205. }
  206. /// Texture usage hints. They are very important.
  207. enum class TextureUsageBit : U32
  208. {
  209. NONE = 0,
  210. SAMPLED_GEOMETRY = 1 << 0,
  211. SAMPLED_FRAGMENT = 1 << 1,
  212. SAMPLED_COMPUTE = 1 << 2,
  213. SAMPLED_TRACE_RAYS = 1 << 3,
  214. IMAGE_GEOMETRY_READ = 1 << 4,
  215. IMAGE_GEOMETRY_WRITE = 1 << 5,
  216. IMAGE_FRAGMENT_READ = 1 << 6,
  217. IMAGE_FRAGMENT_WRITE = 1 << 7,
  218. IMAGE_COMPUTE_READ = 1 << 8,
  219. IMAGE_COMPUTE_WRITE = 1 << 9,
  220. IMAGE_TRACE_RAYS_READ = 1 << 10,
  221. IMAGE_TRACE_RAYS_WRITE = 1 << 11,
  222. FRAMEBUFFER_ATTACHMENT_READ = 1 << 12,
  223. FRAMEBUFFER_ATTACHMENT_WRITE = 1 << 13,
  224. TRANSFER_DESTINATION = 1 << 14,
  225. GENERATE_MIPMAPS = 1 << 15,
  226. PRESENT = 1 << 16,
  227. // Derived
  228. ALL_SAMPLED = SAMPLED_GEOMETRY | SAMPLED_FRAGMENT | SAMPLED_COMPUTE | SAMPLED_TRACE_RAYS,
  229. ALL_IMAGE = IMAGE_GEOMETRY_READ | IMAGE_GEOMETRY_WRITE | IMAGE_FRAGMENT_READ | IMAGE_FRAGMENT_WRITE
  230. | IMAGE_COMPUTE_READ | IMAGE_COMPUTE_WRITE | IMAGE_TRACE_RAYS_READ | IMAGE_TRACE_RAYS_WRITE,
  231. ALL_FRAMEBUFFER_ATTACHMENT = FRAMEBUFFER_ATTACHMENT_READ | FRAMEBUFFER_ATTACHMENT_WRITE,
  232. ALL_GRAPHICS = SAMPLED_GEOMETRY | SAMPLED_FRAGMENT | IMAGE_GEOMETRY_READ | IMAGE_GEOMETRY_WRITE
  233. | IMAGE_FRAGMENT_READ | IMAGE_FRAGMENT_WRITE | FRAMEBUFFER_ATTACHMENT_READ
  234. | FRAMEBUFFER_ATTACHMENT_WRITE,
  235. ALL_COMPUTE = SAMPLED_COMPUTE | IMAGE_COMPUTE_READ | IMAGE_COMPUTE_WRITE,
  236. ALL_TRANSFER = TRANSFER_DESTINATION | GENERATE_MIPMAPS,
  237. ALL_READ = ALL_SAMPLED | IMAGE_GEOMETRY_READ | IMAGE_FRAGMENT_READ | IMAGE_COMPUTE_READ | IMAGE_TRACE_RAYS_READ
  238. | FRAMEBUFFER_ATTACHMENT_READ | PRESENT | GENERATE_MIPMAPS,
  239. ALL_WRITE = IMAGE_GEOMETRY_WRITE | IMAGE_FRAGMENT_WRITE | IMAGE_COMPUTE_WRITE | IMAGE_TRACE_RAYS_WRITE
  240. | FRAMEBUFFER_ATTACHMENT_WRITE | TRANSFER_DESTINATION | GENERATE_MIPMAPS
  241. };
  242. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(TextureUsageBit)
  243. enum class SamplingFilter : U8
  244. {
  245. NEAREST,
  246. LINEAR,
  247. MIN, ///< It calculates the min of a 2x2 quad. Only if GpuDeviceCapabilities::m_samplingFilterMinMax is supported.
  248. MAX, ///< It calculates the max of a 2x2 quad. Only if GpuDeviceCapabilities::m_samplingFilterMinMax is supported.
  249. BASE ///< Only for mipmaps.
  250. };
  251. enum class SamplingAddressing : U8
  252. {
  253. CLAMP,
  254. REPEAT,
  255. BLACK,
  256. WHITE,
  257. COUNT,
  258. FIRST = 0,
  259. LAST = COUNT - 1,
  260. };
  261. enum class ShaderType : U16
  262. {
  263. VERTEX,
  264. TESSELLATION_CONTROL,
  265. TESSELLATION_EVALUATION,
  266. GEOMETRY,
  267. FRAGMENT,
  268. COMPUTE,
  269. RAY_GEN,
  270. ANY_HIT,
  271. CLOSEST_HIT,
  272. MISS,
  273. INTERSECTION,
  274. CALLABLE,
  275. COUNT,
  276. FIRST = 0,
  277. LAST = COUNT - 1,
  278. FIRST_GRAPHICS = VERTEX,
  279. LAST_GRAPHICS = FRAGMENT,
  280. FIRST_RAY_TRACING = RAY_GEN,
  281. LAST_RAY_TRACING = CALLABLE,
  282. };
  283. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(ShaderType)
  284. enum class ShaderTypeBit : U16
  285. {
  286. VERTEX = 1 << 0,
  287. TESSELLATION_CONTROL = 1 << 1,
  288. TESSELLATION_EVALUATION = 1 << 2,
  289. GEOMETRY = 1 << 3,
  290. FRAGMENT = 1 << 4,
  291. COMPUTE = 1 << 5,
  292. RAY_GEN = 1 << 6,
  293. ANY_HIT = 1 << 7,
  294. CLOSEST_HIT = 1 << 8,
  295. MISS = 1 << 9,
  296. INTERSECTION = 1 << 10,
  297. CALLABLE = 1 << 11,
  298. NONE = 0,
  299. ALL_GRAPHICS = VERTEX | TESSELLATION_CONTROL | TESSELLATION_EVALUATION | GEOMETRY | FRAGMENT,
  300. ALL_RAY_TRACING = RAY_GEN | ANY_HIT | CLOSEST_HIT | MISS | INTERSECTION | CALLABLE,
  301. ALL = ALL_GRAPHICS | COMPUTE | ALL_RAY_TRACING,
  302. };
  303. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(ShaderTypeBit)
  304. enum class ShaderVariableDataType : U8
  305. {
  306. NONE,
  307. #define ANKI_SVDT_MACRO(capital, type, baseType, rowCount, columnCount) capital,
  308. #define ANKI_SVDT_MACRO_OPAQUE(capital, type) capital,
  309. #include <AnKi/Gr/ShaderVariableDataTypeDefs.h>
  310. #undef ANKI_SVDT_MACRO
  311. #undef ANKI_SVDT_MACRO_OPAQUE
  312. // Derived
  313. NUMERICS_FIRST = I32,
  314. NUMERICS_LAST = MAT4,
  315. NUMERIC_1_COMPONENT_FIRST = I32,
  316. NUMERIC_1_COMPONENT_LAST = F32,
  317. NUMERIC_2_COMPONENT_FIRST = IVEC2,
  318. NUMERIC_2_COMPONENT_LAST = VEC2,
  319. NUMERIC_3_COMPONENT_FIRST = IVEC3,
  320. NUMERIC_3_COMPONENT_LAST = VEC3,
  321. NUMERIC_4_COMPONENT_FIRST = IVEC4,
  322. NUMERIC_4_COMPONENT_LAST = VEC4,
  323. MATRIX_FIRST = MAT3,
  324. MATRIX_LAST = MAT4,
  325. TEXTURE_FIRST = TEXTURE_1D,
  326. TEXTURE_LAST = TEXTURE_CUBE_ARRAY,
  327. IMAGE_FIRST = IMAGE_1D,
  328. IMAGE_LAST = IMAGE_CUBE_ARRAY,
  329. };
  330. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(ShaderVariableDataType)
  331. /// Occlusion query result bit.
  332. enum class OcclusionQueryResultBit : U8
  333. {
  334. NOT_AVAILABLE = 1 << 0,
  335. VISIBLE = 1 << 1,
  336. NOT_VISIBLE = 1 << 2
  337. };
  338. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(OcclusionQueryResultBit)
  339. /// Occlusion query result.
  340. enum class OcclusionQueryResult : U8
  341. {
  342. NOT_AVAILABLE,
  343. VISIBLE,
  344. NOT_VISIBLE
  345. };
  346. /// Timestamp query result.
  347. enum class TimestampQueryResult : U8
  348. {
  349. NOT_AVAILABLE,
  350. AVAILABLE
  351. };
  352. /// Attachment load operation.
  353. enum class AttachmentLoadOperation : U8
  354. {
  355. LOAD,
  356. CLEAR,
  357. DONT_CARE
  358. };
  359. /// Attachment store operation.
  360. enum class AttachmentStoreOperation : U8
  361. {
  362. STORE,
  363. DONT_CARE
  364. };
  365. /// Buffer usage modes.
  366. /// The graphics work consists of the following pipes: INDIRECT, GEOMETRY (all programmable and fixed function geometry
  367. /// stages) and finaly FRAGMENT.
  368. /// The compute from the consists of the following: INDIRECT and COMPUTE.
  369. /// The trace rays from the: INDIRECT and TRACE_RAYS
  370. /// !!WARNING!! If you change this remember to change PrivateBufferUsageBit.
  371. enum class BufferUsageBit : U64
  372. {
  373. NONE = 0,
  374. UNIFORM_GEOMETRY = 1ull << 0ull,
  375. UNIFORM_FRAGMENT = 1ull << 1ull,
  376. UNIFORM_COMPUTE = 1ull << 2ull,
  377. UNIFORM_TRACE_RAYS = 1ull << 3ull,
  378. STORAGE_GEOMETRY_READ = 1ull << 4ull,
  379. STORAGE_GEOMETRY_WRITE = 1ull << 5ull,
  380. STORAGE_FRAGMENT_READ = 1ull << 6ull,
  381. STORAGE_FRAGMENT_WRITE = 1ull << 7ull,
  382. STORAGE_COMPUTE_READ = 1ull << 8ull,
  383. STORAGE_COMPUTE_WRITE = 1ull << 9ull,
  384. STORAGE_TRACE_RAYS_READ = 1ull << 10ull,
  385. STORAGE_TRACE_RAYS_WRITE = 1ull << 11ull,
  386. TEXTURE_GEOMETRY_READ = 1ull << 12ull,
  387. TEXTURE_GEOMETRY_WRITE = 1ull << 13ull,
  388. TEXTURE_FRAGMENT_READ = 1ull << 14ull,
  389. TEXTURE_FRAGMENT_WRITE = 1ull << 15ull,
  390. TEXTURE_COMPUTE_READ = 1ull << 16ull,
  391. TEXTURE_COMPUTE_WRITE = 1ull << 17ull,
  392. TEXTURE_TRACE_RAYS_READ = 1ull << 18ull,
  393. TEXTURE_TRACE_RAYS_WRITE = 1ull << 19ull,
  394. INDEX = 1ull << 20ull,
  395. VERTEX = 1ull << 21ull,
  396. INDIRECT_COMPUTE = 1ull << 22ll,
  397. INDIRECT_DRAW = 1ull << 23ull,
  398. INDIRECT_TRACE_RAYS = 1ull << 24ull,
  399. TRANSFER_SOURCE = 1ull << 25ull,
  400. TRANSFER_DESTINATION = 1ull << 26ull,
  401. ACCELERATION_STRUCTURE_BUILD = 1ull << 27ull, ///< Will be used as a position or index buffer in a BLAS build.
  402. SBT = 1ull << 28ull, ///< Will be used as SBT in a traceRays() command.
  403. // Derived
  404. ALL_UNIFORM = UNIFORM_GEOMETRY | UNIFORM_FRAGMENT | UNIFORM_COMPUTE | UNIFORM_TRACE_RAYS,
  405. ALL_STORAGE = STORAGE_GEOMETRY_READ | STORAGE_GEOMETRY_WRITE | STORAGE_FRAGMENT_READ | STORAGE_FRAGMENT_WRITE
  406. | STORAGE_COMPUTE_READ | STORAGE_COMPUTE_WRITE | STORAGE_TRACE_RAYS_READ | STORAGE_TRACE_RAYS_WRITE,
  407. ALL_TEXTURE = TEXTURE_GEOMETRY_READ | TEXTURE_GEOMETRY_WRITE | TEXTURE_FRAGMENT_READ | TEXTURE_FRAGMENT_WRITE
  408. | TEXTURE_COMPUTE_READ | TEXTURE_COMPUTE_WRITE | TEXTURE_TRACE_RAYS_READ | TEXTURE_TRACE_RAYS_WRITE,
  409. ALL_INDIRECT = INDIRECT_COMPUTE | INDIRECT_DRAW | INDIRECT_TRACE_RAYS,
  410. ALL_TRANSFER = TRANSFER_SOURCE | TRANSFER_DESTINATION,
  411. ALL_GEOMETRY = UNIFORM_GEOMETRY | STORAGE_GEOMETRY_READ | STORAGE_GEOMETRY_WRITE | TEXTURE_GEOMETRY_READ
  412. | TEXTURE_GEOMETRY_WRITE | INDEX | VERTEX,
  413. ALL_FRAGMENT = UNIFORM_FRAGMENT | STORAGE_FRAGMENT_READ | STORAGE_FRAGMENT_WRITE | TEXTURE_FRAGMENT_READ
  414. | TEXTURE_FRAGMENT_WRITE,
  415. ALL_GRAPHICS = ALL_GEOMETRY | ALL_FRAGMENT | INDIRECT_DRAW,
  416. ALL_COMPUTE = UNIFORM_COMPUTE | STORAGE_COMPUTE_READ | STORAGE_COMPUTE_WRITE | TEXTURE_COMPUTE_READ
  417. | TEXTURE_COMPUTE_WRITE | INDIRECT_COMPUTE,
  418. ALL_TRACE_RAYS = UNIFORM_TRACE_RAYS | STORAGE_TRACE_RAYS_READ | STORAGE_TRACE_RAYS_WRITE | TEXTURE_TRACE_RAYS_READ
  419. | TEXTURE_TRACE_RAYS_WRITE | INDIRECT_TRACE_RAYS | SBT,
  420. ALL_RAY_TRACING = ALL_TRACE_RAYS | ACCELERATION_STRUCTURE_BUILD,
  421. ALL_READ = ALL_UNIFORM | STORAGE_GEOMETRY_READ | STORAGE_FRAGMENT_READ | STORAGE_COMPUTE_READ
  422. | STORAGE_TRACE_RAYS_READ | TEXTURE_GEOMETRY_READ | TEXTURE_FRAGMENT_READ | TEXTURE_COMPUTE_READ
  423. | TEXTURE_TRACE_RAYS_READ | INDEX | VERTEX | INDIRECT_COMPUTE | INDIRECT_DRAW | INDIRECT_TRACE_RAYS
  424. | TRANSFER_SOURCE | ACCELERATION_STRUCTURE_BUILD | SBT,
  425. ALL_WRITE = STORAGE_GEOMETRY_WRITE | STORAGE_FRAGMENT_WRITE | STORAGE_COMPUTE_WRITE | STORAGE_TRACE_RAYS_WRITE
  426. | TEXTURE_GEOMETRY_WRITE | TEXTURE_FRAGMENT_WRITE | TEXTURE_COMPUTE_WRITE | TEXTURE_TRACE_RAYS_WRITE
  427. | TRANSFER_DESTINATION,
  428. ALL = ALL_READ | ALL_WRITE,
  429. };
  430. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(BufferUsageBit)
  431. /// Buffer access when mapped.
  432. enum class BufferMapAccessBit : U8
  433. {
  434. NONE = 0,
  435. READ = 1 << 0,
  436. WRITE = 1 << 1
  437. };
  438. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(BufferMapAccessBit)
  439. /// Index buffer's index type.
  440. enum class IndexType : U8
  441. {
  442. U16,
  443. U32,
  444. COUNT
  445. };
  446. /// Rasterization order.
  447. enum class RasterizationOrder : U8
  448. {
  449. ORDERED,
  450. RELAXED,
  451. COUNT
  452. };
  453. /// Acceleration structure type.
  454. enum class AccelerationStructureType : U8
  455. {
  456. TOP_LEVEL,
  457. BOTTOM_LEVEL,
  458. COUNT
  459. };
  460. enum class AccelerationStructureUsageBit : U8
  461. {
  462. NONE = 0,
  463. BUILD = 1 << 0,
  464. ATTACH = 1 << 1, ///< Attached to a TLAS. Only for BLAS.
  465. GEOMETRY_READ = 1 << 2,
  466. FRAGMENT_READ = 1 << 3,
  467. COMPUTE_READ = 1 << 4,
  468. TRACE_RAYS_READ = 1 << 5,
  469. // Derived
  470. ALL_GRAPHICS = GEOMETRY_READ | FRAGMENT_READ,
  471. ALL_READ = ATTACH | GEOMETRY_READ | FRAGMENT_READ | COMPUTE_READ | TRACE_RAYS_READ,
  472. ALL_WRITE = BUILD
  473. };
  474. ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(AccelerationStructureUsageBit)
  475. /// @}
  476. } // end namespace anki