blob: 25812c91c7ff08ade803f5457f97d5588f4e50e7 [file] [log] [blame]
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001//
2// File: xgl.h
3//
4// Copyright 2014 ADVANCED MICRO DEVICES, INC. All Rights Reserved.
5//
6// AMD is granting you permission to use this software and documentation (if
7// any) (collectively, the "Materials") pursuant to the terms and conditions
8// of the Software License Agreement included with the Materials. If you do
9// not have a copy of the Software License Agreement, contact your AMD
10// representative for a copy.
11// You agree that you will not reverse engineer or decompile the Materials,
12// in whole or in part, except as allowed by applicable law.
13//
14// WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF
15// ANY KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY,
16// INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE
18// WILL RUN UNINTERRUPTED OR ERROR-FREE OR WARRANTIES ARISING FROM CUSTOM OF
19// TRADE OR COURSE OF USAGE. THE ENTIRE RISK ASSOCIATED WITH THE USE OF THE
20// SOFTWARE IS ASSUMED BY YOU.
21// Some jurisdictions do not allow the exclusion of implied warranties, so
22// the above exclusion may not apply to You.
23//
24// LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL
25// NOT, UNDER ANY CIRCUMSTANCES BE LIABLE TO YOU FOR ANY PUNITIVE, DIRECT,
26// INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF
27// THE SOFTWARE OR THIS AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN
28// ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
29// In no event shall AMD's total liability to You for all damages, losses,
30// and causes of action (whether in contract, tort (including negligence) or
31// otherwise) exceed the amount of $100 USD. You agree to defend, indemnify
32// and hold harmless AMD and its licensors, and any of their directors,
33// officers, employees, affiliates or agents from and against any and all
34// loss, damage, liability and other expenses (including reasonable attorneys'
35// fees), resulting from Your use of the Software or violation of the terms and
36// conditions of this Agreement.
37//
38// U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED
39// RIGHTS." Use, duplication, or disclosure by the Government is subject to the
40// restrictions as set forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or
41// its successor. Use of the Materials by the Government constitutes
42// acknowledgement of AMD's proprietary rights in them.
43//
44// EXPORT RESTRICTIONS: The Materials may be subject to export restrictions as
45// stated in the Software License Agreement.
46//
47
48#ifndef __XGL_H__
49#define __XGL_H__
50
51#include <stdint.h>
52
53#define XGL_MAKE_VERSION(major, minor, patch) \
54 ((major << 22) | (minor << 12) | patch)
55
56// XGL API version supported by this file
57#define XGL_API_VERSION XGL_MAKE_VERSION(0, 22, 0)
58
59#ifndef XGLAPI
60 #define XGLAPI
61#endif
62
63#ifdef __cplusplus
64extern "C"
65{
66#endif // __cplusplus
67
68/*
69 * Datatypes
70 */
71typedef unsigned char XGL_BOOL;
72typedef void XGL_VOID;
73typedef signed char XGL_CHAR; /* 1-byte signed */
74typedef int32_t XGL_INT; /* 4-byte signed */
75typedef int32_t XGL_INT32; /* 4-byte signed */
76typedef uint32_t XGL_UINT; /* 4-byte unsigned */
77typedef uint32_t XGL_UINT32; /* 4-byte unsigned */
78typedef uint64_t XGL_UINT64; /* 8-byte unsigned */
79typedef uint32_t XGL_SIZE; /* 4-byte unsigned */
80typedef uint32_t XGL_GPU_SIZE; /* 4-byte unsigned */
81typedef uint32_t XGL_FLAGS; /* 4-byte unsigned */
82typedef uint32_t XGL_SAMPLE_MASK; /* 4-byte unsigned */
83typedef uint8_t XGL_UINT8; /* 1-byte unsigned */
84typedef float XGL_FLOAT; /* single precision float */
85typedef double XGL_DOUBLE; /* double precision float in [0,1] */
86
87/*
88***************************************************************************************************
89* Core XGL API
90***************************************************************************************************
91*/
92
93#ifdef __cplusplus
94 #define XGL_DEFINE_HANDLE(_obj) struct _obj##_T {}; typedef _obj##_T* _obj;
95 #define XGL_DEFINE_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
96#else // __cplusplus
97 #define XGL_DEFINE_HANDLE(_obj) typedef void* _obj;
98 #define XGL_DEFINE_SUBCLASS_HANDLE(_obj, _base) typedef void* _obj;
99#endif // __cplusplus
100
101XGL_DEFINE_HANDLE(XGL_PHYSICAL_GPU)
102XGL_DEFINE_HANDLE(XGL_BASE_OBJECT)
103XGL_DEFINE_SUBCLASS_HANDLE(XGL_DEVICE, XGL_BASE_OBJECT)
104XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUEUE, XGL_BASE_OBJECT)
105XGL_DEFINE_SUBCLASS_HANDLE(XGL_GPU_MEMORY, XGL_BASE_OBJECT)
106XGL_DEFINE_SUBCLASS_HANDLE(XGL_OBJECT, XGL_BASE_OBJECT)
107XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE, XGL_OBJECT)
108XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE_VIEW, XGL_OBJECT)
109XGL_DEFINE_SUBCLASS_HANDLE(XGL_COLOR_ATTACHMENT_VIEW, XGL_OBJECT)
110XGL_DEFINE_SUBCLASS_HANDLE(XGL_DEPTH_STENCIL_VIEW, XGL_OBJECT)
111XGL_DEFINE_SUBCLASS_HANDLE(XGL_SHADER, XGL_OBJECT)
112XGL_DEFINE_SUBCLASS_HANDLE(XGL_PIPELINE, XGL_OBJECT)
113XGL_DEFINE_SUBCLASS_HANDLE(XGL_PIPELINE_DELTA, XGL_OBJECT)
114XGL_DEFINE_SUBCLASS_HANDLE(XGL_SAMPLER, XGL_OBJECT)
115XGL_DEFINE_SUBCLASS_HANDLE(XGL_DESCRIPTOR_SET, XGL_OBJECT)
116XGL_DEFINE_SUBCLASS_HANDLE(XGL_STATE_OBJECT, XGL_OBJECT)
117XGL_DEFINE_SUBCLASS_HANDLE(XGL_VIEWPORT_STATE_OBJECT, XGL_STATE_OBJECT)
118XGL_DEFINE_SUBCLASS_HANDLE(XGL_RASTER_STATE_OBJECT, XGL_STATE_OBJECT)
119XGL_DEFINE_SUBCLASS_HANDLE(XGL_MSAA_STATE_OBJECT, XGL_STATE_OBJECT)
120XGL_DEFINE_SUBCLASS_HANDLE(XGL_COLOR_BLEND_STATE_OBJECT, XGL_STATE_OBJECT)
121XGL_DEFINE_SUBCLASS_HANDLE(XGL_DEPTH_STENCIL_STATE_OBJECT, XGL_STATE_OBJECT)
122XGL_DEFINE_SUBCLASS_HANDLE(XGL_CMD_BUFFER, XGL_OBJECT)
123XGL_DEFINE_SUBCLASS_HANDLE(XGL_FENCE, XGL_OBJECT)
124XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUEUE_SEMAPHORE, XGL_OBJECT)
125XGL_DEFINE_SUBCLASS_HANDLE(XGL_EVENT, XGL_OBJECT)
126XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUERY_POOL, XGL_OBJECT)
127
128#define XGL_MAX_PHYSICAL_GPUS 16
129#define XGL_MAX_PHYSICAL_GPU_NAME 256
130#define XGL_MAX_MEMORY_HEAPS 8
131#define XGL_MAX_DESCRIPTOR_SETS 2
132#define XGL_MAX_VIEWPORTS 16
133#define XGL_MAX_COLOR_ATTACHMENTS 8
134
135#define XGL_LOD_CLAMP_NONE MAX_FLOAT
136#define XGL_LAST_MIP_OR_SLICE 0xffffffff
137
138#define XGL_TRUE 1
139#define XGL_FALSE 0
140
141#define XGL_NULL_HANDLE 0
142
143// This macro defines MAX_UINT in enumerations to force compilers to use 32 bits
144// to represent them. This may or may not be necessary on some compilers. The
145// option to compile it out may allow compilers that warn about missing enumerants
146// in switch statements to be silenced.
147#define XGL_MAX_ENUM(T) T##_MAX_ENUM = 0xFFFFFFFF
148
149// ------------------------------------------------------------------------------------------------
150// Enumerations
151
152
153typedef enum _XGL_QUEUE_TYPE
154{
155 XGL_QUEUE_TYPE_GRAPHICS = 0x1,
156 XGL_QUEUE_TYPE_COMPUTE = 0x2,
157 XGL_QUEUE_TYPE_DMA = 0x3,
158 XGL_MAX_ENUM(_XGL_QUEUE_TYPE)
159} XGL_QUEUE_TYPE;
160
161typedef enum _XGL_MEMORY_PRIORITY
162{
163 XGL_MEMORY_PRIORITY_UNUSED = 0x0,
164 XGL_MEMORY_PRIORITY_VERY_LOW = 0x1,
165 XGL_MEMORY_PRIORITY_LOW = 0x2,
166 XGL_MEMORY_PRIORITY_NORMAL = 0x3,
167 XGL_MEMORY_PRIORITY_HIGH = 0x4,
168 XGL_MEMORY_PRIORITY_VERY_HIGH = 0x5,
169
170 XGL_MEMORY_PRIORITY_BEGIN_RANGE = XGL_MEMORY_PRIORITY_UNUSED,
171 XGL_MEMORY_PRIORITY_END_RANGE = XGL_MEMORY_PRIORITY_VERY_HIGH,
172 XGL_NUM_MEMORY_PRIORITY = (XGL_MEMORY_PRIORITY_END_RANGE - XGL_MEMORY_PRIORITY_BEGIN_RANGE + 1),
173} XGL_MEMORY_PRIORITY;
174
175typedef enum _XGL_MEMORY_STATE
176{
177 XGL_MEMORY_STATE_DATA_TRANSFER = 0x00000000,
178 XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_ONLY = 0x00000001,
179 XGL_MEMORY_STATE_GRAPHICS_SHADER_WRITE_ONLY = 0x00000002,
180 XGL_MEMORY_STATE_GRAPHICS_SHADER_READ_WRITE = 0x00000003,
181 XGL_MEMORY_STATE_COMPUTE_SHADER_READ_ONLY = 0x00000004,
182 XGL_MEMORY_STATE_COMPUTE_SHADER_WRITE_ONLY = 0x00000005,
183 XGL_MEMORY_STATE_COMPUTE_SHADER_READ_WRITE = 0x00000006,
184 XGL_MEMORY_STATE_MULTI_SHADER_READ_ONLY = 0x00000007,
185 XGL_MEMORY_STATE_INDEX_DATA = 0x00000008,
186 XGL_MEMORY_STATE_INDIRECT_ARG = 0x00000009,
187 XGL_MEMORY_STATE_WRITE_TIMESTAMP = 0x0000000A,
188 XGL_MEMORY_STATE_QUEUE_ATOMIC = 0x0000000B,
189
190 XGL_MEMORY_STATE_BEGIN_RANGE = XGL_MEMORY_STATE_DATA_TRANSFER,
191 XGL_MEMORY_STATE_END_RANGE = XGL_MEMORY_STATE_QUEUE_ATOMIC,
192 XGL_NUM_MEMORY_STATE = (XGL_MEMORY_STATE_END_RANGE - XGL_MEMORY_STATE_BEGIN_RANGE + 1),
193 XGL_MAX_ENUM(_XGL_MEMORY_STATE)
194} XGL_MEMORY_STATE;
195
196typedef enum _XGL_IMAGE_STATE
197{
198 XGL_IMAGE_STATE_DATA_TRANSFER = 0x00000000,
199 XGL_IMAGE_STATE_GRAPHICS_SHADER_READ_ONLY = 0x00000001,
200 XGL_IMAGE_STATE_GRAPHICS_SHADER_WRITE_ONLY = 0x00000002,
201 XGL_IMAGE_STATE_GRAPHICS_SHADER_READ_WRITE = 0x00000003,
202 XGL_IMAGE_STATE_COMPUTE_SHADER_READ_ONLY = 0x00000004,
203 XGL_IMAGE_STATE_COMPUTE_SHADER_WRITE_ONLY = 0x00000005,
204 XGL_IMAGE_STATE_COMPUTE_SHADER_READ_WRITE = 0x00000006,
205 XGL_IMAGE_STATE_MULTI_SHADER_READ_ONLY = 0x00000007,
206 XGL_IMAGE_STATE_TARGET_AND_SHADER_READ_ONLY = 0x00000008,
207 XGL_IMAGE_STATE_UNINITIALIZED_TARGET = 0x00000009,
208 XGL_IMAGE_STATE_TARGET_RENDER_ACCESS_OPTIMAL = 0x0000000A,
209 XGL_IMAGE_STATE_TARGET_SHADER_ACCESS_OPTIMAL = 0x0000000B,
210 XGL_IMAGE_STATE_CLEAR = 0x0000000C,
211 XGL_IMAGE_STATE_RESOLVE_SOURCE = 0x0000000D,
212 XGL_IMAGE_STATE_RESOLVE_DESTINATION = 0x0000000E,
213
214 XGL_IMAGE_STATE_BEGIN_RANGE = XGL_IMAGE_STATE_DATA_TRANSFER,
215 XGL_IMAGE_STATE_END_RANGE = XGL_IMAGE_STATE_RESOLVE_DESTINATION,
216 XGL_NUM_IMAGE_STATE = (XGL_IMAGE_STATE_END_RANGE - XGL_IMAGE_STATE_BEGIN_RANGE + 1),
217 XGL_MAX_ENUM(_XGL_IMAGE_STATE)
218} XGL_IMAGE_STATE;
219
220typedef enum _XGL_IMAGE_TYPE
221{
222 XGL_IMAGE_1D = 0x00000000,
223 XGL_IMAGE_2D = 0x00000001,
224 XGL_IMAGE_3D = 0x00000002,
225
226 XGL_IMAGE_TYPE_BEGIN_RANGE = XGL_IMAGE_1D,
227 XGL_IMAGE_TYPE_END_RANGE = XGL_IMAGE_3D,
228 XGL_NUM_IMAGE_TYPE = (XGL_IMAGE_TYPE_END_RANGE - XGL_IMAGE_TYPE_BEGIN_RANGE + 1),
229 XGL_MAX_ENUM(_XGL_IMAGE_TYPE)
230} XGL_IMAGE_TYPE;
231
232typedef enum _XGL_IMAGE_TILING
233{
234 XGL_LINEAR_TILING = 0x00000000,
235 XGL_OPTIMAL_TILING = 0x00000001,
236
237 XGL_IMAGE_TILING_BEGIN_RANGE = XGL_LINEAR_TILING,
238 XGL_IMAGE_TILING_END_RANGE = XGL_OPTIMAL_TILING,
239 XGL_NUM_IMAGE_TILING = (XGL_IMAGE_TILING_END_RANGE - XGL_IMAGE_TILING_BEGIN_RANGE + 1),
240 XGL_MAX_ENUM(_XGL_IMAGE_TILING)
241} XGL_IMAGE_TILING;
242
243typedef enum _XGL_IMAGE_VIEW_TYPE
244{
245 XGL_IMAGE_VIEW_1D = 0x00000000,
246 XGL_IMAGE_VIEW_2D = 0x00000001,
247 XGL_IMAGE_VIEW_3D = 0x00000002,
248 XGL_IMAGE_VIEW_CUBE = 0x00000003,
249
250 XGL_IMAGE_VIEW_TYPE_BEGIN_RANGE = XGL_IMAGE_VIEW_1D,
251 XGL_IMAGE_VIEW_TYPE_END_RANGE = XGL_IMAGE_VIEW_CUBE,
252 XGL_NUM_IMAGE_VIEW_TYPE = (XGL_IMAGE_VIEW_TYPE_END_RANGE - XGL_IMAGE_VIEW_TYPE_BEGIN_RANGE + 1),
253 XGL_MAX_ENUM(_XGL_IMAGE_VIEW_TYPE)
254} XGL_IMAGE_VIEW_TYPE;
255
256typedef enum _XGL_IMAGE_ASPECT
257{
258 XGL_IMAGE_ASPECT_COLOR = 0x00000000,
259 XGL_IMAGE_ASPECT_DEPTH = 0x00000001,
260 XGL_IMAGE_ASPECT_STENCIL = 0x00000002,
261
262 XGL_IMAGE_ASPECT_BEGIN_RANGE = XGL_IMAGE_ASPECT_COLOR,
263 XGL_IMAGE_ASPECT_END_RANGE = XGL_IMAGE_ASPECT_STENCIL,
264 XGL_NUM_IMAGE_ASPECT = (XGL_IMAGE_ASPECT_END_RANGE - XGL_IMAGE_ASPECT_BEGIN_RANGE + 1),
265 XGL_MAX_ENUM(_XGL_IMAGE_ASPECT)
266} XGL_IMAGE_ASPECT;
267
268typedef enum _XGL_CHANNEL_SWIZZLE
269{
270 XGL_CHANNEL_SWIZZLE_ZERO = 0x00000000,
271 XGL_CHANNEL_SWIZZLE_ONE = 0x00000001,
272 XGL_CHANNEL_SWIZZLE_R = 0x00000002,
273 XGL_CHANNEL_SWIZZLE_G = 0x00000003,
274 XGL_CHANNEL_SWIZZLE_B = 0x00000004,
275 XGL_CHANNEL_SWIZZLE_A = 0x00000005,
276
277 XGL_CHANNEL_SWIZZLE_BEGIN_RANGE = XGL_CHANNEL_SWIZZLE_ZERO,
278 XGL_CHANNEL_SWIZZLE_END_RANGE = XGL_CHANNEL_SWIZZLE_A,
279 XGL_NUM_CHANNEL_SWIZZLE = (XGL_CHANNEL_SWIZZLE_END_RANGE - XGL_CHANNEL_SWIZZLE_BEGIN_RANGE + 1),
280 XGL_MAX_ENUM(_XGL_CHANNEL_SWIZZLE)
281} XGL_CHANNEL_SWIZZLE;
282
283typedef enum _XGL_DESCRIPTOR_SET_SLOT_TYPE
284{
285 XGL_SLOT_UNUSED = 0x00000000,
286 XGL_SLOT_SHADER_RESOURCE = 0x00000001,
287 XGL_SLOT_SHADER_UAV = 0x00000002,
288 XGL_SLOT_SHADER_SAMPLER = 0x00000003,
Chia-I Wu6a921262014-10-06 15:07:25 +0800289// IMG CHANGE BEGIN - support for vertex input description
290 XGL_SLOT_VERTEX_INPUT = 0x00000004,
291 XGL_SLOT_NEXT_DESCRIPTOR_SET = 0x00000005,
292// IMG CHANGE END
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600293
294 XGL_DESCRIPTOR_SET_SLOT_TYPE_BEGIN_RANGE = XGL_SLOT_UNUSED,
295 XGL_DESCRIPTOR_SET_SLOT_TYPE_END_RANGE = XGL_SLOT_NEXT_DESCRIPTOR_SET,
296 XGL_NUM_DESCRIPTOR_SET_SLOT_TYPE = (XGL_DESCRIPTOR_SET_SLOT_TYPE_END_RANGE - XGL_DESCRIPTOR_SET_SLOT_TYPE_BEGIN_RANGE + 1),
297 XGL_MAX_ENUM(_XGL_DESCRIPTOR_SET_SLOT_TYPE)
298} XGL_DESCRIPTOR_SET_SLOT_TYPE;
299
300typedef enum _XGL_QUERY_TYPE
301{
302 XGL_QUERY_OCCLUSION = 0x00000000,
303 XGL_QUERY_PIPELINE_STATISTICS = 0x00000001,
304
305 XGL_QUERY_TYPE_BEGIN_RANGE = XGL_QUERY_OCCLUSION,
306 XGL_QUERY_TYPE_END_RANGE = XGL_QUERY_PIPELINE_STATISTICS,
307 XGL_NUM_QUERY_TYPE = (XGL_QUERY_TYPE_END_RANGE - XGL_QUERY_TYPE_BEGIN_RANGE + 1),
308 XGL_MAX_ENUM(_XGL_QUERY_TYPE)
309} XGL_QUERY_TYPE;
310
311typedef enum _XGL_TIMESTAMP_TYPE
312{
313 XGL_TIMESTAMP_TOP = 0x00000000,
314 XGL_TIMESTAMP_BOTTOM = 0x00000001,
315
316 XGL_TIMESTAMP_TYPE_BEGIN_RANGE = XGL_TIMESTAMP_TOP,
317 XGL_TIMESTAMP_TYPE_END_RANGE = XGL_TIMESTAMP_BOTTOM,
318 XGL_NUM_TIMESTAMP_TYPE = (XGL_TIMESTAMP_TYPE_END_RANGE - XGL_TIMESTAMP_TYPE_BEGIN_RANGE + 1),
319 XGL_MAX_ENUM(_XGL_TIMESTEAMP_TYPE)
320} XGL_TIMESTAMP_TYPE;
321
322typedef enum _XGL_BORDER_COLOR_TYPE
323{
324 XGL_BORDER_COLOR_OPAQUE_WHITE = 0x00000000,
325 XGL_BORDER_COLOR_TRANSPARENT_BLACK = 0x00000001,
326 XGL_BORDER_COLOR_OPAQUE_BLACK = 0x00000002,
327
328 XGL_BORDER_COLOR_TYPE_BEGIN_RANGE = XGL_BORDER_COLOR_OPAQUE_WHITE,
329 XGL_BORDER_COLOR_TYPE_END_RANGE = XGL_BORDER_COLOR_OPAQUE_BLACK,
330 XGL_NUM_BORDER_COLOR_TYPE = (XGL_BORDER_COLOR_TYPE_END_RANGE - XGL_BORDER_COLOR_TYPE_BEGIN_RANGE + 1),
331 XGL_MAX_ENUM(_XGL_BORDER_COLOR_TYPE)
332} XGL_BORDER_COLOR_TYPE;
333
334typedef enum _XGL_PIPELINE_BIND_POINT
335{
336 XGL_PIPELINE_BIND_POINT_COMPUTE = 0x00000000,
337 XGL_PIPELINE_BIND_POINT_GRAPHICS = 0x00000001,
338
339 XGL_PIPELINE_BIND_POINT_BEGIN_RANGE = XGL_PIPELINE_BIND_POINT_COMPUTE,
340 XGL_PIPELINE_BIND_POINT_END_RANGE = XGL_PIPELINE_BIND_POINT_GRAPHICS,
341 XGL_NUM_PIPELINE_BIND_POINT = (XGL_PIPELINE_BIND_POINT_END_RANGE - XGL_PIPELINE_BIND_POINT_BEGIN_RANGE + 1),
342 XGL_MAX_ENUM(_XGL_PIPELINE_BIND_POINT)
343} XGL_PIPELINE_BIND_POINT;
344
345typedef enum _XGL_STATE_BIND_POINT
346{
347 XGL_STATE_BIND_VIEWPORT = 0x00000000,
348 XGL_STATE_BIND_RASTER = 0x00000001,
349 XGL_STATE_BIND_DEPTH_STENCIL = 0x00000002,
350 XGL_STATE_BIND_COLOR_BLEND = 0x00000003,
351 XGL_STATE_BIND_MSAA = 0x00000004,
352
353 XGL_STATE_BIND_POINT_BEGIN_RANGE = XGL_STATE_BIND_VIEWPORT,
354 XGL_STATE_BIND_POINT_END_RANGE = XGL_STATE_BIND_MSAA,
355 XGL_NUM_STATE_BIND_POINT = (XGL_STATE_BIND_POINT_END_RANGE - XGL_STATE_BIND_POINT_BEGIN_RANGE + 1),
356 XGL_MAX_ENUM(_XGL_STATE_BIND_POINT)
357} XGL_STATE_BIND_POINT;
358
359typedef enum _XGL_PRIMITIVE_TOPOLOGY
360{
361 XGL_TOPOLOGY_POINT_LIST = 0x00000000,
362 XGL_TOPOLOGY_LINE_LIST = 0x00000001,
363 XGL_TOPOLOGY_LINE_STRIP = 0x00000002,
364 XGL_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
365 XGL_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
366 XGL_TOPOLOGY_RECT_LIST = 0x00000005,
367 XGL_TOPOLOGY_QUAD_LIST = 0x00000006,
368 XGL_TOPOLOGY_QUAD_STRIP = 0x00000007,
369 XGL_TOPOLOGY_LINE_LIST_ADJ = 0x00000008,
370 XGL_TOPOLOGY_LINE_STRIP_ADJ = 0x00000009,
371 XGL_TOPOLOGY_TRIANGLE_LIST_ADJ = 0x0000000a,
372 XGL_TOPOLOGY_TRIANGLE_STRIP_ADJ = 0x0000000b,
373 XGL_TOPOLOGY_PATCH = 0x0000000c,
374
375 XGL_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = XGL_TOPOLOGY_POINT_LIST,
376 XGL_PRIMITIVE_TOPOLOGY_END_RANGE = XGL_TOPOLOGY_PATCH,
377 XGL_NUM_PRIMITIVE_TOPOLOGY = (XGL_PRIMITIVE_TOPOLOGY_END_RANGE - XGL_PRIMITIVE_TOPOLOGY_BEGIN_RANGE + 1),
378 XGL_MAX_ENUM(_XGL_PRIMITIVE_TOPOLOGY)
379} XGL_PRIMITIVE_TOPOLOGY;
380
381typedef enum _XGL_INDEX_TYPE
382{
383 XGL_INDEX_8 = 0x00000000,
384 XGL_INDEX_16 = 0x00000001,
385 XGL_INDEX_32 = 0x00000002,
386
387 XGL_INDEX_TYPE_BEGIN_RANGE = XGL_INDEX_8,
388 XGL_INDEX_TYPE_END_RANGE = XGL_INDEX_32,
389 XGL_NUM_INDEX_TYPE = (XGL_INDEX_TYPE_END_RANGE - XGL_INDEX_TYPE_BEGIN_RANGE + 1),
390 XGL_MAX_ENUM(_XGL_INDEX_TYPE)
391} XGL_INDEX_TYPE;
392
393typedef enum _XGL_TEX_FILTER
394{
395 XGL_TEX_FILTER_NEAREST = 0,
396 XGL_TEX_FILTER_LINEAR = 1,
397 XGL_MAX_ENUM(_XGL_TEX_FILTER)
398} XGL_TEX_FILTER;
399
400typedef enum _XGL_TEX_MIPMAP_MODE
401{
402 XGL_TEX_MIPMAP_BASE = 0, // Always choose base level
403 XGL_TEX_MIPMAP_NEAREST = 1, // Choose nearest mip level
404 XGL_TEX_MIPMAP_LINEAR = 2, // Linear filter between mip levels
405 XGL_MAX_ENUM(_XGL_TEX_MIPMAP_MODE)
406} XGL_TEX_MIPMAP_MODE;
407
408typedef enum _XGL_TEX_ADDRESS
409{
410 XGL_TEX_ADDRESS_WRAP = 0x00000000,
411 XGL_TEX_ADDRESS_MIRROR = 0x00000001,
412 XGL_TEX_ADDRESS_CLAMP = 0x00000002,
413 XGL_TEX_ADDRESS_MIRROR_ONCE = 0x00000003,
414 XGL_TEX_ADDRESS_CLAMP_BORDER = 0x00000004,
415
416 XGL_TEX_ADDRESS_BEGIN_RANGE = XGL_TEX_ADDRESS_WRAP,
417 XGL_TEX_ADDRESS_END_RANGE = XGL_TEX_ADDRESS_CLAMP_BORDER,
418 XGL_NUM_TEX_ADDRESS = (XGL_TEX_ADDRESS_END_RANGE - XGL_TEX_ADDRESS_BEGIN_RANGE + 1),
419 XGL_MAX_ENUM(_XGL_TEX_ADDRESS)
420} XGL_TEX_ADDRESS;
421
422typedef enum _XGL_COMPARE_FUNC
423{
424 XGL_COMPARE_NEVER = 0x00000000,
425 XGL_COMPARE_LESS = 0x00000001,
426 XGL_COMPARE_EQUAL = 0x00000002,
427 XGL_COMPARE_LESS_EQUAL = 0x00000003,
428 XGL_COMPARE_GREATER = 0x00000004,
429 XGL_COMPARE_NOT_EQUAL = 0x00000005,
430 XGL_COMPARE_GREATER_EQUAL = 0x00000006,
431 XGL_COMPARE_ALWAYS = 0x00000007,
432
433 XGL_COMPARE_FUNC_BEGIN_RANGE = XGL_COMPARE_NEVER,
434 XGL_COMPARE_FUNC_END_RANGE = XGL_COMPARE_ALWAYS,
435 XGL_NUM_COMPARE_FUNC = (XGL_COMPARE_FUNC_END_RANGE - XGL_COMPARE_FUNC_BEGIN_RANGE + 1),
436 XGL_MAX_ENUM(_XGL_COMPARE_FUNC)
437} XGL_COMPARE_FUNC;
438
439typedef enum _XGL_FILL_MODE
440{
441 XFL_FILL_POINTS = 0x00000000,
442 XGL_FILL_WIREFRAME = 0x00000001,
443 XGL_FILL_SOLID = 0x00000002,
444
445 XGL_FILL_MODE_BEGIN_RANGE = XGL_FILL_SOLID,
446 XGL_FILL_MODE_END_RANGE = XFL_FILL_POINTS,
447 XGL_NUM_FILL_MODE = (XGL_FILL_MODE_END_RANGE - XGL_FILL_MODE_BEGIN_RANGE + 1),
448 XGL_MAX_ENUM(_XGL_FILL_MODE)
449} XGL_FILL_MODE;
450
451typedef enum _XGL_CULL_MODE
452{
453 XGL_CULL_NONE = 0x00000000,
454 XGL_CULL_FRONT = 0x00000001,
455 XGL_CULL_BACK = 0x00000002,
456 XGL_CULL_FRONT_AND_BACK = 0x00000003,
457
458 XGL_CULL_MODE_BEGIN_RANGE = XGL_CULL_NONE,
459 XGL_CULL_MODE_END_RANGE = XGL_CULL_FRONT_AND_BACK,
460 XGL_NUM_CULL_MODE = (XGL_CULL_MODE_END_RANGE - XGL_CULL_MODE_BEGIN_RANGE + 1),
461 XGL_MAX_ENUM(_XGL_CULL_MODE)
462} XGL_CULL_MODE;
463
464typedef enum _XGL_FACE_ORIENTATION
465{
466 XGL_FRONT_FACE_CCW = 0x00000000,
467 XGL_FRONT_FACE_CW = 0x00000001,
468
469 XGL_FACE_ORIENTATION_BEGIN_RANGE = XGL_FRONT_FACE_CCW,
470 XGL_FACE_ORIENTATION_END_RANGE = XGL_FRONT_FACE_CW,
471 XGL_NUM_FACE_ORIENTATION = (XGL_FACE_ORIENTATION_END_RANGE - XGL_FACE_ORIENTATION_BEGIN_RANGE + 1),
472 XGL_MAX_ENUM(_XGL_FACE_ORIENTATION)
473} XGL_FACE_ORIENTATION;
474
475typedef enum _XGL_BLEND
476{
477 XGL_BLEND_ZERO = 0x00000000,
478 XGL_BLEND_ONE = 0x00000001,
479 XGL_BLEND_SRC_COLOR = 0x00000002,
480 XGL_BLEND_ONE_MINUS_SRC_COLOR = 0x00000003,
481 XGL_BLEND_DEST_COLOR = 0x00000004,
482 XGL_BLEND_ONE_MINUS_DEST_COLOR = 0x00000005,
483 XGL_BLEND_SRC_ALPHA = 0x00000006,
484 XGL_BLEND_ONE_MINUS_SRC_ALPHA = 0x00000007,
485 XGL_BLEND_DEST_ALPHA = 0x00000008,
486 XGL_BLEND_ONE_MINUS_DEST_ALPHA = 0x00000009,
487 XGL_BLEND_CONSTANT_COLOR = 0x0000000a,
488 XGL_BLEND_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
489 XGL_BLEND_CONSTANT_ALPHA = 0x0000000c,
490 XGL_BLEND_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
491 XGL_BLEND_SRC_ALPHA_SATURATE = 0x0000000e,
492 XGL_BLEND_SRC1_COLOR = 0x0000000f,
493 XGL_BLEND_ONE_MINUS_SRC1_COLOR = 0x00000010,
494 XGL_BLEND_SRC1_ALPHA = 0x00000011,
495 XGL_BLEND_ONE_MINUS_SRC1_ALPHA = 0x00000012,
496
497 XGL_BLEND_BEGIN_RANGE = XGL_BLEND_ZERO,
498 XGL_BLEND_END_RANGE = XGL_BLEND_ONE_MINUS_SRC1_ALPHA,
499 XGL_NUM_BLEND = (XGL_BLEND_END_RANGE - XGL_BLEND_BEGIN_RANGE + 1),
500 XGL_MAX_ENUM(_XGL_BLEND)
501} XGL_BLEND;
502
503typedef enum _XGL_BLEND_FUNC
504{
505 XGL_BLEND_FUNC_ADD = 0x00000000,
506 XGL_BLEND_FUNC_SUBTRACT = 0x00000001,
507 XGL_BLEND_FUNC_REVERSE_SUBTRACT = 0x00000002,
508 XGL_BLEND_FUNC_MIN = 0x00000003,
509 XGL_BLEND_FUNC_MAX = 0x00000004,
510
511 XGL_BLEND_FUNC_BEGIN_RANGE = XGL_BLEND_FUNC_ADD,
512 XGL_BLEND_FUNC_END_RANGE = XGL_BLEND_FUNC_MAX,
513 XGL_NUM_BLEND_FUNC = (XGL_BLEND_FUNC_END_RANGE - XGL_BLEND_FUNC_BEGIN_RANGE + 1),
514 XGL_MAX_ENUM(_XGL_BLEND_FUNC)
515} XGL_BLEND_FUNC;
516
517typedef enum _XGL_STENCIL_OP
518{
519 XGL_STENCIL_OP_KEEP = 0x00000000,
520 XGL_STENCIL_OP_ZERO = 0x00000001,
521 XGL_STENCIL_OP_REPLACE = 0x00000002,
522 XGL_STENCIL_OP_INC_CLAMP = 0x00000003,
523 XGL_STENCIL_OP_DEC_CLAMP = 0x00000004,
524 XGL_STENCIL_OP_INVERT = 0x00000005,
525 XGL_STENCIL_OP_INC_WRAP = 0x00000006,
526 XGL_STENCIL_OP_DEC_WRAP = 0x00000007,
527
528 XGL_STENCIL_OP_BEGIN_RANGE = XGL_STENCIL_OP_KEEP,
529 XGL_STENCIL_OP_END_RANGE = XGL_STENCIL_OP_DEC_WRAP,
530 XGL_NUM_STENCIL_OP = (XGL_STENCIL_OP_END_RANGE - XGL_STENCIL_OP_BEGIN_RANGE + 1),
531 XGL_MAX_ENUM(_XGL_STENCIL_OP)
532} XGL_STENCIL_OP;
533
534typedef enum _XGL_LOGIC_OP
535{
536 XGL_LOGIC_OP_COPY = 0x00000000,
537 XGL_LOGIC_OP_CLEAR = 0x00000001,
538 XGL_LOGIC_OP_AND = 0x00000002,
539 XGL_LOGIC_OP_AND_REVERSE = 0x00000003,
540 XGL_LOGIC_OP_AND_INVERTED = 0x00000004,
541 XGL_LOGIC_OP_NOOP = 0x00000005,
542 XGL_LOGIC_OP_XOR = 0x00000006,
543 XGL_LOGIC_OP_OR = 0x00000007,
544 XGL_LOGIC_OP_NOR = 0x00000008,
545 XGL_LOGIC_OP_EQUIV = 0x00000009,
546 XGL_LOGIC_OP_INVERT = 0x0000000a,
547 XGL_LOGIC_OP_OR_REVERSE = 0x0000000b,
548 XGL_LOGIC_OP_COPY_INVERTED = 0x0000000c,
549 XGL_LOGIC_OP_OR_INVERTED = 0x0000000d,
550 XGL_LOGIC_OP_NAND = 0x0000000e,
551 XGL_LOGIC_OP_SET = 0x0000000f,
552
553 XGL_LOGIC_OP_BEGIN_RANGE = XGL_LOGIC_OP_COPY,
554 XGL_LOGIC_OP_END_RANGE = XGL_LOGIC_OP_SET,
555 XGL_NUM_LOGIC_OP = (XGL_LOGIC_OP_END_RANGE - XGL_LOGIC_OP_BEGIN_RANGE + 1),
556 XGL_MAX_ENUM(_XGL_LOGIC_OP)
557} XGL_LOGIC_OP;
558
559typedef enum _XGL_ATOMIC_OP
560{
561 XGL_ATOMIC_ADD_INT32 = 0x00000000,
562 XGL_ATOMIC_SUB_INT32 = 0x00000001,
563 XGL_ATOMIC_MIN_UINT32 = 0x00000002,
564 XGL_ATOMIC_MAX_UINT32 = 0x00000003,
565 XGL_ATOMIC_MIN_SINT32 = 0x00000004,
566 XGL_ATOMIC_MAX_SINT32 = 0x00000005,
567 XGL_ATOMIC_AND_INT32 = 0x00000006,
568 XGL_ATOMIC_OR_INT32 = 0x00000007,
569 XGL_ATOMIC_XOR_INT32 = 0x00000008,
570 XGL_ATOMIC_INC_UINT32 = 0x00000009,
571 XGL_ATOMIC_DEC_UINT32 = 0x0000000a,
572 XGL_ATOMIC_ADD_INT64 = 0x0000000b,
573 XGL_ATOMIC_SUB_INT64 = 0x0000000c,
574 XGL_ATOMIC_MIN_UINT64 = 0x0000000d,
575 XGL_ATOMIC_MAX_UINT64 = 0x0000000e,
576 XGL_ATOMIC_MIN_SINT64 = 0x0000000f,
577 XGL_ATOMIC_MAX_SINT64 = 0x00000010,
578 XGL_ATOMIC_AND_INT64 = 0x00000011,
579 XGL_ATOMIC_OR_INT64 = 0x00000012,
580 XGL_ATOMIC_XOR_INT64 = 0x00000013,
581 XGL_ATOMIC_INC_UINT64 = 0x00000014,
582 XGL_ATOMIC_DEC_UINT64 = 0x00000015,
583
584 XGL_ATOMIC_OP_BEGIN_RANGE = XGL_ATOMIC_ADD_INT32,
585 XGL_ATOMIC_OP_END_RANGE = XGL_ATOMIC_DEC_UINT64,
586 XGL_NUM_ATOMIC_OP = (XGL_ATOMIC_OP_END_RANGE - XGL_ATOMIC_OP_BEGIN_RANGE + 1),
587 XGL_MAX_ENUM(_XGL_ATOMIC_OP)
588} XGL_ATOMIC_OP;
589
590typedef enum _XGL_SYSTEM_ALLOC_TYPE
591{
592 XGL_SYSTEM_ALLOC_API_OBJECT = 0x00000000,
593 XGL_SYSTEM_ALLOC_INTERNAL = 0x00000001,
594 XGL_SYSTEM_ALLOC_INTERNAL_TEMP = 0x00000002,
595 XGL_SYSTEM_ALLOC_INTERNAL_SHADER = 0x00000003,
596 XGL_SYSTEM_ALLOC_DEBUG = 0x00000004,
597
598 XGL_SYSTEM_ALLOC_BEGIN_RANGE = XGL_SYSTEM_ALLOC_API_OBJECT,
599 XGL_SYSTEM_ALLOC_END_RANGE = XGL_SYSTEM_ALLOC_DEBUG,
600 XGL_NUM_SYSTEM_ALLOC_TYPE = (XGL_SYSTEM_ALLOC_END_RANGE - XGL_SYSTEM_ALLOC_BEGIN_RANGE + 1),
601 XGL_MAX_ENUM(_XGL_SYSTEM_ALLOC_TYPE)
602} XGL_SYSTEM_ALLOC_TYPE;
603
604typedef enum _XGL_HEAP_MEMORY_TYPE
605{
606 XGL_HEAP_MEMORY_OTHER = 0x00000000,
607 XGL_HEAP_MEMORY_LOCAL = 0x00000001,
608 XGL_HEAP_MEMORY_REMOTE = 0x00000002,
609 XGL_HEAP_MEMORY_EMBEDDED = 0x00000003,
610
611 XGL_HEAP_MEMORY_BEGIN_RANGE = XGL_HEAP_MEMORY_OTHER,
612 XGL_HEAP_MEMORY_END_RANGE = XGL_HEAP_MEMORY_EMBEDDED,
613 XGL_NUM_HEAP_MEMORY_TYPE = (XGL_HEAP_MEMORY_END_RANGE - XGL_HEAP_MEMORY_BEGIN_RANGE + 1),
614 XGL_MAX_ENUM(_XGL_HEAP_MEMORY_TYPE)
615} XGL_HEAP_MEMORY_TYPE;
616
617typedef enum _XGL_PHYSICAL_GPU_TYPE
618{
619 XGL_GPU_TYPE_OTHER = 0x00000000,
620 XGL_GPU_TYPE_INTEGRATED = 0x00000001,
621 XGL_GPU_TYPE_DISCRETE = 0x00000002,
622 XGL_GPU_TYPE_VIRTUAL = 0x00000003,
623
624 XGL_PHYSICAL_GPU_TYPE_BEGIN_RANGE = XGL_GPU_TYPE_OTHER,
625 XGL_PHYSICAL_GPU_TYPE_END_RANGE = XGL_GPU_TYPE_VIRTUAL,
626 XGL_NUM_PHYSICAL_GPU_TYPE = (XGL_PHYSICAL_GPU_TYPE_END_RANGE - XGL_PHYSICAL_GPU_TYPE_BEGIN_RANGE + 1),
627 XGL_MAX_ENUM(_XGL_PHYSICAL_GPU_TYPE)
628} XGL_PHYSICAL_GPU_TYPE;
629
630typedef enum _XGL_PHYSICAL_GPU_INFO_TYPE
631{
632 // Info type for xglGetGpuInfo()
633 XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES = 0x00000000,
634 XGL_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE = 0x00000001,
635 XGL_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES = 0x00000002,
636 XGL_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES = 0x00000003,
637
638 XGL_MAX_ENUM(_XGL_PHYSICAL_GPU_INFO_TYPE)
639} XGL_PHYSICAL_GPU_INFO_TYPE;
640
641typedef enum _XGL_MEMORY_HEAP_INFO_TYPE
642{
643 // Info type for xglGetMemoryHeapInfo()
644 XGL_INFO_TYPE_MEMORY_HEAP_PROPERTIES = 0x00000000,
645
646 XGL_MAX_ENUM(_XGL_MEMORY_HEAP_INFO_TYPE)
647} XGL_MEMORY_HEAP_INFO_TYPE;
648
649typedef enum _XGL_FORMAT_INFO_TYPE
650{
651 // Info type for xlgGetFormatInfo()
652 XGL_INFO_TYPE_FORMAT_PROPERTIES = 0x00000000,
653
654 XGL_MAX_ENUM(_XGL_FORMAT_INFO_TYPE)
655} XGL_FORMAT_INFO_TYPE;
656
657typedef enum _XGL_SUBRESOURCE_INFO_TYPE
658{
659 // Info type for xglGetImageSubresourceInfo()
660 XGL_INFO_TYPE_SUBRESOURCE_LAYOUT = 0x00000000,
661
662 XGL_MAX_ENUM(_XGL_SUBRESOURCE_INFO_TYPE)
663} XGL_SUBRESOURCE_INFO_TYPE;
664
665typedef enum _XGL_OBJECT_INFO_TYPE
666{
667 // Info type for xglGetObjectInfo()
668 XGL_INFO_TYPE_MEMORY_REQUIREMENTS = 0x00000000,
669
670 XGL_MAX_ENUM(_XGL_OBJECT_INFO_TYPE)
671} XGL_OBJECT_INFO_TYPE;
672
673typedef enum _XGL_VALIDATION_LEVEL
674{
675 XGL_VALIDATION_LEVEL_0 = 0x00000000,
676 XGL_VALIDATION_LEVEL_1 = 0x00000001,
677 XGL_VALIDATION_LEVEL_2 = 0x00000002,
678 XGL_VALIDATION_LEVEL_3 = 0x00000003,
679 XGL_VALIDATION_LEVEL_4 = 0x00000004,
680
681 XGL_VALIDATION_LEVEL_BEGIN_RANGE = XGL_VALIDATION_LEVEL_0,
682 XGL_VALIDATION_LEVEL_END_RANGE = XGL_VALIDATION_LEVEL_4,
683 XGL_NUM_VALIDATION_LEVEL = (XGL_VALIDATION_LEVEL_END_RANGE - XGL_VALIDATION_LEVEL_BEGIN_RANGE + 1),
684
685 XGL_MAX_ENUM(_XGL_VALIDATION_LEVEL)
686} XGL_VALIDATION_LEVEL;
687
688// ------------------------------------------------------------------------------------------------
689// Error and return codes
690
691typedef enum _XGL_RESULT_CODE
692{
693 // Return codes for successful operation execution (>= 0)
694 XGL_SUCCESS = 0x0000000,
695 XGL_UNSUPPORTED = 0x0000001,
696 XGL_NOT_READY = 0x0000002,
697 XGL_TIMEOUT = 0x0000003,
698 XGL_EVENT_SET = 0x0000004,
699 XGL_EVENT_RESET = 0x0000005,
700
701 // Error codes (negative values)
702 XGL_ERROR_UNKNOWN = -(0x00000001),
703 XGL_ERROR_UNAVAILABLE = -(0x00000002),
704 XGL_ERROR_INITIALIZATION_FAILED = -(0x00000003),
705 XGL_ERROR_OUT_OF_MEMORY = -(0x00000004),
706 XGL_ERROR_OUT_OF_GPU_MEMORY = -(0x00000005),
707 XGL_ERROR_DEVICE_ALREADY_CREATED = -(0x00000006),
708 XGL_ERROR_DEVICE_LOST = -(0x00000007),
709 XGL_ERROR_INVALID_POINTER = -(0x00000008),
710 XGL_ERROR_INVALID_VALUE = -(0x00000009),
711 XGL_ERROR_INVALID_HANDLE = -(0x0000000A),
712 XGL_ERROR_INVALID_ORDINAL = -(0x0000000B),
713 XGL_ERROR_INVALID_MEMORY_SIZE = -(0x0000000C),
714 XGL_ERROR_INVALID_EXTENSION = -(0x0000000D),
715 XGL_ERROR_INVALID_FLAGS = -(0x0000000E),
716 XGL_ERROR_INVALID_ALIGNMENT = -(0x0000000F),
717 XGL_ERROR_INVALID_FORMAT = -(0x00000010),
718 XGL_ERROR_INVALID_IMAGE = -(0x00000011),
719 XGL_ERROR_INVALID_DESCRIPTOR_SET_DATA = -(0x00000012),
720 XGL_ERROR_INVALID_QUEUE_TYPE = -(0x00000013),
721 XGL_ERROR_INVALID_OBJECT_TYPE = -(0x00000014),
722 XGL_ERROR_UNSUPPORTED_SHADER_IL_VERSION = -(0x00000015),
723 XGL_ERROR_BAD_SHADER_CODE = -(0x00000016),
724 XGL_ERROR_BAD_PIPELINE_DATA = -(0x00000017),
725 XGL_ERROR_TOO_MANY_MEMORY_REFERENCES = -(0x00000018),
726 XGL_ERROR_NOT_MAPPABLE = -(0x00000019),
727 XGL_ERROR_MEMORY_MAP_FAILED = -(0x0000001A),
728 XGL_ERROR_MEMORY_UNMAP_FAILED = -(0x0000001B),
729 XGL_ERROR_INCOMPATIBLE_DEVICE = -(0x0000001C),
730 XGL_ERROR_INCOMPATIBLE_DRIVER = -(0x0000001D),
731 XGL_ERROR_INCOMPLETE_COMMAND_BUFFER = -(0x0000001E),
732 XGL_ERROR_BUILDING_COMMAND_BUFFER = -(0x0000001F),
733 XGL_ERROR_MEMORY_NOT_BOUND = -(0x00000020),
734 XGL_ERROR_INCOMPATIBLE_QUEUE = -(0x00000021),
735 XGL_ERROR_NOT_SHAREABLE = -(0x00000022),
736} XGL_RESULT;
737
738// ------------------------------------------------------------------------------------------------
739// XGL format definitions
740
741typedef enum _XGL_CHANNEL_FORMAT
742{
743 XGL_CH_FMT_UNDEFINED = 0,
744 XGL_CH_FMT_R4G4 = 1,
745 XGL_CH_FMT_R4G4B4A4 = 2,
746 XGL_CH_FMT_R5G6B5 = 3,
747 XGL_CH_FMT_B5G6R5 = 4,
748 XGL_CH_FMT_R5G5B5A1 = 5,
749 XGL_CH_FMT_R8 = 6,
750 XGL_CH_FMT_R8G8 = 7,
751 XGL_CH_FMT_R8G8B8A8 = 8,
752 XGL_CH_FMT_B8G8R8A8 = 9,
753 XGL_CH_FMT_R10G11B11 = 10,
754 XGL_CH_FMT_R11G11B10 = 11,
755 XGL_CH_FMT_R10G10B10A2 = 12,
756 XGL_CH_FMT_R16 = 13,
757 XGL_CH_FMT_R16G16 = 14,
758 XGL_CH_FMT_R16G16B16A16 = 15,
759 XGL_CH_FMT_R32 = 16,
760 XGL_CH_FMT_R32G32 = 17,
761 XGL_CH_FMT_R32G32B32 = 18,
762 XGL_CH_FMT_R32G32B32A32 = 19,
763 XGL_CH_FMT_R16G8 = 20,
764 XGL_CH_FMT_R32G8 = 21,
765 XGL_CH_FMT_R9G9B9E5 = 22,
766 XGL_CH_FMT_BC1 = 23,
767 XGL_CH_FMT_BC2 = 24,
768 XGL_CH_FMT_BC3 = 25,
769 XGL_CH_FMT_BC4 = 26,
770 XGL_CH_FMT_BC5 = 27,
771 XGL_CH_FMT_BC6U = 28,
772 XGL_CH_FMT_BC6S = 29,
773 XGL_CH_FMT_BC7 = 30,
Chia-I Wu6a921262014-10-06 15:07:25 +0800774// IMG CHANGE BEGIN - support for vertex input description
775 XGL_CH_FMT_R8G8B8 = 31,
776 XGL_CH_FMT_R16G16B16 = 32,
777 XGL_MAX_CH_FMT = XGL_CH_FMT_R16G16B16,
778// IMG CHANGE END
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600779 XGL_MAX_ENUM(_XGL_CHANNEL_FORMAT)
780} XGL_CHANNEL_FORMAT;
781
782typedef enum _XGL_NUM_FORMAT
783{
784 XGL_NUM_FMT_UNDEFINED = 0,
785 XGL_NUM_FMT_UNORM = 1,
786 XGL_NUM_FMT_SNORM = 2,
787 XGL_NUM_FMT_UINT = 3,
788 XGL_NUM_FMT_SINT = 4,
789 XGL_NUM_FMT_FLOAT = 5,
790 XGL_NUM_FMT_SRGB = 6,
791 XGL_NUM_FMT_DS = 7,
792 XGL_MAX_NUM_FMT = XGL_NUM_FMT_DS,
793 XGL_MAX_ENUM(_XGL_NUM_FORMAT)
794} XGL_NUM_FORMAT;
795
796typedef enum _XGL_PROVOKING_VERTEX_CONVENTION
797{
798 XGL_PROVOKING_VERTEX_FIRST = 0,
799 XGL_PROVOKING_VERTEX_LAST = 1,
800
801 XGL_PROVOKING_VERTEX_BEGIN_RANGE = XGL_PROVOKING_VERTEX_FIRST,
802 XGL_PROVOKING_VERTEX_END_RANGE = XGL_PROVOKING_VERTEX_LAST,
803 XGL_NUM_PROVOKING_VERTEX_CONVENTIONS = (XGL_PROVOKING_VERTEX_END_RANGE - XGL_PROVOKING_VERTEX_BEGIN_RANGE + 1),
804 XGL_MAX_ENUM(_XGL_PROVOKING_VERTEX_CONVENTION)
805} XGL_PROVOKING_VERTEX_CONVENTION;
806
Chia-I Wu6a921262014-10-06 15:07:25 +0800807// IMG CHANGE BEGIN - support for vertex input description
808typedef enum _XGL_VERTEX_INPUT_STEP_RATE
809{
810 XGL_VERTEX_INPUT_STEP_RATE_VERTEX = 0x0,
811 XGL_VERTEX_INPUT_STEP_RATE_INSTANCE = 0x1,
812 XGL_VERTEX_INPUT_STEP_RATE_DRAW = 0x2,
813 XGL_MAX_ENUM(_XGL_VERTEX_INPUT_STEP_RATE)
814} XGL_VERTEX_INPUT_STEP_RATE;
815// IMG CHANGE END
816
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600817typedef struct _XGL_FORMAT
818{
819 XGL_CHANNEL_FORMAT channelFormat;
820 XGL_NUM_FORMAT numericFormat;
821} XGL_FORMAT;
822
823// Shader stage enumerant
824typedef enum _XGL_PIPELINE_SHADER_STAGE
825{
826 XGL_SHADER_STAGE_VERTEX = 0,
827 XGL_SHADER_STAGE_TESS_CONTROL = 1,
828 XGL_SHADER_STAGE_TESS_EVALUATION = 2,
829 XGL_SHADER_STAGE_GEOMETRY = 3,
830 XGL_SHADER_STAGE_FRAGMENT = 4,
831 XGL_SHADER_STAGE_COMPUTE = 5,
832 XGL_MAX_ENUM(_XGL_PIPELINE_SHADER_STAGE)
833} XGL_PIPELINE_SHADER_STAGE;
834
835// Structure type enumerant
836typedef enum _XGL_STRUCTURE_TYPE
837{
838 XGL_STRUCTURE_TYPE_APPLICATION_INFO = 0,
839 XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
840 XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
841 XGL_STRUCTURE_TYPE_MEMORY_OPEN_INFO = 4,
842 XGL_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO = 5,
843 XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO = 6,
844 XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO = 7,
845 XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION = 8,
846 XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 9,
847 XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO = 10,
848 XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO = 11,
849 XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO = 12,
850 XGL_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 13,
851 XGL_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 14,
852 XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_CREATE_INFO = 15,
853 XGL_STRUCTURE_TYPE_RASTER_STATE_CREATE_INFO = 16,
854 XGL_STRUCTURE_TYPE_MSAA_STATE_CREATE_INFO = 17,
855 XGL_STRUCTURE_TYPE_COLOR_BLEND_STATE_CREATE_INFO = 18,
856 XGL_STRUCTURE_TYPE_DEPTH_STENCIL_STATE_CREATE_INFO = 19,
857 XGL_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 20,
858 XGL_STRUCTURE_TYPE_EVENT_CREATE_INFO = 21,
859 XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO = 22,
860 XGL_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 23,
861 XGL_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO = 24,
862 XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 25,
863 XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 26,
864 XGL_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 27,
Courtney Goeltzenleuchter7f11ed22014-08-15 14:54:58 -0600865 XGL_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO = 28,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600866 XGL_STRUCTURE_TYPE_PIPELINE_DB_STATE_CREATE_INFO = 29,
867 XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO = 30,
868 XGL_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO = 31,
869 XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO = 32,
870 XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 33,
Chia-I Wu6a921262014-10-06 15:07:25 +0800871// IMG CHANGE BEGIN - support for vertex input description
872 XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO = 34,
873// IMG CHANGE END
Jon Ashburn183dfd02014-10-22 18:13:16 -0600874 XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO = 35,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600875 XGL_MAX_ENUM(_XGL_STRUCTURE_TYPE)
876} XGL_STRUCTURE_TYPE;
877
878// ------------------------------------------------------------------------------------------------
879// Flags
880
881// Device creation flags
882typedef enum _XGL_DEVICE_CREATE_FLAGS
883{
884 XGL_DEVICE_CREATE_VALIDATION_BIT = 0x00000001,
885 XGL_DEVICE_CREATE_MGPU_IQ_MATCH_BIT = 0x00000002,
886} XGL_DEVICE_CREATE_FLAGS;
887
888// Queue capabilities
889typedef enum _XGL_QUEUE_FLAGS
890{
891 XGL_QUEUE_GRAPHICS_BIT = 0x00000001, // Queue supports graphics operations
892 XGL_QUEUE_COMPUTE_BIT = 0x00000002, // Queue supports compute operations
893 XGL_QUEUE_DMA_BIT = 0x00000004, // Queue supports DMA operations
894 XGL_QUEUE_EXTENDED_BIT = 0x80000000 // Extended queue
895} XGL_QUEUE_FLAGS;
896
897// Memory heap properties
898typedef enum _XGL_MEMORY_HEAP_FLAGS
899{
900 XGL_MEMORY_HEAP_CPU_VISIBLE_BIT = 0x00000001,
901 XGL_MEMORY_HEAP_CPU_GPU_COHERENT_BIT = 0x00000002,
902 XGL_MEMORY_HEAP_CPU_UNCACHED_BIT = 0x00000004,
903 XGL_MEMORY_HEAP_CPU_WRITE_COMBINED_BIT = 0x00000008,
904 XGL_MEMORY_HEAP_HOLDS_PINNED_BIT = 0x00000010,
905 XGL_MEMORY_HEAP_SHAREABLE_BIT = 0x00000020,
906} XGL_MEMORY_HEAP_FLAGS;
907
908// Memory allocation flags
909typedef enum _XGL_MEMORY_ALLOC_FLAGS
910{
911 XGL_MEMORY_ALLOC_VIRTUAL_BIT = 0x00000001,
912 XGL_MEMORY_ALLOC_SHAREABLE_BIT = 0x00000002,
913} XGL_MEMORY_ALLOC_FLAGS;
914
915// Image usage flags
916typedef enum _XGL_IMAGE_USAGE_FLAGS
917{
918 XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT = 0x00000001,
919 XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT = 0x00000002,
920 XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000004,
921 XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT = 0x00000008,
922} XGL_IMAGE_USAGE_FLAGS;
923
924// Image flags
925typedef enum _XGL_IMAGE_CREATE_FLAGS
926{
927 XGL_IMAGE_CREATE_INVARIANT_DATA_BIT = 0x00000001,
928 XGL_IMAGE_CREATE_CLONEABLE_BIT = 0x00000002,
929 XGL_IMAGE_CREATE_SHAREABLE_BIT = 0x00000004,
930} XGL_IMAGE_CREATE_FLAGS;
931
932// Depth-stencil view creation flags
933typedef enum _XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS
934{
935 XGL_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
936 XGL_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
937} XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS;
938
939// Pipeline creation flags
940typedef enum _XGL_PIPELINE_CREATE_FLAGS
941{
942 XGL_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
943} XGL_PIPELINE_CREATE_FLAGS;
944
945// Semaphore creation flags
946typedef enum _XGL_SEMAPHORE_CREATE_FLAGS
947{
948 XGL_SEMAPHORE_CREATE_SHAREABLE_BIT = 0x00000001,
949} XGL_SEMAPHORE_CREATE_FLAGS;
950
951// Memory reference flags
952typedef enum _XGL_MEMORY_REF_FLAGS
953{
954 XGL_MEMORY_REF_READ_ONLY_BIT = 0x00000001,
955} XGL_MEMORY_REF_FLAGS;
956
957// Format capability flags
958typedef enum _XGL_FORMAT_FEATURE_FLAGS
959{
960 XGL_FORMAT_IMAGE_SHADER_READ_BIT = 0x00000001,
961 XGL_FORMAT_IMAGE_SHADER_WRITE_BIT = 0x00000002,
962 XGL_FORMAT_IMAGE_COPY_BIT = 0x00000004,
963 XGL_FORMAT_MEMORY_SHADER_ACCESS_BIT = 0x00000008,
964 XGL_FORMAT_COLOR_ATTACHMENT_WRITE_BIT = 0x00000010,
965 XGL_FORMAT_COLOR_ATTACHMENT_BLEND_BIT = 0x00000020,
966 XGL_FORMAT_DEPTH_ATTACHMENT_BIT = 0x00000040,
967 XGL_FORMAT_STENCIL_ATTACHMENT_BIT = 0x00000080,
968 XGL_FORMAT_MSAA_ATTACHMENT_BIT = 0x00000100,
969 XGL_FORMAT_CONVERSION_BIT = 0x00000200,
970} XGL_FORMAT_FEATURE_FLAGS;
971
972// Query flags
973typedef enum _XGL_QUERY_CONTROL_FLAGS
974{
975 XGL_QUERY_IMPRECISE_DATA_BIT = 0x00000001,
976} XGL_QUERY_CONTROL_FLAGS;
977
978// GPU compatibility flags
979typedef enum _XGL_GPU_COMPATIBILITY_FLAGS
980{
981 XGL_GPU_COMPAT_ASIC_FEATURES_BIT = 0x00000001,
982 XGL_GPU_COMPAT_IQ_MATCH_BIT = 0x00000002,
983 XGL_GPU_COMPAT_PEER_TRANSFER_BIT = 0x00000004,
984 XGL_GPU_COMPAT_SHARED_MEMORY_BIT = 0x00000008,
985 XGL_GPU_COMPAT_SHARED_SYNC_BIT = 0x00000010,
986 XGL_GPU_COMPAT_SHARED_GPU0_DISPLAY_BIT = 0x00000020,
987 XGL_GPU_COMPAT_SHARED_GPU1_DISPLAY_BIT = 0x00000040,
988} XGL_GPU_COMPATIBILITY_FLAGS;
989
990// Command buffer building flags
991typedef enum _XGL_CMD_BUFFER_BUILD_FLAGS
992{
993 XGL_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT = 0x00000001,
994 XGL_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT = 0x00000002,
995 XGL_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT = 0x00000004,
996 XGL_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT = 0x00000008,
997} XGL_CMD_BUFFER_BUILD_FLAGS;
998
999// ------------------------------------------------------------------------------------------------
1000// XGL structures
1001
1002typedef struct _XGL_OFFSET2D
1003{
1004 XGL_INT x;
1005 XGL_INT y;
1006} XGL_OFFSET2D;
1007
1008typedef struct _XGL_OFFSET3D
1009{
1010 XGL_INT x;
1011 XGL_INT y;
1012 XGL_INT z;
1013} XGL_OFFSET3D;
1014
1015typedef struct _XGL_EXTENT2D
1016{
1017 XGL_INT width;
1018 XGL_INT height;
1019} XGL_EXTENT2D;
1020
1021typedef struct _XGL_EXTENT3D
1022{
1023 XGL_INT width;
1024 XGL_INT height;
1025 XGL_INT depth;
1026} XGL_EXTENT3D;
1027
1028typedef struct _XGL_VIEWPORT
1029{
1030 XGL_FLOAT originX;
1031 XGL_FLOAT originY;
1032 XGL_FLOAT width;
1033 XGL_FLOAT height;
1034 XGL_FLOAT minDepth;
1035 XGL_FLOAT maxDepth;
1036} XGL_VIEWPORT;
1037
1038typedef struct _XGL_RECT
1039{
1040 XGL_OFFSET2D offset;
1041 XGL_EXTENT2D extent;
1042} XGL_RECT;
1043
1044typedef struct _XGL_PHYSICAL_GPU_PROPERTIES
1045{
1046 XGL_SIZE structSize;
1047 XGL_UINT32 apiVersion;
1048 XGL_UINT32 driverVersion;
1049 XGL_UINT32 vendorId;
1050 XGL_UINT32 deviceId;
1051 XGL_PHYSICAL_GPU_TYPE gpuType;
1052 XGL_CHAR gpuName[XGL_MAX_PHYSICAL_GPU_NAME];
1053 XGL_UINT maxMemRefsPerSubmission;
1054 XGL_GPU_SIZE virtualMemPageSize;
1055 XGL_GPU_SIZE maxInlineMemoryUpdateSize;
1056 XGL_UINT maxBoundDescriptorSets;
1057 XGL_UINT maxThreadGroupSize;
1058 XGL_UINT64 timestampFrequency;
1059 XGL_BOOL multiColorAttachmentClears;
1060} XGL_PHYSICAL_GPU_PROPERTIES;
1061
1062typedef struct _XGL_PHYSICAL_GPU_PERFORMANCE
1063{
1064 XGL_FLOAT maxGpuClock;
1065 XGL_FLOAT aluPerClock;
1066 XGL_FLOAT texPerClock;
1067 XGL_FLOAT primsPerClock;
1068 XGL_FLOAT pixelsPerClock;
1069} XGL_PHYSICAL_GPU_PERFORMANCE;
1070
1071typedef struct _XGL_GPU_COMPATIBILITY_INFO
1072{
1073 XGL_FLAGS compatibilityFlags; // XGL_GPU_COMPATIBILITY_FLAGS
1074} XGL_GPU_COMPATIBILITY_INFO;
1075
1076typedef struct _XGL_APPLICATION_INFO
1077{
1078 XGL_STRUCTURE_TYPE sType; // Type of structure. Should be XGL_STRUCTURE_TYPE_APPLICATION_INFO
1079 XGL_VOID* pNext; // Next structure in chain
1080 const XGL_CHAR* pAppName;
1081 XGL_UINT32 appVersion;
1082 const XGL_CHAR* pEngineName;
1083 XGL_UINT32 engineVersion;
1084 XGL_UINT32 apiVersion;
1085} XGL_APPLICATION_INFO;
1086
1087typedef XGL_VOID* (XGLAPI *XGL_ALLOC_FUNCTION)(
1088 XGL_VOID* pUserData,
1089 XGL_SIZE size,
1090 XGL_SIZE alignment,
1091 XGL_SYSTEM_ALLOC_TYPE allocType);
1092
1093typedef XGL_VOID (XGLAPI *XGL_FREE_FUNCTION)(
1094 XGL_VOID* pUserData,
1095 XGL_VOID* pMem);
1096
1097typedef struct _XGL_ALLOC_CALLBACKS
1098{
1099 XGL_VOID* pUserData;
1100 XGL_ALLOC_FUNCTION pfnAlloc;
1101 XGL_FREE_FUNCTION pfnFree;
1102} XGL_ALLOC_CALLBACKS;
1103
1104typedef struct _XGL_DEVICE_QUEUE_CREATE_INFO
1105{
1106 XGL_UINT queueNodeIndex;
1107 XGL_UINT queueCount;
1108} XGL_DEVICE_QUEUE_CREATE_INFO;
1109
1110typedef struct _XGL_DEVICE_CREATE_INFO
1111{
1112 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO
1113 XGL_VOID* pNext; // Pointer to next structure
1114 XGL_UINT queueRecordCount;
1115 const XGL_DEVICE_QUEUE_CREATE_INFO* pRequestedQueues;
1116 XGL_UINT extensionCount;
1117 const XGL_CHAR*const* ppEnabledExtensionNames;
1118 XGL_VALIDATION_LEVEL maxValidationLevel;
1119 XGL_FLAGS flags; // XGL_DEVICE_CREATE_FLAGS
1120} XGL_DEVICE_CREATE_INFO;
1121
Jon Ashburn183dfd02014-10-22 18:13:16 -06001122typedef struct _XGL_LAYER_CREATE_INFO
1123{
1124 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO
1125 XGL_VOID* pNext; // Pointer to next structure
1126 XGL_UINT layerCount;
1127 const XGL_CHAR *const* ppActiveLayerNames; // layer library name of form libXGLLayer<Name>.so
1128} XGL_LAYER_CREATE_INFO;
1129
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001130typedef struct _XGL_PHYSICAL_GPU_QUEUE_PROPERTIES
1131{
1132 XGL_SIZE structSize; // Size of structure in bytes
1133 XGL_FLAGS queueFlags; // XGL_QUEUE_FLAGS
1134 XGL_UINT queueCount;
1135 XGL_UINT maxAtomicCounters;
1136 XGL_BOOL supportsTimestamps;
1137} XGL_PHYSICAL_GPU_QUEUE_PROPERTIES;
1138
1139typedef struct _XGL_PHYSICAL_GPU_MEMORY_PROPERTIES
1140{
1141 XGL_SIZE structSize; // Size of structure in bytes
1142 XGL_BOOL supportsMigration;
1143 XGL_BOOL supportsVirtualMemoryRemapping;
1144 XGL_BOOL supportsPinning;
1145} XGL_PHYSICAL_GPU_MEMORY_PROPERTIES;
1146
1147typedef struct _XGL_MEMORY_HEAP_PROPERTIES
1148{
1149 XGL_SIZE structSize; // Size of structure in bytes
1150 XGL_HEAP_MEMORY_TYPE heapMemoryType; // XGL_HEAP_MEMORY_TYPE
1151 XGL_GPU_SIZE heapSize; // Specified in bytes
1152 XGL_GPU_SIZE pageSize; // Specified in bytes
1153 XGL_FLAGS flags; // XGL_MEMORY_HEAP_FLAGS
1154 XGL_FLOAT gpuReadPerfRating;
1155 XGL_FLOAT gpuWritePerfRating;
1156 XGL_FLOAT cpuReadPerfRating;
1157 XGL_FLOAT cpuWritePerfRating;
1158} XGL_MEMORY_HEAP_PROPERTIES;
1159
1160typedef struct _XGL_MEMORY_ALLOC_INFO
1161{
1162 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
1163 XGL_VOID* pNext; // Pointer to next structure
1164 XGL_GPU_SIZE allocationSize; // Size of memory allocation
1165 XGL_GPU_SIZE alignment;
1166 XGL_FLAGS flags; // XGL_MEMORY_ALLOC_FLAGS
1167 XGL_UINT heapCount;
1168 XGL_UINT heaps[XGL_MAX_MEMORY_HEAPS];
1169 XGL_MEMORY_PRIORITY memPriority;
1170} XGL_MEMORY_ALLOC_INFO;
1171
1172typedef struct _XGL_MEMORY_OPEN_INFO
1173{
1174 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_OPEN_INFO
1175 XGL_VOID* pNext; // Pointer to next structure
1176 XGL_GPU_MEMORY sharedMem;
1177} XGL_MEMORY_OPEN_INFO;
1178
1179typedef struct _XGL_PEER_MEMORY_OPEN_INFO
1180{
1181 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO
1182 XGL_VOID* pNext; // Pointer to next structure
1183 XGL_GPU_MEMORY originalMem;
1184} XGL_PEER_MEMORY_OPEN_INFO;
1185
1186typedef struct _XGL_VIRTUAL_MEMORY_REMAP_RANGE
1187{
1188 XGL_GPU_MEMORY virtualMem;
1189 XGL_GPU_SIZE virtualStartPage;
1190 XGL_GPU_MEMORY realMem;
1191 XGL_GPU_SIZE realStartPage;
1192 XGL_GPU_SIZE pageCount;
1193} XGL_VIRTUAL_MEMORY_REMAP_RANGE;
1194
1195typedef struct _XGL_MEMORY_REQUIREMENTS
1196{
1197 XGL_GPU_SIZE size; // Specified in bytes
1198 XGL_GPU_SIZE alignment; // Specified in bytes
1199 XGL_UINT heapCount;
1200 XGL_UINT heaps[XGL_MAX_MEMORY_HEAPS];
1201} XGL_MEMORY_REQUIREMENTS;
1202
1203typedef struct _XGL_FORMAT_PROPERTIES
1204{
1205 XGL_FLAGS linearTilingFeatures; // XGL_FORMAT_FEATURE_FLAGS
1206 XGL_FLAGS optimalTilingFeatures; // XGL_FORMAT_FEATURE_FLAGS
1207} XGL_FORMAT_PROPERTIES;
1208
1209typedef struct _XGL_MEMORY_VIEW_ATTACH_INFO
1210{
1211 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_VIEW_ATTACH_INFO
1212 XGL_VOID* pNext; // Pointer to next structure
1213 XGL_GPU_MEMORY mem;
1214 XGL_GPU_SIZE offset;
1215 XGL_GPU_SIZE range;
1216 XGL_GPU_SIZE stride;
1217 XGL_FORMAT format;
1218 XGL_MEMORY_STATE state;
1219} XGL_MEMORY_VIEW_ATTACH_INFO;
1220
1221typedef struct _XGL_IMAGE_VIEW_ATTACH_INFO
1222{
1223 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO
1224 XGL_VOID* pNext; // Pointer to next structure
1225 XGL_IMAGE_VIEW view;
1226 XGL_IMAGE_STATE state;
1227} XGL_IMAGE_VIEW_ATTACH_INFO;
1228
1229typedef struct _XGL_MEMORY_STATE_TRANSITION
1230{
1231 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_STATE_TRANSITION
1232 XGL_VOID* pNext; // Pointer to next structure
1233 XGL_GPU_MEMORY mem;
1234 XGL_MEMORY_STATE oldState;
1235 XGL_MEMORY_STATE newState;
1236 XGL_GPU_SIZE offset;
1237 XGL_GPU_SIZE regionSize;
1238} XGL_MEMORY_STATE_TRANSITION;
1239
1240typedef struct _XGL_IMAGE_SUBRESOURCE
1241{
1242 XGL_IMAGE_ASPECT aspect;
1243 XGL_UINT mipLevel;
1244 XGL_UINT arraySlice;
1245} XGL_IMAGE_SUBRESOURCE;
1246
1247typedef struct _XGL_IMAGE_SUBRESOURCE_RANGE
1248{
1249 XGL_IMAGE_ASPECT aspect;
1250 XGL_UINT baseMipLevel;
1251 XGL_UINT mipLevels;
1252 XGL_UINT baseArraySlice;
1253 XGL_UINT arraySize;
1254} XGL_IMAGE_SUBRESOURCE_RANGE;
1255
1256typedef struct _XGL_IMAGE_STATE_TRANSITION
1257{
1258 XGL_IMAGE image;
1259 XGL_IMAGE_STATE oldState;
1260 XGL_IMAGE_STATE newState;
1261 XGL_IMAGE_SUBRESOURCE_RANGE subresourceRange;
1262} XGL_IMAGE_STATE_TRANSITION;
1263
1264typedef struct _XGL_IMAGE_CREATE_INFO
1265{
1266 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO
1267 const XGL_VOID* pNext; // Pointer to next structure.
1268 XGL_IMAGE_TYPE imageType;
1269 XGL_FORMAT format;
1270 XGL_EXTENT3D extent;
1271 XGL_UINT mipLevels;
1272 XGL_UINT arraySize;
1273 XGL_UINT samples;
1274 XGL_IMAGE_TILING tiling;
1275 XGL_FLAGS usage; // XGL_IMAGE_USAGE_FLAGS
1276 XGL_FLAGS flags; // XGL_IMAGE_CREATE_FLAGS
1277} XGL_IMAGE_CREATE_INFO;
1278
1279typedef struct _XGL_PEER_IMAGE_OPEN_INFO
1280{
1281 XGL_IMAGE originalImage;
1282} XGL_PEER_IMAGE_OPEN_INFO;
1283
1284typedef struct _XGL_SUBRESOURCE_LAYOUT
1285{
1286 XGL_GPU_SIZE offset; // Specified in bytes
1287 XGL_GPU_SIZE size; // Specified in bytes
1288 XGL_GPU_SIZE rowPitch; // Specified in bytes
1289 XGL_GPU_SIZE depthPitch; // Specified in bytes
1290} XGL_SUBRESOURCE_LAYOUT;
1291
1292typedef struct _XGL_CHANNEL_MAPPING
1293{
1294 XGL_CHANNEL_SWIZZLE r;
1295 XGL_CHANNEL_SWIZZLE g;
1296 XGL_CHANNEL_SWIZZLE b;
1297 XGL_CHANNEL_SWIZZLE a;
1298} XGL_CHANNEL_MAPPING;
1299
1300typedef struct _XGL_IMAGE_VIEW_CREATE_INFO
1301{
1302 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
1303 const XGL_VOID* pNext; // Pointer to next structure
1304 XGL_IMAGE image;
1305 XGL_IMAGE_VIEW_TYPE viewType;
1306 XGL_FORMAT format;
1307 XGL_CHANNEL_MAPPING channels;
1308 XGL_IMAGE_SUBRESOURCE_RANGE subresourceRange;
1309 XGL_FLOAT minLod;
1310} XGL_IMAGE_VIEW_CREATE_INFO;
1311
1312typedef struct _XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO
1313{
1314 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO
1315 XGL_VOID* pNext; // Pointer to next structure
1316 XGL_IMAGE image;
1317 XGL_FORMAT format;
1318 XGL_UINT mipLevel;
1319 XGL_UINT baseArraySlice;
1320 XGL_UINT arraySize;
1321} XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO;
1322
1323typedef struct _XGL_DEPTH_STENCIL_VIEW_CREATE_INFO
1324{
1325 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO
1326 const XGL_VOID* pNext; // Pointer to next structure
1327 XGL_IMAGE image;
1328 XGL_UINT mipLevel;
1329 XGL_UINT baseArraySlice;
1330 XGL_UINT arraySize;
1331 XGL_FLAGS flags; // XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS
1332} XGL_DEPTH_STENCIL_VIEW_CREATE_INFO;
1333
1334typedef struct _XGL_COLOR_ATTACHMENT_BIND_INFO
1335{
1336 XGL_COLOR_ATTACHMENT_VIEW view;
1337 XGL_IMAGE_STATE colorAttachmentState; // XGL_IMAGE_STATE
1338} XGL_COLOR_ATTACHMENT_BIND_INFO;
1339
1340typedef struct _XGL_DEPTH_STENCIL_BIND_INFO
1341{
1342 XGL_DEPTH_STENCIL_VIEW view;
1343 XGL_IMAGE_STATE depthState; // XGL_IMAGE_STATE
1344 XGL_IMAGE_STATE stencilState; // XGL_IMAGE_STATE
1345} XGL_DEPTH_STENCIL_BIND_INFO;
1346
1347typedef struct _XGL_MEMORY_COPY
1348{
1349 XGL_GPU_SIZE srcOffset; // Specified in bytes
1350 XGL_GPU_SIZE destOffset; // Specified in bytes
1351 XGL_GPU_SIZE copySize; // Specified in bytes
1352} XGL_MEMORY_COPY;
1353
1354typedef struct _XGL_IMAGE_COPY
1355{
1356 XGL_IMAGE_SUBRESOURCE srcSubresource;
1357 XGL_OFFSET3D srcOffset;
1358 XGL_IMAGE_SUBRESOURCE destSubresource;
1359 XGL_OFFSET3D destOffset;
1360 XGL_EXTENT3D extent;
1361} XGL_IMAGE_COPY;
1362
1363typedef struct _XGL_MEMORY_IMAGE_COPY
1364{
1365 XGL_GPU_SIZE memOffset; // Specified in bytes
1366 XGL_IMAGE_SUBRESOURCE imageSubresource;
1367 XGL_OFFSET3D imageOffset;
1368 XGL_EXTENT3D imageExtent;
1369} XGL_MEMORY_IMAGE_COPY;
1370
1371typedef struct _XGL_IMAGE_RESOLVE
1372{
1373 XGL_IMAGE_SUBRESOURCE srcSubresource;
1374 XGL_OFFSET2D srcOffset;
1375 XGL_IMAGE_SUBRESOURCE destSubresource;
1376 XGL_OFFSET2D destOffset;
1377 XGL_EXTENT2D extent;
1378} XGL_IMAGE_RESOLVE;
1379
1380typedef struct _XGL_SHADER_CREATE_INFO
1381{
1382 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO
1383 const XGL_VOID* pNext; // Pointer to next structure
1384 XGL_SIZE codeSize; // Specified in bytes
1385 const XGL_VOID* pCode;
1386 XGL_FLAGS flags; // Reserved
1387} XGL_SHADER_CREATE_INFO;
1388
1389struct _XGL_DESCRIPTOR_SET_MAPPING;
1390
1391typedef struct _XGL_DESCRIPTOR_SLOT_INFO
1392{
1393 XGL_DESCRIPTOR_SET_SLOT_TYPE slotObjectType;
1394 union
1395 {
1396 XGL_UINT shaderEntityIndex;// Shader IL slot index for given entity type
1397 const struct _XGL_DESCRIPTOR_SET_MAPPING* pNextLevelSet; // Pointer to next descriptor set level
1398 };
1399} XGL_DESCRIPTOR_SLOT_INFO;
1400
1401typedef struct _XGL_DESCRIPTOR_SET_MAPPING
1402{
1403 XGL_UINT descriptorCount;
1404 const XGL_DESCRIPTOR_SLOT_INFO* pDescriptorInfo;
1405} XGL_DESCRIPTOR_SET_MAPPING;
1406
1407typedef struct _XGL_LINK_CONST_BUFFER
1408{
1409 XGL_UINT bufferId;
1410 XGL_SIZE bufferSize;
1411 const XGL_VOID* pBufferData;
1412} XGL_LINK_CONST_BUFFER;
1413
1414typedef struct _XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO
1415{
1416 XGL_DESCRIPTOR_SET_SLOT_TYPE slotObjectType;
1417 XGL_UINT shaderEntityIndex;
1418} XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO;
1419
1420typedef struct _XGL_PIPELINE_SHADER
1421{
1422 XGL_PIPELINE_SHADER_STAGE stage;
1423 XGL_SHADER shader;
1424 XGL_DESCRIPTOR_SET_MAPPING descriptorSetMapping[XGL_MAX_DESCRIPTOR_SETS];
1425 XGL_UINT linkConstBufferCount;
1426 const XGL_LINK_CONST_BUFFER* pLinkConstBufferInfo;
1427 XGL_DYNAMIC_MEMORY_VIEW_SLOT_INFO dynamicMemoryViewMapping;
1428} XGL_PIPELINE_SHADER;
1429
1430typedef struct _XGL_COMPUTE_PIPELINE_CREATE_INFO
1431{
1432 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
1433 const XGL_VOID* pNext; // Pointer to next structure
1434 XGL_PIPELINE_SHADER cs;
1435 XGL_FLAGS flags; // XGL_PIPELINE_CREATE_FLAGS
1436} XGL_COMPUTE_PIPELINE_CREATE_INFO;
1437
Chia-I Wu6a921262014-10-06 15:07:25 +08001438// IMG CHANGE BEGIN - support for vertex input description
1439
1440// Example descriptor set mapping:
1441//
1442// {
1443// .descriptorCount = 4;
1444// .pDescriptorInfo[0] =
1445// {
1446// .slotObjectType = XGL_SLOT_VERTEX_INPUT;
1447// .shaderEntityIndex = 2; // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[2]
1448// }
1449// .pDescriptorInfo[1] =
1450// {
1451// .slotObjectType = XGL_SLOT_UNUSED;
1452// .shaderEntityIndex = 0;
1453// }
1454// .pDescriptorInfo[2] =
1455// {
1456// .slotObjectType = XGL_SLOT_VERTEX_INPUT;
1457// .shaderEntityIndex = 0; // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[0]
1458// }
1459// .pDescriptorInfo[3] =
1460// {
1461// .slotObjectType = XGL_SLOT_VERTEX_INPUT;
1462// .shaderEntityIndex = 1; // describes XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO.pVertexBindingDescriptions[1]
1463// }
1464// }
1465//
1466// The shader inputs are mapped to pVertexAttributeDescriptions using a decoration in the BIL.
1467//
1468//
1469// Formats allowed for attributes (XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION.format) will be detailed in
1470// a table in the specification.
1471//
1472//
1473// Queryable limits:
1474//
1475// XGL_VERTEX_INPUT_BINDING_DESCRIPTION.strideInBytes
1476// XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION.offsetInBytes
1477//
1478//
1479
1480typedef struct _XGL_VERTEX_INPUT_BINDING_DESCRIPTION
1481{
1482 XGL_UINT strideInBytes; // Distance between vertices in bytes (0 = no advancement)
1483
1484 XGL_VERTEX_INPUT_STEP_RATE stepRate; // Rate at which binding is incremented
1485} XGL_VERTEX_INPUT_BINDING_DESCRIPTION;
1486
1487typedef struct _XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION
1488{
1489 XGL_UINT binding; // index into vertexBindingDescriptions
1490
1491 XGL_FORMAT format; // format of source data
1492
1493 XGL_UINT offsetInBytes; // Offset of first element in bytes from base of vertex
1494} XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION;
1495
1496typedef struct _XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO
1497{
1498 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO
1499 XGL_VOID* pNext; // Pointer to next structure
1500
1501 XGL_UINT bindingCount; // number of bindings
1502 XGL_VERTEX_INPUT_BINDING_DESCRIPTION* pVertexBindingDescriptions;
1503
1504 XGL_UINT attributeCount; // number of attributes
1505 XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION* pVertexAttributeDescriptions;
1506} XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO;
1507// IMG CHANGE END
1508
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001509typedef struct _XGL_PIPELINE_IA_STATE_CREATE_INFO
1510{
1511 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO
1512 const XGL_VOID* pNext; // Pointer to next structure
1513 XGL_PRIMITIVE_TOPOLOGY topology;
1514 XGL_BOOL disableVertexReuse;
1515 XGL_PROVOKING_VERTEX_CONVENTION provokingVertex;
1516 XGL_BOOL primitiveRestartEnable;
1517 XGL_UINT32 primitiveRestartIndex;
1518} XGL_PIPELINE_IA_STATE_CREATE_INFO;
1519
1520typedef struct _XGL_PIPELINE_TESS_STATE_CREATE_INFO
1521{
1522 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO
1523 const XGL_VOID* pNext; // Pointer to next structure
1524 XGL_UINT patchControlPoints;
1525 XGL_FLOAT optimalTessFactor;
1526 XGL_FLOAT fixedTessFactor;
1527} XGL_PIPELINE_TESS_STATE_CREATE_INFO;
1528
1529typedef struct _XGL_PIPELINE_RS_STATE_CREATE_INFO
1530{
1531 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO
1532 const XGL_VOID* pNext; // Pointer to next structure
1533 XGL_BOOL depthClipEnable;
1534 XGL_BOOL rasterizerDiscardEnable;
1535 XGL_FLOAT pointSize; // Size of points
1536} XGL_PIPELINE_RS_STATE_CREATE_INFO;
1537
1538typedef struct _XGL_PIPELINE_CB_ATTACHMENT_STATE
1539{
1540 XGL_BOOL blendEnable;
1541 XGL_FORMAT format;
1542 XGL_UINT8 channelWriteMask;
1543} XGL_PIPELINE_CB_ATTACHMENT_STATE;
1544
1545typedef struct _XGL_PIPELINE_CB_STATE_CREATE_INFO
1546{
1547 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO
1548 const XGL_VOID* pNext; // Pointer to next structure
1549 XGL_BOOL alphaToCoverageEnable;
1550 XGL_BOOL dualSourceBlendEnable;
1551 XGL_LOGIC_OP logicOp;
1552 XGL_PIPELINE_CB_ATTACHMENT_STATE attachment[XGL_MAX_COLOR_ATTACHMENTS];
1553} XGL_PIPELINE_CB_STATE;
1554
1555typedef struct _XGL_PIPELINE_DB_STATE_CREATE_INFO
1556{
1557 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_DB_STATE_CREATE_INFO
1558 const XGL_VOID* pNext; // Pointer to next structure
1559 XGL_FORMAT format;
1560} XGL_PIPELINE_DB_STATE_CREATE_INFO;
1561
1562typedef struct _XGL_PIPELINE_SHADER_STAGE_CREATE_INFO
1563{
1564 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
1565 const XGL_VOID* pNext; // Pointer to next structure
1566 XGL_PIPELINE_SHADER shader;
1567} XGL_PIPELINE_SHADER_STAGE_CREATE_INFO;
1568
1569typedef struct _XGL_GRAPHICS_PIPELINE_CREATE_INFO
1570{
1571 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
1572 const XGL_VOID* pNext; // Pointer to next structure
1573 XGL_FLAGS flags; // XGL_PIPELINE_CREATE_FLAGS
1574} XGL_GRAPHICS_PIPELINE_CREATE_INFO;
1575
1576typedef struct _XGL_SAMPLER_CREATE_INFO
1577{
1578 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
1579 const XGL_VOID* pNext; // Pointer to next structure
1580 XGL_TEX_FILTER magFilter; // Filter mode for magnification
1581 XGL_TEX_FILTER minFilter; // Filter mode for minifiation
1582 XGL_TEX_MIPMAP_MODE mipMode; // Mipmap selection mode
1583 XGL_TEX_ADDRESS addressU;
1584 XGL_TEX_ADDRESS addressV;
1585 XGL_TEX_ADDRESS addressW;
1586 XGL_FLOAT mipLodBias;
1587 XGL_UINT maxAnisotropy;
1588 XGL_COMPARE_FUNC compareFunc;
1589 XGL_FLOAT minLod;
1590 XGL_FLOAT maxLod;
1591 XGL_BORDER_COLOR_TYPE borderColorType;
1592} XGL_SAMPLER_CREATE_INFO;
1593
1594typedef struct _XGL_DESCRIPTOR_SET_CREATE_INFO
1595{
1596 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_CREATE_INFO
1597 const XGL_VOID* pNext; // Pointer to next structure
1598 XGL_UINT slots;
1599} XGL_DESCRIPTOR_SET_CREATE_INFO;
1600
1601typedef struct _XGL_DESCRIPTOR_SET_ATTACH_INFO
1602{
1603 XGL_DESCRIPTOR_SET descriptorSet;
1604 XGL_UINT slotOffset;
1605} XGL_DESCRIPTOR_SET_ATTACH_INFO;
1606
1607typedef struct _XGL_VIEWPORT_STATE_CREATE_INFO
1608{
1609 XGL_UINT viewportCount;
1610 XGL_BOOL scissorEnable;
1611 XGL_VIEWPORT viewports[XGL_MAX_VIEWPORTS];
1612 XGL_RECT scissors[XGL_MAX_VIEWPORTS];
1613} XGL_VIEWPORT_STATE_CREATE_INFO;
1614
1615typedef struct _XGL_RASTER_STATE_CREATE_INFO
1616{
1617 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_RASTER_STATE_CREATE_INFO
1618 const XGL_VOID* pNext; // Pointer to next structure
1619 XGL_FILL_MODE fillMode;
1620 XGL_CULL_MODE cullMode;
1621 XGL_FACE_ORIENTATION frontFace;
1622 XGL_INT depthBias;
1623 XGL_FLOAT depthBiasClamp;
1624 XGL_FLOAT slopeScaledDepthBias;
1625} XGL_RASTER_STATE_CREATE_INFO;
1626
1627typedef struct _XGL_MSAA_STATE_CREATE_INFO
1628{
1629 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MSAA_STATE_CREATE_INFO
1630 const XGL_VOID* pNext; // Pointer to next structure
1631 XGL_UINT samples;
1632 XGL_SAMPLE_MASK sampleMask;
1633} XGL_MSAA_STATE_CREATE_INFO;
1634
1635typedef struct _XGL_COLOR_ATTACHMENT_BLEND_STATE
1636{
1637 XGL_BOOL blendEnable;
1638 XGL_BLEND srcBlendColor;
1639 XGL_BLEND destBlendColor;
1640 XGL_BLEND_FUNC blendFuncColor;
1641 XGL_BLEND srcBlendAlpha;
1642 XGL_BLEND destBlendAlpha;
1643 XGL_BLEND_FUNC blendFuncAlpha;
1644} XGL_COLOR_ATTACHMENT_BLEND_STATE;
1645
1646typedef struct _XGL_COLOR_BLEND_STATE_CREATE_INFO
1647{
1648 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_COLOR_BLEND_STATE_CREATE_INFO
1649 const XGL_VOID* pNext; // Pointer to next structure
1650 XGL_COLOR_ATTACHMENT_BLEND_STATE attachment[XGL_MAX_COLOR_ATTACHMENTS];
1651 XGL_FLOAT blendConst[4];
1652} XGL_COLOR_BLEND_STATE_CREATE_INFO;
1653
1654typedef struct _XGL_STENCIL_OP_STATE
1655{
1656 XGL_STENCIL_OP stencilFailOp;
1657 XGL_STENCIL_OP stencilPassOp;
1658 XGL_STENCIL_OP stencilDepthFailOp;
1659 XGL_COMPARE_FUNC stencilFunc;
1660 XGL_UINT32 stencilRef;
1661} XGL_STENCIL_OP_STATE;
1662
1663typedef struct _XGL_DEPTH_STENCIL_STATE_CREATE_INFO
1664{
1665 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DEPTH_STENCIL_STATE_CREATE_INFO
1666 const XGL_VOID* pNext; // Pointer to next structure
1667 XGL_BOOL depthTestEnable;
1668 XGL_BOOL depthWriteEnable;
1669 XGL_COMPARE_FUNC depthFunc;
1670 XGL_BOOL depthBoundsEnable;
1671 XGL_FLOAT minDepth;
1672 XGL_FLOAT maxDepth;
1673 XGL_BOOL stencilTestEnable;
1674 XGL_UINT32 stencilReadMask;
1675 XGL_UINT32 stencilWriteMask;
1676 XGL_STENCIL_OP_STATE front;
1677 XGL_STENCIL_OP_STATE back;
1678} XGL_DEPTH_STENCIL_STATE_CREATE_INFO;
1679
1680typedef struct _XGL_CMD_BUFFER_CREATE_INFO
1681{
1682 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
1683 const XGL_VOID* pNext;
1684 XGL_QUEUE_TYPE queueType;
1685 XGL_FLAGS flags;
1686} XGL_CMD_BUFFER_CREATE_INFO;
1687
1688typedef struct _XGL_MEMORY_REF
1689{
1690 XGL_GPU_MEMORY mem;
1691 XGL_FLAGS flags; // XGL_MEMORY_REF_FLAGS
1692} XGL_MEMORY_REF;
1693
1694typedef struct _XGL_EVENT_CREATE_INFO
1695{
1696 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_EVENT_CREATE_INFO
1697 const XGL_VOID* pNext; // Pointer to next structure
1698 XGL_FLAGS flags; // Reserved
1699} XGL_EVENT_CREATE_INFO;
1700
1701typedef struct _XGL_FENCE_CREATE_INFO
1702{
1703 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO
1704 const XGL_VOID* pNext; // Pointer to next structure
1705 XGL_FLAGS flags; // Reserved
1706} XGL_FENCE_CREATE_INFO;
1707
1708typedef struct _XGL_QUEUE_SEMAPHORE_CREATE_INFO
1709{
1710 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
1711 const XGL_VOID* pNext; // Pointer to next structure
1712 XGL_UINT initialCount;
1713 XGL_FLAGS flags; // XGL_SEMAPHORE_CREATE_FLAGS
1714} XGL_QUEUE_SEMAPHORE_CREATE_INFO;
1715
1716typedef struct _XGL_QUEUE_SEMAPHORE_OPEN_INFO
1717{
1718 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO
1719 const XGL_VOID* pNext; // Pointer to next structure
1720 XGL_QUEUE_SEMAPHORE sharedSemaphore;
1721} XGL_QUEUE_SEMAPHORE_OPEN_INFO;
1722
1723typedef struct _XGL_PIPELINE_STATISTICS_DATA
1724{
1725 XGL_UINT64 fsInvocations; // Fragment shader invocations
1726 XGL_UINT64 cPrimitives; // Clipper primitives
1727 XGL_UINT64 cInvocations; // Clipper invocations
1728 XGL_UINT64 vsInvocations; // Vertex shader invocations
1729 XGL_UINT64 gsInvocations; // Geometry shader invocations
1730 XGL_UINT64 gsPrimitives; // Geometry shader primitives
1731 XGL_UINT64 iaPrimitives; // Input primitives
1732 XGL_UINT64 iaVertices; // Input vertices
1733 XGL_UINT64 tcsInvocations; // Tessellation control shader invocations
1734 XGL_UINT64 tesInvocations; // Tessellation evaluation shader invocations
1735 XGL_UINT64 csInvocations; // Compute shader invocations
1736} XGL_PIPELINE_STATISTICS_DATA;
1737
1738typedef struct _XGL_QUERY_POOL_CREATE_INFO
1739{
1740 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
1741 const XGL_VOID* pNext; // Pointer to next structure
1742 XGL_QUERY_TYPE queryType;
1743 XGL_UINT slots;
1744} XGL_QUERY_POOL_CREATE_INFO;
1745
1746typedef struct _XGL_DRAW_INDIRECT_CMD
1747{
1748 XGL_UINT32 vertexCount;
1749 XGL_UINT32 instanceCount;
1750 XGL_UINT32 firstVertex;
1751 XGL_UINT32 firstInstance;
1752} XGL_DRAW_INDIRECT_CMD;
1753
1754typedef struct _XGL_DRAW_INDEXED_INDIRECT_CMD
1755{
1756 XGL_UINT32 indexCount;
1757 XGL_UINT32 instanceCount;
1758 XGL_UINT32 firstIndex;
1759 XGL_INT32 vertexOffset;
1760 XGL_UINT32 firstInstance;
1761} XGL_DRAW_INDEXED_INDIRECT_CMD;
1762
1763typedef struct _XGL_DISPATCH_INDIRECT_CMD
1764{
1765 XGL_UINT32 x;
1766 XGL_UINT32 y;
1767 XGL_UINT32 z;
1768} XGL_DISPATCH_INDIRECT_CMD;
1769
1770// ------------------------------------------------------------------------------------------------
1771// API functions
1772
Jon Ashburn21734942014-10-17 15:31:22 -06001773XGL_VOID * XGLAPI xglGetProcAddr(
Jon Ashburnd43f9b62014-10-14 19:15:22 -06001774 XGL_PHYSICAL_GPU gpu,
1775 const XGL_CHAR * pName);
1776
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001777// GPU initialization
1778
1779XGL_RESULT XGLAPI xglInitAndEnumerateGpus(
1780 const XGL_APPLICATION_INFO* pAppInfo,
1781 const XGL_ALLOC_CALLBACKS* pAllocCb,
1782 XGL_UINT maxGpus,
1783 XGL_UINT* pGpuCount,
1784 XGL_PHYSICAL_GPU* pGpus);
1785
1786XGL_RESULT XGLAPI xglGetGpuInfo(
1787 XGL_PHYSICAL_GPU gpu,
1788 XGL_PHYSICAL_GPU_INFO_TYPE infoType,
1789 XGL_SIZE* pDataSize,
1790 XGL_VOID* pData);
1791
1792// Device functions
1793
1794XGL_RESULT XGLAPI xglCreateDevice(
1795 XGL_PHYSICAL_GPU gpu,
1796 const XGL_DEVICE_CREATE_INFO* pCreateInfo,
1797 XGL_DEVICE* pDevice);
1798
1799XGL_RESULT XGLAPI xglDestroyDevice(
1800 XGL_DEVICE device);
1801
1802// Extension discovery functions
1803
1804XGL_RESULT XGLAPI xglGetExtensionSupport(
1805 XGL_PHYSICAL_GPU gpu,
1806 const XGL_CHAR* pExtName);
1807
Jon Ashburn96f28fc2014-10-15 15:30:23 -06001808// Layer discovery function
1809XGL_RESULT XGLAPI xglEnumerateLayers(
1810 XGL_PHYSICAL_GPU gpu,
1811 XGL_SIZE maxLayerCount,
1812 XGL_SIZE maxStringSize,
1813 XGL_CHAR* const* pOutLayers,
1814 XGL_SIZE* pOutLayerCount);
1815
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001816// Queue functions
1817
1818XGL_RESULT XGLAPI xglGetDeviceQueue(
1819 XGL_DEVICE device,
1820 XGL_QUEUE_TYPE queueType,
1821 XGL_UINT queueIndex,
1822 XGL_QUEUE* pQueue);
1823
1824XGL_RESULT XGLAPI xglQueueSubmit(
1825 XGL_QUEUE queue,
1826 XGL_UINT cmdBufferCount,
1827 const XGL_CMD_BUFFER* pCmdBuffers,
1828 XGL_UINT memRefCount,
1829 const XGL_MEMORY_REF* pMemRefs,
1830 XGL_FENCE fence);
1831
1832XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(
1833 XGL_QUEUE queue,
1834 XGL_UINT memRefCount,
1835 const XGL_MEMORY_REF* pMemRefs);
1836
1837XGL_RESULT XGLAPI xglQueueWaitIdle(
1838 XGL_QUEUE queue);
1839
1840XGL_RESULT XGLAPI xglDeviceWaitIdle(
1841 XGL_DEVICE device);
1842
1843// Memory functions
1844
1845XGL_RESULT XGLAPI xglGetMemoryHeapCount(
1846 XGL_DEVICE device,
1847 XGL_UINT* pCount);
1848
1849XGL_RESULT XGLAPI xglGetMemoryHeapInfo(
1850 XGL_DEVICE device,
1851 XGL_UINT heapId,
1852 XGL_MEMORY_HEAP_INFO_TYPE infoType,
1853 XGL_SIZE* pDataSize,
1854 XGL_VOID* pData);
1855
1856XGL_RESULT XGLAPI xglAllocMemory(
1857 XGL_DEVICE device,
1858 const XGL_MEMORY_ALLOC_INFO* pAllocInfo,
1859 XGL_GPU_MEMORY* pMem);
1860
1861XGL_RESULT XGLAPI xglFreeMemory(
1862 XGL_GPU_MEMORY mem);
1863
1864XGL_RESULT XGLAPI xglSetMemoryPriority(
1865 XGL_GPU_MEMORY mem,
1866 XGL_MEMORY_PRIORITY priority);
1867
1868XGL_RESULT XGLAPI xglMapMemory(
1869 XGL_GPU_MEMORY mem,
1870 XGL_FLAGS flags, // Reserved
1871 XGL_VOID** ppData);
1872
1873XGL_RESULT XGLAPI xglUnmapMemory(
1874 XGL_GPU_MEMORY mem);
1875
1876XGL_RESULT XGLAPI xglPinSystemMemory(
1877 XGL_DEVICE device,
1878 const XGL_VOID* pSysMem,
1879 XGL_SIZE memSize,
1880 XGL_GPU_MEMORY* pMem);
1881
1882XGL_RESULT XGLAPI xglRemapVirtualMemoryPages(
1883 XGL_DEVICE device,
1884 XGL_UINT rangeCount,
1885 const XGL_VIRTUAL_MEMORY_REMAP_RANGE* pRanges,
1886 XGL_UINT preWaitSemaphoreCount,
1887 const XGL_QUEUE_SEMAPHORE* pPreWaitSemaphores,
1888 XGL_UINT postSignalSemaphoreCount,
1889 const XGL_QUEUE_SEMAPHORE* pPostSignalSemaphores);
1890
1891// Multi-device functions
1892
1893XGL_RESULT XGLAPI xglGetMultiGpuCompatibility(
1894 XGL_PHYSICAL_GPU gpu0,
1895 XGL_PHYSICAL_GPU gpu1,
1896 XGL_GPU_COMPATIBILITY_INFO* pInfo);
1897
1898XGL_RESULT XGLAPI xglOpenSharedMemory(
1899 XGL_DEVICE device,
1900 const XGL_MEMORY_OPEN_INFO* pOpenInfo,
1901 XGL_GPU_MEMORY* pMem);
1902
1903XGL_RESULT XGLAPI xglOpenSharedQueueSemaphore(
1904 XGL_DEVICE device,
1905 const XGL_QUEUE_SEMAPHORE_OPEN_INFO* pOpenInfo,
1906 XGL_QUEUE_SEMAPHORE* pSemaphore);
1907
1908XGL_RESULT XGLAPI xglOpenPeerMemory(
1909 XGL_DEVICE device,
1910 const XGL_PEER_MEMORY_OPEN_INFO* pOpenInfo,
1911 XGL_GPU_MEMORY* pMem);
1912
1913XGL_RESULT XGLAPI xglOpenPeerImage(
1914 XGL_DEVICE device,
1915 const XGL_PEER_IMAGE_OPEN_INFO* pOpenInfo,
1916 XGL_IMAGE* pImage,
1917 XGL_GPU_MEMORY* pMem);
1918
1919// Generic API object functions
1920
1921XGL_RESULT XGLAPI xglDestroyObject(
1922 XGL_OBJECT object);
1923
1924XGL_RESULT XGLAPI xglGetObjectInfo(
1925 XGL_BASE_OBJECT object,
1926 XGL_OBJECT_INFO_TYPE infoType,
1927 XGL_SIZE* pDataSize,
1928 XGL_VOID* pData);
1929
1930XGL_RESULT XGLAPI xglBindObjectMemory(
1931 XGL_OBJECT object,
1932 XGL_GPU_MEMORY mem,
1933 XGL_GPU_SIZE offset);
1934
1935// Fence functions
1936
1937XGL_RESULT XGLAPI xglCreateFence(
1938 XGL_DEVICE device,
1939 const XGL_FENCE_CREATE_INFO* pCreateInfo,
1940 XGL_FENCE* pFence);
1941
1942XGL_RESULT XGLAPI xglGetFenceStatus(
1943 XGL_FENCE fence);
1944
1945XGL_RESULT XGLAPI xglWaitForFences(
1946 XGL_DEVICE device,
1947 XGL_UINT fenceCount,
1948 const XGL_FENCE* pFences,
1949 XGL_BOOL waitAll,
1950 XGL_UINT64 timeout);
1951
1952// Queue semaphore functions
1953
1954XGL_RESULT XGLAPI xglCreateQueueSemaphore(
1955 XGL_DEVICE device,
1956 const XGL_QUEUE_SEMAPHORE_CREATE_INFO* pCreateInfo,
1957 XGL_QUEUE_SEMAPHORE* pSemaphore);
1958
1959XGL_RESULT XGLAPI xglSignalQueueSemaphore(
1960 XGL_QUEUE queue,
1961 XGL_QUEUE_SEMAPHORE semaphore);
1962
1963XGL_RESULT XGLAPI xglWaitQueueSemaphore(
1964 XGL_QUEUE queue,
1965 XGL_QUEUE_SEMAPHORE semaphore);
1966
1967// Event functions
1968
1969XGL_RESULT XGLAPI xglCreateEvent(
1970 XGL_DEVICE device,
1971 const XGL_EVENT_CREATE_INFO* pCreateInfo,
1972 XGL_EVENT* pEvent);
1973
1974XGL_RESULT XGLAPI xglGetEventStatus(
1975 XGL_EVENT event);
1976
1977XGL_RESULT XGLAPI xglSetEvent(
1978 XGL_EVENT event);
1979
1980XGL_RESULT XGLAPI xglResetEvent(
1981 XGL_EVENT event);
1982
1983// Query functions
1984
1985XGL_RESULT XGLAPI xglCreateQueryPool(
1986 XGL_DEVICE device,
1987 const XGL_QUERY_POOL_CREATE_INFO* pCreateInfo,
1988 XGL_QUERY_POOL* pQueryPool);
1989
1990XGL_RESULT XGLAPI xglGetQueryPoolResults(
1991 XGL_QUERY_POOL queryPool,
1992 XGL_UINT startQuery,
1993 XGL_UINT queryCount,
1994 XGL_SIZE* pDataSize,
1995 XGL_VOID* pData);
1996
1997// Format capabilities
1998
1999XGL_RESULT XGLAPI xglGetFormatInfo(
2000 XGL_DEVICE device,
2001 XGL_FORMAT format,
2002 XGL_FORMAT_INFO_TYPE infoType,
2003 XGL_SIZE* pDataSize,
2004 XGL_VOID* pData);
2005
2006// Image functions
2007
2008XGL_RESULT XGLAPI xglCreateImage(
2009 XGL_DEVICE device,
2010 const XGL_IMAGE_CREATE_INFO* pCreateInfo,
2011 XGL_IMAGE* pImage);
2012
2013XGL_RESULT XGLAPI xglGetImageSubresourceInfo(
2014 XGL_IMAGE image,
2015 const XGL_IMAGE_SUBRESOURCE* pSubresource,
2016 XGL_SUBRESOURCE_INFO_TYPE infoType,
2017 XGL_SIZE* pDataSize,
2018 XGL_VOID* pData);
2019
2020// Image view functions
2021
2022XGL_RESULT XGLAPI xglCreateImageView(
2023 XGL_DEVICE device,
2024 const XGL_IMAGE_VIEW_CREATE_INFO* pCreateInfo,
2025 XGL_IMAGE_VIEW* pView);
2026
2027XGL_RESULT XGLAPI xglCreateColorAttachmentView(
2028 XGL_DEVICE device,
2029 const XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo,
2030 XGL_COLOR_ATTACHMENT_VIEW* pView);
2031
2032XGL_RESULT XGLAPI xglCreateDepthStencilView(
2033 XGL_DEVICE device,
2034 const XGL_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo,
2035 XGL_DEPTH_STENCIL_VIEW* pView);
2036
2037// Shader functions
2038
2039XGL_RESULT XGLAPI xglCreateShader(
2040 XGL_DEVICE device,
2041 const XGL_SHADER_CREATE_INFO* pCreateInfo,
2042 XGL_SHADER* pShader);
2043
2044// Pipeline functions
2045
2046XGL_RESULT XGLAPI xglCreateGraphicsPipeline(
2047 XGL_DEVICE device,
2048 const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo,
2049 XGL_PIPELINE* pPipeline);
2050
2051XGL_RESULT XGLAPI xglCreateComputePipeline(
2052 XGL_DEVICE device,
2053 const XGL_COMPUTE_PIPELINE_CREATE_INFO* pCreateInfo,
2054 XGL_PIPELINE* pPipeline);
2055
2056XGL_RESULT XGLAPI xglStorePipeline(
2057 XGL_PIPELINE pipeline,
2058 XGL_SIZE* pDataSize,
2059 XGL_VOID* pData);
2060
2061XGL_RESULT XGLAPI xglLoadPipeline(
2062 XGL_DEVICE device,
2063 XGL_SIZE dataSize,
2064 const XGL_VOID* pData,
2065 XGL_PIPELINE* pPipeline);
2066
2067XGL_RESULT XGLAPI xglCreatePipelineDelta(
2068 XGL_DEVICE device,
2069 XGL_PIPELINE p1,
2070 XGL_PIPELINE p2,
2071 XGL_PIPELINE_DELTA* delta);
2072
2073// Sampler functions
2074
2075XGL_RESULT XGLAPI xglCreateSampler(
2076 XGL_DEVICE device,
2077 const XGL_SAMPLER_CREATE_INFO* pCreateInfo,
2078 XGL_SAMPLER* pSampler);
2079
2080// Descriptor set functions
2081
2082XGL_RESULT XGLAPI xglCreateDescriptorSet(
2083 XGL_DEVICE device,
2084 const XGL_DESCRIPTOR_SET_CREATE_INFO* pCreateInfo,
2085 XGL_DESCRIPTOR_SET* pDescriptorSet);
2086
2087XGL_VOID XGLAPI xglBeginDescriptorSetUpdate(
2088 XGL_DESCRIPTOR_SET descriptorSet);
2089
2090XGL_VOID XGLAPI xglEndDescriptorSetUpdate(
2091 XGL_DESCRIPTOR_SET descriptorSet);
2092
2093XGL_VOID XGLAPI xglAttachSamplerDescriptors(
2094 XGL_DESCRIPTOR_SET descriptorSet,
2095 XGL_UINT startSlot,
2096 XGL_UINT slotCount,
2097 const XGL_SAMPLER* pSamplers);
2098
2099XGL_VOID XGLAPI xglAttachImageViewDescriptors(
2100 XGL_DESCRIPTOR_SET descriptorSet,
2101 XGL_UINT startSlot,
2102 XGL_UINT slotCount,
2103 const XGL_IMAGE_VIEW_ATTACH_INFO* pImageViews);
2104
2105XGL_VOID XGLAPI xglAttachMemoryViewDescriptors(
2106 XGL_DESCRIPTOR_SET descriptorSet,
2107 XGL_UINT startSlot,
2108 XGL_UINT slotCount,
2109 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemViews);
2110
2111XGL_VOID XGLAPI xglAttachNestedDescriptors(
2112 XGL_DESCRIPTOR_SET descriptorSet,
2113 XGL_UINT startSlot,
2114 XGL_UINT slotCount,
2115 const XGL_DESCRIPTOR_SET_ATTACH_INFO* pNestedDescriptorSets);
2116
2117XGL_VOID XGLAPI xglClearDescriptorSetSlots(
2118 XGL_DESCRIPTOR_SET descriptorSet,
2119 XGL_UINT startSlot,
2120 XGL_UINT slotCount);
2121
2122// State object functions
2123
2124XGL_RESULT XGLAPI xglCreateViewportState(
2125 XGL_DEVICE device,
2126 const XGL_VIEWPORT_STATE_CREATE_INFO* pCreateInfo,
2127 XGL_VIEWPORT_STATE_OBJECT* pState);
2128
2129XGL_RESULT XGLAPI xglCreateRasterState(
2130 XGL_DEVICE device,
2131 const XGL_RASTER_STATE_CREATE_INFO* pCreateInfo,
2132 XGL_RASTER_STATE_OBJECT* pState);
2133
2134XGL_RESULT XGLAPI xglCreateMsaaState(
2135 XGL_DEVICE device,
2136 const XGL_MSAA_STATE_CREATE_INFO* pCreateInfo,
2137 XGL_MSAA_STATE_OBJECT* pState);
2138
2139XGL_RESULT XGLAPI xglCreateColorBlendState(
2140 XGL_DEVICE device,
2141 const XGL_COLOR_BLEND_STATE_CREATE_INFO* pCreateInfo,
2142 XGL_COLOR_BLEND_STATE_OBJECT* pState);
2143
2144XGL_RESULT XGLAPI xglCreateDepthStencilState(
2145 XGL_DEVICE device,
2146 const XGL_DEPTH_STENCIL_STATE_CREATE_INFO* pCreateInfo,
2147 XGL_DEPTH_STENCIL_STATE_OBJECT* pState);
2148
2149// Command buffer functions
2150
2151XGL_RESULT XGLAPI xglCreateCommandBuffer(
2152 XGL_DEVICE device,
2153 const XGL_CMD_BUFFER_CREATE_INFO* pCreateInfo,
2154 XGL_CMD_BUFFER* pCmdBuffer);
2155
2156XGL_RESULT XGLAPI xglBeginCommandBuffer(
2157 XGL_CMD_BUFFER cmdBuffer,
2158 XGL_FLAGS flags); // XGL_CMD_BUFFER_BUILD_FLAGS
2159
2160XGL_RESULT XGLAPI xglEndCommandBuffer(
2161 XGL_CMD_BUFFER cmdBuffer);
2162
2163XGL_RESULT XGLAPI xglResetCommandBuffer(
2164 XGL_CMD_BUFFER cmdBuffer);
2165
2166// Command buffer building functions
2167
2168XGL_VOID XGLAPI xglCmdBindPipeline(
2169 XGL_CMD_BUFFER cmdBuffer,
2170 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2171 XGL_PIPELINE pipeline);
2172
2173XGL_VOID XGLAPI xglCmdBindPipelineDelta(
2174 XGL_CMD_BUFFER cmdBuffer,
2175 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2176 XGL_PIPELINE_DELTA delta);
2177
2178XGL_VOID XGLAPI xglCmdBindStateObject(
2179 XGL_CMD_BUFFER cmdBuffer,
2180 XGL_STATE_BIND_POINT stateBindPoint,
2181 XGL_STATE_OBJECT state);
2182
2183XGL_VOID XGLAPI xglCmdBindDescriptorSet(
2184 XGL_CMD_BUFFER cmdBuffer,
2185 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2186 XGL_UINT index,
2187 XGL_DESCRIPTOR_SET descriptorSet,
2188 XGL_UINT slotOffset);
2189
2190XGL_VOID XGLAPI xglCmdBindDynamicMemoryView(
2191 XGL_CMD_BUFFER cmdBuffer,
2192 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2193 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
2194
2195XGL_VOID XGLAPI xglCmdBindIndexData(
2196 XGL_CMD_BUFFER cmdBuffer,
2197 XGL_GPU_MEMORY mem,
2198 XGL_GPU_SIZE offset,
2199 XGL_INDEX_TYPE indexType);
2200
2201XGL_VOID XGLAPI xglCmdBindAttachments(
2202 XGL_CMD_BUFFER cmdBuffer,
2203 XGL_UINT colorAttachmentCount,
2204 const XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments,
2205 const XGL_DEPTH_STENCIL_BIND_INFO* pDepthStencilAttachment);
2206
2207XGL_VOID XGLAPI xglCmdPrepareMemoryRegions(
2208 XGL_CMD_BUFFER cmdBuffer,
2209 XGL_UINT transitionCount,
2210 const XGL_MEMORY_STATE_TRANSITION* pStateTransitions);
2211
2212XGL_VOID XGLAPI xglCmdPrepareImages(
2213 XGL_CMD_BUFFER cmdBuffer,
2214 XGL_UINT transitionCount,
2215 const XGL_IMAGE_STATE_TRANSITION* pStateTransitions);
2216
2217XGL_VOID XGLAPI xglCmdDraw(
2218 XGL_CMD_BUFFER cmdBuffer,
2219 XGL_UINT firstVertex,
2220 XGL_UINT vertexCount,
2221 XGL_UINT firstInstance,
2222 XGL_UINT instanceCount);
2223
2224XGL_VOID XGLAPI xglCmdDrawIndexed(
2225 XGL_CMD_BUFFER cmdBuffer,
2226 XGL_UINT firstIndex,
2227 XGL_UINT indexCount,
2228 XGL_INT vertexOffset,
2229 XGL_UINT firstInstance,
2230 XGL_UINT instanceCount);
2231
2232XGL_VOID XGLAPI xglCmdDrawIndirect(
2233 XGL_CMD_BUFFER cmdBuffer,
2234 XGL_GPU_MEMORY mem,
2235 XGL_GPU_SIZE offset,
2236 XGL_UINT32 count,
2237 XGL_UINT32 stride);
2238
2239XGL_VOID XGLAPI xglCmdDrawIndexedIndirect(
2240 XGL_CMD_BUFFER cmdBuffer,
2241 XGL_GPU_MEMORY mem,
2242 XGL_GPU_SIZE offset,
2243 XGL_UINT32 count,
2244 XGL_UINT32 stride);
2245
2246XGL_VOID XGLAPI xglCmdDispatch(
2247 XGL_CMD_BUFFER cmdBuffer,
2248 XGL_UINT x,
2249 XGL_UINT y,
2250 XGL_UINT z);
2251
2252XGL_VOID XGLAPI xglCmdDispatchIndirect(
2253 XGL_CMD_BUFFER cmdBuffer,
2254 XGL_GPU_MEMORY mem,
2255 XGL_GPU_SIZE offset);
2256
2257XGL_VOID XGLAPI xglCmdCopyMemory(
2258 XGL_CMD_BUFFER cmdBuffer,
2259 XGL_GPU_MEMORY srcMem,
2260 XGL_GPU_MEMORY destMem,
2261 XGL_UINT regionCount,
2262 const XGL_MEMORY_COPY* pRegions);
2263
2264XGL_VOID XGLAPI xglCmdCopyImage(
2265 XGL_CMD_BUFFER cmdBuffer,
2266 XGL_IMAGE srcImage,
2267 XGL_IMAGE destImage,
2268 XGL_UINT regionCount,
2269 const XGL_IMAGE_COPY* pRegions);
2270
2271XGL_VOID XGLAPI xglCmdCopyMemoryToImage(
2272 XGL_CMD_BUFFER cmdBuffer,
2273 XGL_GPU_MEMORY srcMem,
2274 XGL_IMAGE destImage,
2275 XGL_UINT regionCount,
2276 const XGL_MEMORY_IMAGE_COPY* pRegions);
2277
2278XGL_VOID XGLAPI xglCmdCopyImageToMemory(
2279 XGL_CMD_BUFFER cmdBuffer,
2280 XGL_IMAGE srcImage,
2281 XGL_GPU_MEMORY destMem,
2282 XGL_UINT regionCount,
2283 const XGL_MEMORY_IMAGE_COPY* pRegions);
2284
2285XGL_VOID XGLAPI xglCmdCloneImageData(
2286 XGL_CMD_BUFFER cmdBuffer,
2287 XGL_IMAGE srcImage,
2288 XGL_IMAGE_STATE srcImageState,
2289 XGL_IMAGE destImage,
2290 XGL_IMAGE_STATE destImageState);
2291
2292XGL_VOID XGLAPI xglCmdUpdateMemory(
2293 XGL_CMD_BUFFER cmdBuffer,
2294 XGL_GPU_MEMORY destMem,
2295 XGL_GPU_SIZE destOffset,
2296 XGL_GPU_SIZE dataSize,
2297 const XGL_UINT32* pData);
2298
2299XGL_VOID XGLAPI xglCmdFillMemory(
2300 XGL_CMD_BUFFER cmdBuffer,
2301 XGL_GPU_MEMORY destMem,
2302 XGL_GPU_SIZE destOffset,
2303 XGL_GPU_SIZE fillSize,
2304 XGL_UINT32 data);
2305
2306XGL_VOID XGLAPI xglCmdClearColorImage(
2307 XGL_CMD_BUFFER cmdBuffer,
2308 XGL_IMAGE image,
2309 const XGL_FLOAT color[4],
2310 XGL_UINT rangeCount,
2311 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2312
2313XGL_VOID XGLAPI xglCmdClearColorImageRaw(
2314 XGL_CMD_BUFFER cmdBuffer,
2315 XGL_IMAGE image,
2316 const XGL_UINT32 color[4],
2317 XGL_UINT rangeCount,
2318 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2319
2320XGL_VOID XGLAPI xglCmdClearDepthStencil(
2321 XGL_CMD_BUFFER cmdBuffer,
2322 XGL_IMAGE image,
2323 XGL_FLOAT depth,
2324 XGL_UINT32 stencil,
2325 XGL_UINT rangeCount,
2326 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2327
2328XGL_VOID XGLAPI xglCmdResolveImage(
2329 XGL_CMD_BUFFER cmdBuffer,
2330 XGL_IMAGE srcImage,
2331 XGL_IMAGE destImage,
2332 XGL_UINT rectCount,
2333 const XGL_IMAGE_RESOLVE* pRects);
2334
2335XGL_VOID XGLAPI xglCmdSetEvent(
2336 XGL_CMD_BUFFER cmdBuffer,
2337 XGL_EVENT event);
2338
2339XGL_VOID XGLAPI xglCmdResetEvent(
2340 XGL_CMD_BUFFER cmdBuffer,
2341 XGL_EVENT event);
2342
2343XGL_VOID XGLAPI xglCmdMemoryAtomic(
2344 XGL_CMD_BUFFER cmdBuffer,
2345 XGL_GPU_MEMORY destMem,
2346 XGL_GPU_SIZE destOffset,
2347 XGL_UINT64 srcData,
2348 XGL_ATOMIC_OP atomicOp);
2349
2350XGL_VOID XGLAPI xglCmdBeginQuery(
2351 XGL_CMD_BUFFER cmdBuffer,
2352 XGL_QUERY_POOL queryPool,
2353 XGL_UINT slot,
2354 XGL_FLAGS flags);
2355
2356XGL_VOID XGLAPI xglCmdEndQuery(
2357 XGL_CMD_BUFFER cmdBuffer,
2358 XGL_QUERY_POOL queryPool,
2359 XGL_UINT slot);
2360
2361XGL_VOID XGLAPI xglCmdResetQueryPool(
2362 XGL_CMD_BUFFER cmdBuffer,
2363 XGL_QUERY_POOL queryPool,
2364 XGL_UINT startQuery,
2365 XGL_UINT queryCount);
2366
2367XGL_VOID XGLAPI xglCmdWriteTimestamp(
2368 XGL_CMD_BUFFER cmdBuffer,
2369 XGL_TIMESTAMP_TYPE timestampType,
2370 XGL_GPU_MEMORY destMem,
2371 XGL_GPU_SIZE destOffset);
2372
2373XGL_VOID XGLAPI xglCmdInitAtomicCounters(
2374 XGL_CMD_BUFFER cmdBuffer,
2375 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2376 XGL_UINT startCounter,
2377 XGL_UINT counterCount,
2378 const XGL_UINT32* pData);
2379
2380XGL_VOID XGLAPI xglCmdLoadAtomicCounters(
2381 XGL_CMD_BUFFER cmdBuffer,
2382 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2383 XGL_UINT startCounter,
2384 XGL_UINT counterCount,
2385 XGL_GPU_MEMORY srcMem,
2386 XGL_GPU_SIZE srcOffset);
2387
2388XGL_VOID XGLAPI xglCmdSaveAtomicCounters(
2389 XGL_CMD_BUFFER cmdBuffer,
2390 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2391 XGL_UINT startCounter,
2392 XGL_UINT counterCount,
2393 XGL_GPU_MEMORY destMem,
2394 XGL_GPU_SIZE destOffset);
2395
2396#ifdef __cplusplus
2397} // extern "C"
2398#endif // __cplusplus
2399
2400#endif // __XGL_H__
2401
2402/******************************************************************************************
2403
2404 Open Issues + Missing Features
2405 ------------------------------
2406
2407 Here are a few higher level issues that we'd like to fix given time. A feature missing
2408 from this header (or the following list) isn't necessarily an indication that we want
2409 to drop that feature. Only that we either haven't thought of it or haven't had time
2410 to add it yet.
2411
2412 1) Transform Feedback (XFB)
2413
2414 OpenGL supports transform feedback (XFB). That is not included in this header, but
2415 we feel there is likely value in including it.
2416
2417 To incorporate trasnform feedback, we could create a new pipeline stage. This would
2418 be injected into a PSO by including the following in the chain:
2419
2420 typedef struct _XGL_XFB_CREATE_INFO
2421 {
2422 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_XFB_CREATE_INFO
2423 const XGL_VOID* pNext; // Pointer to next structure
2424 // More XFB state, if any goes here
2425 } XGL_DEPTH_STENCIL_VIEW_CREATE_INFO;
2426
2427 We expect that only the shader-side configuration (via layout qualifiers or their IR
2428 equivalent) is used to configure the data written to each stream. When transform
2429 feedback is part of the pipeline, transform feedback binding would be available
2430 through a new API bind point:
2431
2432 xglCmdBindTransformFeedbackMemoryView(
2433 XGL_CMD_BUFFER cmdBuffer,
2434 XGL_PIPELINE_BIND_POINT pipelineBindPoint, // = GRAPHICS
2435 XGL_UINT index,
2436 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
2437
2438 2) Framebuffer Objects
2439
2440 The XGL API here doesn't have a direct equivalent for a framebuffer object. In GL,
2441 the framebuffer object owns attachments, and the indirection table for glDrawBuffers, etc.
2442 The indirection is gone - only identity is supported here.
2443
2444 We may introduce an analog to the framebuffer object that packages all color
2445 attachments. You would create a framebuffer thus:
2446
2447 typedef struct _XGL_FRAMEBUFFER_CREATE_INFO
2448 {
2449 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_XFB_CREATE_INFO
2450 const XGL_VOID* pNext; // Pointer to next structure
2451 XGL_UINT32 colorAttachmentCount;
2452 XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments;
2453 XGL_DEPTH_STENCIL_BIND_INFO pDepthStencilAttachment;
2454 } XGL_FRAMEBUFFER_CREATE_INFO;
2455
2456 xglCreateFramebuffer(
2457 XGL_DEVICE device,
2458 const XGL_FRAMEBUFFER_CREATE_INFO* pInfo,
2459 XGL_FRAMEBUFFER* pFramebuffer);
2460
2461 We then replace the xglCmdBindAttachments API with:
2462
2463 xglBindFramebuffer(
2464 XGL_CMD_BUFFER cmdBuffer,
2465 XGL_PIPELINE_BIND_POINT pipelineBindPoint, // = GRAPHICS
2466 XGL_FRAMEBUFFER framebuffer);
2467
2468 3) "Bindless" + support for non-bindless hardware.
2469
2470 XGL doesn't have bindless textures the way that GL does. It has resource descriptor
2471 sets, or resource tables. Resource tables can be nested and hold references to more
2472 resource tables. They are explicitly sized by the application and have no artificial
2473 upper size limit. An application can still attach as many textures as they want to
2474 a resource descriptor set, and can modify the set asynchronously to GPU work.
2475 Therefore, we can still have "unlimited textures". An application hoping to use
2476 bindless can use an index into a large table of textures and achieve the same effect.
2477
2478 For non-bindless hardware, with fixed (but potentially large) register files for
2479 resource bindings, the table approach should still work if a limited size can be
2480 reported somehow.
2481
2482 4) Clean up some remaining Mantle'isms.
2483
2484 Queue types: It's a bit hand wavey. In Mantle, we have a "universal" queue type that
2485 supports compute and graphics and a "compute" queue that only supports compute. Devices
2486 must support at least one universal queue and DMA queues are an extension. I would like
2487 to do the following (and have attempted to do that here, but am only half done):
2488
2489 a) Separate out the queue capabilities (compute, DMA, graphics) and allow support
2490 for any number of queues with any combination of capabilities each.
2491
2492 b) Allow compute-only or even DMA-only (like video capture or SDI) devices to
2493 be supported.
2494
2495 c) Allow new queue types to be supported by extensions without having to allocate
2496 bits in the bitfield until they're promoted to core.
2497
2498 Terminology: There are still some references to "targets" (render targets) and other
2499 terminology that has been changed from Mantle. Need to do a clean-up pass.
2500
2501 4) The window system interface is an extension in Mantle. We have not tried to fold
2502 any of it into core here. There is no mention of SwapBuffers, presentation, default
2503 framebuffers or anything like that. In the extension, presentation is queued up into
2504 the graphics queue just like any other command.
2505
2506*******************************************************************************************/