1 /*------------------------------------------------------------------------------*/
2 /*	gx_CTR.h																	*/
3 /*		nngx interface definitions												*/
4 /*																				*/
5 /*	Copyright (c) 2009-2012, Digital Media Professional. All rights reserved.	*/
6 /*																				*/
7 /*------------------------------------------------------------------------------*/
8 
9 #ifndef _NN_GX_CTR_H_
10 #define _NN_GX_CTR_H_
11 
12 #include <GLES2/gl2.h>
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 #if defined(WIN32) || defined(__VC32__)             /* Win32 */
19 #   if defined (NNGX_EXPORTS)
20 #       define NNGX_APICALL __declspec(dllexport)
21 #   else
22 #       define NNGX_APICALL __declspec(dllimport)
23 #   endif
24 #elif defined (__ARMCC_VERSION)                      /* ADS */
25 #   define NNGX_APICALL
26 #elif defined (__SYMBIAN32__) && defined (__GCC32__) /* Symbian GCC */
27 #   define NNGX_APICALL __declspec(dllexport)
28 #elif defined (__GNUC__)                             /* GCC dependencies (kludge) */
29 #   define NNGX_APICALL
30 #endif
31 
32 #if !defined (NNGX_APICALL)
33 #   error Unsupported platform!
34 #endif
35 
36 #define NNGX_APIENTRY
37 
38 /*------------------------------------------------------------------------*
39  * NNGX Initialize API
40  *------------------------------------------------------------------------*/
41 /* parameter for allocator and deallocator */
42 /* allocation area */
43 #define NN_GX_MEM_FCRAM             0x00010000
44 #define NN_GX_MEM_VRAMA             0x00020000
45 #define NN_GX_MEM_VRAMB             0x00030000
46 
47 /* allocation usage */
48 #define NN_GX_MEM_SYSTEM            0x0100
49 #define NN_GX_MEM_TEXTURE           0x0101
50 #define NN_GX_MEM_VERTEXBUFFER      0x0102
51 #define NN_GX_MEM_RENDERBUFFER      0x0103
52 #define NN_GX_MEM_DISPLAYBUFFER     0x0104
53 #define NN_GX_MEM_COMMANDBUFFER     0x0105
54 
55 NNGX_APICALL GLboolean NNGX_APIENTRY nngxInitialize(GLvoid* (*allocator)(GLenum, GLenum, GLuint, GLsizei), void (*deallocator)(GLenum, GLenum, GLuint, GLvoid*));
56 NNGX_APICALL void NNGX_APIENTRY nngxFinalize(void);
57 NNGX_APICALL void NNGX_APIENTRY nngxGetAllocator(GLvoid* (**allocator)(GLenum, GLenum, GLuint, GLsizei), void (**deallocator)(GLenum, GLenum, GLuint, GLvoid*));
58 NNGX_APICALL GLboolean NNGX_APIENTRY nngxGetIsInitialized(void);
59 NNGX_APICALL GLsizei NNGX_APIENTRY nngxGetInitializationCommand(GLsizei datasize, GLvoid* data);
60 
61 /*------------------------------------------------------------------------*
62  * NNGX Execution control API
63  *------------------------------------------------------------------------*/
64 /* command list object parameter */
65 #define NN_GX_CMDLIST_RUN_MODE          0x0200
66 #define NN_GX_CMDLIST_IS_RUNNING        0x0201
67 #define NN_GX_CMDLIST_USED_BUFSIZE      0x0202
68 #define NN_GX_CMDLIST_USED_REQCOUNT     0x0203
69 #define NN_GX_CMDLIST_MAX_BUFSIZE       0x0204
70 #define NN_GX_CMDLIST_MAX_REQCOUNT      0x0205
71 #define NN_GX_CMDLIST_TOP_BUFADDR       0x0206
72 #define NN_GX_CMDLIST_BINDING           0x0207
73 #define NN_GX_CMDLIST_CURRENT_BUFADDR   0x0208
74 #define NN_GX_CMDLIST_RUN_BUFSIZE       0x0209
75 #define NN_GX_CMDLIST_RUN_REQCOUNT      0x020a
76 #define NN_GX_CMDLIST_TOP_REQADDR       0x020b
77 #define NN_GX_CMDLIST_NEXT_REQTYPE      0x020c
78 #define NN_GX_CMDLIST_NEXT_REQINFO      0x020d
79 #define NN_GX_CMDLIST_HW_STATE          0x020e
80 #define NN_GX_CMDLIST_GAS_UPDATE        0x020f
81 
82 /* parameter for run mode */
83 #define NN_GX_CMDLIST_SERIAL_RUN        0x0300
84 #define NN_GX_CMDLIST_PARALLEL_RUN      0x0301
85 #define NN_GX_CMDLIST_SYNC_RUN          0x0302
86 
87 /* request type */
88 #define NN_GX_CMDLIST_REQTYPE_DMA       0x0310
89 #define NN_GX_CMDLIST_REQTYPE_RUN3D     0x0311
90 #define NN_GX_CMDLIST_REQTYPE_FILLMEM   0x0312
91 #define NN_GX_CMDLIST_REQTYPE_POSTTRANS 0x0313
92 #define NN_GX_CMDLIST_REQTYPE_COPYTEX   0x0314
93 
94 /* display id */
95 #define NN_GX_DISPLAY0                  0x0400
96 #define NN_GX_DISPLAY1                  0x0401
97 #define NN_GX_DISPLAY_BOTH              0x0402
98 #define NN_GX_DISPLAY0_EXT              0x0410
99 
100 NNGX_APICALL void NNGX_APIENTRY nngxGenCmdlists(GLsizei n, GLuint* cmdlists);
101 NNGX_APICALL void NNGX_APIENTRY nngxDeleteCmdlists(GLsizei n, const GLuint* cmdlists);
102 NNGX_APICALL void NNGX_APIENTRY nngxBindCmdlist(GLuint cmdlist);
103 NNGX_APICALL void NNGX_APIENTRY nngxCmdlistStorage(GLsizei bufsize, GLsizei requestcount);
104 NNGX_APICALL void NNGX_APIENTRY nngxRunCmdlist(void);
105 NNGX_APICALL void NNGX_APIENTRY nngxRunCmdlistByID(GLuint cmdlist);
106 NNGX_APICALL void NNGX_APIENTRY nngxStopCmdlist(void);
107 NNGX_APICALL void NNGX_APIENTRY nngxReserveStopCmdlist(GLint id);
108 NNGX_APICALL void NNGX_APIENTRY nngxSplitDrawCmdlist(void);
109 NNGX_APICALL void NNGX_APIENTRY nngxClearCmdlist(void);
110 NNGX_APICALL void NNGX_APIENTRY nngxSetCmdlistCallback(void (*func)(GLint));
111 NNGX_APICALL void NNGX_APIENTRY nngxEnableCmdlistCallback(GLint id);
112 NNGX_APICALL void NNGX_APIENTRY nngxDisableCmdlistCallback(GLint id);
113 NNGX_APICALL void NNGX_APIENTRY nngxSetCmdlistParameteri(GLenum pname, GLint param);
114 NNGX_APICALL void NNGX_APIENTRY nngxGetCmdlistParameteri(GLenum pname, GLint* param);
115 NNGX_APICALL GLint NNGX_APIENTRY nngxCheckVSync(GLenum display);
116 NNGX_APICALL void NNGX_APIENTRY nngxWaitVSync(GLenum display);
117 NNGX_APICALL void NNGX_APIENTRY nngxSetVSyncCallback(GLenum display, void (*func)(GLenum));
118 NNGX_APICALL void NNGX_APIENTRY nngxWaitCmdlistDone(void);
119 NNGX_APICALL void NNGX_APIENTRY nngxAddVramDmaCommand(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei size);
120 NNGX_APICALL void NNGX_APIENTRY nngxAddVramDmaCommandNoCacheFlush(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei size);
121 NNGX_APICALL void NNGX_APIENTRY nngxClearFillCmdlist(GLuint data);
122 NNGX_APICALL void NNGX_APIENTRY nngxSetTimeout(GLint64EXT time, void (*callback)(void));
123 NNGX_APICALL void NNGX_APIENTRY nngxSetGasAutoAccumulationUpdate(GLint id);
124 NNGX_APICALL void NNGX_APIENTRY nngxAddL2BTransferCommand(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei width, GLsizei height, GLenum format, GLsizei blocksize);
125 NNGX_APICALL void NNGX_APIENTRY nngxAddB2LTransferCommand(const GLvoid* srcaddr, GLsizei srcwidth, GLsizei srcheight, GLenum srcformat, GLvoid* dstaddr, GLsizei dstwidth, GLsizei dstheight, GLenum dstformat, GLenum aamode, GLboolean yflip, GLsizei blocksize);
126 NNGX_APICALL void NNGX_APIENTRY nngxAddBlockImageCopyCommand(const GLvoid* srcaddr, GLsizei srcunit, GLsizei srcinterval, GLvoid* dstaddr, GLsizei dstunit, GLsizei dstinterval, GLsizei totalsize);
127 NNGX_APICALL void NNGX_APIENTRY nngxAddMemoryFillCommand(GLvoid* startaddr0, GLsizei size0, GLuint data0, GLsizei width0, GLvoid* startaddr1, GLsizei size1, GLuint data1, GLsizei width1);
128 NNGX_APICALL void NNGX_APIENTRY nngxFlush3DCommand(void);
129 NNGX_APICALL void NNGX_APIENTRY nngxFlush3DCommandNoCacheFlush(void);
130 NNGX_APICALL void NNGX_APIENTRY nngxFlush3DCommandPartially(GLsizei buffersize);
131 NNGX_APICALL void NNGX_APIENTRY nngxAddJumpCommand(const GLvoid* bufferaddr, GLsizei buffersize);
132 NNGX_APICALL void NNGX_APIENTRY nngxAddSubroutineCommand(const GLvoid* bufferaddr, GLsizei buffersize);
133 NNGX_APICALL GLboolean NNGX_APIENTRY nngxGetIsRunning(void);
134 
135 /*------------------------------------------------------------------------*
136  * NNGX Display control API
137  *------------------------------------------------------------------------*/
138 /* parameter for antialiase mode */
139 #define NN_GX_ANTIALIASE_NOT_USED       0x0500
140 #define NN_GX_ANTIALIASE_2x1            0x0501
141 #define NN_GX_ANTIALIASE_2x2            0x0502
142 
143 /* display buffer object parameter */
144 #define NN_GX_DISPLAYBUFFER_ADDRESS     0x0600
145 #define NN_GX_DISPLAYBUFFER_FORMAT      0x0601
146 #define NN_GX_DISPLAYBUFFER_WIDTH       0x0602
147 #define NN_GX_DISPLAYBUFFER_HEIGHT      0x0603
148 
149 /* display mode */
150 #define NN_GX_DISPLAYMODE_NORMAL        0x0700
151 #define NN_GX_DISPLAYMODE_RESERVED      0x0701
152 #define NN_GX_DISPLAYMODE_STEREO        0x0702
153 
154 /* display id aliase */
155 #define NN_GX_DISPLAY0_LEFT             NN_GX_DISPLAY0
156 #define NN_GX_DISPLAY0_RIGHT            NN_GX_DISPLAY0_EXT
157 
158 NNGX_APICALL void NNGX_APIENTRY nngxGenDisplaybuffers(GLsizei n, GLuint* buffers);
159 NNGX_APICALL void NNGX_APIENTRY nngxDeleteDisplaybuffers(GLsizei n, GLuint* buffers);
160 NNGX_APICALL void NNGX_APIENTRY nngxActiveDisplay(GLenum display);
161 NNGX_APICALL void NNGX_APIENTRY nngxBindDisplaybuffer(GLuint buffer);
162 NNGX_APICALL void NNGX_APIENTRY nngxDisplaybufferStorage(GLenum format, GLsizei width, GLsizei height, GLenum area);
163 NNGX_APICALL void NNGX_APIENTRY nngxDisplayEnv(GLint displayx, GLint displayy);
164 NNGX_APICALL void NNGX_APIENTRY nngxTransferRenderImage(GLuint buffer, GLenum mode, GLboolean yflip, GLint colorx, GLint colory);
165 NNGX_APICALL void NNGX_APIENTRY nngxSwapBuffers(GLenum display);
166 NNGX_APICALL void NNGX_APIENTRY nngxGetDisplaybufferParameteri(GLenum pname, GLint* param);
167 NNGX_APICALL void NNGX_APIENTRY nngxSetDisplayMode(GLenum mode);
168 NNGX_APICALL void NNGX_APIENTRY nngxTransferLinearImage(const GLvoid* srcaddr, GLuint dstid, GLenum target);
169 NNGX_APICALL void NNGX_APIENTRY nngxFilterBlockImage(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei width, GLsizei height, GLenum format);
170 NNGX_APICALL void NNGX_APIENTRY nngxSwapBuffersByAddress(GLenum display, const GLvoid* addr, const GLvoid* addrB, GLsizei width, GLenum format);
171 
172 /*------------------------------------------------------------------------*
173  * NNGX Command cache API
174  *------------------------------------------------------------------------*/
175 /* parameter for command state */
176 #define NN_GX_STATE_SHADERBINARY   0x00000001
177 #define NN_GX_STATE_SHADERPROGRAM  0x00000002
178 #define NN_GX_STATE_SHADERMODE     0x00000004
179 #define NN_GX_STATE_SHADERFLOAT    0x00000008
180 #define NN_GX_STATE_VSUNIFORM      0x00000010
181 #define NN_GX_STATE_FSUNIFORM      0x00000020
182 #define NN_GX_STATE_LUT            0x00000040
183 #define NN_GX_STATE_TEXTURE        0x00000080
184 #define NN_GX_STATE_FRAMEBUFFER    0x00000100
185 #define NN_GX_STATE_VERTEX         0x00000200
186 #define NN_GX_STATE_TRIOFFSET      0x00000400
187 #define NN_GX_STATE_FBACCESS       0x00000800
188 #define NN_GX_STATE_SCISSOR        0x00001000
189 #define NN_GX_STATE_OTHERS         0x00002000
190 #define NN_GX_STATE_ALL            0x00003fff
191 
192 /* parameter for command generation mode */
193 #define NN_GX_CMDGEN_MODE_CONDITIONAL    0x0800
194 #define NN_GX_CMDGEN_MODE_UNCONDITIONAL  0x0801
195 
196 NNGX_APICALL void NNGX_APIENTRY nngxStartCmdlistSave(void);
197 NNGX_APICALL void NNGX_APIENTRY nngxStopCmdlistSave(GLuint* bufferoffset, GLsizei* buffersize, GLuint* requestid, GLsizei* requestsize);
198 NNGX_APICALL void NNGX_APIENTRY nngxUseSavedCmdlist(GLuint cmdlist, GLuint bufferoffset, GLsizei buffersize, GLuint requestid, GLsizei requestsize, GLbitfield statemask, GLboolean copycmd);
199 NNGX_APICALL void NNGX_APIENTRY nngxUseSavedCmdlistNoCacheFlush(GLuint cmdlist, GLuint bufferoffset, GLsizei buffersize, GLuint requestid, GLsizei requestsize, GLbitfield statemask);
200 NNGX_APICALL GLsizei NNGX_APIENTRY nngxExportCmdlist(GLuint cmdlist, GLuint bufferoffset, GLsizei buffersize, GLuint requestid, GLsizei requestsize, GLsizei datasize, GLvoid* data);
201 NNGX_APICALL void NNGX_APIENTRY nngxImportCmdlist(GLuint cmdlist, GLvoid* data, GLsizei datasize);
202 NNGX_APICALL void NNGX_APIENTRY nngxCopyCmdlist(GLuint scmdlist, GLuint dcmdlist);
203 NNGX_APICALL void NNGX_APIENTRY nngxValidateState(GLbitfield statemask, GLboolean drawelements);
204 NNGX_APICALL void NNGX_APIENTRY nngxUpdateState(GLbitfield statemask);
205 NNGX_APICALL void NNGX_APIENTRY nngxGetExportedCmdlistInfo(GLvoid* data, GLsizei* buffersize, GLsizei* requestsize, GLuint* bufferoffset);
206 NNGX_APICALL void NNGX_APIENTRY nngxSetCommandGenerationMode(GLenum mode);
207 NNGX_APICALL void NNGX_APIENTRY nngxGetCommandGenerationMode(GLenum* mode);
208 NNGX_APICALL void NNGX_APIENTRY nngxAdd3DCommand(const GLvoid* bufferaddr, GLsizei buffersize, GLboolean copycmd);
209 NNGX_APICALL void NNGX_APIENTRY nngxAdd3DCommandNoCacheFlush(const GLvoid* bufferaddr, GLsizei buffersize);
210 NNGX_APICALL void NNGX_APIENTRY nngxAddCmdlist(GLuint cmdlist);
211 NNGX_APICALL void NNGX_APIENTRY nngxGetUpdatedState(GLbitfield* statemask);
212 NNGX_APICALL void NNGX_APIENTRY nngxInvalidateState(GLbitfield statemask);
213 NNGX_APICALL void NNGX_APIENTRY nngxMoveCommandbufferPointer(GLint offset);
214 
215 /*------------------------------------------------------------------------*
216  * NNGX Profiling API
217  *------------------------------------------------------------------------*/
218  /* profling items */
219 #define NN_GX_PROFILING_BUSY                0x0900
220 #define NN_GX_PROFILING_INTERRUPT           0x0901
221 #define NN_GX_PROFILING_VERTEX_SHADER0      0x0902
222 #define NN_GX_PROFILING_VERTEX_SHADER1      0x0903
223 #define NN_GX_PROFILING_VERTEX_SHADER2      0x0904
224 #define NN_GX_PROFILING_VERTEX_SHADER3      0x0905
225 #define NN_GX_PROFILING_VERTEX_CACHE        0x0906
226 #define NN_GX_PROFILING_POLYGON             0x0907
227 #define NN_GX_PROFILING_FRAGMENT            0x0908
228 #define NN_GX_PROFILING_MEMORY_ACCESS       0x0909
229 
230 /* profiling parameter */
231 #define NN_GX_PROFILING_BUSY_SAMPLING_TIME  0x0910
232 #define NN_GX_PROFILING_BUSY_SAMPLING_TIME_MICRO_SECOND  0x0915
233 #define NN_GX_PROFILING_BUSY_SAMPLING_TIME_NANO_SECOND   0x0916
234 #define NN_GX_PROFILING_BUSY_SAMPLING_COUNT 0x0911
235 #define NN_GX_PROFILING_INTERRUPT_ENABLE    0x0912
236 #define NN_GX_PROFILING_INTERRUPT_TRIGGER   0x0913
237 #define NN_GX_PROFILING_INTERRUPT_IS_LOGGING   0x0914
238 
239 /* size of buffer required to get profiling results */
240 #define NN_GX_PROFILING_RESULT_BUFSIZE_BUSY             4
241 #define NN_GX_PROFILING_RESULT_BUFSIZE_INTERRUPT        48
242 #define NN_GX_PROFILING_RESULT_BUFSIZE_VERTEX_SHADER0   5
243 #define NN_GX_PROFILING_RESULT_BUFSIZE_VERTEX_SHADER1   5
244 #define NN_GX_PROFILING_RESULT_BUFSIZE_VERTEX_SHADER2   5
245 #define NN_GX_PROFILING_RESULT_BUFSIZE_VERTEX_SHADER3   5
246 #define NN_GX_PROFILING_RESULT_BUFSIZE_VERTEX_CACHE     1
247 #define NN_GX_PROFILING_RESULT_BUFSIZE_POLYGON          3
248 #define NN_GX_PROFILING_RESULT_BUFSIZE_FRAGMENT         1
249 #define NN_GX_PROFILING_RESULT_BUFSIZE_MEMORY_ACCESS    18
250 
251 NNGX_APICALL void NNGX_APIENTRY nngxStartProfiling(GLenum item);
252 NNGX_APICALL void NNGX_APIENTRY nngxStopProfiling(GLenum item);
253 NNGX_APICALL void NNGX_APIENTRY nngxGetProfilingResult(GLenum item, GLuint* result);
254 NNGX_APICALL void NNGX_APIENTRY nngxSetProfilingParameter(GLenum pname, GLuint param);
255 NNGX_APICALL void NNGX_APIENTRY nngxGetProfilingParameter(GLenum pname, GLuint* param);
256 
257 #ifdef __cplusplus
258 }
259 #endif
260 
261 #endif /* _NN_GX_CTR_H_ */
262