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