forked from nvpro-samples/gl_vk_threaded_cadscene
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnvcommandlist.h
304 lines (274 loc) · 10.5 KB
/
nvcommandlist.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
/* Copyright (c) 2014-2017, NVIDIA CORPORATION. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of NVIDIA CORPORATION nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef NV_COMMANDLIST_H__
#define NV_COMMANDLIST_H__
#include <GL/glew.h>
// bindless UBO
#ifndef GL_UNIFORM_BUFFER_UNIFIED_NV
#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E
#endif
#ifndef GL_UNIFORM_BUFFER_ADDRESS_NV
#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F
#endif
#ifndef GL_UNIFORM_BUFFER_LENGTH_NV
#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370
#endif
typedef struct {
GLuint header;
} TerminateSequenceCommandNV;
typedef struct {
GLuint header;
} NOPCommandNV;
typedef struct {
GLuint header;
GLuint count;
GLuint firstIndex;
GLuint baseVertex;
} DrawElementsCommandNV;
typedef struct {
GLuint header;
GLuint count;
GLuint first;
} DrawArraysCommandNV;
typedef struct {
GLuint header;
GLenum mode;
GLuint count;
GLuint instanceCount;
GLuint firstIndex;
GLuint baseVertex;
GLuint baseInstance;
} DrawElementsInstancedCommandNV;
typedef struct {
GLuint header;
GLenum mode;
GLuint count;
GLuint instanceCount;
GLuint first;
GLuint baseInstance;
} DrawArraysInstancedCommandNV;
typedef struct {
GLuint header;
GLuint addressLo;
GLuint addressHi;
GLuint typeSizeInByte;
} ElementAddressCommandNV;
typedef struct {
GLuint header;
GLuint index;
GLuint addressLo;
GLuint addressHi;
} AttributeAddressCommandNV;
typedef struct {
GLuint header;
GLushort index;
GLushort stage;
GLuint addressLo;
GLuint addressHi;
} UniformAddressCommandNV;
typedef struct {
GLuint header;
float red;
float green;
float blue;
float alpha;
} BlendColorCommandNV;
typedef struct {
GLuint header;
GLuint frontStencilRef;
GLuint backStencilRef;
} StencilRefCommandNV;
typedef struct {
GLuint header;
float lineWidth;
} LineWidthCommandNV;
typedef struct {
GLuint header;
float scale;
float bias;
} PolygonOffsetCommandNV;
typedef struct {
GLuint header;
float alphaRef;
} AlphaRefCommandNV;
typedef struct {
GLuint header;
GLuint x;
GLuint y;
GLuint width;
GLuint height;
} ViewportCommandNV; // only ViewportIndex 0
typedef struct {
GLuint header;
GLuint x;
GLuint y;
GLuint width;
GLuint height;
} ScissorCommandNV; // only ViewportIndex 0
typedef struct {
GLuint header;
GLuint frontFace; // 0 for CW, 1 for CCW
} FrontFaceCommandNV;
#ifndef GL_NV_command_list
#define GL_NV_command_list 1
# if defined(__MINGW32__) || defined(__CYGWIN__)
# define GLEXT_APIENTRY __stdcall
# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__)
# define GLEXT_APIENTRY __stdcall
# else
# define GLEXT_APIENTRY
# endif
#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000
#define GL_NOP_COMMAND_NV 0x0001
#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002
#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003
#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004
#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005
#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006
#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007
#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008
#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009
#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000a
#define GL_BLEND_COLOR_COMMAND_NV 0x000b
#define GL_STENCIL_REF_COMMAND_NV 0x000c
#define GL_LINE_WIDTH_COMMAND_NV 0x000d
#define GL_POLYGON_OFFSET_COMMAND_NV 0x000e
#define GL_ALPHA_REF_COMMAND_NV 0x000f
#define GL_VIEWPORT_COMMAND_NV 0x0010
#define GL_SCISSOR_COMMAND_NV 0x0011
#define GL_FRONT_FACE_COMMAND_NV 0x0012
typedef void (GLEXT_APIENTRY *PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint *states);
typedef void (GLEXT_APIENTRY *PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint *states);
typedef GLboolean (*PFNGLISSTATENVPROC)(GLuint state);
typedef void (GLEXT_APIENTRY *PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode);
typedef void (GLEXT_APIENTRY *PFNGLDRAWCOMMANDSNVPROC)(GLenum mode, GLuint buffer, const GLintptr* indirects, const GLsizei* sizes, GLuint count);
typedef void (GLEXT_APIENTRY *PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum mode, const GLuint64* indirects, const GLsizei* sizes, GLuint count);
typedef void (GLEXT_APIENTRY *PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr* indirects, const GLsizei* sizes,
const GLuint* states, const GLuint* fbos, GLuint count);
typedef void (GLEXT_APIENTRY *PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64* indirects, const GLsizei* sizes,
const GLuint* states, const GLuint* fbos, GLuint count);
typedef void (GLEXT_APIENTRY *PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint *lists);
typedef void (GLEXT_APIENTRY *PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint *lists);
typedef GLboolean (GLEXT_APIENTRY *PFNGLISCOMMANDLISTNVPROC)(GLuint list);
typedef void (GLEXT_APIENTRY *PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)(GLuint list, GLuint segment, const void** indirects,
const GLsizei* sizes, const GLuint* states, const GLuint* fbos, GLuint count);
typedef void (GLEXT_APIENTRY *PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments);
typedef void (GLEXT_APIENTRY *PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list);
typedef void (GLEXT_APIENTRY *PFNGLCALLCOMMANDLISTNVPROC)(GLuint list);
typedef GLuint (GLEXT_APIENTRY *PFNGLGETCOMMANDHEADERNVPROC)(GLenum id, GLuint tokenSize);
typedef GLushort(GLEXT_APIENTRY* PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype);
extern PFNGLCREATESTATESNVPROC __nvcCreateStatesNV;
inline void glCreateStatesNV(GLsizei n, GLuint *states)
{
__nvcCreateStatesNV(n,states);
}
extern PFNGLDELETESTATESNVPROC __nvcDeleteStatesNV;
inline void glDeleteStatesNV(GLsizei n, const GLuint *states)
{
__nvcDeleteStatesNV(n,states);
}
extern PFNGLISSTATENVPROC __nvcIsStateNV;
inline GLboolean glIsStateNV(GLuint state)
{
return __nvcIsStateNV(state);
}
extern PFNGLSTATECAPTURENVPROC __nvcStateCaptureNV;
inline void glStateCaptureNV(GLuint state, GLenum mode)
{
__nvcStateCaptureNV(state,mode);
}
extern PFNGLDRAWCOMMANDSNVPROC __nvcDrawCommandsNV;
inline void glDrawCommandsNV(GLenum mode, GLuint buffer, const GLintptr* indirects, const GLsizei* sizes, GLuint count)
{
__nvcDrawCommandsNV(mode,buffer,indirects,sizes,count);
}
extern PFNGLDRAWCOMMANDSADDRESSNVPROC __nvcDrawCommandsAddressNV;
inline void glDrawCommandsAddressNV(GLenum mode, const GLuint64* indirects, const GLsizei* sizes, GLuint count)
{
__nvcDrawCommandsAddressNV(mode,indirects,sizes,count);
}
extern PFNGLDRAWCOMMANDSSTATESNVPROC __nvcDrawCommandsStatesNV;
inline void glDrawCommandsStatesNV(GLuint buffer, const GLintptr* indirects, const GLsizei* sizes,
const GLuint* states, const GLuint* fbos, GLuint count)
{
__nvcDrawCommandsStatesNV(buffer,indirects,sizes,states,fbos,count);
}
extern PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC __nvcDrawCommandsStatesAddressNV;
inline void glDrawCommandsStatesAddressNV(const GLuint64* indirects, const GLsizei* sizes,
const GLuint* states, const GLuint* fbos, GLuint count)
{
__nvcDrawCommandsStatesAddressNV(indirects,sizes,states,fbos,count);
}
extern PFNGLCREATECOMMANDLISTSNVPROC __nvcCreateCommandListsNV;
inline void glCreateCommandListsNV(GLsizei n, GLuint *lists)
{
__nvcCreateCommandListsNV(n,lists);
}
extern PFNGLDELETECOMMANDLISTSNVPROC __nvcDeleteCommandListsNV;
inline void glDeleteCommandListsNV(GLsizei n, const GLuint *lists)
{
__nvcDeleteCommandListsNV(n,lists);
}
extern PFNGLISCOMMANDLISTNVPROC __nvcIsCommandListNV;
inline GLboolean glIsCommandListNV(GLuint list)
{
return __nvcIsCommandListNV(list);
}
extern PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC __nvcListDrawCommandsStatesClientNV;
inline void glListDrawCommandsStatesClientNV(GLuint list, GLuint segment, const void** indirects,
const GLsizei* sizes, const GLuint* states, const GLuint* fbos, GLuint count)
{
__nvcListDrawCommandsStatesClientNV(list,segment,indirects,sizes,states,fbos,count);
}
extern PFNGLCOMMANDLISTSEGMENTSNVPROC __nvcCommandListSegmentsNV;
inline void glCommandListSegmentsNV(GLuint list, GLuint segments)
{
__nvcCommandListSegmentsNV(list,segments);
}
extern PFNGLCOMPILECOMMANDLISTNVPROC __nvcCompileCommandListNV;
inline void glCompileCommandListNV(GLuint list)
{
__nvcCompileCommandListNV(list);
}
extern PFNGLCALLCOMMANDLISTNVPROC __nvcCallCommandListNV;
inline void glCallCommandListNV(GLuint list)
{
__nvcCallCommandListNV(list);
}
extern PFNGLGETCOMMANDHEADERNVPROC __nvcGetCommandHeaderNV;
inline GLuint glGetCommandHeaderNV(GLenum tokenId, GLuint tokenSize)
{
return __nvcGetCommandHeaderNV(tokenId,tokenSize);
}
extern PFNGLGETSTAGEINDEXNVPROC __nvcGetStageIndexNV;
inline GLushort glGetStageIndexNV(GLenum shadertype)
{
return __nvcGetStageIndexNV(shadertype);
}
#endif
int init_NV_command_list(void (*fnGetProc(const char *name))());
#endif