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,
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,
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),
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),
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,
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,
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,
75 GPU_TEXTURE_FORMAT_RGB9E5_UFLOAT,
76 GPU_TEXTURE_FORMAT_RGB10A2_UINT,
77 GPU_TEXTURE_FORMAT_RGB10A2_UNORM,
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,
88 GPU_TEXTURE_FORMAT_RGBA32_UINT,
89 GPU_TEXTURE_FORMAT_RGBA32_SINT,
90 GPU_TEXTURE_FORMAT_RGBA32_FLOAT,
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,
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),
106 static inline enum gpu_texture_format_aspect gpu_format_aspect_from_format(
enum gpu_texture_format 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;
120 return GPU_TEXTURE_FORMAT_ASPECT_COLOR;
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,
130 enum gpu_texture_dimension {
131 GPU_TEXTURE_DIMENSION_D1,
132 GPU_TEXTURE_DIMENSION_D2,
133 GPU_TEXTURE_DIMENSION_D3,
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,
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,
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,
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,
173 enum gpu_front_face {
184 enum gpu_polygon_mode {
185 GPU_POLYGON_MODE_FILL,
186 GPU_POLYGON_MODE_LINE,
187 GPU_POLYGON_MODE_POINT,
191 GPU_STEP_MODE_VERTEX,
192 GPU_STEP_MODE_INSTANCE,
195 enum gpu_vertex_format {
196 GPU_VERTEX_FLOAT32x1,
197 GPU_VERTEX_FLOAT32x2,
198 GPU_VERTEX_FLOAT32x3,
199 GPU_VERTEX_FLOAT32x4,
203 enum gpu_index_format {
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,
215 enum gpu_shader_type {
216 GPU_SHADER_TYPE_VERTEX,
217 GPU_SHADER_TYPE_FRAGMENT,
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),
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;
238 uses |= GPU_TEXTURE_USE_COPY_SRC;
241 uses |= GPU_TEXTURE_USE_COPY_DST;
244 uses |= GPU_TEXTURE_USE_RESOURCE;
247 uses |= (GPU_TEXTURE_USE_STORAGE_READ | GPU_TEXTURE_USE_STORAGE_WRITE);
249 if (is_color &&
KB_FLAGS_ANY_SET(usage, GPU_TEXTURE_USAGE_RENDER_ATTACHMENT)) {
250 uses |= GPU_TEXTURE_USE_COLOR_TARGET;
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;
Global typedefs and macros.
#define KB_FLAGS_ANY_SET(value, flags)
Check if any of the flags are set inside value.
#define KB_UBIT(n)
Get unsigned value with the n-th bit set to 1. All other bits are 0.