blob: 78c0faac79db34fc7c24ddad5c56de0cd2e7eb5a [file] [log] [blame]
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001//
2// File: xgl.h
3//
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06004/*
5** Copyright (c) 2014 The Khronos Group Inc.
6**
7** Permission is hereby granted, free of charge, to any person obtaining a
8** copy of this software and/or associated documentation files (the
9** "Materials"), to deal in the Materials without restriction, including
10** without limitation the rights to use, copy, modify, merge, publish,
11** distribute, sublicense, and/or sell copies of the Materials, and to
12** permit persons to whom the Materials are furnished to do so, subject to
13** the following conditions:
14**
15** The above copyright notice and this permission notice shall be included
16** in all copies or substantial portions of the Materials.
17**
18** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
21** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
25*/
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060026
27#ifndef __XGL_H__
28#define __XGL_H__
29
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060030#define XGL_MAKE_VERSION(major, minor, patch) \
31 ((major << 22) | (minor << 12) | patch)
32
Jeremy Hayes13c6b702015-01-14 14:58:37 -070033#include "xglPlatform.h"
34
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060035// XGL API version supported by this file
Courtney Goeltzenleuchter0d625272015-03-31 16:36:30 -060036#define XGL_API_VERSION XGL_MAKE_VERSION(0, 64, 0)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060037
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060038#ifdef __cplusplus
39extern "C"
40{
41#endif // __cplusplus
42
43/*
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060044***************************************************************************************************
45* Core XGL API
46***************************************************************************************************
47*/
48
49#ifdef __cplusplus
Mark Lobodzinskid5d83ed2015-02-02 11:55:52 -060050 #define XGL_DEFINE_HANDLE(_obj) struct _obj##_T {char _dummy;}; typedef _obj##_T* _obj;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060051 #define XGL_DEFINE_SUBCLASS_HANDLE(_obj, _base) struct _obj##_T : public _base##_T {}; typedef _obj##_T* _obj;
52#else // __cplusplus
53 #define XGL_DEFINE_HANDLE(_obj) typedef void* _obj;
54 #define XGL_DEFINE_SUBCLASS_HANDLE(_obj, _base) typedef void* _obj;
55#endif // __cplusplus
56
Jon Ashburn1beab2d2015-01-26 14:51:40 -070057XGL_DEFINE_HANDLE(XGL_INSTANCE)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060058XGL_DEFINE_HANDLE(XGL_PHYSICAL_GPU)
59XGL_DEFINE_HANDLE(XGL_BASE_OBJECT)
60XGL_DEFINE_SUBCLASS_HANDLE(XGL_DEVICE, XGL_BASE_OBJECT)
61XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUEUE, XGL_BASE_OBJECT)
62XGL_DEFINE_SUBCLASS_HANDLE(XGL_GPU_MEMORY, XGL_BASE_OBJECT)
63XGL_DEFINE_SUBCLASS_HANDLE(XGL_OBJECT, XGL_BASE_OBJECT)
Chia-I Wu1a28fe02015-01-01 07:55:04 +080064XGL_DEFINE_SUBCLASS_HANDLE(XGL_BUFFER, XGL_OBJECT)
65XGL_DEFINE_SUBCLASS_HANDLE(XGL_BUFFER_VIEW, XGL_OBJECT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060066XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE, XGL_OBJECT)
67XGL_DEFINE_SUBCLASS_HANDLE(XGL_IMAGE_VIEW, XGL_OBJECT)
68XGL_DEFINE_SUBCLASS_HANDLE(XGL_COLOR_ATTACHMENT_VIEW, XGL_OBJECT)
69XGL_DEFINE_SUBCLASS_HANDLE(XGL_DEPTH_STENCIL_VIEW, XGL_OBJECT)
70XGL_DEFINE_SUBCLASS_HANDLE(XGL_SHADER, XGL_OBJECT)
71XGL_DEFINE_SUBCLASS_HANDLE(XGL_PIPELINE, XGL_OBJECT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060072XGL_DEFINE_SUBCLASS_HANDLE(XGL_SAMPLER, XGL_OBJECT)
73XGL_DEFINE_SUBCLASS_HANDLE(XGL_DESCRIPTOR_SET, XGL_OBJECT)
Chia-I Wu11078b02015-01-04 16:27:24 +080074XGL_DEFINE_SUBCLASS_HANDLE(XGL_DESCRIPTOR_SET_LAYOUT, XGL_OBJECT)
Chia-I Wu41126e52015-03-26 15:27:55 +080075XGL_DEFINE_SUBCLASS_HANDLE(XGL_DESCRIPTOR_SET_LAYOUT_CHAIN, XGL_OBJECT)
Chia-I Wu985ba162015-03-26 13:14:16 +080076XGL_DEFINE_SUBCLASS_HANDLE(XGL_DESCRIPTOR_POOL, XGL_OBJECT)
Tony Barbourf52346d2015-01-16 14:27:35 -070077XGL_DEFINE_SUBCLASS_HANDLE(XGL_DYNAMIC_STATE_OBJECT, XGL_OBJECT)
78XGL_DEFINE_SUBCLASS_HANDLE(XGL_DYNAMIC_VP_STATE_OBJECT, XGL_DYNAMIC_STATE_OBJECT)
79XGL_DEFINE_SUBCLASS_HANDLE(XGL_DYNAMIC_RS_STATE_OBJECT, XGL_DYNAMIC_STATE_OBJECT)
80XGL_DEFINE_SUBCLASS_HANDLE(XGL_DYNAMIC_CB_STATE_OBJECT, XGL_DYNAMIC_STATE_OBJECT)
81XGL_DEFINE_SUBCLASS_HANDLE(XGL_DYNAMIC_DS_STATE_OBJECT, XGL_DYNAMIC_STATE_OBJECT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060082XGL_DEFINE_SUBCLASS_HANDLE(XGL_CMD_BUFFER, XGL_OBJECT)
83XGL_DEFINE_SUBCLASS_HANDLE(XGL_FENCE, XGL_OBJECT)
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -060084XGL_DEFINE_SUBCLASS_HANDLE(XGL_SEMAPHORE, XGL_OBJECT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060085XGL_DEFINE_SUBCLASS_HANDLE(XGL_EVENT, XGL_OBJECT)
86XGL_DEFINE_SUBCLASS_HANDLE(XGL_QUERY_POOL, XGL_OBJECT)
Jon Ashburnfa420992014-12-24 12:09:06 -070087XGL_DEFINE_SUBCLASS_HANDLE(XGL_FRAMEBUFFER, XGL_OBJECT)
88XGL_DEFINE_SUBCLASS_HANDLE(XGL_RENDER_PASS, XGL_OBJECT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060089
90#define XGL_MAX_PHYSICAL_GPUS 16
91#define XGL_MAX_PHYSICAL_GPU_NAME 256
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -060092
93#define XGL_LOD_CLAMP_NONE MAX_FLOAT
94#define XGL_LAST_MIP_OR_SLICE 0xffffffff
95
96#define XGL_TRUE 1
97#define XGL_FALSE 0
98
99#define XGL_NULL_HANDLE 0
100
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600101// This macro defines INT_MAX in enumerations to force compilers to use 32 bits
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600102// to represent them. This may or may not be necessary on some compilers. The
103// option to compile it out may allow compilers that warn about missing enumerants
104// in switch statements to be silenced.
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600105#define XGL_MAX_ENUM(T) T##_MAX_ENUM = 0x7FFFFFFF
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600106
107// ------------------------------------------------------------------------------------------------
108// Enumerations
109
110
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600111typedef enum _XGL_MEMORY_PRIORITY
112{
113 XGL_MEMORY_PRIORITY_UNUSED = 0x0,
114 XGL_MEMORY_PRIORITY_VERY_LOW = 0x1,
115 XGL_MEMORY_PRIORITY_LOW = 0x2,
116 XGL_MEMORY_PRIORITY_NORMAL = 0x3,
117 XGL_MEMORY_PRIORITY_HIGH = 0x4,
118 XGL_MEMORY_PRIORITY_VERY_HIGH = 0x5,
119
120 XGL_MEMORY_PRIORITY_BEGIN_RANGE = XGL_MEMORY_PRIORITY_UNUSED,
121 XGL_MEMORY_PRIORITY_END_RANGE = XGL_MEMORY_PRIORITY_VERY_HIGH,
122 XGL_NUM_MEMORY_PRIORITY = (XGL_MEMORY_PRIORITY_END_RANGE - XGL_MEMORY_PRIORITY_BEGIN_RANGE + 1),
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600123 XGL_MAX_ENUM(_XGL_MEMORY_PRIORITY)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600124} XGL_MEMORY_PRIORITY;
125
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000126typedef enum _XGL_IMAGE_LAYOUT
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600127{
Courtney Goeltzenleuchter47ed85b2015-03-25 08:49:17 -0600128 XGL_IMAGE_LAYOUT_UNDEFINED = 0x00000000, // Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
129 XGL_IMAGE_LAYOUT_GENERAL = 0x00000001, // General layout when image can be used for any kind of access
130 XGL_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 0x00000002, // Optimal layout when image is only used for color attachment read/write
131 XGL_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 0x00000003, // Optimal layout when image is only used for depth/stencil attachment read/write
132 XGL_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 0x00000004, // Optimal layout when image is used for read only depth/stencil attachment and shader access
133 XGL_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 0x00000005, // Optimal layout when image is used for read only shader access
134 XGL_IMAGE_LAYOUT_CLEAR_OPTIMAL = 0x00000006, // Optimal layout when image is used only for clear operations
135 XGL_IMAGE_LAYOUT_TRANSFER_SOURCE_OPTIMAL = 0x00000007, // Optimal layout when image is used only as source of transfer operations
136 XGL_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL = 0x00000008, // Optimal layout when image is used only as destination of transfer operations
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600137
Courtney Goeltzenleuchter47ed85b2015-03-25 08:49:17 -0600138 XGL_IMAGE_LAYOUT_BEGIN_RANGE = XGL_IMAGE_LAYOUT_UNDEFINED,
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600139 XGL_IMAGE_LAYOUT_END_RANGE = XGL_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL,
140 XGL_NUM_IMAGE_LAYOUT = (XGL_IMAGE_LAYOUT_END_RANGE - XGL_IMAGE_LAYOUT_BEGIN_RANGE + 1),
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600141 XGL_MAX_ENUM(_XGL_IMAGE_LAYOUT)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000142} XGL_IMAGE_LAYOUT;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600143
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -0600144typedef enum _XGL_PIPE_EVENT
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600145{
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -0600146 XGL_PIPE_EVENT_TOP_OF_PIPE = 0x00000001, // Set event before the GPU starts processing subsequent command
147 XGL_PIPE_EVENT_VERTEX_PROCESSING_COMPLETE = 0x00000002, // Set event when all pending vertex processing is complete
148 XGL_PIPE_EVENT_FRAGMENT_PROCESSING_COMPLETE = 0x00000003, // Set event when all pending fragment shader executions are complete
149 XGL_PIPE_EVENT_GRAPHICS_PIPELINE_COMPLETE = 0x00000004, // Set event when all pending graphics operations are complete
150 XGL_PIPE_EVENT_COMPUTE_PIPELINE_COMPLETE = 0x00000005, // Set event when all pending compute operations are complete
151 XGL_PIPE_EVENT_TRANSFER_COMPLETE = 0x00000006, // Set event when all pending transfer operations are complete
152 XGL_PIPE_EVENT_GPU_COMMANDS_COMPLETE = 0x00000007, // Set event when all pending GPU work is complete
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600153
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -0600154 XGL_PIPE_EVENT_BEGIN_RANGE = XGL_PIPE_EVENT_TOP_OF_PIPE,
155 XGL_PIPE_EVENT_END_RANGE = XGL_PIPE_EVENT_GPU_COMMANDS_COMPLETE,
156 XGL_NUM_PIPE_EVENT = (XGL_PIPE_EVENT_END_RANGE - XGL_PIPE_EVENT_BEGIN_RANGE + 1),
157 XGL_MAX_ENUM(_XGL_PIPE_EVENT)
158} XGL_PIPE_EVENT;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600159
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000160typedef enum _XGL_WAIT_EVENT
161{
162 XGL_WAIT_EVENT_TOP_OF_PIPE = 0x00000001, // Wait event before the GPU starts processing subsequent commands
Mark Lobodzinskica0c7602015-01-26 17:02:32 -0600163 XGL_WAIT_EVENT_BEFORE_RASTERIZATION = 0x00000002, // Wait event before rasterizing subsequent primitives
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600164
165 XGL_WAIT_EVENT_BEGIN_RANGE = XGL_WAIT_EVENT_TOP_OF_PIPE,
166 XGL_WAIT_EVENT_END_RANGE = XGL_WAIT_EVENT_BEFORE_RASTERIZATION,
167 XGL_NUM_WAIT_EVENT = (XGL_WAIT_EVENT_END_RANGE - XGL_WAIT_EVENT_BEGIN_RANGE + 1),
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600168 XGL_MAX_ENUM(_XGL_WAIT_EVENT)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000169} XGL_WAIT_EVENT;
170
171typedef enum _XGL_MEMORY_OUTPUT_FLAGS
172{
173 XGL_MEMORY_OUTPUT_CPU_WRITE_BIT = 0x00000001, // Controls output coherency of CPU writes
174 XGL_MEMORY_OUTPUT_SHADER_WRITE_BIT = 0x00000002, // Controls output coherency of generic shader writes
175 XGL_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT = 0x00000004, // Controls output coherency of color attachment writes
176 XGL_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000008, // Controls output coherency of depth/stencil attachment writes
177 XGL_MEMORY_OUTPUT_COPY_BIT = 0x00000010, // Controls output coherency of copy operations
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600178 XGL_MAX_ENUM(_XGL_MEMORY_OUTPUT_FLAGS)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000179} XGL_MEMORY_OUTPUT_FLAGS;
180
181typedef enum _XGL_MEMORY_INPUT_FLAGS
182{
183 XGL_MEMORY_INPUT_CPU_READ_BIT = 0x00000001, // Controls input coherency of CPU reads
184 XGL_MEMORY_INPUT_INDIRECT_COMMAND_BIT = 0x00000002, // Controls input coherency of indirect command reads
185 XGL_MEMORY_INPUT_INDEX_FETCH_BIT = 0x00000004, // Controls input coherency of index fetches
186 XGL_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT = 0x00000008, // Controls input coherency of vertex attribute fetches
187 XGL_MEMORY_INPUT_UNIFORM_READ_BIT = 0x00000010, // Controls input coherency of uniform buffer reads
188 XGL_MEMORY_INPUT_SHADER_READ_BIT = 0x00000020, // Controls input coherency of generic shader reads
189 XGL_MEMORY_INPUT_COLOR_ATTACHMENT_BIT = 0x00000040, // Controls input coherency of color attachment reads
190 XGL_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000080, // Controls input coherency of depth/stencil attachment reads
191 XGL_MEMORY_INPUT_COPY_BIT = 0x00000100, // Controls input coherency of copy operations
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600192 XGL_MAX_ENUM(_XGL_MEMORY_INPUT_FLAGS)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +0000193} XGL_MEMORY_INPUT_FLAGS;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600194
Jon Ashburnfa420992014-12-24 12:09:06 -0700195typedef enum _XGL_ATTACHMENT_LOAD_OP
196{
197 XGL_ATTACHMENT_LOAD_OP_LOAD = 0x00000000,
198 XGL_ATTACHMENT_LOAD_OP_CLEAR = 0x00000001,
199 XGL_ATTACHMENT_LOAD_OP_DONT_CARE = 0x00000002,
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -0600200
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600201 XGL_ATTACHMENT_LOAD_OP_BEGIN_RANGE = XGL_ATTACHMENT_LOAD_OP_LOAD,
202 XGL_ATTACHMENT_LOAD_OP_END_RANGE = XGL_ATTACHMENT_LOAD_OP_DONT_CARE,
203 XGL_NUM_ATTACHMENT_LOAD_OP = (XGL_ATTACHMENT_LOAD_OP_END_RANGE - XGL_ATTACHMENT_LOAD_OP_BEGIN_RANGE + 1),
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600204 XGL_MAX_ENUM(_XGL_ATTACHMENT_LOAD_OP)
Jon Ashburnfa420992014-12-24 12:09:06 -0700205} XGL_ATTACHMENT_LOAD_OP;
206
207typedef enum _XGL_ATTACHMENT_STORE_OP
208{
209 XGL_ATTACHMENT_STORE_OP_STORE = 0x00000000,
210 XGL_ATTACHMENT_STORE_OP_RESOLVE_MSAA = 0x00000001,
211 XGL_ATTACHMENT_STORE_OP_DONT_CARE = 0x00000002,
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -0600212
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600213 XGL_ATTACHMENT_STORE_OP_BEGIN_RANGE = XGL_ATTACHMENT_STORE_OP_STORE,
214 XGL_ATTACHMENT_STORE_OP_END_RANGE = XGL_ATTACHMENT_STORE_OP_DONT_CARE,
215 XGL_NUM_ATTACHMENT_STORE_OP = (XGL_ATTACHMENT_STORE_OP_END_RANGE - XGL_ATTACHMENT_STORE_OP_BEGIN_RANGE + 1),
Mark Lobodzinskid5d83ed2015-02-02 11:55:52 -0600216 XGL_MAX_ENUM(_XGL_ATTACHMENT_STORE_OP)
Jon Ashburnfa420992014-12-24 12:09:06 -0700217} XGL_ATTACHMENT_STORE_OP;
218
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600219typedef enum _XGL_IMAGE_TYPE
220{
221 XGL_IMAGE_1D = 0x00000000,
222 XGL_IMAGE_2D = 0x00000001,
223 XGL_IMAGE_3D = 0x00000002,
224
225 XGL_IMAGE_TYPE_BEGIN_RANGE = XGL_IMAGE_1D,
226 XGL_IMAGE_TYPE_END_RANGE = XGL_IMAGE_3D,
227 XGL_NUM_IMAGE_TYPE = (XGL_IMAGE_TYPE_END_RANGE - XGL_IMAGE_TYPE_BEGIN_RANGE + 1),
228 XGL_MAX_ENUM(_XGL_IMAGE_TYPE)
229} XGL_IMAGE_TYPE;
230
231typedef enum _XGL_IMAGE_TILING
232{
233 XGL_LINEAR_TILING = 0x00000000,
234 XGL_OPTIMAL_TILING = 0x00000001,
235
236 XGL_IMAGE_TILING_BEGIN_RANGE = XGL_LINEAR_TILING,
237 XGL_IMAGE_TILING_END_RANGE = XGL_OPTIMAL_TILING,
238 XGL_NUM_IMAGE_TILING = (XGL_IMAGE_TILING_END_RANGE - XGL_IMAGE_TILING_BEGIN_RANGE + 1),
239 XGL_MAX_ENUM(_XGL_IMAGE_TILING)
240} XGL_IMAGE_TILING;
241
242typedef enum _XGL_IMAGE_VIEW_TYPE
243{
244 XGL_IMAGE_VIEW_1D = 0x00000000,
245 XGL_IMAGE_VIEW_2D = 0x00000001,
246 XGL_IMAGE_VIEW_3D = 0x00000002,
247 XGL_IMAGE_VIEW_CUBE = 0x00000003,
248
249 XGL_IMAGE_VIEW_TYPE_BEGIN_RANGE = XGL_IMAGE_VIEW_1D,
250 XGL_IMAGE_VIEW_TYPE_END_RANGE = XGL_IMAGE_VIEW_CUBE,
251 XGL_NUM_IMAGE_VIEW_TYPE = (XGL_IMAGE_VIEW_TYPE_END_RANGE - XGL_IMAGE_VIEW_TYPE_BEGIN_RANGE + 1),
252 XGL_MAX_ENUM(_XGL_IMAGE_VIEW_TYPE)
253} XGL_IMAGE_VIEW_TYPE;
254
255typedef enum _XGL_IMAGE_ASPECT
256{
257 XGL_IMAGE_ASPECT_COLOR = 0x00000000,
258 XGL_IMAGE_ASPECT_DEPTH = 0x00000001,
259 XGL_IMAGE_ASPECT_STENCIL = 0x00000002,
260
261 XGL_IMAGE_ASPECT_BEGIN_RANGE = XGL_IMAGE_ASPECT_COLOR,
262 XGL_IMAGE_ASPECT_END_RANGE = XGL_IMAGE_ASPECT_STENCIL,
263 XGL_NUM_IMAGE_ASPECT = (XGL_IMAGE_ASPECT_END_RANGE - XGL_IMAGE_ASPECT_BEGIN_RANGE + 1),
264 XGL_MAX_ENUM(_XGL_IMAGE_ASPECT)
265} XGL_IMAGE_ASPECT;
266
267typedef enum _XGL_CHANNEL_SWIZZLE
268{
269 XGL_CHANNEL_SWIZZLE_ZERO = 0x00000000,
270 XGL_CHANNEL_SWIZZLE_ONE = 0x00000001,
271 XGL_CHANNEL_SWIZZLE_R = 0x00000002,
272 XGL_CHANNEL_SWIZZLE_G = 0x00000003,
273 XGL_CHANNEL_SWIZZLE_B = 0x00000004,
274 XGL_CHANNEL_SWIZZLE_A = 0x00000005,
275
276 XGL_CHANNEL_SWIZZLE_BEGIN_RANGE = XGL_CHANNEL_SWIZZLE_ZERO,
277 XGL_CHANNEL_SWIZZLE_END_RANGE = XGL_CHANNEL_SWIZZLE_A,
278 XGL_NUM_CHANNEL_SWIZZLE = (XGL_CHANNEL_SWIZZLE_END_RANGE - XGL_CHANNEL_SWIZZLE_BEGIN_RANGE + 1),
279 XGL_MAX_ENUM(_XGL_CHANNEL_SWIZZLE)
280} XGL_CHANNEL_SWIZZLE;
281
Chia-I Wu11078b02015-01-04 16:27:24 +0800282typedef enum _XGL_DESCRIPTOR_TYPE
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600283{
Chia-I Wu11078b02015-01-04 16:27:24 +0800284 XGL_DESCRIPTOR_TYPE_SAMPLER = 0x00000000,
285 XGL_DESCRIPTOR_TYPE_SAMPLER_TEXTURE = 0x00000001,
286 XGL_DESCRIPTOR_TYPE_TEXTURE = 0x00000002,
287 XGL_DESCRIPTOR_TYPE_TEXTURE_BUFFER = 0x00000003,
288 XGL_DESCRIPTOR_TYPE_IMAGE = 0x00000004,
289 XGL_DESCRIPTOR_TYPE_IMAGE_BUFFER = 0x00000005,
290 XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 0x00000006,
291 XGL_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER = 0x00000007,
Chia-I Wu47a5d6f2015-03-26 15:26:05 +0800292 XGL_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 0x00000008,
293 XGL_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC = 0x00000009,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600294
Chia-I Wu11078b02015-01-04 16:27:24 +0800295 XGL_DESCRIPTOR_TYPE_BEGIN_RANGE = XGL_DESCRIPTOR_TYPE_SAMPLER,
Chia-I Wu47a5d6f2015-03-26 15:26:05 +0800296 XGL_DESCRIPTOR_TYPE_END_RANGE = XGL_DESCRIPTOR_TYPE_SHADER_STORAGE_BUFFER_DYNAMIC,
Chia-I Wu11078b02015-01-04 16:27:24 +0800297 XGL_NUM_DESCRIPTOR_TYPE = (XGL_DESCRIPTOR_TYPE_END_RANGE - XGL_DESCRIPTOR_TYPE_BEGIN_RANGE + 1),
298 XGL_MAX_ENUM(_XGL_DESCRIPTOR_TYPE)
299} XGL_DESCRIPTOR_TYPE;
Cody Northropfabe36d2014-12-09 19:08:33 -0700300
Chia-I Wu985ba162015-03-26 13:14:16 +0800301typedef enum _XGL_DESCRIPTOR_POOL_USAGE
Chia-I Wu11078b02015-01-04 16:27:24 +0800302{
Chia-I Wu985ba162015-03-26 13:14:16 +0800303 XGL_DESCRIPTOR_POOL_USAGE_ONE_SHOT = 0x00000000,
304 XGL_DESCRIPTOR_POOL_USAGE_DYNAMIC = 0x00000001,
Cody Northropfabe36d2014-12-09 19:08:33 -0700305
Chia-I Wu985ba162015-03-26 13:14:16 +0800306 XGL_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE = XGL_DESCRIPTOR_POOL_USAGE_ONE_SHOT,
307 XGL_DESCRIPTOR_POOL_USAGE_END_RANGE = XGL_DESCRIPTOR_POOL_USAGE_DYNAMIC,
308 XGL_NUM_DESCRIPTOR_POOL_USAGE = (XGL_DESCRIPTOR_POOL_USAGE_END_RANGE - XGL_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE + 1),
309 XGL_MAX_ENUM(_XGL_DESCRIPTOR_POOL_USAGE)
310} XGL_DESCRIPTOR_POOL_USAGE;
Chia-I Wu11078b02015-01-04 16:27:24 +0800311
312typedef enum _XGL_DESCRIPTOR_UPDATE_MODE
313{
314 XGL_DESCRIPTOR_UDPATE_MODE_COPY = 0x00000000,
315 XGL_DESCRIPTOR_UPDATE_MODE_FASTEST = 0x00000001,
316
317 XGL_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE = XGL_DESCRIPTOR_UDPATE_MODE_COPY,
318 XGL_DESCRIPTOR_UPDATE_MODE_END_RANGE = XGL_DESCRIPTOR_UPDATE_MODE_FASTEST,
319 XGL_NUM_DESCRIPTOR_UPDATE_MODE = (XGL_DESCRIPTOR_UPDATE_MODE_END_RANGE - XGL_DESCRIPTOR_UPDATE_MODE_BEGIN_RANGE + 1),
320 XGL_MAX_ENUM(_XGL_DESCRIPTOR_UPDATE_MODE)
321} XGL_DESCRIPTOR_UPDATE_MODE;
322
323typedef enum _XGL_DESCRIPTOR_SET_USAGE
324{
325 XGL_DESCRIPTOR_SET_USAGE_ONE_SHOT = 0x00000000,
326 XGL_DESCRIPTOR_SET_USAGE_STATIC = 0x00000001,
327
328 XGL_DESCRIPTOR_SET_USAGE_BEGIN_RANGE = XGL_DESCRIPTOR_SET_USAGE_ONE_SHOT,
329 XGL_DESCRIPTOR_SET_USAGE_END_RANGE = XGL_DESCRIPTOR_SET_USAGE_STATIC,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600330 XGL_NUM_DESCRIPTOR_SET_USAGE = (XGL_DESCRIPTOR_SET_USAGE_END_RANGE - XGL_DESCRIPTOR_SET_USAGE_BEGIN_RANGE + 1),
Chia-I Wu11078b02015-01-04 16:27:24 +0800331 XGL_MAX_ENUM(_XGL_DESCRIPTOR_SET_USAGE)
332} XGL_DESCRIPTOR_SET_USAGE;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600333
334typedef enum _XGL_QUERY_TYPE
335{
336 XGL_QUERY_OCCLUSION = 0x00000000,
337 XGL_QUERY_PIPELINE_STATISTICS = 0x00000001,
338
339 XGL_QUERY_TYPE_BEGIN_RANGE = XGL_QUERY_OCCLUSION,
340 XGL_QUERY_TYPE_END_RANGE = XGL_QUERY_PIPELINE_STATISTICS,
341 XGL_NUM_QUERY_TYPE = (XGL_QUERY_TYPE_END_RANGE - XGL_QUERY_TYPE_BEGIN_RANGE + 1),
342 XGL_MAX_ENUM(_XGL_QUERY_TYPE)
343} XGL_QUERY_TYPE;
344
345typedef enum _XGL_TIMESTAMP_TYPE
346{
347 XGL_TIMESTAMP_TOP = 0x00000000,
348 XGL_TIMESTAMP_BOTTOM = 0x00000001,
349
350 XGL_TIMESTAMP_TYPE_BEGIN_RANGE = XGL_TIMESTAMP_TOP,
351 XGL_TIMESTAMP_TYPE_END_RANGE = XGL_TIMESTAMP_BOTTOM,
352 XGL_NUM_TIMESTAMP_TYPE = (XGL_TIMESTAMP_TYPE_END_RANGE - XGL_TIMESTAMP_TYPE_BEGIN_RANGE + 1),
353 XGL_MAX_ENUM(_XGL_TIMESTEAMP_TYPE)
354} XGL_TIMESTAMP_TYPE;
355
356typedef enum _XGL_BORDER_COLOR_TYPE
357{
358 XGL_BORDER_COLOR_OPAQUE_WHITE = 0x00000000,
359 XGL_BORDER_COLOR_TRANSPARENT_BLACK = 0x00000001,
360 XGL_BORDER_COLOR_OPAQUE_BLACK = 0x00000002,
361
362 XGL_BORDER_COLOR_TYPE_BEGIN_RANGE = XGL_BORDER_COLOR_OPAQUE_WHITE,
363 XGL_BORDER_COLOR_TYPE_END_RANGE = XGL_BORDER_COLOR_OPAQUE_BLACK,
364 XGL_NUM_BORDER_COLOR_TYPE = (XGL_BORDER_COLOR_TYPE_END_RANGE - XGL_BORDER_COLOR_TYPE_BEGIN_RANGE + 1),
365 XGL_MAX_ENUM(_XGL_BORDER_COLOR_TYPE)
366} XGL_BORDER_COLOR_TYPE;
367
368typedef enum _XGL_PIPELINE_BIND_POINT
369{
370 XGL_PIPELINE_BIND_POINT_COMPUTE = 0x00000000,
371 XGL_PIPELINE_BIND_POINT_GRAPHICS = 0x00000001,
372
373 XGL_PIPELINE_BIND_POINT_BEGIN_RANGE = XGL_PIPELINE_BIND_POINT_COMPUTE,
374 XGL_PIPELINE_BIND_POINT_END_RANGE = XGL_PIPELINE_BIND_POINT_GRAPHICS,
375 XGL_NUM_PIPELINE_BIND_POINT = (XGL_PIPELINE_BIND_POINT_END_RANGE - XGL_PIPELINE_BIND_POINT_BEGIN_RANGE + 1),
376 XGL_MAX_ENUM(_XGL_PIPELINE_BIND_POINT)
377} XGL_PIPELINE_BIND_POINT;
378
379typedef enum _XGL_STATE_BIND_POINT
380{
381 XGL_STATE_BIND_VIEWPORT = 0x00000000,
382 XGL_STATE_BIND_RASTER = 0x00000001,
Tony Barbourf52346d2015-01-16 14:27:35 -0700383 XGL_STATE_BIND_COLOR_BLEND = 0x00000002,
384 XGL_STATE_BIND_DEPTH_STENCIL = 0x00000003,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600385
386 XGL_STATE_BIND_POINT_BEGIN_RANGE = XGL_STATE_BIND_VIEWPORT,
Tony Barbourf52346d2015-01-16 14:27:35 -0700387 XGL_STATE_BIND_POINT_END_RANGE = XGL_STATE_BIND_DEPTH_STENCIL,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600388 XGL_NUM_STATE_BIND_POINT = (XGL_STATE_BIND_POINT_END_RANGE - XGL_STATE_BIND_POINT_BEGIN_RANGE + 1),
389 XGL_MAX_ENUM(_XGL_STATE_BIND_POINT)
390} XGL_STATE_BIND_POINT;
391
392typedef enum _XGL_PRIMITIVE_TOPOLOGY
393{
394 XGL_TOPOLOGY_POINT_LIST = 0x00000000,
395 XGL_TOPOLOGY_LINE_LIST = 0x00000001,
396 XGL_TOPOLOGY_LINE_STRIP = 0x00000002,
397 XGL_TOPOLOGY_TRIANGLE_LIST = 0x00000003,
398 XGL_TOPOLOGY_TRIANGLE_STRIP = 0x00000004,
Courtney Goeltzenleuchterbd656b92015-03-03 11:38:12 -0700399 XGL_TOPOLOGY_TRIANGLE_FAN = 0x00000005,
400 XGL_TOPOLOGY_LINE_LIST_ADJ = 0x00000006,
401 XGL_TOPOLOGY_LINE_STRIP_ADJ = 0x00000007,
402 XGL_TOPOLOGY_TRIANGLE_LIST_ADJ = 0x00000008,
403 XGL_TOPOLOGY_TRIANGLE_STRIP_ADJ = 0x00000009,
404 XGL_TOPOLOGY_PATCH = 0x0000000a,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600405
406 XGL_PRIMITIVE_TOPOLOGY_BEGIN_RANGE = XGL_TOPOLOGY_POINT_LIST,
407 XGL_PRIMITIVE_TOPOLOGY_END_RANGE = XGL_TOPOLOGY_PATCH,
408 XGL_NUM_PRIMITIVE_TOPOLOGY = (XGL_PRIMITIVE_TOPOLOGY_END_RANGE - XGL_PRIMITIVE_TOPOLOGY_BEGIN_RANGE + 1),
409 XGL_MAX_ENUM(_XGL_PRIMITIVE_TOPOLOGY)
410} XGL_PRIMITIVE_TOPOLOGY;
411
412typedef enum _XGL_INDEX_TYPE
413{
414 XGL_INDEX_8 = 0x00000000,
415 XGL_INDEX_16 = 0x00000001,
416 XGL_INDEX_32 = 0x00000002,
417
418 XGL_INDEX_TYPE_BEGIN_RANGE = XGL_INDEX_8,
419 XGL_INDEX_TYPE_END_RANGE = XGL_INDEX_32,
420 XGL_NUM_INDEX_TYPE = (XGL_INDEX_TYPE_END_RANGE - XGL_INDEX_TYPE_BEGIN_RANGE + 1),
421 XGL_MAX_ENUM(_XGL_INDEX_TYPE)
422} XGL_INDEX_TYPE;
423
424typedef enum _XGL_TEX_FILTER
425{
426 XGL_TEX_FILTER_NEAREST = 0,
427 XGL_TEX_FILTER_LINEAR = 1,
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600428
429 XGL_TEX_FILTER_BEGIN_RANGE = XGL_TEX_FILTER_NEAREST,
430 XGL_TEX_FILTER_END_RANGE = XGL_TEX_FILTER_LINEAR,
431 XGL_NUM_TEX_FILTER = (XGL_TEX_FILTER_END_RANGE - XGL_TEX_FILTER_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600432 XGL_MAX_ENUM(_XGL_TEX_FILTER)
433} XGL_TEX_FILTER;
434
435typedef enum _XGL_TEX_MIPMAP_MODE
436{
437 XGL_TEX_MIPMAP_BASE = 0, // Always choose base level
438 XGL_TEX_MIPMAP_NEAREST = 1, // Choose nearest mip level
439 XGL_TEX_MIPMAP_LINEAR = 2, // Linear filter between mip levels
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600440
441 XGL_TEX_MIPMAP_BEGIN_RANGE = XGL_TEX_MIPMAP_BASE,
442 XGL_TEX_MIPMAP_END_RANGE = XGL_TEX_MIPMAP_LINEAR,
443 XGL_NUM_TEX_MIPMAP = (XGL_TEX_MIPMAP_END_RANGE - XGL_TEX_MIPMAP_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600444 XGL_MAX_ENUM(_XGL_TEX_MIPMAP_MODE)
445} XGL_TEX_MIPMAP_MODE;
446
447typedef enum _XGL_TEX_ADDRESS
448{
449 XGL_TEX_ADDRESS_WRAP = 0x00000000,
450 XGL_TEX_ADDRESS_MIRROR = 0x00000001,
451 XGL_TEX_ADDRESS_CLAMP = 0x00000002,
452 XGL_TEX_ADDRESS_MIRROR_ONCE = 0x00000003,
453 XGL_TEX_ADDRESS_CLAMP_BORDER = 0x00000004,
454
455 XGL_TEX_ADDRESS_BEGIN_RANGE = XGL_TEX_ADDRESS_WRAP,
456 XGL_TEX_ADDRESS_END_RANGE = XGL_TEX_ADDRESS_CLAMP_BORDER,
457 XGL_NUM_TEX_ADDRESS = (XGL_TEX_ADDRESS_END_RANGE - XGL_TEX_ADDRESS_BEGIN_RANGE + 1),
458 XGL_MAX_ENUM(_XGL_TEX_ADDRESS)
459} XGL_TEX_ADDRESS;
460
461typedef enum _XGL_COMPARE_FUNC
462{
463 XGL_COMPARE_NEVER = 0x00000000,
464 XGL_COMPARE_LESS = 0x00000001,
465 XGL_COMPARE_EQUAL = 0x00000002,
466 XGL_COMPARE_LESS_EQUAL = 0x00000003,
467 XGL_COMPARE_GREATER = 0x00000004,
468 XGL_COMPARE_NOT_EQUAL = 0x00000005,
469 XGL_COMPARE_GREATER_EQUAL = 0x00000006,
470 XGL_COMPARE_ALWAYS = 0x00000007,
471
472 XGL_COMPARE_FUNC_BEGIN_RANGE = XGL_COMPARE_NEVER,
473 XGL_COMPARE_FUNC_END_RANGE = XGL_COMPARE_ALWAYS,
474 XGL_NUM_COMPARE_FUNC = (XGL_COMPARE_FUNC_END_RANGE - XGL_COMPARE_FUNC_BEGIN_RANGE + 1),
475 XGL_MAX_ENUM(_XGL_COMPARE_FUNC)
476} XGL_COMPARE_FUNC;
477
478typedef enum _XGL_FILL_MODE
479{
Jeremy Hayes13c6b702015-01-14 14:58:37 -0700480 XGL_FILL_POINTS = 0x00000000,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600481 XGL_FILL_WIREFRAME = 0x00000001,
482 XGL_FILL_SOLID = 0x00000002,
483
Jeremy Hayes13c6b702015-01-14 14:58:37 -0700484 XGL_FILL_MODE_BEGIN_RANGE = XGL_FILL_POINTS,
485 XGL_FILL_MODE_END_RANGE = XGL_FILL_SOLID,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600486 XGL_NUM_FILL_MODE = (XGL_FILL_MODE_END_RANGE - XGL_FILL_MODE_BEGIN_RANGE + 1),
487 XGL_MAX_ENUM(_XGL_FILL_MODE)
488} XGL_FILL_MODE;
489
490typedef enum _XGL_CULL_MODE
491{
492 XGL_CULL_NONE = 0x00000000,
493 XGL_CULL_FRONT = 0x00000001,
494 XGL_CULL_BACK = 0x00000002,
495 XGL_CULL_FRONT_AND_BACK = 0x00000003,
496
497 XGL_CULL_MODE_BEGIN_RANGE = XGL_CULL_NONE,
498 XGL_CULL_MODE_END_RANGE = XGL_CULL_FRONT_AND_BACK,
499 XGL_NUM_CULL_MODE = (XGL_CULL_MODE_END_RANGE - XGL_CULL_MODE_BEGIN_RANGE + 1),
500 XGL_MAX_ENUM(_XGL_CULL_MODE)
501} XGL_CULL_MODE;
502
503typedef enum _XGL_FACE_ORIENTATION
504{
505 XGL_FRONT_FACE_CCW = 0x00000000,
506 XGL_FRONT_FACE_CW = 0x00000001,
507
508 XGL_FACE_ORIENTATION_BEGIN_RANGE = XGL_FRONT_FACE_CCW,
509 XGL_FACE_ORIENTATION_END_RANGE = XGL_FRONT_FACE_CW,
510 XGL_NUM_FACE_ORIENTATION = (XGL_FACE_ORIENTATION_END_RANGE - XGL_FACE_ORIENTATION_BEGIN_RANGE + 1),
511 XGL_MAX_ENUM(_XGL_FACE_ORIENTATION)
512} XGL_FACE_ORIENTATION;
513
Tony Barbourf52346d2015-01-16 14:27:35 -0700514typedef enum _XGL_PROVOKING_VERTEX_CONVENTION
515{
516 XGL_PROVOKING_VERTEX_FIRST = 0x00000000,
517 XGL_PROVOKING_VERTEX_LAST = 0x00000001,
518
519 XGL_PROVOKING_VERTEX_BEGIN_RANGE = XGL_PROVOKING_VERTEX_FIRST,
520 XGL_PROVOKING_VERTEX_END_RANGE = XGL_PROVOKING_VERTEX_LAST,
521 XGL_NUM_PROVOKING_VERTEX_CONVENTION = (XGL_PROVOKING_VERTEX_END_RANGE - XGL_PROVOKING_VERTEX_BEGIN_RANGE + 1),
522 XGL_MAX_ENUM(_XGL_PROVOKING_VERTEX_CONVENTION)
523} XGL_PROVOKING_VERTEX_CONVENTION;
524
525typedef enum _XGL_COORDINATE_ORIGIN
526{
527 XGL_COORDINATE_ORIGIN_UPPER_LEFT = 0x00000000,
528 XGL_COORDINATE_ORIGIN_LOWER_LEFT = 0x00000001,
529
530 XGL_COORDINATE_ORIGIN_BEGIN_RANGE = XGL_COORDINATE_ORIGIN_UPPER_LEFT,
531 XGL_COORDINATE_ORIGIN_END_RANGE = XGL_COORDINATE_ORIGIN_LOWER_LEFT,
532 XGL_NUM_COORDINATE_ORIGIN = (XGL_COORDINATE_ORIGIN_END_RANGE - XGL_COORDINATE_ORIGIN_END_RANGE + 1),
533 XGL_MAX_ENUM(_XGL_COORDINATE_ORIGIN)
534} XGL_COORDINATE_ORIGIN;
535
536typedef enum _XGL_DEPTH_MODE
537{
538 XGL_DEPTH_MODE_ZERO_TO_ONE = 0x00000000,
539 XGL_DEPTH_MODE_NEGATIVE_ONE_TO_ONE = 0x00000001,
540
541 XGL_DEPTH_MODE_BEGIN_RANGE = XGL_DEPTH_MODE_ZERO_TO_ONE,
542 XGL_DEPTH_MODE_END_RANGE = XGL_DEPTH_MODE_NEGATIVE_ONE_TO_ONE,
543 XGL_NUM_DEPTH_MODE = (XGL_DEPTH_MODE_END_RANGE - XGL_DEPTH_MODE_BEGIN_RANGE + 1),
544 XGL_MAX_ENUM(_XGL_DEPTH_MODE)
545} XGL_DEPTH_MODE;
546
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600547typedef enum _XGL_BLEND
548{
549 XGL_BLEND_ZERO = 0x00000000,
550 XGL_BLEND_ONE = 0x00000001,
551 XGL_BLEND_SRC_COLOR = 0x00000002,
552 XGL_BLEND_ONE_MINUS_SRC_COLOR = 0x00000003,
553 XGL_BLEND_DEST_COLOR = 0x00000004,
554 XGL_BLEND_ONE_MINUS_DEST_COLOR = 0x00000005,
555 XGL_BLEND_SRC_ALPHA = 0x00000006,
556 XGL_BLEND_ONE_MINUS_SRC_ALPHA = 0x00000007,
557 XGL_BLEND_DEST_ALPHA = 0x00000008,
558 XGL_BLEND_ONE_MINUS_DEST_ALPHA = 0x00000009,
559 XGL_BLEND_CONSTANT_COLOR = 0x0000000a,
560 XGL_BLEND_ONE_MINUS_CONSTANT_COLOR = 0x0000000b,
561 XGL_BLEND_CONSTANT_ALPHA = 0x0000000c,
562 XGL_BLEND_ONE_MINUS_CONSTANT_ALPHA = 0x0000000d,
563 XGL_BLEND_SRC_ALPHA_SATURATE = 0x0000000e,
564 XGL_BLEND_SRC1_COLOR = 0x0000000f,
565 XGL_BLEND_ONE_MINUS_SRC1_COLOR = 0x00000010,
566 XGL_BLEND_SRC1_ALPHA = 0x00000011,
567 XGL_BLEND_ONE_MINUS_SRC1_ALPHA = 0x00000012,
568
569 XGL_BLEND_BEGIN_RANGE = XGL_BLEND_ZERO,
570 XGL_BLEND_END_RANGE = XGL_BLEND_ONE_MINUS_SRC1_ALPHA,
571 XGL_NUM_BLEND = (XGL_BLEND_END_RANGE - XGL_BLEND_BEGIN_RANGE + 1),
572 XGL_MAX_ENUM(_XGL_BLEND)
573} XGL_BLEND;
574
575typedef enum _XGL_BLEND_FUNC
576{
577 XGL_BLEND_FUNC_ADD = 0x00000000,
578 XGL_BLEND_FUNC_SUBTRACT = 0x00000001,
579 XGL_BLEND_FUNC_REVERSE_SUBTRACT = 0x00000002,
580 XGL_BLEND_FUNC_MIN = 0x00000003,
581 XGL_BLEND_FUNC_MAX = 0x00000004,
582
583 XGL_BLEND_FUNC_BEGIN_RANGE = XGL_BLEND_FUNC_ADD,
584 XGL_BLEND_FUNC_END_RANGE = XGL_BLEND_FUNC_MAX,
585 XGL_NUM_BLEND_FUNC = (XGL_BLEND_FUNC_END_RANGE - XGL_BLEND_FUNC_BEGIN_RANGE + 1),
586 XGL_MAX_ENUM(_XGL_BLEND_FUNC)
587} XGL_BLEND_FUNC;
588
589typedef enum _XGL_STENCIL_OP
590{
591 XGL_STENCIL_OP_KEEP = 0x00000000,
592 XGL_STENCIL_OP_ZERO = 0x00000001,
593 XGL_STENCIL_OP_REPLACE = 0x00000002,
594 XGL_STENCIL_OP_INC_CLAMP = 0x00000003,
595 XGL_STENCIL_OP_DEC_CLAMP = 0x00000004,
596 XGL_STENCIL_OP_INVERT = 0x00000005,
597 XGL_STENCIL_OP_INC_WRAP = 0x00000006,
598 XGL_STENCIL_OP_DEC_WRAP = 0x00000007,
599
600 XGL_STENCIL_OP_BEGIN_RANGE = XGL_STENCIL_OP_KEEP,
601 XGL_STENCIL_OP_END_RANGE = XGL_STENCIL_OP_DEC_WRAP,
602 XGL_NUM_STENCIL_OP = (XGL_STENCIL_OP_END_RANGE - XGL_STENCIL_OP_BEGIN_RANGE + 1),
603 XGL_MAX_ENUM(_XGL_STENCIL_OP)
604} XGL_STENCIL_OP;
605
606typedef enum _XGL_LOGIC_OP
607{
608 XGL_LOGIC_OP_COPY = 0x00000000,
609 XGL_LOGIC_OP_CLEAR = 0x00000001,
610 XGL_LOGIC_OP_AND = 0x00000002,
611 XGL_LOGIC_OP_AND_REVERSE = 0x00000003,
612 XGL_LOGIC_OP_AND_INVERTED = 0x00000004,
613 XGL_LOGIC_OP_NOOP = 0x00000005,
614 XGL_LOGIC_OP_XOR = 0x00000006,
615 XGL_LOGIC_OP_OR = 0x00000007,
616 XGL_LOGIC_OP_NOR = 0x00000008,
617 XGL_LOGIC_OP_EQUIV = 0x00000009,
618 XGL_LOGIC_OP_INVERT = 0x0000000a,
619 XGL_LOGIC_OP_OR_REVERSE = 0x0000000b,
620 XGL_LOGIC_OP_COPY_INVERTED = 0x0000000c,
621 XGL_LOGIC_OP_OR_INVERTED = 0x0000000d,
622 XGL_LOGIC_OP_NAND = 0x0000000e,
623 XGL_LOGIC_OP_SET = 0x0000000f,
624
625 XGL_LOGIC_OP_BEGIN_RANGE = XGL_LOGIC_OP_COPY,
626 XGL_LOGIC_OP_END_RANGE = XGL_LOGIC_OP_SET,
627 XGL_NUM_LOGIC_OP = (XGL_LOGIC_OP_END_RANGE - XGL_LOGIC_OP_BEGIN_RANGE + 1),
628 XGL_MAX_ENUM(_XGL_LOGIC_OP)
629} XGL_LOGIC_OP;
630
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600631typedef enum _XGL_SYSTEM_ALLOC_TYPE
632{
633 XGL_SYSTEM_ALLOC_API_OBJECT = 0x00000000,
634 XGL_SYSTEM_ALLOC_INTERNAL = 0x00000001,
635 XGL_SYSTEM_ALLOC_INTERNAL_TEMP = 0x00000002,
636 XGL_SYSTEM_ALLOC_INTERNAL_SHADER = 0x00000003,
637 XGL_SYSTEM_ALLOC_DEBUG = 0x00000004,
638
639 XGL_SYSTEM_ALLOC_BEGIN_RANGE = XGL_SYSTEM_ALLOC_API_OBJECT,
640 XGL_SYSTEM_ALLOC_END_RANGE = XGL_SYSTEM_ALLOC_DEBUG,
641 XGL_NUM_SYSTEM_ALLOC_TYPE = (XGL_SYSTEM_ALLOC_END_RANGE - XGL_SYSTEM_ALLOC_BEGIN_RANGE + 1),
642 XGL_MAX_ENUM(_XGL_SYSTEM_ALLOC_TYPE)
643} XGL_SYSTEM_ALLOC_TYPE;
644
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600645typedef enum _XGL_PHYSICAL_GPU_TYPE
646{
647 XGL_GPU_TYPE_OTHER = 0x00000000,
648 XGL_GPU_TYPE_INTEGRATED = 0x00000001,
649 XGL_GPU_TYPE_DISCRETE = 0x00000002,
650 XGL_GPU_TYPE_VIRTUAL = 0x00000003,
651
652 XGL_PHYSICAL_GPU_TYPE_BEGIN_RANGE = XGL_GPU_TYPE_OTHER,
653 XGL_PHYSICAL_GPU_TYPE_END_RANGE = XGL_GPU_TYPE_VIRTUAL,
654 XGL_NUM_PHYSICAL_GPU_TYPE = (XGL_PHYSICAL_GPU_TYPE_END_RANGE - XGL_PHYSICAL_GPU_TYPE_BEGIN_RANGE + 1),
655 XGL_MAX_ENUM(_XGL_PHYSICAL_GPU_TYPE)
656} XGL_PHYSICAL_GPU_TYPE;
657
658typedef enum _XGL_PHYSICAL_GPU_INFO_TYPE
659{
660 // Info type for xglGetGpuInfo()
661 XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES = 0x00000000,
662 XGL_INFO_TYPE_PHYSICAL_GPU_PERFORMANCE = 0x00000001,
663 XGL_INFO_TYPE_PHYSICAL_GPU_QUEUE_PROPERTIES = 0x00000002,
664 XGL_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES = 0x00000003,
665
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600666 XGL_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE = XGL_INFO_TYPE_PHYSICAL_GPU_PROPERTIES,
667 XGL_INFO_TYPE_PHYSICAL_GPU_END_RANGE = XGL_INFO_TYPE_PHYSICAL_GPU_MEMORY_PROPERTIES,
668 XGL_NUM_INFO_TYPE_PHYSICAL_GPU = (XGL_INFO_TYPE_PHYSICAL_GPU_END_RANGE - XGL_INFO_TYPE_PHYSICAL_GPU_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600669 XGL_MAX_ENUM(_XGL_PHYSICAL_GPU_INFO_TYPE)
670} XGL_PHYSICAL_GPU_INFO_TYPE;
671
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600672typedef enum _XGL_FORMAT_INFO_TYPE
673{
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -0600674 // Info type for xglGetFormatInfo()
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600675 XGL_INFO_TYPE_FORMAT_PROPERTIES = 0x00000000,
676
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600677 XGL_INFO_TYPE_FORMAT_BEGIN_RANGE = XGL_INFO_TYPE_FORMAT_PROPERTIES,
678 XGL_INFO_TYPE_FORMAT_END_RANGE = XGL_INFO_TYPE_FORMAT_PROPERTIES,
679 XGL_NUM_INFO_TYPE_FORMAT = (XGL_INFO_TYPE_FORMAT_END_RANGE - XGL_INFO_TYPE_FORMAT_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600680 XGL_MAX_ENUM(_XGL_FORMAT_INFO_TYPE)
681} XGL_FORMAT_INFO_TYPE;
682
683typedef enum _XGL_SUBRESOURCE_INFO_TYPE
684{
685 // Info type for xglGetImageSubresourceInfo()
686 XGL_INFO_TYPE_SUBRESOURCE_LAYOUT = 0x00000000,
687
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600688 XGL_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE = XGL_INFO_TYPE_SUBRESOURCE_LAYOUT,
689 XGL_INFO_TYPE_SUBRESOURCE_END_RANGE = XGL_INFO_TYPE_SUBRESOURCE_LAYOUT,
690 XGL_NUM_INFO_TYPE_SUBRESOURCE = (XGL_INFO_TYPE_SUBRESOURCE_END_RANGE - XGL_INFO_TYPE_SUBRESOURCE_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600691 XGL_MAX_ENUM(_XGL_SUBRESOURCE_INFO_TYPE)
692} XGL_SUBRESOURCE_INFO_TYPE;
693
694typedef enum _XGL_OBJECT_INFO_TYPE
695{
696 // Info type for xglGetObjectInfo()
Jon Ashburn7e781952015-01-16 09:37:43 -0700697 XGL_INFO_TYPE_MEMORY_ALLOCATION_COUNT = 0x00000000,
698 XGL_INFO_TYPE_MEMORY_REQUIREMENTS = 0x00000001,
699 XGL_INFO_TYPE_BUFFER_MEMORY_REQUIREMENTS = 0x00000002,
700 XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS = 0x00000003,
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600701
702 XGL_INFO_TYPE_BEGIN_RANGE = XGL_INFO_TYPE_MEMORY_ALLOCATION_COUNT,
703 XGL_INFO_TYPE_END_RANGE = XGL_INFO_TYPE_IMAGE_MEMORY_REQUIREMENTS,
704 XGL_NUM_INFO_TYPE = (XGL_INFO_TYPE_END_RANGE - XGL_INFO_TYPE_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600705 XGL_MAX_ENUM(_XGL_OBJECT_INFO_TYPE)
706} XGL_OBJECT_INFO_TYPE;
707
708typedef enum _XGL_VALIDATION_LEVEL
709{
710 XGL_VALIDATION_LEVEL_0 = 0x00000000,
711 XGL_VALIDATION_LEVEL_1 = 0x00000001,
712 XGL_VALIDATION_LEVEL_2 = 0x00000002,
713 XGL_VALIDATION_LEVEL_3 = 0x00000003,
714 XGL_VALIDATION_LEVEL_4 = 0x00000004,
715
716 XGL_VALIDATION_LEVEL_BEGIN_RANGE = XGL_VALIDATION_LEVEL_0,
717 XGL_VALIDATION_LEVEL_END_RANGE = XGL_VALIDATION_LEVEL_4,
718 XGL_NUM_VALIDATION_LEVEL = (XGL_VALIDATION_LEVEL_END_RANGE - XGL_VALIDATION_LEVEL_BEGIN_RANGE + 1),
719
720 XGL_MAX_ENUM(_XGL_VALIDATION_LEVEL)
721} XGL_VALIDATION_LEVEL;
722
723// ------------------------------------------------------------------------------------------------
724// Error and return codes
725
Courtney Goeltzenleuchterf173c9c2015-01-27 10:54:01 -0700726typedef enum _XGL_RESULT
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600727{
728 // Return codes for successful operation execution (>= 0)
729 XGL_SUCCESS = 0x0000000,
730 XGL_UNSUPPORTED = 0x0000001,
731 XGL_NOT_READY = 0x0000002,
732 XGL_TIMEOUT = 0x0000003,
733 XGL_EVENT_SET = 0x0000004,
734 XGL_EVENT_RESET = 0x0000005,
735
736 // Error codes (negative values)
737 XGL_ERROR_UNKNOWN = -(0x00000001),
738 XGL_ERROR_UNAVAILABLE = -(0x00000002),
739 XGL_ERROR_INITIALIZATION_FAILED = -(0x00000003),
740 XGL_ERROR_OUT_OF_MEMORY = -(0x00000004),
741 XGL_ERROR_OUT_OF_GPU_MEMORY = -(0x00000005),
742 XGL_ERROR_DEVICE_ALREADY_CREATED = -(0x00000006),
743 XGL_ERROR_DEVICE_LOST = -(0x00000007),
744 XGL_ERROR_INVALID_POINTER = -(0x00000008),
745 XGL_ERROR_INVALID_VALUE = -(0x00000009),
746 XGL_ERROR_INVALID_HANDLE = -(0x0000000A),
747 XGL_ERROR_INVALID_ORDINAL = -(0x0000000B),
748 XGL_ERROR_INVALID_MEMORY_SIZE = -(0x0000000C),
749 XGL_ERROR_INVALID_EXTENSION = -(0x0000000D),
750 XGL_ERROR_INVALID_FLAGS = -(0x0000000E),
751 XGL_ERROR_INVALID_ALIGNMENT = -(0x0000000F),
752 XGL_ERROR_INVALID_FORMAT = -(0x00000010),
753 XGL_ERROR_INVALID_IMAGE = -(0x00000011),
754 XGL_ERROR_INVALID_DESCRIPTOR_SET_DATA = -(0x00000012),
755 XGL_ERROR_INVALID_QUEUE_TYPE = -(0x00000013),
756 XGL_ERROR_INVALID_OBJECT_TYPE = -(0x00000014),
757 XGL_ERROR_UNSUPPORTED_SHADER_IL_VERSION = -(0x00000015),
758 XGL_ERROR_BAD_SHADER_CODE = -(0x00000016),
759 XGL_ERROR_BAD_PIPELINE_DATA = -(0x00000017),
760 XGL_ERROR_TOO_MANY_MEMORY_REFERENCES = -(0x00000018),
761 XGL_ERROR_NOT_MAPPABLE = -(0x00000019),
762 XGL_ERROR_MEMORY_MAP_FAILED = -(0x0000001A),
763 XGL_ERROR_MEMORY_UNMAP_FAILED = -(0x0000001B),
764 XGL_ERROR_INCOMPATIBLE_DEVICE = -(0x0000001C),
765 XGL_ERROR_INCOMPATIBLE_DRIVER = -(0x0000001D),
766 XGL_ERROR_INCOMPLETE_COMMAND_BUFFER = -(0x0000001E),
767 XGL_ERROR_BUILDING_COMMAND_BUFFER = -(0x0000001F),
768 XGL_ERROR_MEMORY_NOT_BOUND = -(0x00000020),
769 XGL_ERROR_INCOMPATIBLE_QUEUE = -(0x00000021),
770 XGL_ERROR_NOT_SHAREABLE = -(0x00000022),
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -0600771 XGL_MAX_ENUM(_XGL_RESULT_CODE)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600772} XGL_RESULT;
773
774// ------------------------------------------------------------------------------------------------
775// XGL format definitions
776
Chia-I Wub42e9992014-10-06 15:07:25 +0800777typedef enum _XGL_VERTEX_INPUT_STEP_RATE
778{
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600779 XGL_VERTEX_INPUT_STEP_RATE_VERTEX = 0x0,
780 XGL_VERTEX_INPUT_STEP_RATE_INSTANCE = 0x1,
781 XGL_VERTEX_INPUT_STEP_RATE_DRAW = 0x2, //Optional
782
783 XGL_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE = XGL_VERTEX_INPUT_STEP_RATE_VERTEX,
784 XGL_VERTEX_INPUT_STEP_RATE_END_RANGE = XGL_VERTEX_INPUT_STEP_RATE_DRAW,
785 XGL_NUM_VERTEX_INPUT_STEP_RATE = (XGL_VERTEX_INPUT_STEP_RATE_END_RANGE - XGL_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE + 1),
Chia-I Wub42e9992014-10-06 15:07:25 +0800786 XGL_MAX_ENUM(_XGL_VERTEX_INPUT_STEP_RATE)
787} XGL_VERTEX_INPUT_STEP_RATE;
Chia-I Wub42e9992014-10-06 15:07:25 +0800788
Jeremy Hayesa058eee2015-01-23 08:51:43 -0700789typedef enum _XGL_FORMAT
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600790{
Jeremy Hayesa058eee2015-01-23 08:51:43 -0700791 XGL_FMT_UNDEFINED = 0x00000000,
792 XGL_FMT_R4G4_UNORM = 0x00000001,
793 XGL_FMT_R4G4_USCALED = 0x00000002,
794 XGL_FMT_R4G4B4A4_UNORM = 0x00000003,
795 XGL_FMT_R4G4B4A4_USCALED = 0x00000004,
796 XGL_FMT_R5G6B5_UNORM = 0x00000005,
797 XGL_FMT_R5G6B5_USCALED = 0x00000006,
798 XGL_FMT_R5G5B5A1_UNORM = 0x00000007,
799 XGL_FMT_R5G5B5A1_USCALED = 0x00000008,
800 XGL_FMT_R8_UNORM = 0x00000009,
801 XGL_FMT_R8_SNORM = 0x0000000A,
802 XGL_FMT_R8_USCALED = 0x0000000B,
803 XGL_FMT_R8_SSCALED = 0x0000000C,
804 XGL_FMT_R8_UINT = 0x0000000D,
805 XGL_FMT_R8_SINT = 0x0000000E,
806 XGL_FMT_R8_SRGB = 0x0000000F,
807 XGL_FMT_R8G8_UNORM = 0x00000010,
808 XGL_FMT_R8G8_SNORM = 0x00000011,
809 XGL_FMT_R8G8_USCALED = 0x00000012,
810 XGL_FMT_R8G8_SSCALED = 0x00000013,
811 XGL_FMT_R8G8_UINT = 0x00000014,
812 XGL_FMT_R8G8_SINT = 0x00000015,
813 XGL_FMT_R8G8_SRGB = 0x00000016,
814 XGL_FMT_R8G8B8_UNORM = 0x00000017,
815 XGL_FMT_R8G8B8_SNORM = 0x00000018,
816 XGL_FMT_R8G8B8_USCALED = 0x00000019,
817 XGL_FMT_R8G8B8_SSCALED = 0x0000001A,
818 XGL_FMT_R8G8B8_UINT = 0x0000001B,
819 XGL_FMT_R8G8B8_SINT = 0x0000001C,
820 XGL_FMT_R8G8B8_SRGB = 0x0000001D,
821 XGL_FMT_R8G8B8A8_UNORM = 0x0000001E,
822 XGL_FMT_R8G8B8A8_SNORM = 0x0000001F,
823 XGL_FMT_R8G8B8A8_USCALED = 0x00000020,
824 XGL_FMT_R8G8B8A8_SSCALED = 0x00000021,
825 XGL_FMT_R8G8B8A8_UINT = 0x00000022,
826 XGL_FMT_R8G8B8A8_SINT = 0x00000023,
827 XGL_FMT_R8G8B8A8_SRGB = 0x00000024,
828 XGL_FMT_R10G10B10A2_UNORM = 0x00000025,
829 XGL_FMT_R10G10B10A2_SNORM = 0x00000026,
830 XGL_FMT_R10G10B10A2_USCALED = 0x00000027,
831 XGL_FMT_R10G10B10A2_SSCALED = 0x00000028,
832 XGL_FMT_R10G10B10A2_UINT = 0x00000029,
833 XGL_FMT_R10G10B10A2_SINT = 0x0000002A,
834 XGL_FMT_R16_UNORM = 0x0000002B,
835 XGL_FMT_R16_SNORM = 0x0000002C,
836 XGL_FMT_R16_USCALED = 0x0000002D,
837 XGL_FMT_R16_SSCALED = 0x0000002E,
838 XGL_FMT_R16_UINT = 0x0000002F,
839 XGL_FMT_R16_SINT = 0x00000030,
840 XGL_FMT_R16_SFLOAT = 0x00000031,
841 XGL_FMT_R16G16_UNORM = 0x00000032,
842 XGL_FMT_R16G16_SNORM = 0x00000033,
843 XGL_FMT_R16G16_USCALED = 0x00000034,
844 XGL_FMT_R16G16_SSCALED = 0x00000035,
845 XGL_FMT_R16G16_UINT = 0x00000036,
846 XGL_FMT_R16G16_SINT = 0x00000037,
847 XGL_FMT_R16G16_SFLOAT = 0x00000038,
848 XGL_FMT_R16G16B16_UNORM = 0x00000039,
849 XGL_FMT_R16G16B16_SNORM = 0x0000003A,
850 XGL_FMT_R16G16B16_USCALED = 0x0000003B,
851 XGL_FMT_R16G16B16_SSCALED = 0x0000003C,
852 XGL_FMT_R16G16B16_UINT = 0x0000003D,
853 XGL_FMT_R16G16B16_SINT = 0x0000003E,
854 XGL_FMT_R16G16B16_SFLOAT = 0x0000003F,
855 XGL_FMT_R16G16B16A16_UNORM = 0x00000040,
856 XGL_FMT_R16G16B16A16_SNORM = 0x00000041,
857 XGL_FMT_R16G16B16A16_USCALED = 0x00000042,
858 XGL_FMT_R16G16B16A16_SSCALED = 0x00000043,
859 XGL_FMT_R16G16B16A16_UINT = 0x00000044,
860 XGL_FMT_R16G16B16A16_SINT = 0x00000045,
861 XGL_FMT_R16G16B16A16_SFLOAT = 0x00000046,
862 XGL_FMT_R32_UINT = 0x00000047,
863 XGL_FMT_R32_SINT = 0x00000048,
864 XGL_FMT_R32_SFLOAT = 0x00000049,
865 XGL_FMT_R32G32_UINT = 0x0000004A,
866 XGL_FMT_R32G32_SINT = 0x0000004B,
867 XGL_FMT_R32G32_SFLOAT = 0x0000004C,
868 XGL_FMT_R32G32B32_UINT = 0x0000004D,
869 XGL_FMT_R32G32B32_SINT = 0x0000004E,
870 XGL_FMT_R32G32B32_SFLOAT = 0x0000004F,
871 XGL_FMT_R32G32B32A32_UINT = 0x00000050,
872 XGL_FMT_R32G32B32A32_SINT = 0x00000051,
873 XGL_FMT_R32G32B32A32_SFLOAT = 0x00000052,
874 XGL_FMT_R64_SFLOAT = 0x00000053,
875 XGL_FMT_R64G64_SFLOAT = 0x00000054,
876 XGL_FMT_R64G64B64_SFLOAT = 0x00000055,
877 XGL_FMT_R64G64B64A64_SFLOAT = 0x00000056,
878 XGL_FMT_R11G11B10_UFLOAT = 0x00000057,
879 XGL_FMT_R9G9B9E5_UFLOAT = 0x00000058,
880 XGL_FMT_D16_UNORM = 0x00000059,
881 XGL_FMT_D24_UNORM = 0x0000005A,
882 XGL_FMT_D32_SFLOAT = 0x0000005B,
883 XGL_FMT_S8_UINT = 0x0000005C,
884 XGL_FMT_D16_UNORM_S8_UINT = 0x0000005D,
885 XGL_FMT_D24_UNORM_S8_UINT = 0x0000005E,
886 XGL_FMT_D32_SFLOAT_S8_UINT = 0x0000005F,
Courtney Goeltzenleuchter3654d602015-03-03 11:30:36 -0700887 XGL_FMT_BC1_RGB_UNORM = 0x00000060,
888 XGL_FMT_BC1_RGB_SRGB = 0x00000061,
889 XGL_FMT_BC1_RGBA_UNORM = 0x00000062,
890 XGL_FMT_BC1_RGBA_SRGB = 0x00000063,
891 XGL_FMT_BC2_UNORM = 0x00000064,
892 XGL_FMT_BC2_SRGB = 0x00000065,
893 XGL_FMT_BC3_UNORM = 0x00000066,
894 XGL_FMT_BC3_SRGB = 0x00000067,
895 XGL_FMT_BC4_UNORM = 0x00000068,
896 XGL_FMT_BC4_SNORM = 0x00000069,
897 XGL_FMT_BC5_UNORM = 0x0000006A,
898 XGL_FMT_BC5_SNORM = 0x0000006B,
899 XGL_FMT_BC6H_UFLOAT = 0x0000006C,
900 XGL_FMT_BC6H_SFLOAT = 0x0000006D,
901 XGL_FMT_BC7_UNORM = 0x0000006E,
902 XGL_FMT_BC7_SRGB = 0x0000006F,
903 XGL_FMT_ETC2_R8G8B8_UNORM = 0x00000070,
904 XGL_FMT_ETC2_R8G8B8_SRGB = 0x00000071,
905 XGL_FMT_ETC2_R8G8B8A1_UNORM = 0x00000072,
906 XGL_FMT_ETC2_R8G8B8A1_SRGB = 0x00000073,
907 XGL_FMT_ETC2_R8G8B8A8_UNORM = 0x00000074,
908 XGL_FMT_ETC2_R8G8B8A8_SRGB = 0x00000075,
909 XGL_FMT_EAC_R11_UNORM = 0x00000076,
910 XGL_FMT_EAC_R11_SNORM = 0x00000077,
911 XGL_FMT_EAC_R11G11_UNORM = 0x00000078,
912 XGL_FMT_EAC_R11G11_SNORM = 0x00000079,
913 XGL_FMT_ASTC_4x4_UNORM = 0x0000007A,
914 XGL_FMT_ASTC_4x4_SRGB = 0x0000007B,
915 XGL_FMT_ASTC_5x4_UNORM = 0x0000007C,
916 XGL_FMT_ASTC_5x4_SRGB = 0x0000007D,
917 XGL_FMT_ASTC_5x5_UNORM = 0x0000007E,
918 XGL_FMT_ASTC_5x5_SRGB = 0x0000007F,
919 XGL_FMT_ASTC_6x5_UNORM = 0x00000080,
920 XGL_FMT_ASTC_6x5_SRGB = 0x00000081,
921 XGL_FMT_ASTC_6x6_UNORM = 0x00000082,
922 XGL_FMT_ASTC_6x6_SRGB = 0x00000083,
923 XGL_FMT_ASTC_8x5_UNORM = 0x00000084,
924 XGL_FMT_ASTC_8x5_SRGB = 0x00000085,
925 XGL_FMT_ASTC_8x6_UNORM = 0x00000086,
926 XGL_FMT_ASTC_8x6_SRGB = 0x00000087,
927 XGL_FMT_ASTC_8x8_UNORM = 0x00000088,
928 XGL_FMT_ASTC_8x8_SRGB = 0x00000089,
929 XGL_FMT_ASTC_10x5_UNORM = 0x0000008A,
930 XGL_FMT_ASTC_10x5_SRGB = 0x0000008B,
931 XGL_FMT_ASTC_10x6_UNORM = 0x0000008C,
932 XGL_FMT_ASTC_10x6_SRGB = 0x0000008D,
933 XGL_FMT_ASTC_10x8_UNORM = 0x0000008E,
934 XGL_FMT_ASTC_10x8_SRGB = 0x0000008F,
935 XGL_FMT_ASTC_10x10_UNORM = 0x00000090,
936 XGL_FMT_ASTC_10x10_SRGB = 0x00000091,
937 XGL_FMT_ASTC_12x10_UNORM = 0x00000092,
938 XGL_FMT_ASTC_12x10_SRGB = 0x00000093,
939 XGL_FMT_ASTC_12x12_UNORM = 0x00000094,
940 XGL_FMT_ASTC_12x12_SRGB = 0x00000095,
941 XGL_FMT_B4G4R4A4_UNORM = 0x00000096,
942 XGL_FMT_B5G5R5A1_UNORM = 0x00000097,
943 XGL_FMT_B5G6R5_UNORM = 0x00000098,
944 XGL_FMT_B5G6R5_USCALED = 0x00000099,
945 XGL_FMT_B8G8R8_UNORM = 0x0000009A,
946 XGL_FMT_B8G8R8_SNORM = 0x0000009B,
947 XGL_FMT_B8G8R8_USCALED = 0x0000009C,
948 XGL_FMT_B8G8R8_SSCALED = 0x0000009D,
949 XGL_FMT_B8G8R8_UINT = 0x0000009E,
950 XGL_FMT_B8G8R8_SINT = 0x0000009F,
951 XGL_FMT_B8G8R8_SRGB = 0x000000A0,
952 XGL_FMT_B8G8R8A8_UNORM = 0x000000A1,
953 XGL_FMT_B8G8R8A8_SNORM = 0x000000A2,
954 XGL_FMT_B8G8R8A8_USCALED = 0x000000A3,
955 XGL_FMT_B8G8R8A8_SSCALED = 0x000000A4,
956 XGL_FMT_B8G8R8A8_UINT = 0x000000A5,
957 XGL_FMT_B8G8R8A8_SINT = 0x000000A6,
958 XGL_FMT_B8G8R8A8_SRGB = 0x000000A7,
959 XGL_FMT_B10G10R10A2_UNORM = 0x000000A8,
960 XGL_FMT_B10G10R10A2_SNORM = 0x000000A9,
961 XGL_FMT_B10G10R10A2_USCALED = 0x000000AA,
962 XGL_FMT_B10G10R10A2_SSCALED = 0x000000AB,
963 XGL_FMT_B10G10R10A2_UINT = 0x000000AC,
964 XGL_FMT_B10G10R10A2_SINT = 0x000000AD,
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600965
Jeremy Hayesa058eee2015-01-23 08:51:43 -0700966 XGL_FMT_BEGIN_RANGE = XGL_FMT_UNDEFINED,
967 XGL_FMT_END_RANGE = XGL_FMT_B10G10R10A2_SINT,
968 XGL_NUM_FMT = (XGL_FMT_END_RANGE - XGL_FMT_BEGIN_RANGE + 1),
969 XGL_MAX_ENUM(_XGL_FORMAT)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600970} XGL_FORMAT;
971
972// Shader stage enumerant
973typedef enum _XGL_PIPELINE_SHADER_STAGE
974{
975 XGL_SHADER_STAGE_VERTEX = 0,
976 XGL_SHADER_STAGE_TESS_CONTROL = 1,
977 XGL_SHADER_STAGE_TESS_EVALUATION = 2,
978 XGL_SHADER_STAGE_GEOMETRY = 3,
979 XGL_SHADER_STAGE_FRAGMENT = 4,
980 XGL_SHADER_STAGE_COMPUTE = 5,
Mark Lobodzinski707a1022015-01-26 17:06:34 -0600981
982 XGL_SHADER_STAGE_BEGIN_RANGE = XGL_SHADER_STAGE_VERTEX,
983 XGL_SHADER_STAGE_END_RANGE = XGL_SHADER_STAGE_COMPUTE,
984 XGL_NUM_SHADER_STAGE = (XGL_SHADER_STAGE_END_RANGE - XGL_SHADER_STAGE_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -0600985 XGL_MAX_ENUM(_XGL_PIPELINE_SHADER_STAGE)
986} XGL_PIPELINE_SHADER_STAGE;
987
Chia-I Wu11078b02015-01-04 16:27:24 +0800988typedef enum _XGL_SHADER_STAGE_FLAGS
989{
Piers Daniella7910a02015-02-06 16:41:39 -0700990 XGL_SHADER_STAGE_FLAGS_VERTEX_BIT = 0x00000001,
991 XGL_SHADER_STAGE_FLAGS_TESS_CONTROL_BIT = 0x00000002,
992 XGL_SHADER_STAGE_FLAGS_TESS_EVALUATION_BIT = 0x00000004,
993 XGL_SHADER_STAGE_FLAGS_GEOMETRY_BIT = 0x00000008,
994 XGL_SHADER_STAGE_FLAGS_FRAGMENT_BIT = 0x00000010,
995 XGL_SHADER_STAGE_FLAGS_COMPUTE_BIT = 0x00000020,
Chia-I Wu11078b02015-01-04 16:27:24 +0800996
Piers Daniella7910a02015-02-06 16:41:39 -0700997 XGL_SHADER_STAGE_FLAGS_ALL = 0x7FFFFFFF,
Chia-I Wu11078b02015-01-04 16:27:24 +0800998 XGL_MAX_ENUM(_XGL_SHADER_STAGE_FLAGS)
999} XGL_SHADER_STAGE_FLAGS;
1000
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001001// Structure type enumerant
1002typedef enum _XGL_STRUCTURE_TYPE
1003{
1004 XGL_STRUCTURE_TYPE_APPLICATION_INFO = 0,
1005 XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 1,
1006 XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO = 2,
1007 XGL_STRUCTURE_TYPE_MEMORY_OPEN_INFO = 4,
1008 XGL_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO = 5,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001009 XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO = 6,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001010 XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO = 7,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001011 XGL_STRUCTURE_TYPE_EVENT_WAIT_INFO = 8,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001012 XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 9,
1013 XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO = 10,
1014 XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO = 11,
1015 XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO = 12,
1016 XGL_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 13,
1017 XGL_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 14,
Chia-I Wu11078b02015-01-04 16:27:24 +08001018 XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 15,
Tony Barbourf52346d2015-01-16 14:27:35 -07001019 XGL_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO = 16,
1020 XGL_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO = 17,
1021 XGL_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO = 18,
1022 XGL_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO = 19,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001023 XGL_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO = 20,
1024 XGL_STRUCTURE_TYPE_EVENT_CREATE_INFO = 21,
1025 XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO = 22,
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06001026 XGL_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 23,
1027 XGL_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO = 24,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001028 XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 25,
1029 XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 26,
1030 XGL_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 27,
Tony Barbourf52346d2015-01-16 14:27:35 -07001031 XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO = 28,
1032 XGL_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO = 29,
1033 XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO = 30,
1034 XGL_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO = 31,
1035 XGL_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO = 32,
1036 XGL_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO = 33,
1037 XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO = 34,
1038 XGL_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO = 35,
1039 XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 36,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001040 XGL_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 37,
1041 XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 38,
1042 XGL_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 39,
1043 XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO = 40,
1044 XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO = 41,
1045 XGL_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 42,
1046 XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO = 43,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001047 XGL_STRUCTURE_TYPE_PIPELINE_BARRIER = 44,
1048 XGL_STRUCTURE_TYPE_MEMORY_BARRIER = 45,
1049 XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 46,
1050 XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 47,
Chia-I Wu985ba162015-03-26 13:14:16 +08001051 XGL_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 48,
Chia-I Wu11078b02015-01-04 16:27:24 +08001052 XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS = 49,
1053 XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES = 50,
1054 XGL_STRUCTURE_TYPE_UPDATE_IMAGES = 51,
1055 XGL_STRUCTURE_TYPE_UPDATE_BUFFERS = 52,
1056 XGL_STRUCTURE_TYPE_UPDATE_AS_COPY = 53,
Jon Ashburn8a5da752015-01-19 15:00:26 -07001057 XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO = 54,
1058 XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO = 55,
Mark Lobodzinski707a1022015-01-26 17:06:34 -06001059
1060 XGL_STRUCTURE_TYPE_BEGIN_RANGE = XGL_STRUCTURE_TYPE_APPLICATION_INFO,
1061 XGL_STRUCTURE_TYPE_END_RANGE = XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO,
1062 XGL_NUM_STRUCTURE_TYPE = (XGL_STRUCTURE_TYPE_END_RANGE - XGL_STRUCTURE_TYPE_BEGIN_RANGE + 1),
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001063 XGL_MAX_ENUM(_XGL_STRUCTURE_TYPE)
1064} XGL_STRUCTURE_TYPE;
1065
1066// ------------------------------------------------------------------------------------------------
1067// Flags
1068
1069// Device creation flags
1070typedef enum _XGL_DEVICE_CREATE_FLAGS
1071{
1072 XGL_DEVICE_CREATE_VALIDATION_BIT = 0x00000001,
1073 XGL_DEVICE_CREATE_MGPU_IQ_MATCH_BIT = 0x00000002,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001074 XGL_MAX_ENUM(_XGL_DEVICE_CREATE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001075} XGL_DEVICE_CREATE_FLAGS;
1076
1077// Queue capabilities
1078typedef enum _XGL_QUEUE_FLAGS
1079{
1080 XGL_QUEUE_GRAPHICS_BIT = 0x00000001, // Queue supports graphics operations
1081 XGL_QUEUE_COMPUTE_BIT = 0x00000002, // Queue supports compute operations
1082 XGL_QUEUE_DMA_BIT = 0x00000004, // Queue supports DMA operations
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001083 XGL_QUEUE_EXTENDED_BIT = 0x40000000, // Extended queue
1084 XGL_MAX_ENUM(_XGL_QUEUE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001085} XGL_QUEUE_FLAGS;
1086
Jon Ashburne4792432015-01-20 13:55:32 -07001087// memory properties passed into xglAllocMemory().
1088typedef enum _XGL_MEMORY_PROPERTY_FLAGS
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001089{
Jon Ashburne4792432015-01-20 13:55:32 -07001090 XGL_MEMORY_PROPERTY_GPU_ONLY = 0x00000000, // If not set, then allocate memory on device (GPU)
1091 XGL_MEMORY_PROPERTY_CPU_VISIBLE_BIT = 0x00000001,
1092 XGL_MEMORY_PROPERTY_CPU_GPU_COHERENT_BIT = 0x00000002,
1093 XGL_MEMORY_PROPERTY_CPU_UNCACHED_BIT = 0x00000004,
1094 XGL_MEMORY_PROPERTY_CPU_WRITE_COMBINED_BIT = 0x00000008,
1095 XGL_MEMORY_PROPERTY_PREFER_CPU_LOCAL = 0x00000010, // all else being equal, prefer CPU access
1096 XGL_MEMORY_PROPERTY_SHAREABLE_BIT = 0x00000020,
1097 XGL_MAX_ENUM(_XGL_MEMORY_PROPERTY_FLAGS)
1098} XGL_MEMORY_PROPERTY_FLAGS;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001099
Jon Ashburne01ff7a2015-01-20 15:06:59 -07001100typedef enum _XGL_MEMORY_TYPE
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001101{
Jon Ashburne01ff7a2015-01-20 15:06:59 -07001102 XGL_MEMORY_TYPE_OTHER = 0x00000000, // device memory that is not any of the others
1103 XGL_MEMORY_TYPE_BUFFER = 0x00000001, // memory for buffers and associated information
1104 XGL_MEMORY_TYPE_IMAGE = 0x00000002, // memory for images and associated information
Mark Lobodzinski707a1022015-01-26 17:06:34 -06001105
1106 XGL_MEMORY_TYPE_BEGIN_RANGE = XGL_MEMORY_TYPE_OTHER,
1107 XGL_MEMORY_TYPE_END_RANGE = XGL_MEMORY_TYPE_IMAGE,
1108 XGL_NUM_MEMORY_TYPE = (XGL_MEMORY_TYPE_END_RANGE - XGL_MEMORY_TYPE_BEGIN_RANGE + 1),
Jon Ashburne01ff7a2015-01-20 15:06:59 -07001109 XGL_MAX_ENUM(_XGL_MEMORY_TYPE)
1110} XGL_MEMORY_TYPE;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001111
Jon Ashburn8a5da752015-01-19 15:00:26 -07001112// Buffer and buffer allocation usage flags
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001113typedef enum _XGL_BUFFER_USAGE_FLAGS
1114{
Jon Ashburn8a5da752015-01-19 15:00:26 -07001115 XGL_BUFFER_USAGE_GENERAL = 0x00000000, // no special usage
1116 XGL_BUFFER_USAGE_SHADER_ACCESS_READ_BIT = 0x00000001, // Shader read (e.g. TBO, image buffer, UBO, SSBO)
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001117 XGL_BUFFER_USAGE_SHADER_ACCESS_WRITE_BIT = 0x00000002, // Shader write (e.g. image buffer, SSBO)
1118 XGL_BUFFER_USAGE_SHADER_ACCESS_ATOMIC_BIT = 0x00000004, // Shader atomic operations (e.g. image buffer, SSBO)
Jon Ashburn8a5da752015-01-19 15:00:26 -07001119 XGL_BUFFER_USAGE_TRANSFER_SOURCE_BIT = 0x00000008, // used as a source for copies
1120 XGL_BUFFER_USAGE_TRANSFER_DESTINATION_BIT = 0x00000010, // used as a destination for copies
1121 XGL_BUFFER_USAGE_UNIFORM_READ_BIT = 0x00000020, // Uniform read (UBO)
1122 XGL_BUFFER_USAGE_INDEX_FETCH_BIT = 0x00000040, // Fixed function index fetch (index buffer)
1123 XGL_BUFFER_USAGE_VERTEX_FETCH_BIT = 0x00000080, // Fixed function vertex fetch (VBO)
1124 XGL_BUFFER_USAGE_SHADER_STORAGE_BIT = 0x00000100, // Shader storage buffer (SSBO)
Courtney Goeltzenleuchter77268a62015-03-25 16:31:58 -06001125 XGL_BUFFER_USAGE_INDIRECT_PARAMETER_FETCH_BIT = 0x00000200, // Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
1126 XGL_BUFFER_USAGE_TEXTURE_BUFFER_BIT = 0x00000400, // texture buffer (TBO)
1127 XGL_BUFFER_USAGE_IMAGE_BUFFER_BIT = 0x00000800, // image buffer (load/store)
Jon Ashburn8a5da752015-01-19 15:00:26 -07001128 XGL_MAX_ENUM(_XGL_BUFFER_USAGE_FLAGS)
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001129} XGL_BUFFER_USAGE_FLAGS;
1130
1131// Buffer flags
1132typedef enum _XGL_BUFFER_CREATE_FLAGS
1133{
1134 XGL_BUFFER_CREATE_SHAREABLE_BIT = 0x00000001,
1135 XGL_BUFFER_CREATE_SPARSE_BIT = 0x00000002,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001136 XGL_MAX_ENUM(_XGL_BUFFER_CREATE_FLAGS)
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001137} XGL_BUFFER_CREATE_FLAGS;
1138
1139typedef enum _XGL_BUFFER_VIEW_TYPE
1140{
1141 XGL_BUFFER_VIEW_RAW = 0x00000000, // Raw buffer without special structure (e.g. UBO, SSBO, indirect and parameter buffers)
1142 XGL_BUFFER_VIEW_TYPED = 0x00000001, // Typed buffer, format and channels are used (TBO, image buffer)
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001143
Jon Ashburn205b4222015-01-20 16:59:42 -07001144 XGL_BUFFER_VIEW_TYPE_BEGIN_RANGE = XGL_BUFFER_VIEW_RAW,
Courtney Goeltzenleuchter77268a62015-03-25 16:31:58 -06001145 XGL_BUFFER_VIEW_TYPE_END_RANGE = XGL_BUFFER_VIEW_TYPED,
Jon Ashburn205b4222015-01-20 16:59:42 -07001146 XGL_NUM_BUFFER_VIEW_TYPE = (XGL_BUFFER_VIEW_TYPE_END_RANGE - XGL_BUFFER_VIEW_TYPE_BEGIN_RANGE + 1),
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001147 XGL_MAX_ENUM(_XGL_BUFFER_VIEW_TYPE)
1148} XGL_BUFFER_VIEW_TYPE;
1149
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06001150
Jon Ashburn8a5da752015-01-19 15:00:26 -07001151// Images memory allocations can be used for resources of a given format class.
1152typedef enum _XGL_IMAGE_FORMAT_CLASS
1153{
1154 XGL_IMAGE_FORMAT_CLASS_128_BITS = 1, // color formats
1155 XGL_IMAGE_FORMAT_CLASS_96_BITS = 2,
1156 XGL_IMAGE_FORMAT_CLASS_64_BITS = 3,
1157 XGL_IMAGE_FORMAT_CLASS_48_BITS = 4,
1158 XGL_IMAGE_FORMAT_CLASS_32_BITS = 5,
1159 XGL_IMAGE_FORMAT_CLASS_24_BITS = 6,
1160 XGL_IMAGE_FORMAT_CLASS_16_BITS = 7,
1161 XGL_IMAGE_FORMAT_CLASS_8_BITS = 8,
1162 XGL_IMAGE_FORMAT_CLASS_128_BIT_BLOCK = 9, // 128-bit block compressed formats
1163 XGL_IMAGE_FORMAT_CLASS_64_BIT_BLOCK = 10, // 64-bit block compressed formats
1164 XGL_IMAGE_FORMAT_CLASS_D32 = 11, // D32_SFLOAT
1165 XGL_IMAGE_FORMAT_CLASS_D24 = 12, // D24_UNORM
1166 XGL_IMAGE_FORMAT_CLASS_D16 = 13, // D16_UNORM
1167 XGL_IMAGE_FORMAT_CLASS_S8 = 14, // S8_UINT
1168 XGL_IMAGE_FORMAT_CLASS_D32S8 = 15, // D32_SFLOAT_S8_UINT
1169 XGL_IMAGE_FORMAT_CLASS_D24S8 = 16, // D24_UNORM_S8_UINT
1170 XGL_IMAGE_FORMAT_CLASS_D16S8 = 17, // D16_UNORM_S8_UINT
1171 XGL_IMAGE_FORMAT_CLASS_LINEAR = 18, // used for pitch-linear (transparent) textures
Mark Lobodzinski707a1022015-01-26 17:06:34 -06001172
1173 XGL_IMAGE_FORMAT_CLASS_BEGIN_RANGE = XGL_IMAGE_FORMAT_CLASS_128_BITS,
1174 XGL_IMAGE_FORMAT_CLASS_END_RANGE = XGL_IMAGE_FORMAT_CLASS_LINEAR,
1175 XGL_NUM_IMAGE_FORMAT_CLASS = (XGL_IMAGE_FORMAT_CLASS_END_RANGE - XGL_IMAGE_FORMAT_CLASS_BEGIN_RANGE + 1),
Jon Ashburn8a5da752015-01-19 15:00:26 -07001176 XGL_MAX_ENUM(_XGL_IMAGE_FORMAT_CLASS)
1177} XGL_IMAGE_FORMAT_CLASS;
1178
1179// Image and image allocation usage flags
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001180typedef enum _XGL_IMAGE_USAGE_FLAGS
1181{
Jon Ashburn8a5da752015-01-19 15:00:26 -07001182 XGL_IMAGE_USAGE_GENERAL = 0x00000000, // no special usage
1183 XGL_IMAGE_USAGE_SHADER_ACCESS_READ_BIT = 0x00000001, // shader read (e.g. texture, image)
1184 XGL_IMAGE_USAGE_SHADER_ACCESS_WRITE_BIT = 0x00000002, // shader write (e.g. image)
1185 XGL_IMAGE_USAGE_SHADER_ACCESS_ATOMIC_BIT = 0x00000004, // shader atomic operations (e.g. image)
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06001186 XGL_IMAGE_USAGE_TRANSFER_SOURCE_BIT = 0x00000008, // used as a source for copies
Jon Ashburn8a5da752015-01-19 15:00:26 -07001187 XGL_IMAGE_USAGE_TRANSFER_DESTINATION_BIT = 0x00000010, // used as a destination for copies
1188 XGL_IMAGE_USAGE_TEXTURE_BIT = 0x00000020, // opaque texture (2d, 3d, etc.)
1189 XGL_IMAGE_USAGE_IMAGE_BIT = 0x00000040, // opaque image (2d, 3d, etc.)
1190 XGL_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000080, // framebuffer color attachment
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06001191 XGL_IMAGE_USAGE_DEPTH_STENCIL_BIT = 0x00000100, // framebuffer depth/stencil
Courtney Goeltzenleuchter3c3987c2015-03-08 19:41:29 -06001192 XGL_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000200, // image data not needed outside of rendering.
Jon Ashburn8a5da752015-01-19 15:00:26 -07001193 XGL_MAX_ENUM(_XGL_IMAGE_USAGE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001194} XGL_IMAGE_USAGE_FLAGS;
1195
1196// Image flags
1197typedef enum _XGL_IMAGE_CREATE_FLAGS
1198{
1199 XGL_IMAGE_CREATE_INVARIANT_DATA_BIT = 0x00000001,
1200 XGL_IMAGE_CREATE_CLONEABLE_BIT = 0x00000002,
1201 XGL_IMAGE_CREATE_SHAREABLE_BIT = 0x00000004,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001202 XGL_IMAGE_CREATE_SPARSE_BIT = 0x00000008,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001203 XGL_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000010, // Allows image views to have different format than the base image
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001204 XGL_MAX_ENUM(_XGL_IMAGE_CREATE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001205} XGL_IMAGE_CREATE_FLAGS;
1206
1207// Depth-stencil view creation flags
1208typedef enum _XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS
1209{
1210 XGL_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_DEPTH_BIT = 0x00000001,
1211 XGL_DEPTH_STENCIL_VIEW_CREATE_READ_ONLY_STENCIL_BIT = 0x00000002,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001212 XGL_MAX_ENUM(_XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001213} XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS;
1214
1215// Pipeline creation flags
1216typedef enum _XGL_PIPELINE_CREATE_FLAGS
1217{
1218 XGL_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001,
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06001219 XGL_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001220 XGL_MAX_ENUM(_XGL_PIPELINE_CREATE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001221} XGL_PIPELINE_CREATE_FLAGS;
1222
1223// Semaphore creation flags
1224typedef enum _XGL_SEMAPHORE_CREATE_FLAGS
1225{
1226 XGL_SEMAPHORE_CREATE_SHAREABLE_BIT = 0x00000001,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001227 XGL_MAX_ENUM(_XGL_SEMAPHORE_CREATE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001228} XGL_SEMAPHORE_CREATE_FLAGS;
1229
1230// Memory reference flags
1231typedef enum _XGL_MEMORY_REF_FLAGS
1232{
1233 XGL_MEMORY_REF_READ_ONLY_BIT = 0x00000001,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001234 XGL_MAX_ENUM(_XGL_MEMORY_REF_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001235} XGL_MEMORY_REF_FLAGS;
1236
1237// Format capability flags
1238typedef enum _XGL_FORMAT_FEATURE_FLAGS
1239{
1240 XGL_FORMAT_IMAGE_SHADER_READ_BIT = 0x00000001,
1241 XGL_FORMAT_IMAGE_SHADER_WRITE_BIT = 0x00000002,
1242 XGL_FORMAT_IMAGE_COPY_BIT = 0x00000004,
1243 XGL_FORMAT_MEMORY_SHADER_ACCESS_BIT = 0x00000008,
1244 XGL_FORMAT_COLOR_ATTACHMENT_WRITE_BIT = 0x00000010,
1245 XGL_FORMAT_COLOR_ATTACHMENT_BLEND_BIT = 0x00000020,
1246 XGL_FORMAT_DEPTH_ATTACHMENT_BIT = 0x00000040,
1247 XGL_FORMAT_STENCIL_ATTACHMENT_BIT = 0x00000080,
1248 XGL_FORMAT_MSAA_ATTACHMENT_BIT = 0x00000100,
1249 XGL_FORMAT_CONVERSION_BIT = 0x00000200,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001250 XGL_MAX_ENUM(_XGL_FORMAT_FEATURE_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001251} XGL_FORMAT_FEATURE_FLAGS;
1252
1253// Query flags
1254typedef enum _XGL_QUERY_CONTROL_FLAGS
1255{
1256 XGL_QUERY_IMPRECISE_DATA_BIT = 0x00000001,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001257 XGL_MAX_ENUM(_XGL_QUERY_CONTROL_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001258} XGL_QUERY_CONTROL_FLAGS;
1259
1260// GPU compatibility flags
1261typedef enum _XGL_GPU_COMPATIBILITY_FLAGS
1262{
1263 XGL_GPU_COMPAT_ASIC_FEATURES_BIT = 0x00000001,
1264 XGL_GPU_COMPAT_IQ_MATCH_BIT = 0x00000002,
1265 XGL_GPU_COMPAT_PEER_TRANSFER_BIT = 0x00000004,
1266 XGL_GPU_COMPAT_SHARED_MEMORY_BIT = 0x00000008,
1267 XGL_GPU_COMPAT_SHARED_SYNC_BIT = 0x00000010,
1268 XGL_GPU_COMPAT_SHARED_GPU0_DISPLAY_BIT = 0x00000020,
1269 XGL_GPU_COMPAT_SHARED_GPU1_DISPLAY_BIT = 0x00000040,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001270 XGL_MAX_ENUM(_XGL_GPU_COMPATIBILITY_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001271} XGL_GPU_COMPATIBILITY_FLAGS;
1272
1273// Command buffer building flags
1274typedef enum _XGL_CMD_BUFFER_BUILD_FLAGS
1275{
1276 XGL_CMD_BUFFER_OPTIMIZE_GPU_SMALL_BATCH_BIT = 0x00000001,
1277 XGL_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT = 0x00000002,
1278 XGL_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT = 0x00000004,
1279 XGL_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT = 0x00000008,
Mark Lobodzinski4f9858e2015-01-29 10:04:52 -06001280 XGL_MAX_ENUM(_XGL_CMD_BUFFER_BUILD_FLAGS)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001281} XGL_CMD_BUFFER_BUILD_FLAGS;
1282
1283// ------------------------------------------------------------------------------------------------
1284// XGL structures
1285
1286typedef struct _XGL_OFFSET2D
1287{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001288 int32_t x;
1289 int32_t y;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001290} XGL_OFFSET2D;
1291
1292typedef struct _XGL_OFFSET3D
1293{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001294 int32_t x;
1295 int32_t y;
1296 int32_t z;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001297} XGL_OFFSET3D;
1298
1299typedef struct _XGL_EXTENT2D
1300{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001301 int32_t width;
1302 int32_t height;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001303} XGL_EXTENT2D;
1304
1305typedef struct _XGL_EXTENT3D
1306{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001307 int32_t width;
1308 int32_t height;
1309 int32_t depth;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001310} XGL_EXTENT3D;
1311
1312typedef struct _XGL_VIEWPORT
1313{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001314 float originX;
1315 float originY;
1316 float width;
1317 float height;
1318 float minDepth;
1319 float maxDepth;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001320} XGL_VIEWPORT;
1321
1322typedef struct _XGL_RECT
1323{
1324 XGL_OFFSET2D offset;
1325 XGL_EXTENT2D extent;
1326} XGL_RECT;
1327
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001328typedef struct _XGL_CHANNEL_MAPPING
1329{
1330 XGL_CHANNEL_SWIZZLE r;
1331 XGL_CHANNEL_SWIZZLE g;
1332 XGL_CHANNEL_SWIZZLE b;
1333 XGL_CHANNEL_SWIZZLE a;
1334} XGL_CHANNEL_MAPPING;
1335
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001336typedef struct _XGL_PHYSICAL_GPU_PROPERTIES
1337{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001338 uint32_t apiVersion;
1339 uint32_t driverVersion;
1340 uint32_t vendorId;
1341 uint32_t deviceId;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001342 XGL_PHYSICAL_GPU_TYPE gpuType;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001343 char gpuName[XGL_MAX_PHYSICAL_GPU_NAME];
1344 uint32_t maxMemRefsPerSubmission;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001345 XGL_GPU_SIZE maxInlineMemoryUpdateSize;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001346 uint32_t maxBoundDescriptorSets;
1347 uint32_t maxThreadGroupSize;
1348 uint64_t timestampFrequency;
1349 bool32_t multiColorAttachmentClears;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001350 uint32_t maxDescriptorSets; // at least 2?
1351 uint32_t maxViewports; // at least 16?
1352 uint32_t maxColorAttachments; // at least 8?
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001353} XGL_PHYSICAL_GPU_PROPERTIES;
1354
1355typedef struct _XGL_PHYSICAL_GPU_PERFORMANCE
1356{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001357 float maxGpuClock;
1358 float aluPerClock;
1359 float texPerClock;
1360 float primsPerClock;
1361 float pixelsPerClock;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001362} XGL_PHYSICAL_GPU_PERFORMANCE;
1363
1364typedef struct _XGL_GPU_COMPATIBILITY_INFO
1365{
1366 XGL_FLAGS compatibilityFlags; // XGL_GPU_COMPATIBILITY_FLAGS
1367} XGL_GPU_COMPATIBILITY_INFO;
1368
1369typedef struct _XGL_APPLICATION_INFO
1370{
1371 XGL_STRUCTURE_TYPE sType; // Type of structure. Should be XGL_STRUCTURE_TYPE_APPLICATION_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001372 const void* pNext; // Next structure in chain
1373 const char* pAppName;
1374 uint32_t appVersion;
1375 const char* pEngineName;
1376 uint32_t engineVersion;
1377 uint32_t apiVersion;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001378} XGL_APPLICATION_INFO;
1379
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001380typedef void* (XGLAPI *XGL_ALLOC_FUNCTION)(
1381 void* pUserData,
1382 size_t size,
1383 size_t alignment,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001384 XGL_SYSTEM_ALLOC_TYPE allocType);
1385
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001386typedef void (XGLAPI *XGL_FREE_FUNCTION)(
1387 void* pUserData,
1388 void* pMem);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001389
1390typedef struct _XGL_ALLOC_CALLBACKS
1391{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001392 void* pUserData;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001393 XGL_ALLOC_FUNCTION pfnAlloc;
1394 XGL_FREE_FUNCTION pfnFree;
1395} XGL_ALLOC_CALLBACKS;
1396
1397typedef struct _XGL_DEVICE_QUEUE_CREATE_INFO
1398{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001399 uint32_t queueNodeIndex;
1400 uint32_t queueCount;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001401} XGL_DEVICE_QUEUE_CREATE_INFO;
1402
1403typedef struct _XGL_DEVICE_CREATE_INFO
1404{
1405 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_DEVICE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001406 const void* pNext; // Pointer to next structure
1407 uint32_t queueRecordCount;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001408 const XGL_DEVICE_QUEUE_CREATE_INFO* pRequestedQueues;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001409 uint32_t extensionCount;
1410 const char*const* ppEnabledExtensionNames;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001411 XGL_VALIDATION_LEVEL maxValidationLevel;
1412 XGL_FLAGS flags; // XGL_DEVICE_CREATE_FLAGS
1413} XGL_DEVICE_CREATE_INFO;
1414
Jon Ashburn6b4d70c2014-10-22 18:13:16 -06001415typedef struct _XGL_LAYER_CREATE_INFO
1416{
1417 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_LAYER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001418 const void* pNext; // Pointer to next structure
1419 uint32_t layerCount;
1420 const char *const* ppActiveLayerNames; // layer name from the layer's xglEnumerateLayers())
Jon Ashburn6b4d70c2014-10-22 18:13:16 -06001421} XGL_LAYER_CREATE_INFO;
1422
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001423typedef struct _XGL_PHYSICAL_GPU_QUEUE_PROPERTIES
1424{
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001425 XGL_FLAGS queueFlags; // XGL_QUEUE_FLAGS
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001426 uint32_t queueCount;
1427 uint32_t maxAtomicCounters;
1428 bool32_t supportsTimestamps;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001429} XGL_PHYSICAL_GPU_QUEUE_PROPERTIES;
1430
1431typedef struct _XGL_PHYSICAL_GPU_MEMORY_PROPERTIES
1432{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001433 bool32_t supportsMigration;
1434 bool32_t supportsPinning;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001435} XGL_PHYSICAL_GPU_MEMORY_PROPERTIES;
1436
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001437typedef struct _XGL_MEMORY_ALLOC_INFO
1438{
1439 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_ALLOC_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001440 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001441 XGL_GPU_SIZE allocationSize; // Size of memory allocation
Jon Ashburne4792432015-01-20 13:55:32 -07001442 XGL_FLAGS memProps; // XGL_MEMORY_PROPERTY_FLAGS
Jon Ashburne01ff7a2015-01-20 15:06:59 -07001443 XGL_MEMORY_TYPE memType;
Jon Ashburn205b4222015-01-20 16:59:42 -07001444 XGL_MEMORY_PRIORITY memPriority;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001445} XGL_MEMORY_ALLOC_INFO;
1446
Jon Ashburn8a5da752015-01-19 15:00:26 -07001447// This structure is included in the XGL_MEMORY_ALLOC_INFO chain
1448// for memory regions allocated for buffer usage.
1449typedef struct _XGL_MEMORY_ALLOC_BUFFER_INFO
1450{
1451 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_ALLOC_BUFFER_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001452 const void* pNext; // Pointer to next structure
Jon Ashburn8a5da752015-01-19 15:00:26 -07001453 XGL_FLAGS usage; // XGL_BUFFER_USAGE_FLAGS
1454} XGL_MEMORY_ALLOC_BUFFER_INFO;
1455
1456// This structure is included in the XGL_MEMORY_ALLOC_INFO chain
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06001457// for memory regions allocated for image usage.
Jon Ashburn8a5da752015-01-19 15:00:26 -07001458typedef struct _XGL_MEMORY_ALLOC_IMAGE_INFO
1459{
1460 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_ALLOC_IMAGE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001461 const void* pNext; // Pointer to next structure
Jon Ashburn8a5da752015-01-19 15:00:26 -07001462 XGL_FLAGS usage; // XGL_IMAGE_USAGE_FLAGS
1463 XGL_IMAGE_FORMAT_CLASS formatClass;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001464 uint32_t samples;
Jon Ashburn8a5da752015-01-19 15:00:26 -07001465} XGL_MEMORY_ALLOC_IMAGE_INFO;
1466
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001467typedef struct _XGL_MEMORY_OPEN_INFO
1468{
1469 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_OPEN_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001470 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001471 XGL_GPU_MEMORY sharedMem;
1472} XGL_MEMORY_OPEN_INFO;
1473
1474typedef struct _XGL_PEER_MEMORY_OPEN_INFO
1475{
1476 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PEER_MEMORY_OPEN_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001477 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001478 XGL_GPU_MEMORY originalMem;
1479} XGL_PEER_MEMORY_OPEN_INFO;
1480
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001481typedef struct _XGL_MEMORY_REQUIREMENTS
1482{
1483 XGL_GPU_SIZE size; // Specified in bytes
1484 XGL_GPU_SIZE alignment; // Specified in bytes
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001485 XGL_GPU_SIZE granularity; // Granularity on which xglBindObjectMemoryRange can bind sub-ranges of memory specified in bytes (usually the page size)
Jon Ashburne4792432015-01-20 13:55:32 -07001486 XGL_FLAGS memProps; // XGL_MEMORY_PROPERTY_FLAGS
Jon Ashburne01ff7a2015-01-20 15:06:59 -07001487 XGL_MEMORY_TYPE memType;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001488} XGL_MEMORY_REQUIREMENTS;
1489
Jon Ashburn8a5da752015-01-19 15:00:26 -07001490typedef struct _XGL_BUFFER_MEMORY_REQUIREMENTS
1491{
1492 XGL_FLAGS usage; // XGL_BUFFER_USAGE_FLAGS
1493} XGL_BUFFER_MEMORY_REQUIREMENTS;
1494
1495typedef struct _XGL_IMAGE_MEMORY_REQUIREMENTS
1496{
1497 XGL_FLAGS usage; // XGL_IMAGE_USAGE_FLAGS
1498 XGL_IMAGE_FORMAT_CLASS formatClass;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001499 uint32_t samples;
Jon Ashburn8a5da752015-01-19 15:00:26 -07001500} XGL_IMAGE_MEMORY_REQUIREMENTS;
1501
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001502typedef struct _XGL_FORMAT_PROPERTIES
1503{
1504 XGL_FLAGS linearTilingFeatures; // XGL_FORMAT_FEATURE_FLAGS
1505 XGL_FLAGS optimalTilingFeatures; // XGL_FORMAT_FEATURE_FLAGS
1506} XGL_FORMAT_PROPERTIES;
1507
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001508typedef struct _XGL_BUFFER_VIEW_ATTACH_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001509{
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001510 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_BUFFER_VIEW_ATTACH_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001511 const void* pNext; // Pointer to next structure
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001512 XGL_BUFFER_VIEW view;
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001513} XGL_BUFFER_VIEW_ATTACH_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001514
1515typedef struct _XGL_IMAGE_VIEW_ATTACH_INFO
1516{
1517 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_VIEW_ATTACH_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001518 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001519 XGL_IMAGE_VIEW view;
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001520 XGL_IMAGE_LAYOUT layout;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001521} XGL_IMAGE_VIEW_ATTACH_INFO;
1522
Chia-I Wu11078b02015-01-04 16:27:24 +08001523typedef struct _XGL_UPDATE_SAMPLERS
1524{
Piers Daniella7910a02015-02-06 16:41:39 -07001525 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_UPDATE_SAMPLERS
1526 const void* pNext; // Pointer to next structure
Chia-I Wu41126e52015-03-26 15:27:55 +08001527 uint32_t binding; // Binding of the sampler (array)
1528 uint32_t arrayIndex; // First element of the array to update or zero otherwise
1529 uint32_t count; // Number of elements to update
Chia-I Wu11078b02015-01-04 16:27:24 +08001530 const XGL_SAMPLER* pSamplers;
1531} XGL_UPDATE_SAMPLERS;
1532
1533typedef struct _XGL_SAMPLER_IMAGE_VIEW_INFO
1534{
Chia-I Wu41126e52015-03-26 15:27:55 +08001535 XGL_SAMPLER sampler;
Chia-I Wu11078b02015-01-04 16:27:24 +08001536 const XGL_IMAGE_VIEW_ATTACH_INFO* pImageView;
1537} XGL_SAMPLER_IMAGE_VIEW_INFO;
1538
1539typedef struct _XGL_UPDATE_SAMPLER_TEXTURES
1540{
Chia-I Wu41126e52015-03-26 15:27:55 +08001541 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_UPDATE_SAMPLER_TEXTURES
1542 const void* pNext; // Pointer to next structure
1543 uint32_t binding; // Binding of the combined texture sampler (array)
1544 uint32_t arrayIndex; // First element of the array to update or zero otherwise
1545 uint32_t count; // Number of elements to update
1546 const XGL_SAMPLER_IMAGE_VIEW_INFO* pSamplerImageViews;
Chia-I Wu11078b02015-01-04 16:27:24 +08001547} XGL_UPDATE_SAMPLER_TEXTURES;
1548
1549typedef struct _XGL_UPDATE_IMAGES
1550{
Piers Daniella7910a02015-02-06 16:41:39 -07001551 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_UPDATE_IMAGES
1552 const void* pNext; // Pointer to next structure
Chia-I Wu11078b02015-01-04 16:27:24 +08001553 XGL_DESCRIPTOR_TYPE descriptorType;
Chia-I Wu41126e52015-03-26 15:27:55 +08001554 uint32_t binding; // Binding of the image (array)
1555 uint32_t arrayIndex; // First element of the array to update or zero otherwise
1556 uint32_t count; // Number of elements to update
1557 const XGL_IMAGE_VIEW_ATTACH_INFO* pImageViews;
Chia-I Wu11078b02015-01-04 16:27:24 +08001558} XGL_UPDATE_IMAGES;
1559
1560typedef struct _XGL_UPDATE_BUFFERS
1561{
Piers Daniella7910a02015-02-06 16:41:39 -07001562 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_UPDATE_BUFFERS
1563 const void* pNext; // Pointer to next structure
Chia-I Wu11078b02015-01-04 16:27:24 +08001564 XGL_DESCRIPTOR_TYPE descriptorType;
Chia-I Wu41126e52015-03-26 15:27:55 +08001565 uint32_t binding; // Binding of the buffer (array)
1566 uint32_t arrayIndex; // First element of the array to update or zero otherwise
1567 uint32_t count; // Number of elements to update
1568 const XGL_BUFFER_VIEW_ATTACH_INFO* pBufferViews;
Chia-I Wu11078b02015-01-04 16:27:24 +08001569} XGL_UPDATE_BUFFERS;
1570
1571typedef struct _XGL_UPDATE_AS_COPY
1572{
Piers Daniella7910a02015-02-06 16:41:39 -07001573 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_UPDATE_AS_COPY
1574 const void* pNext; // Pointer to next structure
Chia-I Wu11078b02015-01-04 16:27:24 +08001575 XGL_DESCRIPTOR_TYPE descriptorType;
1576 XGL_DESCRIPTOR_SET descriptorSet;
Chia-I Wu41126e52015-03-26 15:27:55 +08001577 uint32_t binding;
1578 uint32_t arrayElement;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001579 uint32_t count;
Chia-I Wu11078b02015-01-04 16:27:24 +08001580} XGL_UPDATE_AS_COPY;
1581
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001582typedef struct _XGL_BUFFER_CREATE_INFO
1583{
1584 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_BUFFER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001585 const void* pNext; // Pointer to next structure.
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001586 XGL_GPU_SIZE size; // Specified in bytes
1587 XGL_FLAGS usage; // XGL_BUFFER_USAGE_FLAGS
1588 XGL_FLAGS flags; // XGL_BUFFER_CREATE_FLAGS
1589} XGL_BUFFER_CREATE_INFO;
1590
1591typedef struct _XGL_BUFFER_VIEW_CREATE_INFO
1592{
1593 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001594 const void* pNext; // Pointer to next structure.
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001595 XGL_BUFFER buffer;
1596 XGL_BUFFER_VIEW_TYPE viewType;
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001597 XGL_FORMAT format; // Optionally specifies format of elements
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001598 XGL_GPU_SIZE offset; // Specified in bytes
1599 XGL_GPU_SIZE range; // View size specified in bytes
1600} XGL_BUFFER_VIEW_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001601
1602typedef struct _XGL_IMAGE_SUBRESOURCE
1603{
1604 XGL_IMAGE_ASPECT aspect;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001605 uint32_t mipLevel;
1606 uint32_t arraySlice;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001607} XGL_IMAGE_SUBRESOURCE;
1608
1609typedef struct _XGL_IMAGE_SUBRESOURCE_RANGE
1610{
1611 XGL_IMAGE_ASPECT aspect;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001612 uint32_t baseMipLevel;
1613 uint32_t mipLevels;
1614 uint32_t baseArraySlice;
1615 uint32_t arraySize;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001616} XGL_IMAGE_SUBRESOURCE_RANGE;
1617
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001618typedef struct _XGL_EVENT_WAIT_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001619{
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001620 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_EVENT_WAIT_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001621 const void* pNext; // Pointer to next structure.
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001622
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001623 uint32_t eventCount; // Number of events to wait on
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001624 const XGL_EVENT* pEvents; // Array of event objects to wait on
1625
1626 XGL_WAIT_EVENT waitEvent; // Pipeline event where the wait should happen
1627
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001628 uint32_t memBarrierCount; // Number of memory barriers
Mark Lobodzinskid5d83ed2015-02-02 11:55:52 -06001629 const void** ppMemBarriers; // Array of pointers to memory barriers (any of them can be either XGL_MEMORY_BARRIER, XGL_BUFFER_MEMORY_BARRIER, or XGL_IMAGE_MEMORY_BARRIER)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001630} XGL_EVENT_WAIT_INFO;
1631
1632typedef struct _XGL_PIPELINE_BARRIER
1633{
1634 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_BARRIER
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001635 const void* pNext; // Pointer to next structure.
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001636
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001637 uint32_t eventCount; // Number of events to wait on
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -06001638 const XGL_PIPE_EVENT* pEvents; // Array of pipeline events to wait on
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001639
1640 XGL_WAIT_EVENT waitEvent; // Pipeline event where the wait should happen
1641
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001642 uint32_t memBarrierCount; // Number of memory barriers
Mark Lobodzinskid5d83ed2015-02-02 11:55:52 -06001643 const void** ppMemBarriers; // Array of pointers to memory barriers (any of them can be either XGL_MEMORY_BARRIER, XGL_BUFFER_MEMORY_BARRIER, or XGL_IMAGE_MEMORY_BARRIER)
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001644} XGL_PIPELINE_BARRIER;
1645
1646typedef struct _XGL_MEMORY_BARRIER
1647{
1648 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_MEMORY_BARRIER
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001649 const void* pNext; // Pointer to next structure.
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001650
1651 XGL_FLAGS outputMask; // Outputs the barrier should sync (see XGL_MEMORY_OUTPUT_FLAGS)
1652 XGL_FLAGS inputMask; // Inputs the barrier should sync to (see XGL_MEMORY_INPUT_FLAGS)
1653} XGL_MEMORY_BARRIER;
1654
1655typedef struct _XGL_BUFFER_MEMORY_BARRIER
1656{
1657 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001658 const void* pNext; // Pointer to next structure.
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001659
1660 XGL_FLAGS outputMask; // Outputs the barrier should sync (see XGL_MEMORY_OUTPUT_FLAGS)
1661 XGL_FLAGS inputMask; // Inputs the barrier should sync to (see XGL_MEMORY_INPUT_FLAGS)
1662
1663 XGL_BUFFER buffer; // Buffer to sync
1664
1665 XGL_GPU_SIZE offset; // Offset within the buffer to sync
1666 XGL_GPU_SIZE size; // Amount of bytes to sync
1667} XGL_BUFFER_MEMORY_BARRIER;
1668
1669typedef struct _XGL_IMAGE_MEMORY_BARRIER
1670{
1671 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001672 const void* pNext; // Pointer to next structure.
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001673
1674 XGL_FLAGS outputMask; // Outputs the barrier should sync (see XGL_MEMORY_OUTPUT_FLAGS)
1675 XGL_FLAGS inputMask; // Inputs the barrier should sync to (see XGL_MEMORY_INPUT_FLAGS)
1676
1677 XGL_IMAGE_LAYOUT oldLayout; // Current layout of the image
1678 XGL_IMAGE_LAYOUT newLayout; // New layout to transition the image to
1679
1680 XGL_IMAGE image; // Image to sync
1681
1682 XGL_IMAGE_SUBRESOURCE_RANGE subresourceRange; // Subresource range to sync
1683} XGL_IMAGE_MEMORY_BARRIER;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001684
1685typedef struct _XGL_IMAGE_CREATE_INFO
1686{
1687 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001688 const void* pNext; // Pointer to next structure.
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001689 XGL_IMAGE_TYPE imageType;
1690 XGL_FORMAT format;
1691 XGL_EXTENT3D extent;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001692 uint32_t mipLevels;
1693 uint32_t arraySize;
1694 uint32_t samples;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001695 XGL_IMAGE_TILING tiling;
1696 XGL_FLAGS usage; // XGL_IMAGE_USAGE_FLAGS
1697 XGL_FLAGS flags; // XGL_IMAGE_CREATE_FLAGS
1698} XGL_IMAGE_CREATE_INFO;
1699
1700typedef struct _XGL_PEER_IMAGE_OPEN_INFO
1701{
1702 XGL_IMAGE originalImage;
1703} XGL_PEER_IMAGE_OPEN_INFO;
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06001704
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001705typedef struct _XGL_SUBRESOURCE_LAYOUT
1706{
1707 XGL_GPU_SIZE offset; // Specified in bytes
1708 XGL_GPU_SIZE size; // Specified in bytes
1709 XGL_GPU_SIZE rowPitch; // Specified in bytes
1710 XGL_GPU_SIZE depthPitch; // Specified in bytes
1711} XGL_SUBRESOURCE_LAYOUT;
1712
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001713typedef struct _XGL_IMAGE_VIEW_CREATE_INFO
1714{
1715 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001716 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001717 XGL_IMAGE image;
1718 XGL_IMAGE_VIEW_TYPE viewType;
1719 XGL_FORMAT format;
1720 XGL_CHANNEL_MAPPING channels;
1721 XGL_IMAGE_SUBRESOURCE_RANGE subresourceRange;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001722 float minLod;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001723} XGL_IMAGE_VIEW_CREATE_INFO;
1724
1725typedef struct _XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO
1726{
1727 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_COLOR_ATTACHMENT_VIEW_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001728 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001729 XGL_IMAGE image;
1730 XGL_FORMAT format;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001731 uint32_t mipLevel;
1732 uint32_t baseArraySlice;
1733 uint32_t arraySize;
Jon Ashburnfa420992014-12-24 12:09:06 -07001734 XGL_IMAGE msaaResolveImage;
1735 XGL_IMAGE_SUBRESOURCE_RANGE msaaResolveSubResource;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001736} XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO;
1737
1738typedef struct _XGL_DEPTH_STENCIL_VIEW_CREATE_INFO
1739{
1740 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DEPTH_STENCIL_VIEW_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001741 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001742 XGL_IMAGE image;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001743 uint32_t mipLevel;
1744 uint32_t baseArraySlice;
1745 uint32_t arraySize;
Jon Ashburnfa420992014-12-24 12:09:06 -07001746 XGL_IMAGE msaaResolveImage;
1747 XGL_IMAGE_SUBRESOURCE_RANGE msaaResolveSubResource;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001748 XGL_FLAGS flags; // XGL_DEPTH_STENCIL_VIEW_CREATE_FLAGS
1749} XGL_DEPTH_STENCIL_VIEW_CREATE_INFO;
1750
1751typedef struct _XGL_COLOR_ATTACHMENT_BIND_INFO
1752{
1753 XGL_COLOR_ATTACHMENT_VIEW view;
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001754 XGL_IMAGE_LAYOUT layout;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001755} XGL_COLOR_ATTACHMENT_BIND_INFO;
1756
1757typedef struct _XGL_DEPTH_STENCIL_BIND_INFO
1758{
1759 XGL_DEPTH_STENCIL_VIEW view;
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00001760 XGL_IMAGE_LAYOUT layout;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001761} XGL_DEPTH_STENCIL_BIND_INFO;
1762
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001763typedef struct _XGL_BUFFER_COPY
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001764{
1765 XGL_GPU_SIZE srcOffset; // Specified in bytes
1766 XGL_GPU_SIZE destOffset; // Specified in bytes
1767 XGL_GPU_SIZE copySize; // Specified in bytes
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001768} XGL_BUFFER_COPY;
1769
1770typedef struct _XGL_IMAGE_MEMORY_BIND_INFO
1771{
1772 XGL_IMAGE_SUBRESOURCE subresource;
1773 XGL_OFFSET3D offset;
1774 XGL_EXTENT3D extent;
1775} XGL_IMAGE_MEMORY_BIND_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001776
1777typedef struct _XGL_IMAGE_COPY
1778{
1779 XGL_IMAGE_SUBRESOURCE srcSubresource;
1780 XGL_OFFSET3D srcOffset;
1781 XGL_IMAGE_SUBRESOURCE destSubresource;
1782 XGL_OFFSET3D destOffset;
1783 XGL_EXTENT3D extent;
1784} XGL_IMAGE_COPY;
1785
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06001786typedef struct _XGL_IMAGE_BLIT
1787{
1788 XGL_IMAGE_SUBRESOURCE srcSubresource;
1789 XGL_OFFSET3D srcOffset;
1790 XGL_EXTENT3D srcExtent;
1791 XGL_IMAGE_SUBRESOURCE destSubresource;
1792 XGL_OFFSET3D destOffset;
1793 XGL_EXTENT3D destExtent;
1794} XGL_IMAGE_BLIT;
1795
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001796typedef struct _XGL_BUFFER_IMAGE_COPY
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001797{
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001798 XGL_GPU_SIZE bufferOffset; // Specified in bytes
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001799 XGL_IMAGE_SUBRESOURCE imageSubresource;
1800 XGL_OFFSET3D imageOffset;
1801 XGL_EXTENT3D imageExtent;
Chia-I Wu1a28fe02015-01-01 07:55:04 +08001802} XGL_BUFFER_IMAGE_COPY;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001803
1804typedef struct _XGL_IMAGE_RESOLVE
1805{
1806 XGL_IMAGE_SUBRESOURCE srcSubresource;
1807 XGL_OFFSET2D srcOffset;
1808 XGL_IMAGE_SUBRESOURCE destSubresource;
1809 XGL_OFFSET2D destOffset;
1810 XGL_EXTENT2D extent;
1811} XGL_IMAGE_RESOLVE;
1812
1813typedef struct _XGL_SHADER_CREATE_INFO
1814{
1815 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SHADER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001816 const void* pNext; // Pointer to next structure
1817 size_t codeSize; // Specified in bytes
1818 const void* pCode;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001819 XGL_FLAGS flags; // Reserved
1820} XGL_SHADER_CREATE_INFO;
1821
Chia-I Wub41393e2015-03-26 15:04:41 +08001822typedef struct _XGL_DESCRIPTOR_SET_LAYOUT_BINDING
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001823{
Chia-I Wu11078b02015-01-04 16:27:24 +08001824 XGL_DESCRIPTOR_TYPE descriptorType;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001825 uint32_t count;
Chia-I Wu11078b02015-01-04 16:27:24 +08001826 XGL_FLAGS stageFlags; // XGL_SHADER_STAGE_FLAGS
1827 XGL_SAMPLER immutableSampler;
Chia-I Wub41393e2015-03-26 15:04:41 +08001828} XGL_DESCRIPTOR_SET_LAYOUT_BINDING;
1829
1830typedef struct _XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1831{
1832 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
1833 const void* pNext; // Pointer to next structure
1834 uint32_t count; // Number of bindings in the descriptor set layout
1835 const XGL_DESCRIPTOR_SET_LAYOUT_BINDING* pBinding; // Array of descriptor set layout bindings
Chia-I Wu11078b02015-01-04 16:27:24 +08001836} XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001837
Chia-I Wu11078b02015-01-04 16:27:24 +08001838typedef struct _XGL_DESCRIPTOR_TYPE_COUNT
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001839{
Chia-I Wu11078b02015-01-04 16:27:24 +08001840 XGL_DESCRIPTOR_TYPE type;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001841 uint32_t count;
Chia-I Wu11078b02015-01-04 16:27:24 +08001842} XGL_DESCRIPTOR_TYPE_COUNT;
1843
Chia-I Wu985ba162015-03-26 13:14:16 +08001844typedef struct _XGL_DESCRIPTOR_POOL_CREATE_INFO
Chia-I Wu11078b02015-01-04 16:27:24 +08001845{
Chia-I Wu985ba162015-03-26 13:14:16 +08001846 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
Piers Daniella7910a02015-02-06 16:41:39 -07001847 const void* pNext; // Pointer to next structure
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001848 uint32_t count;
Chia-I Wu11078b02015-01-04 16:27:24 +08001849 const XGL_DESCRIPTOR_TYPE_COUNT* pTypeCount;
Chia-I Wu985ba162015-03-26 13:14:16 +08001850} XGL_DESCRIPTOR_POOL_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001851
1852typedef struct _XGL_LINK_CONST_BUFFER
1853{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001854 uint32_t bufferId;
1855 size_t bufferSize;
1856 const void* pBufferData;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001857} XGL_LINK_CONST_BUFFER;
1858
Courtney Goeltzenleuchter60f82042015-03-04 11:26:38 -07001859typedef struct _XGL_SPECIALIZATION_MAP_ENTRY
1860{
1861 uint32_t constantId; // The SpecConstant ID specified in the BIL
1862 uint32_t offset; // Offset of the value in the data block
1863} XGL_SPECIALIZATION_MAP_ENTRY;
1864
1865typedef struct _XGL_SPECIALIZATION_INFO
1866{
1867 uint32_t mapEntryCount;
1868 const XGL_SPECIALIZATION_MAP_ENTRY* pMap; // mapEntryCount entries
1869 const void* pData;
1870} XGL_SPECIALIZATION_INFO;
1871
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001872typedef struct _XGL_PIPELINE_SHADER
1873{
1874 XGL_PIPELINE_SHADER_STAGE stage;
1875 XGL_SHADER shader;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001876 uint32_t linkConstBufferCount;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001877 const XGL_LINK_CONST_BUFFER* pLinkConstBufferInfo;
Courtney Goeltzenleuchter60f82042015-03-04 11:26:38 -07001878 const XGL_SPECIALIZATION_INFO* pSpecializationInfo;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001879} XGL_PIPELINE_SHADER;
1880
1881typedef struct _XGL_COMPUTE_PIPELINE_CREATE_INFO
1882{
1883 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001884 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001885 XGL_PIPELINE_SHADER cs;
1886 XGL_FLAGS flags; // XGL_PIPELINE_CREATE_FLAGS
Chia-I Wu41126e52015-03-26 15:27:55 +08001887 XGL_DESCRIPTOR_SET_LAYOUT_CHAIN setLayoutChain;
1888 // For local size fields zero is treated an invalid value
1889 uint32_t localSizeX;
1890 uint32_t localSizeY;
1891 uint32_t localSizeZ;
1892
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001893} XGL_COMPUTE_PIPELINE_CREATE_INFO;
1894
Chia-I Wub42e9992014-10-06 15:07:25 +08001895typedef struct _XGL_VERTEX_INPUT_BINDING_DESCRIPTION
1896{
Courtney Goeltzenleuchter0d625272015-03-31 16:36:30 -06001897 uint32_t binding; // Vertex buffer binding id
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001898 uint32_t strideInBytes; // Distance between vertices in bytes (0 = no advancement)
Chia-I Wub42e9992014-10-06 15:07:25 +08001899
1900 XGL_VERTEX_INPUT_STEP_RATE stepRate; // Rate at which binding is incremented
1901} XGL_VERTEX_INPUT_BINDING_DESCRIPTION;
1902
1903typedef struct _XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION
1904{
Courtney Goeltzenleuchter0d625272015-03-31 16:36:30 -06001905 uint32_t location; // location of the shader vertex attrib
1906 uint32_t binding; // Vertex buffer binding id
Chia-I Wub42e9992014-10-06 15:07:25 +08001907
Chia-I Wu424033f2015-01-18 14:51:02 +08001908 XGL_FORMAT format; // format of source data
Chia-I Wub42e9992014-10-06 15:07:25 +08001909
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001910 uint32_t offsetInBytes; // Offset of first element in bytes from base of vertex
Chia-I Wub42e9992014-10-06 15:07:25 +08001911} XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION;
1912
1913typedef struct _XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO
1914{
Chia-I Wub0a2cc92015-01-28 14:00:47 +08001915 XGL_STRUCTURE_TYPE sType; // Should be XGL_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001916 const void* pNext; // Pointer to next structure
Chia-I Wub42e9992014-10-06 15:07:25 +08001917
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001918 uint32_t bindingCount; // number of bindings
Chia-I Wub0a2cc92015-01-28 14:00:47 +08001919 const XGL_VERTEX_INPUT_BINDING_DESCRIPTION* pVertexBindingDescriptions;
Chia-I Wub42e9992014-10-06 15:07:25 +08001920
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001921 uint32_t attributeCount; // number of attributes
Chia-I Wub0a2cc92015-01-28 14:00:47 +08001922 const XGL_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION* pVertexAttributeDescriptions;
Chia-I Wub42e9992014-10-06 15:07:25 +08001923} XGL_PIPELINE_VERTEX_INPUT_CREATE_INFO;
Chia-I Wub42e9992014-10-06 15:07:25 +08001924
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001925typedef struct _XGL_PIPELINE_IA_STATE_CREATE_INFO
1926{
1927 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_IA_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001928 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001929 XGL_PRIMITIVE_TOPOLOGY topology;
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06001930 bool32_t disableVertexReuse; // optional
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001931 bool32_t primitiveRestartEnable;
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06001932 uint32_t primitiveRestartIndex; // optional (GL45)
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001933} XGL_PIPELINE_IA_STATE_CREATE_INFO;
1934
1935typedef struct _XGL_PIPELINE_TESS_STATE_CREATE_INFO
1936{
1937 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_TESS_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001938 const void* pNext; // Pointer to next structure
1939 uint32_t patchControlPoints;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001940} XGL_PIPELINE_TESS_STATE_CREATE_INFO;
1941
Tony Barbourf52346d2015-01-16 14:27:35 -07001942typedef struct _XGL_PIPELINE_VP_STATE_CREATE_INFO
1943{
1944 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_VP_STATE_CREATE_INFO
1945 const void* pNext; // Pointer to next structure
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001946 uint32_t numViewports;
Tony Barbourf52346d2015-01-16 14:27:35 -07001947 XGL_COORDINATE_ORIGIN clipOrigin; // optional (GL45)
1948 XGL_DEPTH_MODE depthMode; // optional (GL45)
1949} XGL_PIPELINE_VP_STATE_CREATE_INFO;
1950
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001951typedef struct _XGL_PIPELINE_RS_STATE_CREATE_INFO
1952{
1953 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_RS_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001954 const void* pNext; // Pointer to next structure
1955 bool32_t depthClipEnable;
1956 bool32_t rasterizerDiscardEnable;
1957 bool32_t programPointSize; // optional (GL45)
Tony Barbourf52346d2015-01-16 14:27:35 -07001958 XGL_COORDINATE_ORIGIN pointOrigin; // optional (GL45)
1959 XGL_PROVOKING_VERTEX_CONVENTION provokingVertex; // optional (GL45)
1960 XGL_FILL_MODE fillMode; // optional (GL45)
1961 XGL_CULL_MODE cullMode;
1962 XGL_FACE_ORIENTATION frontFace;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001963} XGL_PIPELINE_RS_STATE_CREATE_INFO;
1964
Tony Barbourf52346d2015-01-16 14:27:35 -07001965typedef struct _XGL_PIPELINE_MS_STATE_CREATE_INFO
1966{
1967 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_MS_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001968 const void* pNext; // Pointer to next structure
1969 uint32_t samples;
1970 bool32_t multisampleEnable; // optional (GL45)
1971 bool32_t sampleShadingEnable; // optional (GL45)
1972 float minSampleShading; // optional (GL45)
Tony Barbourf52346d2015-01-16 14:27:35 -07001973 XGL_SAMPLE_MASK sampleMask;
1974} XGL_PIPELINE_MS_STATE_CREATE_INFO;
1975
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001976typedef struct _XGL_PIPELINE_CB_ATTACHMENT_STATE
1977{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001978 bool32_t blendEnable;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001979 XGL_FORMAT format;
Tony Barbourf52346d2015-01-16 14:27:35 -07001980 XGL_BLEND srcBlendColor;
1981 XGL_BLEND destBlendColor;
1982 XGL_BLEND_FUNC blendFuncColor;
1983 XGL_BLEND srcBlendAlpha;
1984 XGL_BLEND destBlendAlpha;
1985 XGL_BLEND_FUNC blendFuncAlpha;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001986 uint8_t channelWriteMask;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001987} XGL_PIPELINE_CB_ATTACHMENT_STATE;
1988
1989typedef struct _XGL_PIPELINE_CB_STATE_CREATE_INFO
1990{
1991 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_CB_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001992 const void* pNext; // Pointer to next structure
1993 bool32_t alphaToCoverageEnable;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001994 bool32_t logicOpEnable;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001995 XGL_LOGIC_OP logicOp;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06001996 uint32_t attachmentCount; // # of pAttachments
Chia-I Wub0a2cc92015-01-28 14:00:47 +08001997 const XGL_PIPELINE_CB_ATTACHMENT_STATE* pAttachments;
Tony Barbourf52346d2015-01-16 14:27:35 -07001998} XGL_PIPELINE_CB_STATE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06001999
Tony Barbourf52346d2015-01-16 14:27:35 -07002000typedef struct _XGL_STENCIL_OP_STATE
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002001{
Tony Barbourf52346d2015-01-16 14:27:35 -07002002 XGL_STENCIL_OP stencilFailOp;
2003 XGL_STENCIL_OP stencilPassOp;
2004 XGL_STENCIL_OP stencilDepthFailOp;
2005 XGL_COMPARE_FUNC stencilFunc;
2006} XGL_STENCIL_OP_STATE;
2007
2008typedef struct _XGL_PIPELINE_DS_STATE_CREATE_INFO
2009{
2010 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_DS_STATE_CREATE_INFO
2011 const void* pNext; // Pointer to next structure
2012 XGL_FORMAT format;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002013 bool32_t depthTestEnable;
2014 bool32_t depthWriteEnable;
Tony Barbourf52346d2015-01-16 14:27:35 -07002015 XGL_COMPARE_FUNC depthFunc;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002016 bool32_t depthBoundsEnable; // optional (depth_bounds_test)
2017 bool32_t stencilTestEnable;
Tony Barbourf52346d2015-01-16 14:27:35 -07002018 XGL_STENCIL_OP_STATE front;
2019 XGL_STENCIL_OP_STATE back;
2020} XGL_PIPELINE_DS_STATE_CREATE_INFO;
2021
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002022typedef struct _XGL_PIPELINE_SHADER_STAGE_CREATE_INFO
2023{
2024 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002025 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002026 XGL_PIPELINE_SHADER shader;
2027} XGL_PIPELINE_SHADER_STAGE_CREATE_INFO;
2028
2029typedef struct _XGL_GRAPHICS_PIPELINE_CREATE_INFO
2030{
2031 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002032 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002033 XGL_FLAGS flags; // XGL_PIPELINE_CREATE_FLAGS
Chia-I Wu41126e52015-03-26 15:27:55 +08002034 XGL_DESCRIPTOR_SET_LAYOUT_CHAIN pSetLayoutChain;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002035} XGL_GRAPHICS_PIPELINE_CREATE_INFO;
2036
2037typedef struct _XGL_SAMPLER_CREATE_INFO
2038{
2039 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002040 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002041 XGL_TEX_FILTER magFilter; // Filter mode for magnification
2042 XGL_TEX_FILTER minFilter; // Filter mode for minifiation
2043 XGL_TEX_MIPMAP_MODE mipMode; // Mipmap selection mode
2044 XGL_TEX_ADDRESS addressU;
2045 XGL_TEX_ADDRESS addressV;
2046 XGL_TEX_ADDRESS addressW;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002047 float mipLodBias;
2048 uint32_t maxAnisotropy;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002049 XGL_COMPARE_FUNC compareFunc;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002050 float minLod;
2051 float maxLod;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002052 XGL_BORDER_COLOR_TYPE borderColorType;
2053} XGL_SAMPLER_CREATE_INFO;
2054
Tony Barbourf52346d2015-01-16 14:27:35 -07002055typedef struct _XGL_DYNAMIC_VP_STATE_CREATE_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002056{
Tony Barbourf52346d2015-01-16 14:27:35 -07002057 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DYNAMIC_VP_STATE_CREATE_INFO
2058 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchterbbe3cc52015-02-11 14:13:34 -07002059 uint32_t viewportAndScissorCount; // number of entries in pViewports and pScissors
Chia-I Wub0a2cc92015-01-28 14:00:47 +08002060 const XGL_VIEWPORT* pViewports;
Chia-I Wub0a2cc92015-01-28 14:00:47 +08002061 const XGL_RECT* pScissors;
Tony Barbourf52346d2015-01-16 14:27:35 -07002062} XGL_DYNAMIC_VP_STATE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002063
Tony Barbourf52346d2015-01-16 14:27:35 -07002064typedef struct _XGL_DYNAMIC_RS_STATE_CREATE_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002065{
Tony Barbourf52346d2015-01-16 14:27:35 -07002066 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DYNAMIC_RS_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002067 const void* pNext; // Pointer to next structure
2068 float depthBias;
2069 float depthBiasClamp;
2070 float slopeScaledDepthBias;
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002071 float pointSize; // optional (GL45) - Size of points
2072 float pointFadeThreshold; // optional (GL45) - Size of point fade threshold
2073 float lineWidth; // optional (GL45) - Width of lines
Tony Barbourf52346d2015-01-16 14:27:35 -07002074} XGL_DYNAMIC_RS_STATE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002075
Tony Barbourf52346d2015-01-16 14:27:35 -07002076typedef struct _XGL_DYNAMIC_CB_STATE_CREATE_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002077{
Tony Barbourf52346d2015-01-16 14:27:35 -07002078 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DYNAMIC_CB_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002079 const void* pNext; // Pointer to next structure
2080 float blendConst[4];
Tony Barbourf52346d2015-01-16 14:27:35 -07002081} XGL_DYNAMIC_CB_STATE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002082
Tony Barbourf52346d2015-01-16 14:27:35 -07002083typedef struct _XGL_DYNAMIC_DS_STATE_CREATE_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002084{
Tony Barbourf52346d2015-01-16 14:27:35 -07002085 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_DYNAMIC_DS_STATE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002086 const void* pNext; // Pointer to next structure
2087 float minDepth; // optional (depth_bounds_test)
2088 float maxDepth; // optional (depth_bounds_test)
2089 uint32_t stencilReadMask;
2090 uint32_t stencilWriteMask;
2091 uint32_t stencilFrontRef;
2092 uint32_t stencilBackRef;
Tony Barbourf52346d2015-01-16 14:27:35 -07002093} XGL_DYNAMIC_DS_STATE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002094
2095typedef struct _XGL_CMD_BUFFER_CREATE_INFO
2096{
2097 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002098 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter18248e62015-03-05 18:09:39 -07002099 uint32_t queueNodeIndex;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002100 XGL_FLAGS flags;
2101} XGL_CMD_BUFFER_CREATE_INFO;
2102
Jon Ashburnfa420992014-12-24 12:09:06 -07002103typedef struct _XGL_CMD_BUFFER_BEGIN_INFO
2104{
2105 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002106 const void* pNext; // Pointer to next structure
Jon Ashburnfa420992014-12-24 12:09:06 -07002107
2108 XGL_FLAGS flags; // XGL_CMD_BUFFER_BUILD_FLAGS
2109} XGL_CMD_BUFFER_BEGIN_INFO;
2110
Courtney Goeltzenleuchter69894b72015-04-03 15:25:24 -06002111typedef struct _XGL_RENDER_PASS_BEGIN
2112{
2113 XGL_RENDER_PASS renderPass;
2114 XGL_FRAMEBUFFER framebuffer;
2115} XGL_RENDER_PASS_BEGIN;
2116
Jon Ashburnfa420992014-12-24 12:09:06 -07002117typedef struct _XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO
2118{
2119 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_CMD_BUFFER_GRAPHICS_BEGIN_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002120 const void* pNext; // Pointer to next structure
Jon Ashburnfa420992014-12-24 12:09:06 -07002121
Courtney Goeltzenleuchter69894b72015-04-03 15:25:24 -06002122 XGL_RENDER_PASS_BEGIN renderPassContinue; // Only needed when a render pass is split across two command buffers
Jon Ashburnfa420992014-12-24 12:09:06 -07002123} XGL_CMD_BUFFER_GRAPHICS_BEGIN_INFO;
2124
2125// Union allowing specification of floating point or raw color data. Actual value selected is based on image being cleared.
2126typedef union _XGL_CLEAR_COLOR_VALUE
2127{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002128 float floatColor[4];
2129 uint32_t rawColor[4];
Jon Ashburnfa420992014-12-24 12:09:06 -07002130} XGL_CLEAR_COLOR_VALUE;
2131
2132typedef struct _XGL_CLEAR_COLOR
2133{
2134 XGL_CLEAR_COLOR_VALUE color;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002135 bool32_t useRawValue;
Jon Ashburnfa420992014-12-24 12:09:06 -07002136} XGL_CLEAR_COLOR;
2137
2138typedef struct _XGL_RENDER_PASS_CREATE_INFO
2139{
2140 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002141 const void* pNext; // Pointer to next structure
Jon Ashburnfa420992014-12-24 12:09:06 -07002142
2143 XGL_RECT renderArea;
Courtney Goeltzenleuchter3db6d9b2015-02-10 14:06:25 -07002144 uint32_t colorAttachmentCount;
Courtney Goeltzenleuchter69894b72015-04-03 15:25:24 -06002145 XGL_EXTENT2D extent;
2146 uint32_t sampleCount;
2147 uint32_t layers;
2148 const XGL_FORMAT* pColorFormats;
2149 const XGL_IMAGE_LAYOUT* pColorLayouts;
2150 const XGL_ATTACHMENT_LOAD_OP* pColorLoadOps;
2151 const XGL_ATTACHMENT_STORE_OP* pColorStoreOps;
2152 const XGL_CLEAR_COLOR* pColorLoadClearValues;
2153 XGL_FORMAT depthStencilFormat;
2154 XGL_IMAGE_LAYOUT depthStencilLayout;
Jon Ashburnfa420992014-12-24 12:09:06 -07002155 XGL_ATTACHMENT_LOAD_OP depthLoadOp;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002156 float depthLoadClearValue;
Jon Ashburnfa420992014-12-24 12:09:06 -07002157 XGL_ATTACHMENT_STORE_OP depthStoreOp;
2158 XGL_ATTACHMENT_LOAD_OP stencilLoadOp;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002159 uint32_t stencilLoadClearValue;
Jon Ashburnfa420992014-12-24 12:09:06 -07002160 XGL_ATTACHMENT_STORE_OP stencilStoreOp;
2161} XGL_RENDER_PASS_CREATE_INFO;
2162
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002163typedef struct _XGL_MEMORY_REF
2164{
2165 XGL_GPU_MEMORY mem;
2166 XGL_FLAGS flags; // XGL_MEMORY_REF_FLAGS
2167} XGL_MEMORY_REF;
2168
2169typedef struct _XGL_EVENT_CREATE_INFO
2170{
2171 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_EVENT_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002172 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002173 XGL_FLAGS flags; // Reserved
2174} XGL_EVENT_CREATE_INFO;
2175
2176typedef struct _XGL_FENCE_CREATE_INFO
2177{
2178 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_FENCE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002179 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002180 XGL_FLAGS flags; // Reserved
2181} XGL_FENCE_CREATE_INFO;
2182
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002183typedef struct _XGL_SEMAPHORE_CREATE_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002184{
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002185 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002186 const void* pNext; // Pointer to next structure
2187 uint32_t initialCount;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002188 XGL_FLAGS flags; // XGL_SEMAPHORE_CREATE_FLAGS
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002189} XGL_SEMAPHORE_CREATE_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002190
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002191typedef struct _XGL_SEMAPHORE_OPEN_INFO
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002192{
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002193 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_SEMAPHORE_OPEN_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002194 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002195 XGL_SEMAPHORE sharedSemaphore;
2196} XGL_SEMAPHORE_OPEN_INFO;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002197
2198typedef struct _XGL_PIPELINE_STATISTICS_DATA
2199{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002200 uint64_t fsInvocations; // Fragment shader invocations
2201 uint64_t cPrimitives; // Clipper primitives
2202 uint64_t cInvocations; // Clipper invocations
2203 uint64_t vsInvocations; // Vertex shader invocations
2204 uint64_t gsInvocations; // Geometry shader invocations
2205 uint64_t gsPrimitives; // Geometry shader primitives
2206 uint64_t iaPrimitives; // Input primitives
2207 uint64_t iaVertices; // Input vertices
2208 uint64_t tcsInvocations; // Tessellation control shader invocations
2209 uint64_t tesInvocations; // Tessellation evaluation shader invocations
2210 uint64_t csInvocations; // Compute shader invocations
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002211} XGL_PIPELINE_STATISTICS_DATA;
2212
2213typedef struct _XGL_QUERY_POOL_CREATE_INFO
2214{
2215 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002216 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002217 XGL_QUERY_TYPE queryType;
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002218 uint32_t slots;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002219} XGL_QUERY_POOL_CREATE_INFO;
2220
Jon Ashburnfa420992014-12-24 12:09:06 -07002221typedef struct _XGL_FRAMEBUFFER_CREATE_INFO
2222{
2223 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002224 const void* pNext; // Pointer to next structure
Jon Ashburnfa420992014-12-24 12:09:06 -07002225
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002226 uint32_t colorAttachmentCount;
Chia-I Wub0a2cc92015-01-28 14:00:47 +08002227 const XGL_COLOR_ATTACHMENT_BIND_INFO* pColorAttachments;
2228 const XGL_DEPTH_STENCIL_BIND_INFO* pDepthStencilAttachment;
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002229
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002230 uint32_t sampleCount;
2231 uint32_t width;
2232 uint32_t height;
2233 uint32_t layers;
Jon Ashburnfa420992014-12-24 12:09:06 -07002234} XGL_FRAMEBUFFER_CREATE_INFO;
2235
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002236typedef struct _XGL_DRAW_INDIRECT_CMD
2237{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002238 uint32_t vertexCount;
2239 uint32_t instanceCount;
2240 uint32_t firstVertex;
2241 uint32_t firstInstance;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002242} XGL_DRAW_INDIRECT_CMD;
2243
2244typedef struct _XGL_DRAW_INDEXED_INDIRECT_CMD
2245{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002246 uint32_t indexCount;
2247 uint32_t instanceCount;
2248 uint32_t firstIndex;
2249 int32_t vertexOffset;
2250 uint32_t firstInstance;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002251} XGL_DRAW_INDEXED_INDIRECT_CMD;
2252
2253typedef struct _XGL_DISPATCH_INDIRECT_CMD
2254{
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002255 uint32_t x;
2256 uint32_t y;
2257 uint32_t z;
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002258} XGL_DISPATCH_INDIRECT_CMD;
2259
2260// ------------------------------------------------------------------------------------------------
2261// API functions
Jon Ashburn1beab2d2015-01-26 14:51:40 -07002262typedef XGL_RESULT (XGLAPI *xglCreateInstanceType)(const XGL_APPLICATION_INFO* pAppInfo, const XGL_ALLOC_CALLBACKS* pAllocCb, XGL_INSTANCE* pInstance);
2263typedef XGL_RESULT (XGLAPI *xglDestroyInstanceType)(XGL_INSTANCE instance);
2264typedef XGL_RESULT (XGLAPI *xglEnumerateGpusType)(XGL_INSTANCE instance, uint32_t maxGpus, uint32_t* pGpuCount, XGL_PHYSICAL_GPU* pGpus);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002265typedef XGL_RESULT (XGLAPI *xglGetGpuInfoType)(XGL_PHYSICAL_GPU gpu, XGL_PHYSICAL_GPU_INFO_TYPE infoType, size_t* pDataSize, void* pData);
Piers Daniella7910a02015-02-06 16:41:39 -07002266typedef void * (XGLAPI *xglGetProcAddrType)(XGL_PHYSICAL_GPU gpu, const char * pName);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002267typedef XGL_RESULT (XGLAPI *xglCreateDeviceType)(XGL_PHYSICAL_GPU gpu, const XGL_DEVICE_CREATE_INFO* pCreateInfo, XGL_DEVICE* pDevice);
2268typedef XGL_RESULT (XGLAPI *xglDestroyDeviceType)(XGL_DEVICE device);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002269typedef XGL_RESULT (XGLAPI *xglGetExtensionSupportType)(XGL_PHYSICAL_GPU gpu, const char* pExtName);
2270typedef XGL_RESULT (XGLAPI *xglEnumerateLayersType)(XGL_PHYSICAL_GPU gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved);
Courtney Goeltzenleuchter18248e62015-03-05 18:09:39 -07002271typedef XGL_RESULT (XGLAPI *xglGetDeviceQueueType)(XGL_DEVICE device, uint32_t queueNodeIndex, uint32_t queueIndex, XGL_QUEUE* pQueue);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002272typedef XGL_RESULT (XGLAPI *xglQueueSubmitType)(XGL_QUEUE queue, uint32_t cmdBufferCount, const XGL_CMD_BUFFER* pCmdBuffers, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs, XGL_FENCE fence);
2273typedef XGL_RESULT (XGLAPI *xglQueueSetGlobalMemReferencesType)(XGL_QUEUE queue, uint32_t memRefCount, const XGL_MEMORY_REF* pMemRefs);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002274typedef XGL_RESULT (XGLAPI *xglQueueWaitIdleType)(XGL_QUEUE queue);
2275typedef XGL_RESULT (XGLAPI *xglDeviceWaitIdleType)(XGL_DEVICE device);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002276typedef XGL_RESULT (XGLAPI *xglAllocMemoryType)(XGL_DEVICE device, const XGL_MEMORY_ALLOC_INFO* pAllocInfo, XGL_GPU_MEMORY* pMem);
2277typedef XGL_RESULT (XGLAPI *xglFreeMemoryType)(XGL_GPU_MEMORY mem);
2278typedef XGL_RESULT (XGLAPI *xglSetMemoryPriorityType)(XGL_GPU_MEMORY mem, XGL_MEMORY_PRIORITY priority);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002279typedef XGL_RESULT (XGLAPI *xglMapMemoryType)(XGL_GPU_MEMORY mem, XGL_FLAGS flags, void** ppData);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002280typedef XGL_RESULT (XGLAPI *xglUnmapMemoryType)(XGL_GPU_MEMORY mem);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002281typedef XGL_RESULT (XGLAPI *xglPinSystemMemoryType)(XGL_DEVICE device, const void* pSysMem, size_t memSize, XGL_GPU_MEMORY* pMem);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002282typedef XGL_RESULT (XGLAPI *xglGetMultiGpuCompatibilityType)(XGL_PHYSICAL_GPU gpu0, XGL_PHYSICAL_GPU gpu1, XGL_GPU_COMPATIBILITY_INFO* pInfo);
2283typedef XGL_RESULT (XGLAPI *xglOpenSharedMemoryType)(XGL_DEVICE device, const XGL_MEMORY_OPEN_INFO* pOpenInfo, XGL_GPU_MEMORY* pMem);
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002284typedef XGL_RESULT (XGLAPI *xglOpenSharedSemaphoreType)(XGL_DEVICE device, const XGL_SEMAPHORE_OPEN_INFO* pOpenInfo, XGL_SEMAPHORE* pSemaphore);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002285typedef XGL_RESULT (XGLAPI *xglOpenPeerMemoryType)(XGL_DEVICE device, const XGL_PEER_MEMORY_OPEN_INFO* pOpenInfo, XGL_GPU_MEMORY* pMem);
2286typedef XGL_RESULT (XGLAPI *xglOpenPeerImageType)(XGL_DEVICE device, const XGL_PEER_IMAGE_OPEN_INFO* pOpenInfo, XGL_IMAGE* pImage, XGL_GPU_MEMORY* pMem);
2287typedef XGL_RESULT (XGLAPI *xglDestroyObjectType)(XGL_OBJECT object);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002288typedef XGL_RESULT (XGLAPI *xglGetObjectInfoType)(XGL_BASE_OBJECT object, XGL_OBJECT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002289typedef XGL_RESULT (XGLAPI *xglBindObjectMemoryType)(XGL_OBJECT object, uint32_t allocationIdx, XGL_GPU_MEMORY mem, XGL_GPU_SIZE offset);
Piers Daniella7910a02015-02-06 16:41:39 -07002290typedef XGL_RESULT (XGLAPI *xglBindObjectMemoryRangeType)(XGL_OBJECT object, uint32_t allocationIdx, XGL_GPU_SIZE rangeOffset,XGL_GPU_SIZE rangeSize, XGL_GPU_MEMORY mem, XGL_GPU_SIZE memOffset);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002291typedef XGL_RESULT (XGLAPI *xglBindImageMemoryRangeType)(XGL_IMAGE image, uint32_t allocationIdx, const XGL_IMAGE_MEMORY_BIND_INFO* bindInfo, XGL_GPU_MEMORY mem, XGL_GPU_SIZE memOffset);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002292typedef XGL_RESULT (XGLAPI *xglCreateFenceType)(XGL_DEVICE device, const XGL_FENCE_CREATE_INFO* pCreateInfo, XGL_FENCE* pFence);
2293typedef XGL_RESULT (XGLAPI *xglGetFenceStatusType)(XGL_FENCE fence);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002294typedef XGL_RESULT (XGLAPI *xglWaitForFencesType)(XGL_DEVICE device, uint32_t fenceCount, const XGL_FENCE* pFences, bool32_t waitAll, uint64_t timeout);
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002295typedef XGL_RESULT (XGLAPI *xglCreateSemaphoreType)(XGL_DEVICE device, const XGL_SEMAPHORE_CREATE_INFO* pCreateInfo, XGL_SEMAPHORE* pSemaphore);
2296typedef XGL_RESULT (XGLAPI *xglQueueSignalSemaphoreType)(XGL_QUEUE queue, XGL_SEMAPHORE semaphore);
2297typedef XGL_RESULT (XGLAPI *xglQueueWaitSemaphoreType)(XGL_QUEUE queue, XGL_SEMAPHORE semaphore);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002298typedef XGL_RESULT (XGLAPI *xglCreateEventType)(XGL_DEVICE device, const XGL_EVENT_CREATE_INFO* pCreateInfo, XGL_EVENT* pEvent);
2299typedef XGL_RESULT (XGLAPI *xglGetEventStatusType)(XGL_EVENT event);
2300typedef XGL_RESULT (XGLAPI *xglSetEventType)(XGL_EVENT event);
2301typedef XGL_RESULT (XGLAPI *xglResetEventType)(XGL_EVENT event);
2302typedef XGL_RESULT (XGLAPI *xglCreateQueryPoolType)(XGL_DEVICE device, const XGL_QUERY_POOL_CREATE_INFO* pCreateInfo, XGL_QUERY_POOL* pQueryPool);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002303typedef XGL_RESULT (XGLAPI *xglGetQueryPoolResultsType)(XGL_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData);
2304typedef XGL_RESULT (XGLAPI *xglGetFormatInfoType)(XGL_DEVICE device, XGL_FORMAT format, XGL_FORMAT_INFO_TYPE infoType, size_t* pDataSize, void* pData);
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002305typedef XGL_RESULT (XGLAPI *xglCreateBufferType)(XGL_DEVICE device, const XGL_BUFFER_CREATE_INFO* pCreateInfo, XGL_BUFFER* pBuffer);
2306typedef XGL_RESULT (XGLAPI *xglCreateBufferViewType)(XGL_DEVICE device, const XGL_BUFFER_VIEW_CREATE_INFO* pCreateInfo, XGL_BUFFER_VIEW* pView);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002307typedef XGL_RESULT (XGLAPI *xglCreateImageType)(XGL_DEVICE device, const XGL_IMAGE_CREATE_INFO* pCreateInfo, XGL_IMAGE* pImage);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002308typedef XGL_RESULT (XGLAPI *xglGetImageSubresourceInfoType)(XGL_IMAGE image, const XGL_IMAGE_SUBRESOURCE* pSubresource, XGL_SUBRESOURCE_INFO_TYPE infoType, size_t* pDataSize, void* pData);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002309typedef XGL_RESULT (XGLAPI *xglCreateImageViewType)(XGL_DEVICE device, const XGL_IMAGE_VIEW_CREATE_INFO* pCreateInfo, XGL_IMAGE_VIEW* pView);
2310typedef XGL_RESULT (XGLAPI *xglCreateColorAttachmentViewType)(XGL_DEVICE device, const XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo, XGL_COLOR_ATTACHMENT_VIEW* pView);
2311typedef XGL_RESULT (XGLAPI *xglCreateDepthStencilViewType)(XGL_DEVICE device, const XGL_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo, XGL_DEPTH_STENCIL_VIEW* pView);
2312typedef XGL_RESULT (XGLAPI *xglCreateShaderType)(XGL_DEVICE device, const XGL_SHADER_CREATE_INFO* pCreateInfo, XGL_SHADER* pShader);
2313typedef XGL_RESULT (XGLAPI *xglCreateGraphicsPipelineType)(XGL_DEVICE device, const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, XGL_PIPELINE* pPipeline);
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06002314typedef XGL_RESULT (XGLAPI *xglCreateGraphicsPipelineDerivativeType)(XGL_DEVICE device, const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo, XGL_PIPELINE basePipeline, XGL_PIPELINE* pPipeline);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002315typedef XGL_RESULT (XGLAPI *xglCreateComputePipelineType)(XGL_DEVICE device, const XGL_COMPUTE_PIPELINE_CREATE_INFO* pCreateInfo, XGL_PIPELINE* pPipeline);
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002316typedef XGL_RESULT (XGLAPI *xglStorePipelineType)(XGL_PIPELINE pipeline, size_t* pDataSize, void* pData);
2317typedef XGL_RESULT (XGLAPI *xglLoadPipelineType)(XGL_DEVICE device, size_t dataSize, const void* pData, XGL_PIPELINE* pPipeline);
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06002318typedef XGL_RESULT (XGLAPI *xglLoadPipelineDerivativeType)(XGL_DEVICE device, size_t dataSize, const void* pData, XGL_PIPELINE basePipeline, XGL_PIPELINE* pPipeline);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002319typedef XGL_RESULT (XGLAPI *xglCreateSamplerType)(XGL_DEVICE device, const XGL_SAMPLER_CREATE_INFO* pCreateInfo, XGL_SAMPLER* pSampler);
Chia-I Wu41126e52015-03-26 15:27:55 +08002320typedef XGL_RESULT (XGLAPI *xglCreateDescriptorSetLayoutType)(XGL_DEVICE device, const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo, XGL_DESCRIPTOR_SET_LAYOUT* pSetLayout);
2321typedef XGL_RESULT (XGLAPI *xglCreateDescriptorSetLayoutChainType)(XGL_DEVICE device, uint32_t setLayoutArrayCount, const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayoutArray, XGL_DESCRIPTOR_SET_LAYOUT_CHAIN* pLayoutChain);
Chia-I Wu985ba162015-03-26 13:14:16 +08002322typedef XGL_RESULT (XGLAPI *xglBeginDescriptorPoolUpdateType)(XGL_DEVICE device, XGL_DESCRIPTOR_UPDATE_MODE updateMode);
2323typedef XGL_RESULT (XGLAPI *xglEndDescriptorPoolUpdateType)(XGL_DEVICE device, XGL_CMD_BUFFER cmd);
2324typedef XGL_RESULT (XGLAPI *xglCreateDescriptorPoolType)(XGL_DEVICE device, XGL_DESCRIPTOR_POOL_USAGE poolUsage, uint32_t maxSets, const XGL_DESCRIPTOR_POOL_CREATE_INFO* pCreateInfo, XGL_DESCRIPTOR_POOL* pDescriptorPool);
Chia-I Wufae40bc2015-03-26 15:23:52 +08002325typedef XGL_RESULT (XGLAPI *xglResetDescriptorPoolType)(XGL_DESCRIPTOR_POOL descriptorPool);
Chia-I Wu985ba162015-03-26 13:14:16 +08002326typedef XGL_RESULT (XGLAPI *xglAllocDescriptorSetsType)(XGL_DESCRIPTOR_POOL descriptorPool, XGL_DESCRIPTOR_SET_USAGE setUsage, uint32_t count, const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayouts, XGL_DESCRIPTOR_SET* pDescriptorSets, uint32_t* pCount);
2327typedef void (XGLAPI *xglClearDescriptorSetsType)(XGL_DESCRIPTOR_POOL descriptorPool, uint32_t count, const XGL_DESCRIPTOR_SET* pDescriptorSets);
Chia-I Wu41126e52015-03-26 15:27:55 +08002328typedef void (XGLAPI *xglUpdateDescriptorsType)(XGL_DESCRIPTOR_SET descriptorSet, uint32_t updateCount, const void** ppUpdateArray);
Tony Barbourf52346d2015-01-16 14:27:35 -07002329typedef XGL_RESULT (XGLAPI *xglCreateDynamicViewportStateType)(XGL_DEVICE device, const XGL_DYNAMIC_VP_STATE_CREATE_INFO* pCreateInfo, XGL_DYNAMIC_VP_STATE_OBJECT* pState);
2330typedef XGL_RESULT (XGLAPI *xglCreateDynamicRasterStateType)(XGL_DEVICE device, const XGL_DYNAMIC_RS_STATE_CREATE_INFO* pCreateInfo, XGL_DYNAMIC_RS_STATE_OBJECT* pState);
2331typedef XGL_RESULT (XGLAPI *xglCreateDynamicColorBlendStateType)(XGL_DEVICE device, const XGL_DYNAMIC_CB_STATE_CREATE_INFO* pCreateInfo, XGL_DYNAMIC_CB_STATE_OBJECT* pState);
2332typedef XGL_RESULT (XGLAPI *xglCreateDynamicDepthStencilStateType)(XGL_DEVICE device, const XGL_DYNAMIC_DS_STATE_CREATE_INFO* pCreateInfo, XGL_DYNAMIC_DS_STATE_OBJECT* pState);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002333typedef XGL_RESULT (XGLAPI *xglCreateCommandBufferType)(XGL_DEVICE device, const XGL_CMD_BUFFER_CREATE_INFO* pCreateInfo, XGL_CMD_BUFFER* pCmdBuffer);
Jeremy Hayesd65ae082015-01-14 16:17:08 -07002334typedef XGL_RESULT (XGLAPI *xglBeginCommandBufferType)(XGL_CMD_BUFFER cmdBuffer, const XGL_CMD_BUFFER_BEGIN_INFO* pBeginInfo);
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002335typedef XGL_RESULT (XGLAPI *xglEndCommandBufferType)(XGL_CMD_BUFFER cmdBuffer);
2336typedef XGL_RESULT (XGLAPI *xglResetCommandBufferType)(XGL_CMD_BUFFER cmdBuffer);
Piers Daniella7910a02015-02-06 16:41:39 -07002337typedef void (XGLAPI *xglCmdBindPipelineType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_PIPELINE pipeline);
Piers Daniella7910a02015-02-06 16:41:39 -07002338typedef void (XGLAPI *xglCmdBindDynamicStateObjectType)(XGL_CMD_BUFFER cmdBuffer, XGL_STATE_BIND_POINT stateBindPoint, XGL_DYNAMIC_STATE_OBJECT state);
2339typedef void (XGLAPI *xglCmdBindDescriptorSetType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, XGL_DESCRIPTOR_SET descriptorSet, const uint32_t* pUserData);
2340typedef void (XGLAPI *xglCmdBindIndexBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, XGL_INDEX_TYPE indexType);
2341typedef void (XGLAPI *xglCmdBindVertexBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, uint32_t binding);
2342typedef void (XGLAPI *xglCmdDrawType)(XGL_CMD_BUFFER cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount);
2343typedef void (XGLAPI *xglCmdDrawIndexedType)(XGL_CMD_BUFFER cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount);
2344typedef void (XGLAPI *xglCmdDrawIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, uint32_t count, uint32_t stride);
2345typedef void (XGLAPI *xglCmdDrawIndexedIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset, uint32_t count, uint32_t stride);
2346typedef void (XGLAPI *xglCmdDispatchType)(XGL_CMD_BUFFER cmdBuffer, uint32_t x, uint32_t y, uint32_t z);
2347typedef void (XGLAPI *xglCmdDispatchIndirectType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER buffer, XGL_GPU_SIZE offset);
2348typedef void (XGLAPI *xglCmdCopyBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER srcBuffer, XGL_BUFFER destBuffer, uint32_t regionCount, const XGL_BUFFER_COPY* pRegions);
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002349typedef void (XGLAPI *xglCmdCopyImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_LAYOUT srcImageLayout, XGL_IMAGE destImage, XGL_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const XGL_IMAGE_COPY* pRegions);
2350typedef void (XGLAPI *xglCmdBlitImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_LAYOUT srcImageLayout, XGL_IMAGE destImage, XGL_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const XGL_IMAGE_BLIT* pRegions);
2351typedef void (XGLAPI *xglCmdCopyBufferToImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER srcBuffer, XGL_IMAGE destImage, XGL_IMAGE_LAYOUT destImageLayout, uint32_t regionCount, const XGL_BUFFER_IMAGE_COPY* pRegions);
2352typedef void (XGLAPI *xglCmdCopyImageToBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_LAYOUT srcImageLayout, XGL_BUFFER destBuffer, uint32_t regionCount, const XGL_BUFFER_IMAGE_COPY* pRegions);
Piers Daniella7910a02015-02-06 16:41:39 -07002353typedef void (XGLAPI *xglCmdCloneImageDataType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_LAYOUT srcImageLayout, XGL_IMAGE destImage, XGL_IMAGE_LAYOUT destImageLayout);
2354typedef void (XGLAPI *xglCmdUpdateBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE dataSize, const uint32_t* pData);
2355typedef void (XGLAPI *xglCmdFillBufferType)(XGL_CMD_BUFFER cmdBuffer, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset, XGL_GPU_SIZE fillSize, uint32_t data);
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002356typedef void (XGLAPI *xglCmdClearColorImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE image, XGL_IMAGE_LAYOUT imageLayout, XGL_CLEAR_COLOR color, uint32_t rangeCount, const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2357typedef void (XGLAPI *xglCmdClearDepthStencilType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE image, XGL_IMAGE_LAYOUT imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2358typedef void (XGLAPI *xglCmdResolveImageType)(XGL_CMD_BUFFER cmdBuffer, XGL_IMAGE srcImage, XGL_IMAGE_LAYOUT srcImageLayout, XGL_IMAGE destImage, XGL_IMAGE_LAYOUT destImageLayout, uint32_t rectCount, const XGL_IMAGE_RESOLVE* pRects);
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -06002359typedef void (XGLAPI *xglCmdSetEventType)(XGL_CMD_BUFFER cmdBuffer, XGL_EVENT event, XGL_PIPE_EVENT pipeEvent);
2360typedef void (XGLAPI *xglCmdResetEventType)(XGL_CMD_BUFFER cmdBuffer, XGL_EVENT event, XGL_PIPE_EVENT pipeEvent);
Piers Daniella7910a02015-02-06 16:41:39 -07002361typedef void (XGLAPI *xglCmdWaitEventsType)(XGL_CMD_BUFFER cmdBuffer, const XGL_EVENT_WAIT_INFO* pWaitInfo);
2362typedef void (XGLAPI *xglCmdPipelineBarrierType)(XGL_CMD_BUFFER cmdBuffer, const XGL_PIPELINE_BARRIER* pBarrier);
2363typedef void (XGLAPI *xglCmdBeginQueryType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, uint32_t slot, XGL_FLAGS flags);
2364typedef void (XGLAPI *xglCmdEndQueryType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, uint32_t slot);
2365typedef void (XGLAPI *xglCmdResetQueryPoolType)(XGL_CMD_BUFFER cmdBuffer, XGL_QUERY_POOL queryPool, uint32_t startQuery, uint32_t queryCount);
2366typedef void (XGLAPI *xglCmdWriteTimestampType)(XGL_CMD_BUFFER cmdBuffer, XGL_TIMESTAMP_TYPE timestampType, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset);
2367typedef void (XGLAPI *xglCmdInitAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData);
2368typedef void (XGLAPI *xglCmdLoadAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, XGL_BUFFER srcBuffer, XGL_GPU_SIZE srcOffset);
2369typedef void (XGLAPI *xglCmdSaveAtomicCountersType)(XGL_CMD_BUFFER cmdBuffer, XGL_PIPELINE_BIND_POINT pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, XGL_BUFFER destBuffer, XGL_GPU_SIZE destOffset);
Jeremy Hayesd65ae082015-01-14 16:17:08 -07002370typedef XGL_RESULT (XGLAPI *xglCreateFramebufferType)(XGL_DEVICE device, const XGL_FRAMEBUFFER_CREATE_INFO* pCreateInfo, XGL_FRAMEBUFFER* pFramebuffer);
2371typedef XGL_RESULT (XGLAPI *xglCreateRenderPassType)(XGL_DEVICE device, const XGL_RENDER_PASS_CREATE_INFO* pCreateInfo, XGL_RENDER_PASS* pRenderPass);
Courtney Goeltzenleuchter69894b72015-04-03 15:25:24 -06002372typedef void (XGLAPI *xglCmdBeginRenderPassType)(XGL_CMD_BUFFER cmdBuffer, const XGL_RENDER_PASS_BEGIN* pRenderPassBegin);
Jon Ashburne13f1982015-02-02 09:58:11 -07002373typedef void (XGLAPI *xglCmdEndRenderPassType)(XGL_CMD_BUFFER cmdBuffer, XGL_RENDER_PASS renderPass);
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002374
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06002375#ifdef XGL_PROTOTYPES
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002376
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002377// GPU initialization
2378
Jon Ashburn1beab2d2015-01-26 14:51:40 -07002379XGL_RESULT XGLAPI xglCreateInstance(
2380 const XGL_APPLICATION_INFO* pAppInfo,
2381 const XGL_ALLOC_CALLBACKS* pAllocCb,
2382 XGL_INSTANCE* pInstance);
2383
2384XGL_RESULT XGLAPI xglDestroyInstance(
2385 XGL_INSTANCE instance);
2386
2387XGL_RESULT XGLAPI xglEnumerateGpus(
2388 XGL_INSTANCE instance,
2389 uint32_t maxGpus,
2390 uint32_t* pGpuCount,
2391 XGL_PHYSICAL_GPU* pGpus);
2392
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002393XGL_RESULT XGLAPI xglGetGpuInfo(
2394 XGL_PHYSICAL_GPU gpu,
2395 XGL_PHYSICAL_GPU_INFO_TYPE infoType,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002396 size_t* pDataSize,
2397 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002398
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002399void * XGLAPI xglGetProcAddr(
Jon Ashburnd5864592014-11-25 12:56:49 -07002400 XGL_PHYSICAL_GPU gpu,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002401 const char* pName);
Jon Ashburnd5864592014-11-25 12:56:49 -07002402
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002403// Device functions
2404
2405XGL_RESULT XGLAPI xglCreateDevice(
2406 XGL_PHYSICAL_GPU gpu,
2407 const XGL_DEVICE_CREATE_INFO* pCreateInfo,
2408 XGL_DEVICE* pDevice);
2409
2410XGL_RESULT XGLAPI xglDestroyDevice(
2411 XGL_DEVICE device);
2412
2413// Extension discovery functions
2414
2415XGL_RESULT XGLAPI xglGetExtensionSupport(
2416 XGL_PHYSICAL_GPU gpu,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002417 const char* pExtName);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002418
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002419// Layer discovery functions
2420
Jon Ashburnf7bcf9b2014-10-15 15:30:23 -06002421XGL_RESULT XGLAPI xglEnumerateLayers(
Jon Ashburnd5864592014-11-25 12:56:49 -07002422 XGL_PHYSICAL_GPU gpu,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002423 size_t maxLayerCount,
2424 size_t maxStringSize,
2425 size_t* pOutLayerCount,
2426 char* const* pOutLayers,
2427 void* pReserved);
Jon Ashburnf7bcf9b2014-10-15 15:30:23 -06002428
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002429// Queue functions
2430
2431XGL_RESULT XGLAPI xglGetDeviceQueue(
2432 XGL_DEVICE device,
Courtney Goeltzenleuchter18248e62015-03-05 18:09:39 -07002433 uint32_t queueNodeIndex,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002434 uint32_t queueIndex,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002435 XGL_QUEUE* pQueue);
2436
2437XGL_RESULT XGLAPI xglQueueSubmit(
2438 XGL_QUEUE queue,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002439 uint32_t cmdBufferCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002440 const XGL_CMD_BUFFER* pCmdBuffers,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002441 uint32_t memRefCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002442 const XGL_MEMORY_REF* pMemRefs,
2443 XGL_FENCE fence);
2444
2445XGL_RESULT XGLAPI xglQueueSetGlobalMemReferences(
2446 XGL_QUEUE queue,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002447 uint32_t memRefCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002448 const XGL_MEMORY_REF* pMemRefs);
2449
2450XGL_RESULT XGLAPI xglQueueWaitIdle(
2451 XGL_QUEUE queue);
2452
2453XGL_RESULT XGLAPI xglDeviceWaitIdle(
2454 XGL_DEVICE device);
2455
2456// Memory functions
2457
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002458XGL_RESULT XGLAPI xglAllocMemory(
2459 XGL_DEVICE device,
2460 const XGL_MEMORY_ALLOC_INFO* pAllocInfo,
2461 XGL_GPU_MEMORY* pMem);
2462
2463XGL_RESULT XGLAPI xglFreeMemory(
2464 XGL_GPU_MEMORY mem);
2465
2466XGL_RESULT XGLAPI xglSetMemoryPriority(
2467 XGL_GPU_MEMORY mem,
2468 XGL_MEMORY_PRIORITY priority);
2469
2470XGL_RESULT XGLAPI xglMapMemory(
2471 XGL_GPU_MEMORY mem,
2472 XGL_FLAGS flags, // Reserved
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002473 void** ppData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002474
2475XGL_RESULT XGLAPI xglUnmapMemory(
2476 XGL_GPU_MEMORY mem);
2477
2478XGL_RESULT XGLAPI xglPinSystemMemory(
2479 XGL_DEVICE device,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002480 const void* pSysMem,
2481 size_t memSize,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002482 XGL_GPU_MEMORY* pMem);
2483
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002484// Multi-device functions
2485
2486XGL_RESULT XGLAPI xglGetMultiGpuCompatibility(
2487 XGL_PHYSICAL_GPU gpu0,
2488 XGL_PHYSICAL_GPU gpu1,
2489 XGL_GPU_COMPATIBILITY_INFO* pInfo);
2490
2491XGL_RESULT XGLAPI xglOpenSharedMemory(
2492 XGL_DEVICE device,
2493 const XGL_MEMORY_OPEN_INFO* pOpenInfo,
2494 XGL_GPU_MEMORY* pMem);
2495
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002496XGL_RESULT XGLAPI xglOpenSharedSemaphore(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002497 XGL_DEVICE device,
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002498 const XGL_SEMAPHORE_OPEN_INFO* pOpenInfo,
2499 XGL_SEMAPHORE* pSemaphore);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002500
2501XGL_RESULT XGLAPI xglOpenPeerMemory(
2502 XGL_DEVICE device,
2503 const XGL_PEER_MEMORY_OPEN_INFO* pOpenInfo,
2504 XGL_GPU_MEMORY* pMem);
2505
2506XGL_RESULT XGLAPI xglOpenPeerImage(
2507 XGL_DEVICE device,
2508 const XGL_PEER_IMAGE_OPEN_INFO* pOpenInfo,
2509 XGL_IMAGE* pImage,
2510 XGL_GPU_MEMORY* pMem);
2511
2512// Generic API object functions
2513
2514XGL_RESULT XGLAPI xglDestroyObject(
2515 XGL_OBJECT object);
2516
2517XGL_RESULT XGLAPI xglGetObjectInfo(
2518 XGL_BASE_OBJECT object,
2519 XGL_OBJECT_INFO_TYPE infoType,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002520 size_t* pDataSize,
2521 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002522
2523XGL_RESULT XGLAPI xglBindObjectMemory(
2524 XGL_OBJECT object,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002525 uint32_t allocationIdx,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002526 XGL_GPU_MEMORY mem,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002527 XGL_GPU_SIZE memOffset);
2528
2529XGL_RESULT XGLAPI xglBindObjectMemoryRange(
2530 XGL_OBJECT object,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002531 uint32_t allocationIdx,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002532 XGL_GPU_SIZE rangeOffset,
2533 XGL_GPU_SIZE rangeSize,
2534 XGL_GPU_MEMORY mem,
2535 XGL_GPU_SIZE memOffset);
2536
2537XGL_RESULT XGLAPI xglBindImageMemoryRange(
2538 XGL_IMAGE image,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002539 uint32_t allocationIdx,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002540 const XGL_IMAGE_MEMORY_BIND_INFO* bindInfo,
2541 XGL_GPU_MEMORY mem,
2542 XGL_GPU_SIZE memOffset);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002543
2544// Fence functions
2545
2546XGL_RESULT XGLAPI xglCreateFence(
2547 XGL_DEVICE device,
2548 const XGL_FENCE_CREATE_INFO* pCreateInfo,
2549 XGL_FENCE* pFence);
2550
2551XGL_RESULT XGLAPI xglGetFenceStatus(
2552 XGL_FENCE fence);
2553
2554XGL_RESULT XGLAPI xglWaitForFences(
2555 XGL_DEVICE device,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002556 uint32_t fenceCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002557 const XGL_FENCE* pFences,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002558 bool32_t waitAll,
Courtney Goeltzenleuchter09f84e92015-03-25 16:37:00 -06002559 uint64_t timeout); // timeout in nanoseconds
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002560
2561// Queue semaphore functions
2562
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002563XGL_RESULT XGLAPI xglCreateSemaphore(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002564 XGL_DEVICE device,
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002565 const XGL_SEMAPHORE_CREATE_INFO* pCreateInfo,
2566 XGL_SEMAPHORE* pSemaphore);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002567
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002568XGL_RESULT XGLAPI xglQueueSignalSemaphore(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002569 XGL_QUEUE queue,
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002570 XGL_SEMAPHORE semaphore);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002571
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002572XGL_RESULT XGLAPI xglQueueWaitSemaphore(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002573 XGL_QUEUE queue,
Courtney Goeltzenleuchterebb95842015-03-25 17:14:29 -06002574 XGL_SEMAPHORE semaphore);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002575
2576// Event functions
2577
2578XGL_RESULT XGLAPI xglCreateEvent(
2579 XGL_DEVICE device,
2580 const XGL_EVENT_CREATE_INFO* pCreateInfo,
2581 XGL_EVENT* pEvent);
2582
2583XGL_RESULT XGLAPI xglGetEventStatus(
2584 XGL_EVENT event);
2585
2586XGL_RESULT XGLAPI xglSetEvent(
2587 XGL_EVENT event);
2588
2589XGL_RESULT XGLAPI xglResetEvent(
2590 XGL_EVENT event);
2591
2592// Query functions
2593
2594XGL_RESULT XGLAPI xglCreateQueryPool(
2595 XGL_DEVICE device,
2596 const XGL_QUERY_POOL_CREATE_INFO* pCreateInfo,
2597 XGL_QUERY_POOL* pQueryPool);
2598
2599XGL_RESULT XGLAPI xglGetQueryPoolResults(
2600 XGL_QUERY_POOL queryPool,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002601 uint32_t startQuery,
2602 uint32_t queryCount,
2603 size_t* pDataSize,
2604 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002605
2606// Format capabilities
2607
2608XGL_RESULT XGLAPI xglGetFormatInfo(
2609 XGL_DEVICE device,
2610 XGL_FORMAT format,
2611 XGL_FORMAT_INFO_TYPE infoType,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002612 size_t* pDataSize,
2613 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002614
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002615// Buffer functions
2616
2617XGL_RESULT XGLAPI xglCreateBuffer(
2618 XGL_DEVICE device,
2619 const XGL_BUFFER_CREATE_INFO* pCreateInfo,
2620 XGL_BUFFER* pBuffer);
2621
2622// Buffer view functions
2623
2624XGL_RESULT XGLAPI xglCreateBufferView(
2625 XGL_DEVICE device,
2626 const XGL_BUFFER_VIEW_CREATE_INFO* pCreateInfo,
2627 XGL_BUFFER_VIEW* pView);
2628
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002629// Image functions
2630
2631XGL_RESULT XGLAPI xglCreateImage(
2632 XGL_DEVICE device,
2633 const XGL_IMAGE_CREATE_INFO* pCreateInfo,
2634 XGL_IMAGE* pImage);
2635
2636XGL_RESULT XGLAPI xglGetImageSubresourceInfo(
2637 XGL_IMAGE image,
2638 const XGL_IMAGE_SUBRESOURCE* pSubresource,
2639 XGL_SUBRESOURCE_INFO_TYPE infoType,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002640 size_t* pDataSize,
2641 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002642
2643// Image view functions
2644
2645XGL_RESULT XGLAPI xglCreateImageView(
2646 XGL_DEVICE device,
2647 const XGL_IMAGE_VIEW_CREATE_INFO* pCreateInfo,
2648 XGL_IMAGE_VIEW* pView);
2649
2650XGL_RESULT XGLAPI xglCreateColorAttachmentView(
2651 XGL_DEVICE device,
2652 const XGL_COLOR_ATTACHMENT_VIEW_CREATE_INFO* pCreateInfo,
2653 XGL_COLOR_ATTACHMENT_VIEW* pView);
2654
2655XGL_RESULT XGLAPI xglCreateDepthStencilView(
2656 XGL_DEVICE device,
2657 const XGL_DEPTH_STENCIL_VIEW_CREATE_INFO* pCreateInfo,
2658 XGL_DEPTH_STENCIL_VIEW* pView);
2659
2660// Shader functions
2661
2662XGL_RESULT XGLAPI xglCreateShader(
2663 XGL_DEVICE device,
2664 const XGL_SHADER_CREATE_INFO* pCreateInfo,
2665 XGL_SHADER* pShader);
2666
2667// Pipeline functions
2668
2669XGL_RESULT XGLAPI xglCreateGraphicsPipeline(
2670 XGL_DEVICE device,
2671 const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo,
2672 XGL_PIPELINE* pPipeline);
2673
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06002674XGL_RESULT XGLAPI xglCreateGraphicsPipelineDerivative(
2675 XGL_DEVICE device,
2676 const XGL_GRAPHICS_PIPELINE_CREATE_INFO* pCreateInfo,
2677 XGL_PIPELINE basePipeline,
2678 XGL_PIPELINE* pPipeline);
2679
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002680XGL_RESULT XGLAPI xglCreateComputePipeline(
2681 XGL_DEVICE device,
2682 const XGL_COMPUTE_PIPELINE_CREATE_INFO* pCreateInfo,
2683 XGL_PIPELINE* pPipeline);
2684
2685XGL_RESULT XGLAPI xglStorePipeline(
2686 XGL_PIPELINE pipeline,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002687 size_t* pDataSize,
2688 void* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002689
2690XGL_RESULT XGLAPI xglLoadPipeline(
2691 XGL_DEVICE device,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002692 size_t dataSize,
2693 const void* pData,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002694 XGL_PIPELINE* pPipeline);
2695
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06002696XGL_RESULT XGLAPI xglLoadPipelineDerivative(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002697 XGL_DEVICE device,
Courtney Goeltzenleuchter0d40f152015-03-25 15:37:49 -06002698 size_t dataSize,
2699 const void* pData,
2700 XGL_PIPELINE basePipeline,
2701 XGL_PIPELINE* pPipeline);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002702
2703// Sampler functions
2704
2705XGL_RESULT XGLAPI xglCreateSampler(
2706 XGL_DEVICE device,
2707 const XGL_SAMPLER_CREATE_INFO* pCreateInfo,
2708 XGL_SAMPLER* pSampler);
2709
2710// Descriptor set functions
2711
Chia-I Wu11078b02015-01-04 16:27:24 +08002712XGL_RESULT XGLAPI xglCreateDescriptorSetLayout(
2713 XGL_DEVICE device,
Chia-I Wub41393e2015-03-26 15:04:41 +08002714 const XGL_DESCRIPTOR_SET_LAYOUT_CREATE_INFO* pCreateInfo,
Chia-I Wu11078b02015-01-04 16:27:24 +08002715 XGL_DESCRIPTOR_SET_LAYOUT* pSetLayout);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002716
Chia-I Wu41126e52015-03-26 15:27:55 +08002717XGL_RESULT XGLAPI xglCreateDescriptorSetLayoutChain(
2718 XGL_DEVICE device,
2719 uint32_t setLayoutArrayCount,
2720 const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayoutArray,
2721 XGL_DESCRIPTOR_SET_LAYOUT_CHAIN* pLayoutChain);
2722
Chia-I Wu985ba162015-03-26 13:14:16 +08002723XGL_RESULT XGLAPI xglBeginDescriptorPoolUpdate(
Chia-I Wu11078b02015-01-04 16:27:24 +08002724 XGL_DEVICE device,
2725 XGL_DESCRIPTOR_UPDATE_MODE updateMode);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002726
Chia-I Wu985ba162015-03-26 13:14:16 +08002727XGL_RESULT XGLAPI xglEndDescriptorPoolUpdate(
Chia-I Wu11078b02015-01-04 16:27:24 +08002728 XGL_DEVICE device,
2729 XGL_CMD_BUFFER cmd);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002730
Chia-I Wu985ba162015-03-26 13:14:16 +08002731XGL_RESULT XGLAPI xglCreateDescriptorPool(
Chia-I Wu11078b02015-01-04 16:27:24 +08002732 XGL_DEVICE device,
Chia-I Wu985ba162015-03-26 13:14:16 +08002733 XGL_DESCRIPTOR_POOL_USAGE poolUsage,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002734 uint32_t maxSets,
Chia-I Wu985ba162015-03-26 13:14:16 +08002735 const XGL_DESCRIPTOR_POOL_CREATE_INFO* pCreateInfo,
2736 XGL_DESCRIPTOR_POOL* pDescriptorPool);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002737
Chia-I Wufae40bc2015-03-26 15:23:52 +08002738XGL_RESULT XGLAPI xglResetDescriptorPool(
Chia-I Wu985ba162015-03-26 13:14:16 +08002739 XGL_DESCRIPTOR_POOL descriptorPool);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002740
Chia-I Wu11078b02015-01-04 16:27:24 +08002741XGL_RESULT XGLAPI xglAllocDescriptorSets(
Chia-I Wu985ba162015-03-26 13:14:16 +08002742 XGL_DESCRIPTOR_POOL descriptorPool,
Chia-I Wu11078b02015-01-04 16:27:24 +08002743 XGL_DESCRIPTOR_SET_USAGE setUsage,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002744 uint32_t count,
Chia-I Wu11078b02015-01-04 16:27:24 +08002745 const XGL_DESCRIPTOR_SET_LAYOUT* pSetLayouts,
2746 XGL_DESCRIPTOR_SET* pDescriptorSets,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002747 uint32_t* pCount);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002748
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002749void XGLAPI xglClearDescriptorSets(
Chia-I Wu985ba162015-03-26 13:14:16 +08002750 XGL_DESCRIPTOR_POOL descriptorPool,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002751 uint32_t count,
Chia-I Wu11078b02015-01-04 16:27:24 +08002752 const XGL_DESCRIPTOR_SET* pDescriptorSets);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002753
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002754void XGLAPI xglUpdateDescriptors(
Chia-I Wu11078b02015-01-04 16:27:24 +08002755 XGL_DESCRIPTOR_SET descriptorSet,
Chia-I Wu41126e52015-03-26 15:27:55 +08002756 uint32_t updateCount,
2757 const void** ppUpdateArray);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002758
2759// State object functions
2760
Tony Barbourf52346d2015-01-16 14:27:35 -07002761XGL_RESULT XGLAPI xglCreateDynamicViewportState(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002762 XGL_DEVICE device,
Tony Barbourf52346d2015-01-16 14:27:35 -07002763 const XGL_DYNAMIC_VP_STATE_CREATE_INFO* pCreateInfo,
2764 XGL_DYNAMIC_VP_STATE_OBJECT* pState);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002765
Tony Barbourf52346d2015-01-16 14:27:35 -07002766XGL_RESULT XGLAPI xglCreateDynamicRasterState(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002767 XGL_DEVICE device,
Tony Barbourf52346d2015-01-16 14:27:35 -07002768 const XGL_DYNAMIC_RS_STATE_CREATE_INFO* pCreateInfo,
2769 XGL_DYNAMIC_RS_STATE_OBJECT* pState);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002770
Tony Barbourf52346d2015-01-16 14:27:35 -07002771XGL_RESULT XGLAPI xglCreateDynamicColorBlendState(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002772 XGL_DEVICE device,
Tony Barbourf52346d2015-01-16 14:27:35 -07002773 const XGL_DYNAMIC_CB_STATE_CREATE_INFO* pCreateInfo,
2774 XGL_DYNAMIC_CB_STATE_OBJECT* pState);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002775
Tony Barbourf52346d2015-01-16 14:27:35 -07002776XGL_RESULT XGLAPI xglCreateDynamicDepthStencilState(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002777 XGL_DEVICE device,
Tony Barbourf52346d2015-01-16 14:27:35 -07002778 const XGL_DYNAMIC_DS_STATE_CREATE_INFO* pCreateInfo,
2779 XGL_DYNAMIC_DS_STATE_OBJECT* pState);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002780
2781// Command buffer functions
2782
2783XGL_RESULT XGLAPI xglCreateCommandBuffer(
2784 XGL_DEVICE device,
2785 const XGL_CMD_BUFFER_CREATE_INFO* pCreateInfo,
2786 XGL_CMD_BUFFER* pCmdBuffer);
2787
2788XGL_RESULT XGLAPI xglBeginCommandBuffer(
2789 XGL_CMD_BUFFER cmdBuffer,
Jon Ashburn45492ff2014-12-31 16:56:13 -07002790 const XGL_CMD_BUFFER_BEGIN_INFO* pBeginInfo);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002791
2792XGL_RESULT XGLAPI xglEndCommandBuffer(
2793 XGL_CMD_BUFFER cmdBuffer);
2794
2795XGL_RESULT XGLAPI xglResetCommandBuffer(
2796 XGL_CMD_BUFFER cmdBuffer);
2797
2798// Command buffer building functions
2799
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002800void XGLAPI xglCmdBindPipeline(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002801 XGL_CMD_BUFFER cmdBuffer,
2802 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
2803 XGL_PIPELINE pipeline);
2804
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002805void XGLAPI xglCmdBindDynamicStateObject(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002806 XGL_CMD_BUFFER cmdBuffer,
2807 XGL_STATE_BIND_POINT stateBindPoint,
Tony Barbourf52346d2015-01-16 14:27:35 -07002808 XGL_DYNAMIC_STATE_OBJECT dynamicState);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002809
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002810void XGLAPI xglCmdBindDescriptorSet(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002811 XGL_CMD_BUFFER cmdBuffer,
2812 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002813 XGL_DESCRIPTOR_SET descriptorSet,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002814 const uint32_t* pUserData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002815
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002816void XGLAPI xglCmdBindIndexBuffer(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002817 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002818 XGL_BUFFER buffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002819 XGL_GPU_SIZE offset,
2820 XGL_INDEX_TYPE indexType);
2821
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06002822void XGLAPI xglCmdBindVertexBuffer(
2823 XGL_CMD_BUFFER cmdBuffer,
2824 XGL_BUFFER buffer,
2825 XGL_GPU_SIZE offset,
2826 uint32_t binding);
2827
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002828void XGLAPI xglCmdDraw(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002829 XGL_CMD_BUFFER cmdBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002830 uint32_t firstVertex,
2831 uint32_t vertexCount,
2832 uint32_t firstInstance,
2833 uint32_t instanceCount);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002834
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002835void XGLAPI xglCmdDrawIndexed(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002836 XGL_CMD_BUFFER cmdBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002837 uint32_t firstIndex,
2838 uint32_t indexCount,
2839 int32_t vertexOffset,
2840 uint32_t firstInstance,
2841 uint32_t instanceCount);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002842
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002843void XGLAPI xglCmdDrawIndirect(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002844 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002845 XGL_BUFFER buffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002846 XGL_GPU_SIZE offset,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002847 uint32_t count,
2848 uint32_t stride);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002849
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002850void XGLAPI xglCmdDrawIndexedIndirect(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002851 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002852 XGL_BUFFER buffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002853 XGL_GPU_SIZE offset,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002854 uint32_t count,
2855 uint32_t stride);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002856
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002857void XGLAPI xglCmdDispatch(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002858 XGL_CMD_BUFFER cmdBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002859 uint32_t x,
2860 uint32_t y,
2861 uint32_t z);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002862
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002863void XGLAPI xglCmdDispatchIndirect(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002864 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002865 XGL_BUFFER buffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002866 XGL_GPU_SIZE offset);
2867
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002868void XGLAPI xglCmdCopyBuffer(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002869 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002870 XGL_BUFFER srcBuffer,
2871 XGL_BUFFER destBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002872 uint32_t regionCount,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002873 const XGL_BUFFER_COPY* pRegions);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002874
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002875void XGLAPI xglCmdCopyImage(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002876 XGL_CMD_BUFFER cmdBuffer,
2877 XGL_IMAGE srcImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002878 XGL_IMAGE_LAYOUT srcImageLayout,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002879 XGL_IMAGE destImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002880 XGL_IMAGE_LAYOUT destImageLayout,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002881 uint32_t regionCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002882 const XGL_IMAGE_COPY* pRegions);
2883
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06002884void XGLAPI xglCmdBlitImage(
2885 XGL_CMD_BUFFER cmdBuffer,
2886 XGL_IMAGE srcImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002887 XGL_IMAGE_LAYOUT srcImageLayout,
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06002888 XGL_IMAGE destImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002889 XGL_IMAGE_LAYOUT destImageLayout,
Courtney Goeltzenleuchter89299fa2015-03-08 17:02:18 -06002890 uint32_t regionCount,
2891 const XGL_IMAGE_BLIT* pRegions);
2892
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002893void XGLAPI xglCmdCopyBufferToImage(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002894 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002895 XGL_BUFFER srcBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002896 XGL_IMAGE destImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002897 XGL_IMAGE_LAYOUT destImageLayout,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002898 uint32_t regionCount,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002899 const XGL_BUFFER_IMAGE_COPY* pRegions);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002900
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002901void XGLAPI xglCmdCopyImageToBuffer(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002902 XGL_CMD_BUFFER cmdBuffer,
2903 XGL_IMAGE srcImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002904 XGL_IMAGE_LAYOUT srcImageLayout,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002905 XGL_BUFFER destBuffer,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002906 uint32_t regionCount,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002907 const XGL_BUFFER_IMAGE_COPY* pRegions);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002908
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002909void XGLAPI xglCmdCloneImageData(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002910 XGL_CMD_BUFFER cmdBuffer,
2911 XGL_IMAGE srcImage,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00002912 XGL_IMAGE_LAYOUT srcImageLayout,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002913 XGL_IMAGE destImage,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00002914 XGL_IMAGE_LAYOUT destImageLayout);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002915
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002916void XGLAPI xglCmdUpdateBuffer(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002917 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002918 XGL_BUFFER destBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002919 XGL_GPU_SIZE destOffset,
2920 XGL_GPU_SIZE dataSize,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002921 const uint32_t* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002922
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002923void XGLAPI xglCmdFillBuffer(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002924 XGL_CMD_BUFFER cmdBuffer,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002925 XGL_BUFFER destBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002926 XGL_GPU_SIZE destOffset,
2927 XGL_GPU_SIZE fillSize,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002928 uint32_t data);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002929
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002930void XGLAPI xglCmdClearColorImage(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002931 XGL_CMD_BUFFER cmdBuffer,
2932 XGL_IMAGE image,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002933 XGL_IMAGE_LAYOUT imageLayout,
Courtney Goeltzenleuchterd462fba2015-04-03 16:35:32 -06002934 XGL_CLEAR_COLOR color,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002935 uint32_t rangeCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002936 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2937
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002938void XGLAPI xglCmdClearDepthStencil(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002939 XGL_CMD_BUFFER cmdBuffer,
2940 XGL_IMAGE image,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002941 XGL_IMAGE_LAYOUT imageLayout,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002942 float depth,
2943 uint32_t stencil,
2944 uint32_t rangeCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002945 const XGL_IMAGE_SUBRESOURCE_RANGE* pRanges);
2946
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002947void XGLAPI xglCmdResolveImage(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002948 XGL_CMD_BUFFER cmdBuffer,
2949 XGL_IMAGE srcImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002950 XGL_IMAGE_LAYOUT srcImageLayout,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002951 XGL_IMAGE destImage,
Courtney Goeltzenleuchterb3efe9b2015-03-25 11:25:10 -06002952 XGL_IMAGE_LAYOUT destImageLayout,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002953 uint32_t rectCount,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002954 const XGL_IMAGE_RESOLVE* pRects);
2955
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002956void XGLAPI xglCmdSetEvent(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002957 XGL_CMD_BUFFER cmdBuffer,
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00002958 XGL_EVENT event,
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -06002959 XGL_PIPE_EVENT pipeEvent);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002960
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002961void XGLAPI xglCmdResetEvent(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002962 XGL_CMD_BUFFER cmdBuffer,
Courtney Goeltzenleuchter1e8f3be2015-03-24 18:02:34 -06002963 XGL_EVENT event,
2964 XGL_PIPE_EVENT pipeEvent);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002965
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002966void XGLAPI xglCmdWaitEvents(
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00002967 XGL_CMD_BUFFER cmdBuffer,
2968 const XGL_EVENT_WAIT_INFO* pWaitInfo);
2969
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002970void XGLAPI xglCmdPipelineBarrier(
Mike Stroyanfb80d5f2014-12-04 11:08:39 +00002971 XGL_CMD_BUFFER cmdBuffer,
2972 const XGL_PIPELINE_BARRIER* pBarrier);
2973
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002974void XGLAPI xglCmdBeginQuery(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002975 XGL_CMD_BUFFER cmdBuffer,
2976 XGL_QUERY_POOL queryPool,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002977 uint32_t slot,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002978 XGL_FLAGS flags);
2979
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002980void XGLAPI xglCmdEndQuery(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002981 XGL_CMD_BUFFER cmdBuffer,
2982 XGL_QUERY_POOL queryPool,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002983 uint32_t slot);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002984
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002985void XGLAPI xglCmdResetQueryPool(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002986 XGL_CMD_BUFFER cmdBuffer,
2987 XGL_QUERY_POOL queryPool,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002988 uint32_t startQuery,
2989 uint32_t queryCount);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002990
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002991void XGLAPI xglCmdWriteTimestamp(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002992 XGL_CMD_BUFFER cmdBuffer,
2993 XGL_TIMESTAMP_TYPE timestampType,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08002994 XGL_BUFFER destBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002995 XGL_GPU_SIZE destOffset);
2996
Mark Lobodzinski17caf572015-01-29 08:55:56 -06002997void XGLAPI xglCmdInitAtomicCounters(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06002998 XGL_CMD_BUFFER cmdBuffer,
2999 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003000 uint32_t startCounter,
3001 uint32_t counterCount,
3002 const uint32_t* pData);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003003
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003004void XGLAPI xglCmdLoadAtomicCounters(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003005 XGL_CMD_BUFFER cmdBuffer,
3006 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003007 uint32_t startCounter,
3008 uint32_t counterCount,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08003009 XGL_BUFFER srcBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003010 XGL_GPU_SIZE srcOffset);
3011
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003012void XGLAPI xglCmdSaveAtomicCounters(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003013 XGL_CMD_BUFFER cmdBuffer,
3014 XGL_PIPELINE_BIND_POINT pipelineBindPoint,
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003015 uint32_t startCounter,
3016 uint32_t counterCount,
Chia-I Wu1a28fe02015-01-01 07:55:04 +08003017 XGL_BUFFER destBuffer,
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003018 XGL_GPU_SIZE destOffset);
3019
Jeremy Hayesd65ae082015-01-14 16:17:08 -07003020XGL_RESULT XGLAPI xglCreateFramebuffer(
Jon Ashburnfa420992014-12-24 12:09:06 -07003021 XGL_DEVICE device,
3022 const XGL_FRAMEBUFFER_CREATE_INFO* pCreateInfo,
3023 XGL_FRAMEBUFFER* pFramebuffer);
3024
Jeremy Hayesd65ae082015-01-14 16:17:08 -07003025XGL_RESULT XGLAPI xglCreateRenderPass(
Jon Ashburnfa420992014-12-24 12:09:06 -07003026 XGL_DEVICE device,
3027 const XGL_RENDER_PASS_CREATE_INFO* pCreateInfo,
3028 XGL_RENDER_PASS* pRenderPass);
3029
Jon Ashburne13f1982015-02-02 09:58:11 -07003030void XGLAPI xglCmdBeginRenderPass(
3031 XGL_CMD_BUFFER cmdBuffer,
Courtney Goeltzenleuchter69894b72015-04-03 15:25:24 -06003032 const XGL_RENDER_PASS_BEGIN* pRenderPassBegin);
Jon Ashburne13f1982015-02-02 09:58:11 -07003033
3034void XGLAPI xglCmdEndRenderPass(
3035 XGL_CMD_BUFFER cmdBuffer,
3036 XGL_RENDER_PASS renderPass);
3037
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06003038#endif // XGL_PROTOTYPES
Mark Lobodzinski391bb6d2015-01-09 15:12:03 -06003039
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003040#ifdef __cplusplus
Mark Lobodzinskid47a1c42015-02-03 16:44:20 -06003041} // extern "C"
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003042#endif // __cplusplus
3043
3044#endif // __XGL_H__
3045
3046/******************************************************************************************
3047
3048 Open Issues + Missing Features
3049 ------------------------------
3050
3051 Here are a few higher level issues that we'd like to fix given time. A feature missing
3052 from this header (or the following list) isn't necessarily an indication that we want
3053 to drop that feature. Only that we either haven't thought of it or haven't had time
3054 to add it yet.
3055
3056 1) Transform Feedback (XFB)
3057
3058 OpenGL supports transform feedback (XFB). That is not included in this header, but
3059 we feel there is likely value in including it.
3060
3061 To incorporate trasnform feedback, we could create a new pipeline stage. This would
3062 be injected into a PSO by including the following in the chain:
3063
3064 typedef struct _XGL_XFB_CREATE_INFO
3065 {
3066 XGL_STRUCTURE_TYPE sType; // Must be XGL_STRUCTURE_TYPE_PIPELINE_XFB_CREATE_INFO
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003067 const void* pNext; // Pointer to next structure
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003068 // More XFB state, if any goes here
3069 } XGL_DEPTH_STENCIL_VIEW_CREATE_INFO;
3070
3071 We expect that only the shader-side configuration (via layout qualifiers or their IR
3072 equivalent) is used to configure the data written to each stream. When transform
3073 feedback is part of the pipeline, transform feedback binding would be available
3074 through a new API bind point:
3075
Piers Daniella7910a02015-02-06 16:41:39 -07003076 xglCmdBindTransformFeedbackMemoryView(
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003077 XGL_CMD_BUFFER cmdBuffer,
3078 XGL_PIPELINE_BIND_POINT pipelineBindPoint, // = GRAPHICS
Mark Lobodzinski17caf572015-01-29 08:55:56 -06003079 uint32_t index,
Piers Daniella7910a02015-02-06 16:41:39 -07003080 const XGL_MEMORY_VIEW_ATTACH_INFO* pMemView);
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003081
Jon Ashburnfa420992014-12-24 12:09:06 -07003082 2) "Bindless" + support for non-bindless hardware.
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003083
3084 XGL doesn't have bindless textures the way that GL does. It has resource descriptor
3085 sets, or resource tables. Resource tables can be nested and hold references to more
3086 resource tables. They are explicitly sized by the application and have no artificial
3087 upper size limit. An application can still attach as many textures as they want to
3088 a resource descriptor set, and can modify the set asynchronously to GPU work.
3089 Therefore, we can still have "unlimited textures". An application hoping to use
3090 bindless can use an index into a large table of textures and achieve the same effect.
3091
3092 For non-bindless hardware, with fixed (but potentially large) register files for
3093 resource bindings, the table approach should still work if a limited size can be
3094 reported somehow.
3095
Jon Ashburnfa420992014-12-24 12:09:06 -07003096 3) Clean up some remaining Mantle'isms.
Courtney Goeltzenleuchter2220a3b2014-07-24 08:36:15 -06003097
3098 Queue types: It's a bit hand wavey. In Mantle, we have a "universal" queue type that
3099 supports compute and graphics and a "compute" queue that only supports compute. Devices
3100 must support at least one universal queue and DMA queues are an extension. I would like
3101 to do the following (and have attempted to do that here, but am only half done):
3102
3103 a) Separate out the queue capabilities (compute, DMA, graphics) and allow support
3104 for any number of queues with any combination of capabilities each.
3105
3106 b) Allow compute-only or even DMA-only (like video capture or SDI) devices to
3107 be supported.
3108
3109 c) Allow new queue types to be supported by extensions without having to allocate
3110 bits in the bitfield until they're promoted to core.
3111
3112 Terminology: There are still some references to "targets" (render targets) and other
3113 terminology that has been changed from Mantle. Need to do a clean-up pass.
3114
3115 4) The window system interface is an extension in Mantle. We have not tried to fold
3116 any of it into core here. There is no mention of SwapBuffers, presentation, default
3117 framebuffers or anything like that. In the extension, presentation is queued up into
3118 the graphics queue just like any other command.
3119
3120*******************************************************************************************/