1 /*------------------------------------------------------------------------------*/
2 /*	gx_CTR.h																	*/
3 /*		nngx interface definitions												*/
4 /*																				*/
5 /*	Copyright (c) 2009, 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 
59 /*------------------------------------------------------------------------*
60  * NNGX Execution control API
61  *------------------------------------------------------------------------*/
62 /* command list object parameter */
63 #define NN_GX_CMDLIST_RUN_MODE          0x0200
64 #define NN_GX_CMDLIST_IS_RUNNING        0x0201
65 #define NN_GX_CMDLIST_USED_BUFSIZE      0x0202
66 #define NN_GX_CMDLIST_USED_REQCOUNT     0x0203
67 #define NN_GX_CMDLIST_MAX_BUFSIZE       0x0204
68 #define NN_GX_CMDLIST_MAX_REQCOUNT      0x0205
69 #define NN_GX_CMDLIST_TOP_BUFADDR       0x0206
70 #define NN_GX_CMDLIST_BINDING           0x0207
71 #define NN_GX_CMDLIST_CURRENT_BUFADDR   0x0208
72 #define NN_GX_CMDLIST_RUN_BUFSIZE       0x0209
73 #define NN_GX_CMDLIST_RUN_REQCOUNT      0x020a
74 #define NN_GX_CMDLIST_TOP_REQADDR       0x020b
75 #define NN_GX_CMDLIST_NEXT_REQTYPE      0x020c
76 #define NN_GX_CMDLIST_NEXT_REQINFO      0x020d
77 #define NN_GX_CMDLIST_HW_STATE          0x020e
78 #define NN_GX_CMDLIST_GAS_UPDATE        0x020f
79 
80 /* parameter for run mode */
81 #define NN_GX_CMDLIST_SERIAL_RUN        0x0300
82 #define NN_GX_CMDLIST_PARALLEL_RUN      0x0301
83 #define NN_GX_CMDLIST_SYNC_RUN          0x0302
84 
85 /* request type */
86 #define NN_GX_CMDLIST_REQTYPE_DMA       0x0310
87 #define NN_GX_CMDLIST_REQTYPE_RUN3D     0x0311
88 #define NN_GX_CMDLIST_REQTYPE_FILLMEM   0x0312
89 #define NN_GX_CMDLIST_REQTYPE_POSTTRANS 0x0313
90 #define NN_GX_CMDLIST_REQTYPE_COPYTEX   0x0314
91 
92 /* display id */
93 #define NN_GX_DISPLAY0                  0x0400
94 #define NN_GX_DISPLAY1                  0x0401
95 #define NN_GX_DISPLAY_BOTH              0x0402
96 #define NN_GX_DISPLAY0_EXT              0x0410
97 
98 NNGX_APICALL void NNGX_APIENTRY nngxGenCmdlists(GLsizei n, GLuint* cmdlists);
99 NNGX_APICALL void NNGX_APIENTRY nngxDeleteCmdlists(GLsizei n, const GLuint* cmdlists);
100 NNGX_APICALL void NNGX_APIENTRY nngxBindCmdlist(GLuint cmdlist);
101 NNGX_APICALL void NNGX_APIENTRY nngxCmdlistStorage(GLsizei bufsize, GLsizei requestcount);
102 NNGX_APICALL void NNGX_APIENTRY nngxRunCmdlist(void);
103 NNGX_APICALL void NNGX_APIENTRY nngxStopCmdlist(void);
104 NNGX_APICALL void NNGX_APIENTRY nngxReserveStopCmdlist(GLint id);
105 NNGX_APICALL void NNGX_APIENTRY nngxSplitDrawCmdlist(void);
106 NNGX_APICALL void NNGX_APIENTRY nngxClearCmdlist(void);
107 NNGX_APICALL void NNGX_APIENTRY nngxSetCmdlistCallback(void (*func)(GLint));
108 NNGX_APICALL void NNGX_APIENTRY nngxEnableCmdlistCallback(GLint id);
109 NNGX_APICALL void NNGX_APIENTRY nngxDisableCmdlistCallback(GLint id);
110 NNGX_APICALL void NNGX_APIENTRY nngxSetCmdlistParameteri(GLenum pname, GLint param);
111 NNGX_APICALL void NNGX_APIENTRY nngxGetCmdlistParameteri(GLenum pname, GLint* param);
112 NNGX_APICALL GLint NNGX_APIENTRY nngxCheckVSync(GLenum display);
113 NNGX_APICALL void NNGX_APIENTRY nngxWaitVSync(GLenum display);
114 NNGX_APICALL void NNGX_APIENTRY nngxSetVSyncCallback(GLenum display, void (*func)(GLenum));
115 NNGX_APICALL void NNGX_APIENTRY nngxWaitCmdlistDone(void);
116 NNGX_APICALL void NNGX_APIENTRY nngxAddVramDmaCommand(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei size);
117 NNGX_APICALL void NNGX_APIENTRY nngxAddVramDmaCommandNoCacheFlush(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei size);
118 NNGX_APICALL void NNGX_APIENTRY nngxClearFillCmdlist(GLuint data);
119 NNGX_APICALL void NNGX_APIENTRY nngxSetTimeout(GLint64EXT time, void (*callback)(void));
120 NNGX_APICALL void NNGX_APIENTRY nngxSetGasAutoAccumulationUpdate(GLint id);
121 NNGX_APICALL void NNGX_APIENTRY nngxAddL2BTransferCommand(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei width, GLsizei height, GLenum format, GLsizei blocksize);
122 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);
123 NNGX_APICALL void NNGX_APIENTRY nngxAddBlockImageCopyCommand(const GLvoid* srcaddr, GLsizei srcunit, GLsizei srcinterval, GLvoid* dstaddr, GLsizei dstunit, GLsizei dstinterval, GLsizei totalsize);
124 NNGX_APICALL void NNGX_APIENTRY nngxAddMemoryFillCommand(GLvoid* startaddr0, GLsizei size0, GLuint data0, GLsizei width0, GLvoid* startaddr1, GLsizei size1, GLuint data1, GLsizei width1);
125 NNGX_APICALL void NNGX_APIENTRY nngxFlush3DCommand(void);
126 
127 /*------------------------------------------------------------------------*
128  * NNGX Display control API
129  *------------------------------------------------------------------------*/
130 /* parameter for antialiase mode */
131 #define NN_GX_ANTIALIASE_NOT_USED       0x0500
132 #define NN_GX_ANTIALIASE_2x1            0x0501
133 #define NN_GX_ANTIALIASE_2x2            0x0502
134 
135 /* display buffer object parameter */
136 #define NN_GX_DISPLAYBUFFER_ADDRESS     0x0600
137 #define NN_GX_DISPLAYBUFFER_FORMAT      0x0601
138 #define NN_GX_DISPLAYBUFFER_WIDTH       0x0602
139 #define NN_GX_DISPLAYBUFFER_HEIGHT      0x0603
140 
141 /* display mode */
142 #define NN_GX_DISPLAYMODE_NORMAL        0x0700
143 #define NN_GX_DISPLAYMODE_RESERVED      0x0701
144 #define NN_GX_DISPLAYMODE_STEREO        0x0702
145 
146 /* display id aliase */
147 #define NN_GX_DISPLAY0_LEFT             NN_GX_DISPLAY0
148 #define NN_GX_DISPLAY0_RIGHT            NN_GX_DISPLAY0_EXT
149 
150 NNGX_APICALL void NNGX_APIENTRY nngxGenDisplaybuffers(GLsizei n, GLuint* buffers);
151 NNGX_APICALL void NNGX_APIENTRY nngxDeleteDisplaybuffers(GLsizei n, GLuint* buffers);
152 NNGX_APICALL void NNGX_APIENTRY nngxActiveDisplay(GLenum display);
153 NNGX_APICALL void NNGX_APIENTRY nngxBindDisplaybuffer(GLuint buffer);
154 NNGX_APICALL void NNGX_APIENTRY nngxDisplaybufferStorage(GLenum format, GLsizei width, GLsizei height, GLenum area);
155 NNGX_APICALL void NNGX_APIENTRY nngxDisplayEnv(GLint displayx, GLint displayy);
156 NNGX_APICALL void NNGX_APIENTRY nngxTransferRenderImage(GLuint buffer, GLenum mode, GLboolean yflip, GLint colorx, GLint colory);
157 NNGX_APICALL void NNGX_APIENTRY nngxSwapBuffers(GLenum display);
158 NNGX_APICALL void NNGX_APIENTRY nngxGetDisplaybufferParameteri(GLenum pname, GLint* param);
159 NNGX_APICALL void NNGX_APIENTRY nngxSetDisplayMode(GLenum mode);
160 NNGX_APICALL void NNGX_APIENTRY nngxTransferLinearImage(const GLvoid* srcaddr, GLuint dstid, GLenum target);
161 NNGX_APICALL void NNGX_APIENTRY nngxFilterBlockImage(const GLvoid* srcaddr, GLvoid* dstaddr, GLsizei width, GLsizei height, GLenum format);
162 NNGX_APICALL void NNGX_APIENTRY nngxSwapBuffersByAddress(GLenum display, const GLvoid* addr, const GLvoid* addrB, GLsizei width, GLenum format);
163 
164 /*------------------------------------------------------------------------*
165  * NNGX Command cache API
166  *------------------------------------------------------------------------*/
167 /* parameter for command state */
168 #define NN_GX_STATE_SHADERBINARY   0x00000001
169 #define NN_GX_STATE_SHADERPROGRAM  0x00000002
170 #define NN_GX_STATE_SHADERMODE     0x00000004
171 #define NN_GX_STATE_SHADERFLOAT    0x00000008
172 #define NN_GX_STATE_VSUNIFORM      0x00000010
173 #define NN_GX_STATE_FSUNIFORM      0x00000020
174 #define NN_GX_STATE_LUT            0x00000040
175 #define NN_GX_STATE_TEXTURE        0x00000080
176 #define NN_GX_STATE_FRAMEBUFFER    0x00000100
177 #define NN_GX_STATE_VERTEX         0x00000200
178 #define NN_GX_STATE_TRIOFFSET      0x00000400
179 #define NN_GX_STATE_FBACCESS       0x00000800
180 #define NN_GX_STATE_SCISSOR        0x00001000
181 #define NN_GX_STATE_OTHERS         0x00002000
182 #define NN_GX_STATE_ALL            0x00003fff
183 
184 /* parameter for command generation mode */
185 #define NN_GX_CMDGEN_MODE_CONDITIONAL    0x0800
186 #define NN_GX_CMDGEN_MODE_UNCONDITIONAL  0x0801
187 
188 NNGX_APICALL void NNGX_APIENTRY nngxStartCmdlistSave(void);
189 NNGX_APICALL void NNGX_APIENTRY nngxStopCmdlistSave(GLuint* bufferoffset, GLsizei* buffersize, GLuint* requestid, GLsizei* requestsize);
190 NNGX_APICALL void NNGX_APIENTRY nngxUseSavedCmdlist(GLuint cmdlist, GLuint bufferoffset, GLsizei buffersize, GLuint requestid, GLsizei requestsize, GLbitfield statemask, GLboolean copycmd);
191 NNGX_APICALL GLsizei NNGX_APIENTRY nngxExportCmdlist(GLuint cmdlist, GLuint bufferoffset, GLsizei buffersize, GLuint requestid, GLsizei requestsize, GLsizei datasize, GLvoid* data);
192 NNGX_APICALL void NNGX_APIENTRY nngxImportCmdlist(GLuint cmdlist, GLvoid* data, GLsizei datasize);
193 NNGX_APICALL void NNGX_APIENTRY nngxCopyCmdlist(GLuint scmdlist, GLuint dcmdlist);
194 NNGX_APICALL void NNGX_APIENTRY nngxValidateState(GLbitfield statemask, GLboolean drawelements);
195 NNGX_APICALL void NNGX_APIENTRY nngxUpdateState(GLbitfield statemask);
196 NNGX_APICALL void NNGX_APIENTRY nngxGetExportedCmdlistInfo(GLvoid* data, GLsizei* buffersize, GLsizei* requestsize, GLuint* bufferoffset);
197 NNGX_APICALL void NNGX_APIENTRY nngxSetCommandGenerationMode(GLenum mode);
198 NNGX_APICALL void NNGX_APIENTRY nngxGetCommandGenerationMode(GLenum* mode);
199 NNGX_APICALL void NNGX_APIENTRY nngxAdd3DCommand(const GLvoid* bufferaddr, GLsizei buffersize, GLboolean copycmd);
200 NNGX_APICALL void NNGX_APIENTRY nngxAdd3DCommandNoCacheFlush(const GLvoid* bufferaddr, GLsizei buffersize);
201 NNGX_APICALL void NNGX_APIENTRY nngxAddCmdlist(GLuint cmdlist);
202 NNGX_APICALL void NNGX_APIENTRY nngxGetUpdatedState(GLbitfield* statemask);
203 NNGX_APICALL void NNGX_APIENTRY nngxInvalidateState(GLbitfield statemask);
204 NNGX_APICALL void NNGX_APIENTRY nngxMoveCommandbufferPointer(GLint offset);
205 NNGX_APICALL void NNGX_APIENTRY nngxSuppressCommandGeneration(GLbitfield statemask);
206 
207 #ifdef __cplusplus
208 }
209 #endif
210 
211 #endif /* _NN_GX_CTR_H_ */
212