Enums.h 14 KB

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