kiba-engine
enums.h
1 #pragma once
2 
3 #include <kiba/defines.h>
4 
5 enum gpu_attachment_ops {
6  GPU_ATTACHMENT_OP_LOAD = KB_UBIT(0),
7  GPU_ATTACHMENT_OP_STORE = KB_UBIT(1),
8  GPU_ATTACHMENT_OP_ALL = GPU_ATTACHMENT_OP_LOAD | GPU_ATTACHMENT_OP_STORE,
9 };
10 
11 enum gpu_shader_stage {
12  GPU_SHADER_STAGE_NONE,
13  GPU_SHADER_STAGE_VERTEX,
14  GPU_SHADER_STAGE_FRAGMENT,
15  GPU_SHADER_STAGE_COMPUTE,
16  GPU_SHADER_STAGE_VERTEX_FRAGMENT,
17 };
18 
19 enum gpu_texture_usage {
20  GPU_TEXTURE_USAGE_COPY_SRC = KB_UBIT(0),
21  GPU_TEXTURE_USAGE_COPY_DST = KB_UBIT(1),
22  GPU_TEXTURE_USAGE_TEXTURE_BINDING = KB_UBIT(2),
23  GPU_TEXTURE_USAGE_STORAGE_BINDING = KB_UBIT(3),
24  GPU_TEXTURE_USAGE_RENDER_ATTACHMENT = KB_UBIT(4),
25 };
26 
27 enum gpu_texture_use {
28  GPU_TEXTURE_USE_UNINITIALIZED = 0,
29  GPU_TEXTURE_USE_UNKNOWN = KB_UBIT(0),
30  GPU_TEXTURE_USE_PRESENT = KB_UBIT(1),
31  GPU_TEXTURE_USE_COPY_SRC = KB_UBIT(2),
32  GPU_TEXTURE_USE_COPY_DST = KB_UBIT(3),
33  GPU_TEXTURE_USE_RESOURCE = KB_UBIT(4),
34  GPU_TEXTURE_USE_COLOR_TARGET = KB_UBIT(5),
35  GPU_TEXTURE_USE_DEPTH_STENCIL_READ = KB_UBIT(6),
36  GPU_TEXTURE_USE_DEPTH_STENCIL_WRITE = KB_UBIT(7),
37  GPU_TEXTURE_USE_STORAGE_READ = KB_UBIT(8),
38  GPU_TEXTURE_USE_STORAGE_WRITE = KB_UBIT(9), // TODO READ_WRITE?
39  // TODO check wgpu-hal
40  // https://github.com/gfx-rs/wgpu/blob/8e15707631f1db5612824dea122ea8b6a4e9b271/wgpu-hal/src/lib.rs#L930
41 };
42 
43 enum gpu_texture_format {
44  GPU_TEXTURE_FORMAT_R8_UNORM,
45  GPU_TEXTURE_FORMAT_R8_SNORM,
46  GPU_TEXTURE_FORMAT_R8_UINT,
47  GPU_TEXTURE_FORMAT_R8_SINT,
48 
49  GPU_TEXTURE_FORMAT_R16_UINT,
50  GPU_TEXTURE_FORMAT_R16_SINT,
51  GPU_TEXTURE_FORMAT_R16_UNORM,
52  GPU_TEXTURE_FORMAT_R16_SNORM,
53  GPU_TEXTURE_FORMAT_R16_FLOAT,
54  GPU_TEXTURE_FORMAT_RG8_UNORM,
55  GPU_TEXTURE_FORMAT_RG8_SNORM,
56  GPU_TEXTURE_FORMAT_RG8_UINT,
57  GPU_TEXTURE_FORMAT_RG8_SINT,
58 
59  GPU_TEXTURE_FORMAT_R32_UINT,
60  GPU_TEXTURE_FORMAT_R32_SINT,
61  GPU_TEXTURE_FORMAT_R32_FLOAT,
62  GPU_TEXTURE_FORMAT_RG16_UINT,
63  GPU_TEXTURE_FORMAT_RG16_SINT,
64  GPU_TEXTURE_FORMAT_RG16_UNORM,
65  GPU_TEXTURE_FORMAT_RG16_SNORM,
66  GPU_TEXTURE_FORMAT_RG16_FLOAT,
67  GPU_TEXTURE_FORMAT_RGBA8_UNORM,
68  GPU_TEXTURE_FORMAT_RGBA8_UNORM_SRGB,
69  GPU_TEXTURE_FORMAT_RGBA8_SNORM,
70  GPU_TEXTURE_FORMAT_RGBA8_UINT,
71  GPU_TEXTURE_FORMAT_RGBA8_SINT,
72  GPU_TEXTURE_FORMAT_BGRA8_UNORM,
73  GPU_TEXTURE_FORMAT_BGRA8_UNORM_SRGB,
74 
75  GPU_TEXTURE_FORMAT_RGB9E5_UFLOAT,
76  GPU_TEXTURE_FORMAT_RGB10A2_UINT,
77  GPU_TEXTURE_FORMAT_RGB10A2_UNORM,
78 
79  GPU_TEXTURE_FORMAT_RG32_UINT,
80  GPU_TEXTURE_FORMAT_RG32_SINT,
81  GPU_TEXTURE_FORMAT_RG32_FLOAT,
82  GPU_TEXTURE_FORMAT_RGBA16_UINT,
83  GPU_TEXTURE_FORMAT_RGBA16_SINT,
84  GPU_TEXTURE_FORMAT_RGBA16_UNORM,
85  GPU_TEXTURE_FORMAT_RGBA16_SNORM,
86  GPU_TEXTURE_FORMAT_RGBA16_FLOAT,
87 
88  GPU_TEXTURE_FORMAT_RGBA32_UINT,
89  GPU_TEXTURE_FORMAT_RGBA32_SINT,
90  GPU_TEXTURE_FORMAT_RGBA32_FLOAT,
91 
92  GPU_TEXTURE_FORMAT_STENCIL8,
93  GPU_TEXTURE_FORMAT_DEPTH16_UNORM,
94  GPU_TEXTURE_FORMAT_DEPTH24_PLUS,
95  GPU_TEXTURE_FORMAT_DEPTH24_PLUS_STENCIL8,
96  GPU_TEXTURE_FORMAT_DEPTH32_FLOAT,
97  GPU_TEXTURE_FORMAT_DEPTH32_FLOAT_STENCIL8,
98 };
99 
100 enum gpu_texture_format_aspect {
101  GPU_TEXTURE_FORMAT_ASPECT_COLOR = KB_UBIT(0),
102  GPU_TEXTURE_FORMAT_ASPECT_DEPTH = KB_UBIT(1),
103  GPU_TEXTURE_FORMAT_ASPECT_STENCIL = KB_UBIT(2),
104 };
105 
106 static inline enum gpu_texture_format_aspect gpu_format_aspect_from_format(enum gpu_texture_format format) {
107  switch (format) {
108  case GPU_TEXTURE_FORMAT_STENCIL8:
109  return GPU_TEXTURE_FORMAT_ASPECT_STENCIL;
110  case GPU_TEXTURE_FORMAT_DEPTH16_UNORM:
111  case GPU_TEXTURE_FORMAT_DEPTH24_PLUS:
112  case GPU_TEXTURE_FORMAT_DEPTH32_FLOAT:
113  return GPU_TEXTURE_FORMAT_ASPECT_DEPTH;
114  case GPU_TEXTURE_FORMAT_DEPTH24_PLUS_STENCIL8:
115  case GPU_TEXTURE_FORMAT_DEPTH32_FLOAT_STENCIL8:
116  return GPU_TEXTURE_FORMAT_ASPECT_DEPTH | GPU_TEXTURE_FORMAT_ASPECT_STENCIL;
117  default:
118  break;
119  }
120  return GPU_TEXTURE_FORMAT_ASPECT_COLOR;
121 }
122 
123 enum gpu_texture_aspect {
124  GPU_TEXTURE_ASPECT_ALL =
125  GPU_TEXTURE_FORMAT_ASPECT_COLOR | GPU_TEXTURE_FORMAT_ASPECT_DEPTH | GPU_TEXTURE_FORMAT_ASPECT_STENCIL,
126  GPU_TEXTURE_ASPECT_STENCIL_ONLY = GPU_TEXTURE_FORMAT_ASPECT_STENCIL,
127  GPU_TEXTURE_ASPECT_DEPTH_ONLY = GPU_TEXTURE_FORMAT_ASPECT_DEPTH,
128 };
129 
130 enum gpu_texture_dimension {
131  GPU_TEXTURE_DIMENSION_D1,
132  GPU_TEXTURE_DIMENSION_D2,
133  GPU_TEXTURE_DIMENSION_D3,
134 };
135 
136 enum gpu_texture_view_dimension {
137  GPU_TEXTURE_VIEW_DIMENSION_D1,
138  GPU_TEXTURE_VIEW_DIMENSION_D2,
139  GPU_TEXTURE_VIEW_DIMENSION_D2_ARRAY,
140  GPU_TEXTURE_VIEW_DIMENSION_CUBE,
141  GPU_TEXTURE_VIEW_DIMENSION_CUBE_ARRAY,
142  GPU_TEXTURE_VIEW_DIMENSION_D3,
143 };
144 
145 enum gpu_compare_func {
146  GPU_COMPARE_FUNC_NEVER,
147  GPU_COMPARE_FUNC_LESS,
148  GPU_COMPARE_FUNC_EQUAL,
149  GPU_COMPARE_FUNC_LESS_EQUAL,
150  GPU_COMPARE_FUNC_GREATER,
151  GPU_COMPARE_FUNC_NOT_EQUAL,
152  GPU_COMPARE_FUNC_GREATER_EQUAL,
153  GPU_COMPARE_FUNC_ALWAYS,
154 };
155 
156 enum gpu_color_writes {
157  GPU_COLOR_WRITES_RED = KB_UBIT(0),
158  GPU_COLOR_WRITES_GREEN = KB_UBIT(1),
159  GPU_COLOR_WRITES_BLUE = KB_UBIT(2),
160  GPU_COLOR_WRITES_ALPHA = KB_UBIT(3),
161  GPU_COLOR_WRITES_COLOR = GPU_COLOR_WRITES_RED | GPU_COLOR_WRITES_RED | GPU_COLOR_WRITES_GREEN,
162  GPU_COLOR_WRITES_ALL = GPU_COLOR_WRITES_COLOR | GPU_COLOR_WRITES_ALPHA,
163 };
164 
165 enum gpu_primitive_topology {
166  GPU_PIMITIVE_TOPOLOGY_POINT_LIST,
167  GPU_PIMITIVE_TOPOLOGY_LINE_LIST,
168  GPU_PIMITIVE_TOPOLOGY_LINE_STRIP,
169  GPU_PIMITIVE_TOPOLOGY_TRIANGLE_LIST,
170  GPU_PIMITIVE_TOPOLOGY_TRIANGLE_STRIP,
171 };
172 
173 enum gpu_front_face {
174  GPU_FRONT_FACE_CCW,
175  GPU_FRONT_FACE_CW,
176 };
177 
178 enum gpu_cull_mode {
179  GPU_CULL_MODE_NONE,
180  GPU_CULL_MODE_FRONT,
181  GPU_CULL_MODE_BACK,
182 };
183 
184 enum gpu_polygon_mode {
185  GPU_POLYGON_MODE_FILL,
186  GPU_POLYGON_MODE_LINE,
187  GPU_POLYGON_MODE_POINT,
188 };
189 
190 enum gpu_step_mode {
191  GPU_STEP_MODE_VERTEX,
192  GPU_STEP_MODE_INSTANCE,
193 };
194 
195 enum gpu_vertex_format {
196  GPU_VERTEX_FLOAT32x1,
197  GPU_VERTEX_FLOAT32x2,
198  GPU_VERTEX_FLOAT32x3,
199  GPU_VERTEX_FLOAT32x4,
200  // TODO
201 };
202 
203 enum gpu_index_format {
204  GPU_INDEX_U16,
205  GPU_INDEX_U32,
206 };
207 
208 enum gpu_present_mode {
209  GPU_PRESENT_MODE_FIFO,
210  GPU_PRESENT_MODE_FIFO_RELAXED,
211  GPU_PRESENT_MODE_IMMEDIATE,
212  GPU_PRESENT_MODE_MAILBOX,
213 };
214 
215 enum gpu_shader_type {
216  GPU_SHADER_TYPE_VERTEX,
217  GPU_SHADER_TYPE_FRAGMENT,
218 };
219 
220 enum gpu_buffer_usage {
221  GPU_BUFFER_USAGE_MAP_READ = KB_UBIT(0),
222  GPU_BUFFER_USAGE_MAP_WRITE = KB_UBIT(1),
223  GPU_BUFFER_USAGE_COPY_SRC = KB_UBIT(2),
224  GPU_BUFFER_USAGE_COPY_DST = KB_UBIT(3),
225  GPU_BUFFER_USAGE_INDEX = KB_UBIT(4),
226  GPU_BUFFER_USAGE_VERTEX = KB_UBIT(5),
227  GPU_BUFFER_USAGE_UNIFORM = KB_UBIT(6),
228  GPU_BUFFER_USAGE_STORAGE = KB_UBIT(7),
229  GPU_BUFFER_USAGE_INDIRECT = KB_UBIT(8),
230  // GPU_BUFFER_USAGE_QUERY_RESOLVE = KB_UBIT(9), // used for query sets
231 };
232 
233 static inline enum gpu_texture_use gpu_convert_texture_usage_to_use(enum gpu_texture_usage usage,
234  enum gpu_texture_format format) {
235  b8 is_color = KB_FLAGS_ANY_SET(gpu_format_aspect_from_format(format), GPU_TEXTURE_FORMAT_ASPECT_COLOR);
236  enum gpu_texture_use uses = 0;
237  if (KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_COPY_SRC)) {
238  uses |= GPU_TEXTURE_USE_COPY_SRC;
239  }
240  if (KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_COPY_DST)) {
241  uses |= GPU_TEXTURE_USE_COPY_DST;
242  }
243  if (KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_TEXTURE_BINDING)) {
244  uses |= GPU_TEXTURE_USE_RESOURCE;
245  }
246  if (KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_STORAGE_BINDING)) {
247  uses |= (GPU_TEXTURE_USE_STORAGE_READ | GPU_TEXTURE_USE_STORAGE_WRITE);
248  }
249  if (is_color && KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT)) {
250  uses |= GPU_TEXTURE_USE_COLOR_TARGET;
251  }
252  if (!is_color && KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT)) {
253  uses |= GPU_TEXTURE_USE_DEPTH_STENCIL_READ | GPU_TEXTURE_USE_DEPTH_STENCIL_WRITE;
254  }
255  return uses;
256 }
257 
258 // TODO add format function to allow printing of that enum
Global typedefs and macros.
#define KB_FLAGS_ANY_SET(value, flags)
Check if any of the flags are set inside value.
Definition: defines.h:67
#define KB_UBIT(n)
Get unsigned value with the n-th bit set to 1. All other bits are 0.
Definition: defines.h:72