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