1GL_ENTRY(void, glActiveTexture, GLenum texture) 2GL_ENTRY(void, glAttachShader, GLuint program, GLuint shader) 3GL_ENTRY(void, glBindAttribLocation, GLuint program, GLuint index, const GLchar* name) 4GL_ENTRY(void, glBindBuffer, GLenum target, GLuint buffer) 5GL_ENTRY(void, glBindFramebuffer, GLenum target, GLuint framebuffer) 6GL_ENTRY(void, glBindRenderbuffer, GLenum target, GLuint renderbuffer) 7GL_ENTRY(void, glBindTexture, GLenum target, GLuint texture) 8GL_ENTRY(void, glBlendColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) 9GL_ENTRY(void, glBlendEquation, GLenum mode ) 10GL_ENTRY(void, glBlendEquationSeparate, GLenum modeRGB, GLenum modeAlpha) 11GL_ENTRY(void, glBlendFunc, GLenum sfactor, GLenum dfactor) 12GL_ENTRY(void, glBlendFuncSeparate, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) 13GL_ENTRY(void, glBufferData, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) 14GL_ENTRY(void, glBufferSubData, GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) 15GL_ENTRY(GLenum, glCheckFramebufferStatus, GLenum target) 16GL_ENTRY(void, glClear, GLbitfield mask) 17GL_ENTRY(void, glClearColor, GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) 18GL_ENTRY(void, glClearDepthf, GLclampf depth) 19GL_ENTRY(void, glClearStencil, GLint s) 20GL_ENTRY(void, glColorMask, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) 21GL_ENTRY(void, glCompileShader, GLuint shader) 22GL_ENTRY(void, glCompressedTexImage2D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data) 23GL_ENTRY(void, glCompressedTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data) 24GL_ENTRY(void, glCopyTexImage2D, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) 25GL_ENTRY(void, glCopyTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) 26GL_ENTRY(GLuint, glCreateProgram, void) 27GL_ENTRY(GLuint, glCreateShader, GLenum type) 28GL_ENTRY(void, glCullFace, GLenum mode) 29GL_ENTRY(void, glDeleteBuffers, GLsizei n, const GLuint* buffers) 30GL_ENTRY(void, glDeleteFramebuffers, GLsizei n, const GLuint* framebuffers) 31GL_ENTRY(void, glDeleteProgram, GLuint program) 32GL_ENTRY(void, glDeleteRenderbuffers, GLsizei n, const GLuint* renderbuffers) 33GL_ENTRY(void, glDeleteShader, GLuint shader) 34GL_ENTRY(void, glDeleteTextures, GLsizei n, const GLuint* textures) 35GL_ENTRY(void, glDepthFunc, GLenum func) 36GL_ENTRY(void, glDepthMask, GLboolean flag) 37GL_ENTRY(void, glDepthRangef, GLclampf zNear, GLclampf zFar) 38GL_ENTRY(void, glDetachShader, GLuint program, GLuint shader) 39GL_ENTRY(void, glDisable, GLenum cap) 40GL_ENTRY(void, glDisableVertexAttribArray, GLuint index) 41GL_ENTRY(void, glDrawArrays, GLenum mode, GLint first, GLsizei count) 42GL_ENTRY(void, glDrawElements, GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) 43GL_ENTRY(void, glEnable, GLenum cap) 44GL_ENTRY(void, glEnableVertexAttribArray, GLuint index) 45GL_ENTRY(void, glFinish, void) 46GL_ENTRY(void, glFlush, void) 47GL_ENTRY(void, glFramebufferRenderbuffer, GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) 48GL_ENTRY(void, glFramebufferTexture2D, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) 49GL_ENTRY(void, glFrontFace, GLenum mode) 50GL_ENTRY(void, glGenBuffers, GLsizei n, GLuint* buffers) 51GL_ENTRY(void, glGenerateMipmap, GLenum target) 52GL_ENTRY(void, glGenFramebuffers, GLsizei n, GLuint* framebuffers) 53GL_ENTRY(void, glGenRenderbuffers, GLsizei n, GLuint* renderbuffers) 54GL_ENTRY(void, glGenTextures, GLsizei n, GLuint* textures) 55GL_ENTRY(void, glGetActiveAttrib, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) 56GL_ENTRY(void, glGetActiveUniform, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name) 57GL_ENTRY(void, glGetAttachedShaders, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) 58GL_ENTRY(int, glGetAttribLocation, GLuint program, const GLchar* name) 59GL_ENTRY(void, glGetBooleanv, GLenum pname, GLboolean* params) 60GL_ENTRY(void, glGetBufferParameteriv, GLenum target, GLenum pname, GLint* params) 61GL_ENTRY(GLenum, glGetError, void) 62GL_ENTRY(void, glGetFloatv, GLenum pname, GLfloat* params) 63GL_ENTRY(void, glGetFramebufferAttachmentParameteriv, GLenum target, GLenum attachment, GLenum pname, GLint* params) 64GL_ENTRY(void, glGetIntegerv, GLenum pname, GLint* params) 65GL_ENTRY(void, glGetProgramiv, GLuint program, GLenum pname, GLint* params) 66GL_ENTRY(void, glGetProgramInfoLog, GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog) 67GL_ENTRY(void, glGetRenderbufferParameteriv, GLenum target, GLenum pname, GLint* params) 68GL_ENTRY(void, glGetShaderiv, GLuint shader, GLenum pname, GLint* params) 69GL_ENTRY(void, glGetShaderInfoLog, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog) 70GL_ENTRY(void, glGetShaderPrecisionFormat, GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) 71GL_ENTRY(void, glGetShaderSource, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) 72GL_ENTRY(const GLubyte*, glGetString, GLenum name) 73GL_ENTRY(void, glGetTexParameterfv, GLenum target, GLenum pname, GLfloat* params) 74GL_ENTRY(void, glGetTexParameteriv, GLenum target, GLenum pname, GLint* params) 75GL_ENTRY(void, glGetUniformfv, GLuint program, GLint location, GLfloat* params) 76GL_ENTRY(void, glGetUniformiv, GLuint program, GLint location, GLint* params) 77GL_ENTRY(int, glGetUniformLocation, GLuint program, const GLchar* name) 78GL_ENTRY(void, glGetVertexAttribfv, GLuint index, GLenum pname, GLfloat* params) 79GL_ENTRY(void, glGetVertexAttribiv, GLuint index, GLenum pname, GLint* params) 80GL_ENTRY(void, glGetVertexAttribPointerv, GLuint index, GLenum pname, GLvoid** pointer) 81GL_ENTRY(void, glHint, GLenum target, GLenum mode) 82GL_ENTRY(GLboolean, glIsBuffer, GLuint buffer) 83GL_ENTRY(GLboolean, glIsEnabled, GLenum cap) 84GL_ENTRY(GLboolean, glIsFramebuffer, GLuint framebuffer) 85GL_ENTRY(GLboolean, glIsProgram, GLuint program) 86GL_ENTRY(GLboolean, glIsRenderbuffer, GLuint renderbuffer) 87GL_ENTRY(GLboolean, glIsShader, GLuint shader) 88GL_ENTRY(GLboolean, glIsTexture, GLuint texture) 89GL_ENTRY(void, glLineWidth, GLfloat width) 90GL_ENTRY(void, glLinkProgram, GLuint program) 91GL_ENTRY(void, glPixelStorei, GLenum pname, GLint param) 92GL_ENTRY(void, glPolygonOffset, GLfloat factor, GLfloat units) 93GL_ENTRY(void, glReadPixels, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) 94GL_ENTRY(void, glReleaseShaderCompiler, void) 95GL_ENTRY(void, glRenderbufferStorage, GLenum target, GLenum internalformat, GLsizei width, GLsizei height) 96GL_ENTRY(void, glSampleCoverage, GLclampf value, GLboolean invert) 97GL_ENTRY(void, glScissor, GLint x, GLint y, GLsizei width, GLsizei height) 98GL_ENTRY(void, glShaderBinary, GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length) 99GL_ENTRY(void, glShaderSource, GLuint shader, GLsizei count, const GLchar*const* string, const GLint* length) 100GL_ENTRY(void, glStencilFunc, GLenum func, GLint ref, GLuint mask) 101GL_ENTRY(void, glStencilFuncSeparate, GLenum face, GLenum func, GLint ref, GLuint mask) 102GL_ENTRY(void, glStencilMask, GLuint mask) 103GL_ENTRY(void, glStencilMaskSeparate, GLenum face, GLuint mask) 104GL_ENTRY(void, glStencilOp, GLenum fail, GLenum zfail, GLenum zpass) 105GL_ENTRY(void, glStencilOpSeparate, GLenum face, GLenum fail, GLenum zfail, GLenum zpass) 106GL_ENTRY(void, glTexImage2D, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels) 107GL_ENTRY(void, glTexParameterf, GLenum target, GLenum pname, GLfloat param) 108GL_ENTRY(void, glTexParameterfv, GLenum target, GLenum pname, const GLfloat* params) 109GL_ENTRY(void, glTexParameteri, GLenum target, GLenum pname, GLint param) 110GL_ENTRY(void, glTexParameteriv, GLenum target, GLenum pname, const GLint* params) 111GL_ENTRY(void, glTexSubImage2D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels) 112GL_ENTRY(void, glUniform1f, GLint location, GLfloat x) 113GL_ENTRY(void, glUniform1fv, GLint location, GLsizei count, const GLfloat* v) 114GL_ENTRY(void, glUniform1i, GLint location, GLint x) 115GL_ENTRY(void, glUniform1iv, GLint location, GLsizei count, const GLint* v) 116GL_ENTRY(void, glUniform2f, GLint location, GLfloat x, GLfloat y) 117GL_ENTRY(void, glUniform2fv, GLint location, GLsizei count, const GLfloat* v) 118GL_ENTRY(void, glUniform2i, GLint location, GLint x, GLint y) 119GL_ENTRY(void, glUniform2iv, GLint location, GLsizei count, const GLint* v) 120GL_ENTRY(void, glUniform3f, GLint location, GLfloat x, GLfloat y, GLfloat z) 121GL_ENTRY(void, glUniform3fv, GLint location, GLsizei count, const GLfloat* v) 122GL_ENTRY(void, glUniform3i, GLint location, GLint x, GLint y, GLint z) 123GL_ENTRY(void, glUniform3iv, GLint location, GLsizei count, const GLint* v) 124GL_ENTRY(void, glUniform4f, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 125GL_ENTRY(void, glUniform4fv, GLint location, GLsizei count, const GLfloat* v) 126GL_ENTRY(void, glUniform4i, GLint location, GLint x, GLint y, GLint z, GLint w) 127GL_ENTRY(void, glUniform4iv, GLint location, GLsizei count, const GLint* v) 128GL_ENTRY(void, glUniformMatrix2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) 129GL_ENTRY(void, glUniformMatrix3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) 130GL_ENTRY(void, glUniformMatrix4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) 131GL_ENTRY(void, glUseProgram, GLuint program) 132GL_ENTRY(void, glValidateProgram, GLuint program) 133GL_ENTRY(void, glVertexAttrib1f, GLuint indx, GLfloat x) 134GL_ENTRY(void, glVertexAttrib1fv, GLuint indx, const GLfloat* values) 135GL_ENTRY(void, glVertexAttrib2f, GLuint indx, GLfloat x, GLfloat y) 136GL_ENTRY(void, glVertexAttrib2fv, GLuint indx, const GLfloat* values) 137GL_ENTRY(void, glVertexAttrib3f, GLuint indx, GLfloat x, GLfloat y, GLfloat z) 138GL_ENTRY(void, glVertexAttrib3fv, GLuint indx, const GLfloat* values) 139GL_ENTRY(void, glVertexAttrib4f, GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) 140GL_ENTRY(void, glVertexAttrib4fv, GLuint indx, const GLfloat* values) 141GL_ENTRY(void, glVertexAttribPointer, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr) 142GL_ENTRY(void, glViewport, GLint x, GLint y, GLsizei width, GLsizei height) 143GL_ENTRY(void, glEGLImageTargetTexture2DOES, GLenum target, GLeglImageOES image) 144GL_ENTRY(void, glEGLImageTargetRenderbufferStorageOES, GLenum target, GLeglImageOES image) 145GL_ENTRY(void, glGetProgramBinaryOES, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary) 146GL_ENTRY(void, glProgramBinaryOES, GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length) 147GL_ENTRY(void*, glMapBufferOES, GLenum target, GLenum access) 148GL_ENTRY(GLboolean, glUnmapBufferOES, GLenum target) 149#GL_ENTRY(void, glGetBufferPointervOES, GLenum target, GLenum pname, GLvoid** params) 150GL_ENTRY(void, glTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) 151GL_ENTRY(void, glTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) 152GL_ENTRY(void, glCopyTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) 153GL_ENTRY(void, glCompressedTexImage3DOES, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) 154GL_ENTRY(void, glCompressedTexSubImage3DOES, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) 155GL_ENTRY(void, glFramebufferTexture3DOES, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) 156GL_ENTRY(void, glBindVertexArrayOES, GLuint array) 157GL_ENTRY(void, glDeleteVertexArraysOES, GLsizei n, const GLuint *arrays) 158GL_ENTRY(void, glGenVertexArraysOES, GLsizei n, GLuint *arrays) 159GL_ENTRY(GLboolean, glIsVertexArrayOES, GLuint array) 160GL_ENTRY(void, glDiscardFramebufferEXT, GLenum target, GLsizei numAttachments, const GLenum *attachments) 161GL_ENTRY(void, glMultiDrawArraysEXT, GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount) 162GL_ENTRY(void, glMultiDrawElementsEXT, GLenum mode, const GLsizei *count, GLenum type, const GLvoid*const* indices, GLsizei primcount) 163 164#not supported 165GL_ENTRY(void, glGetPerfMonitorGroupsAMD, GLint *numGroups, GLsizei groupsSize, GLuint *groups) 166GL_ENTRY(void, glGetPerfMonitorCountersAMD, GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters) 167GL_ENTRY(void, glGetPerfMonitorGroupStringAMD, GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString) 168GL_ENTRY(void, glGetPerfMonitorCounterStringAMD, GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString) 169GL_ENTRY(void, glGetPerfMonitorCounterInfoAMD, GLuint group, GLuint counter, GLenum pname, GLvoid *data) 170GL_ENTRY(void, glGenPerfMonitorsAMD, GLsizei n, GLuint *monitors) 171GL_ENTRY(void, glDeletePerfMonitorsAMD, GLsizei n, GLuint *monitors) 172GL_ENTRY(void, glSelectPerfMonitorCountersAMD, GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList) 173GL_ENTRY(void, glBeginPerfMonitorAMD, GLuint monitor) 174GL_ENTRY(void, glEndPerfMonitorAMD, GLuint monitor) 175GL_ENTRY(void, glGetPerfMonitorCounterDataAMD, GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten) 176 177GL_ENTRY(void, glRenderbufferStorageMultisampleIMG, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) 178GL_ENTRY(void, glFramebufferTexture2DMultisampleIMG, GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) 179GL_ENTRY(void, glDeleteFencesNV, GLsizei n, const GLuint *fences) 180GL_ENTRY(void, glGenFencesNV, GLsizei n, GLuint *fences) 181GL_ENTRY(GLboolean, glIsFenceNV, GLuint fence) 182GL_ENTRY(GLboolean, glTestFenceNV, GLuint fence) 183GL_ENTRY(void, glGetFenceivNV, GLuint fence, GLenum pname, GLint *params) 184GL_ENTRY(void, glFinishFenceNV, GLuint fence) 185GL_ENTRY(void, glSetFenceNV, GLuint fence, GLenum condition) 186GL_ENTRY(void, glCoverageMaskNV, GLboolean mask) 187GL_ENTRY(void, glCoverageOperationNV, GLenum operation) 188GL_ENTRY(void, glGetDriverControlsQCOM, GLint *num, GLsizei size, GLuint *driverControls) 189GL_ENTRY(void, glGetDriverControlStringQCOM, GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString) 190GL_ENTRY(void, glEnableDriverControlQCOM, GLuint driverControl) 191GL_ENTRY(void, glDisableDriverControlQCOM, GLuint driverControl) 192GL_ENTRY(void, glExtGetTexturesQCOM, GLuint *textures, GLint maxTextures, GLint *numTextures) 193GL_ENTRY(void, glExtGetBuffersQCOM, GLuint *buffers, GLint maxBuffers, GLint *numBuffers) 194GL_ENTRY(void, glExtGetRenderbuffersQCOM, GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers) 195GL_ENTRY(void, glExtGetFramebuffersQCOM, GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers) 196GL_ENTRY(void, glExtGetTexLevelParameterivQCOM, GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params) 197GL_ENTRY(void, glExtTexObjectStateOverrideiQCOM, GLenum target, GLenum pname, GLint param) 198GL_ENTRY(void, glExtGetTexSubImageQCOM, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels) 199GL_ENTRY(void, glExtGetBufferPointervQCOM, GLenum target, GLvoid** params) 200GL_ENTRY(void, glExtGetShadersQCOM, GLuint *shaders, GLint maxShaders, GLint *numShaders) 201GL_ENTRY(void, glExtGetProgramsQCOM, GLuint *programs, GLint maxPrograms, GLint *numPrograms) 202GL_ENTRY(GLboolean, glExtIsProgramBinaryQCOM, GLuint program) 203GL_ENTRY(void, glExtGetProgramBinarySourceQCOM, GLuint program, GLenum shadertype, GLchar *source, GLint *length) 204GL_ENTRY(void, glStartTilingQCOM, GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask) 205GL_ENTRY(void, glEndTilingQCOM, GLbitfield preserveMask) 206 207# add-ons for GLES 2 208GL_ENTRY(void, glVertexAttribPointerData, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, void * data, GLuint datalen) 209GL_ENTRY(void, glVertexAttribPointerOffset, GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint offset) 210GL_ENTRY(void, glDrawElementsOffset, GLenum mode, GLsizei count, GLenum type, GLuint offset) 211GL_ENTRY(void, glDrawElementsData, GLenum mode, GLsizei count, GLenum type, void *data, GLuint datalen) 212GL_ENTRY(void, glGetCompressedTextureFormats, int count, GLint *formats) 213GL_ENTRY(void, glShaderString, GLuint shader, const GLchar* string, GLsizei len) 214GL_ENTRY(int, glFinishRoundTrip, void) 215 216# GLES 3.0 ApiGen .in 217 218# Changes to existing API: 219 220## New formats: Need to update all validation code to handle GLES 3.x-specific formats. 221## Primitive restart (close to already implemented in guest encoder, but can be tricky to validate in the middle of all the other draw validation going on) 222## Texture compression with ETC2 (already implemented) 223 224# New API calls - listed in approximate decreasing order of complexity 225 226# Vertex Array Objects 227## Before anything else, move GL calls out of sendVertexAttributes() in encoder, 228## or we will get this wrong, as we currently delay glEnableVertexAttribArray/ glVertexAttribPointer 229## until right before glDrawElements/Arrays. 230## This means moving those attribpointer calls out, 231## AND preserving the index range validation behavior that happens 232## just before glDrawElements/Arrays. 233GL_ENTRY(void, glGenVertexArrays, GLsizei n, GLuint* arrays) 234GL_ENTRY(void, glBindVertexArray, GLuint array) 235GL_ENTRY(void, glDeleteVertexArrays, GLsizei n, const GLuint *arrays) 236GL_ENTRY(GLboolean, glIsVertexArray, GLuint array) 237 238# New buffer operationarrays Mapping needs different encoding interface: copy from host on map, and copy to host (and host GPU pointer) on unmap or flush. 239## Proposed: 240GL_ENTRY(void*, glMapBufferRange, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) 241GL_ENTRY(GLboolean, glUnmapBuffer, GLenum target) 242GL_ENTRY(void, glFlushMappedBufferRange, GLenum target, GLintptr offset, GLsizeiptr length) 243GL_ENTRY(void, glMapBufferRangeAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped) 244GL_ENTRY(void, glUnmapBufferAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res) 245GL_ENTRY(void, glFlushMappedBufferRangeAEMU, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer) 246## It seems we can use glUnmapBuffer and glFlushMappedBufferRange as synchronization points 247## to update the host with the new buffer contents: 248## glMapBufferRange / glUnmapBuffer: 249## Guest: | Encoder: | Host: 250## void* x = glMapBuffer... | | 251## | glMapBufferRangeAEMU_enc... | 252## | | void* hostptr = glMapBufferRange... 253## | | memcpy(mapped, hostptr, sz) 254## | stream->readback(mapped, sz) | 255## | glMapBufferRangeAEMU_enc exit | 256## x holds host GPU contents | | 257## <operations on x> | | 258## glUnmapBuffer... | | 259## | glUnmapBufferAEMU_enc... | 260## | stream->writeFully(x, sz) | 261## | | memcpy(hostptr, x, sz) 262## | | glUnmapBuffer 263## glMapBufferRange / glFlushMappedBufferRange: 264## Guest: | Encoder: | Host: 265## void* x = glMapBuffer... | | 266## | glMapBufferRangeAEMU_enc... | 267## | | void* hostptr = glMapBufferRange... 268## | | memcpy(mapped, hostptr, sz) 269## | stream->readback(mapped, sz) | 270## | glMapBufferRangeAEMU_enc exit | 271## x holds host GPU contents | | 272## <operations on x> | | 273## glFlushMappedBufferRange..| | 274## | glFlushMappedBufferRangeAEMU... | 275## | stream->writeFully(flushedrange... | 276## | | memcpy(hostptr + offset, flushedrange, length) 277## | | glFlushMappedBufferRange 278## Make sure to store the binded range when mapped, I bet there is some dEQP test that checks this sort of thing :) 279 280## PBOs need to be delivered differently to the host. 281GL_ENTRY(void, glReadPixelsOffsetAEMU, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset) 282GL_ENTRY(void, glCompressedTexImage2DOffsetAEMU, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset) 283GL_ENTRY(void, glCompressedTexSubImage2DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset) 284GL_ENTRY(void, glTexImage2DOffsetAEMU, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset) 285GL_ENTRY(void, glTexSubImage2DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset) 286 287GL_ENTRY(void, glBindBufferRange, GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) 288GL_ENTRY(void, glBindBufferBase, GLenum target, GLuint index, GLuint buffer) 289## No need to consider mapped buffers here as that is a GL_INVALID_OPERATION :) 290GL_ENTRY(void, glCopyBufferSubData, GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size); 291 292## These buffer clears don't involve anything that can be mapped, so we are OK. 293GL_ENTRY(void, glClearBufferiv, GLenum buffer, GLint drawBuffer, const GLint * value) 294GL_ENTRY(void, glClearBufferuiv, GLenum buffer, GLint drawBuffer, const GLuint * value) 295GL_ENTRY(void, glClearBufferfv, GLenum buffer, GLint drawBuffer, const GLfloat * value) 296GL_ENTRY(void, glClearBufferfi, GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil) 297 298## Reads (not writes) mapped state only, so shouldn't be sent to host. 299GL_ENTRY(void, glGetBufferParameteri64v, GLenum target, GLenum value, GLint64 * data) 300 301# Get current mapped buffer pointer. Shouldn't be sent to host. 302GL_ENTRY(void, glGetBufferPointerv, GLenum target, GLenum pname, GLvoid** params) 303 304# UBOs 305## Share group processing needed for all of these, as the program is an argument. 306## Validation is bound (heh) to be tricky 307GL_ENTRY(void, glUniformBlockBinding, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) 308 309GL_ENTRY(GLuint, glGetUniformBlockIndex, GLuint program, const GLchar *uniformBlockName) 310 311# Assume uniformNames packed into 1 buffer on the guest. 312GL_ENTRY(void, glGetUniformIndices, GLuint program, GLsizei uniformCount, const GLchar*const* uniformNames, GLuint* uniformIndices) 313GL_ENTRY(void, glGetUniformIndicesAEMU, GLuint program, GLsizei uniformCount, const GLchar *packedUniformNames, GLsizei packedLen, GLuint *uniformIndices) 314 315GL_ENTRY(void, glGetActiveUniformBlockiv, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params) 316GL_ENTRY(void, glGetActiveUniformBlockName, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName) 317 318# More uniform setters 319GL_ENTRY(void, glUniform1ui, GLint location, GLuint v0) 320GL_ENTRY(void, glUniform2ui, GLint location, GLuint v0, GLuint v1) 321GL_ENTRY(void, glUniform3ui, GLint location, GLuint v0, GLuint v1, GLuint v2) 322GL_ENTRY(void, glUniform4ui, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) 323GL_ENTRY(void, glUniform1uiv, GLint location, GLsizei count, const GLuint *value) 324GL_ENTRY(void, glUniform2uiv, GLint location, GLsizei count, const GLuint *value) 325GL_ENTRY(void, glUniform3uiv, GLint location, GLsizei count, const GLuint *value) 326GL_ENTRY(void, glUniform4uiv, GLint location, GLsizei count, const GLuint *value) 327GL_ENTRY(void, glUniformMatrix2x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 328GL_ENTRY(void, glUniformMatrix3x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 329GL_ENTRY(void, glUniformMatrix2x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 330GL_ENTRY(void, glUniformMatrix4x2fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 331GL_ENTRY(void, glUniformMatrix3x4fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 332GL_ENTRY(void, glUniformMatrix4x3fv, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 333 334# Need share group processing for these gets 335GL_ENTRY(void, glGetUniformuiv, GLuint program, GLint location, GLuint *params) 336GL_ENTRY(void, glGetActiveUniformsiv, GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params) 337 338# More vertex attribute setters / queries 339GL_ENTRY(void, glVertexAttribI4i, GLuint index, GLint v0, GLint v1, GLint v2, GLint v3) 340GL_ENTRY(void, glVertexAttribI4ui, GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3) 341GL_ENTRY(void, glVertexAttribI4iv, GLuint index, const GLint *v) 342GL_ENTRY(void, glVertexAttribI4uiv, GLuint index, const GLuint *v) 343GL_ENTRY(void, glVertexAttribIPointer, GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) 344GL_ENTRY(void, glVertexAttribIPointerOffsetAEMU, GLuint index, GLint size, GLenum type, GLsizei stride, GLuint offset) 345GL_ENTRY(void, glVertexAttribIPointerDataAEMU, GLuint index, GLint size, GLenum type, GLsizei stride, void* data, GLuint datalen) 346GL_ENTRY(void, glGetVertexAttribIiv, GLuint index, GLenum pname, GLint *params) 347GL_ENTRY(void, glGetVertexAttribIuiv, GLuint index, GLenum pname, GLuint *params) 348 349# Instanced draws 350GL_ENTRY(void, glVertexAttribDivisor, GLuint index, GLuint divisor) 351GL_ENTRY(void, glDrawArraysInstanced, GLenum mode, GLint first, GLsizei count, GLsizei primcount) 352 353GL_ENTRY(void, glDrawElementsInstanced, GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount) 354GL_ENTRY(void, glDrawElementsInstancedDataAEMU, GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount, GLsizei datalen) 355GL_ENTRY(void, glDrawElementsInstancedOffsetAEMU, GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount) 356 357 358# Draw with known index range 359GL_ENTRY(void, glDrawRangeElements, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices) 360GL_ENTRY(void, glDrawRangeElementsDataAEMU, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices, GLsizei datalen) 361GL_ENTRY(void, glDrawRangeElementsOffsetAEMU, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLuint offset) 362 363# Sync - mostly implemented on host, just need encoder part 364GL_ENTRY(GLsync, glFenceSync, GLenum condition, GLbitfield flags) 365GL_ENTRY(GLenum, glClientWaitSync, GLsync wait_on, GLbitfield flags, GLuint64 timeout) 366GL_ENTRY(void, glWaitSync, GLsync wait_on, GLbitfield flags, GLuint64 timeout) 367GL_ENTRY(void, glDeleteSync, GLsync to_delete) 368GL_ENTRY(GLboolean, glIsSync, GLsync sync) 369GL_ENTRY(void, glGetSynciv, GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) 370 371GL_ENTRY(uint64_t, glFenceSyncAEMU, GLenum condition, GLbitfield flags) 372GL_ENTRY(GLenum, glClientWaitSyncAEMU, uint64_t wait_on, GLbitfield flags, GLuint64 timeout) 373GL_ENTRY(void, glWaitSyncAEMU, uint64_t wait_on, GLbitfield flags, GLuint64 timeout) 374GL_ENTRY(void, glDeleteSyncAEMU, uint64_t to_delete) 375GL_ENTRY(GLboolean, glIsSyncAEMU, uint64_t sync) 376GL_ENTRY(void, glGetSyncivAEMU, uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values) 377 378# MRT / MSAA render buffer 379GL_ENTRY(void, glDrawBuffers, GLsizei n, const GLenum *bufs); 380GL_ENTRY(void, glReadBuffer, GLenum src); 381GL_ENTRY(void, glBlitFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); 382 383# Not even implemented in host driver if < OpenGL 4.3. 384# But we should call this anyway if the function is available. 385GL_ENTRY(void, glInvalidateFramebuffer, GLenum target, GLsizei numAttachments, const GLenum *attachments) 386GL_ENTRY(void, glInvalidateSubFramebuffer, GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height) 387 388GL_ENTRY(void, glFramebufferTextureLayer, GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); 389GL_ENTRY(void, glRenderbufferStorageMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); 390GL_ENTRY(void, glTexStorage2D, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); 391GL_ENTRY(void, glGetInternalformativ, GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params) 392 393# Transform feedback - share group processing in the last two 394GL_ENTRY(void, glBeginTransformFeedback, GLenum primitiveMode) 395GL_ENTRY(void, glEndTransformFeedback, void) 396GL_ENTRY(void, glGenTransformFeedbacks, GLsizei n, GLuint *ids) 397GL_ENTRY(void, glDeleteTransformFeedbacks, GLsizei n, const GLuint *ids) 398GL_ENTRY(void, glBindTransformFeedback, GLenum target, GLuint id) 399GL_ENTRY(void, glPauseTransformFeedback, void) 400GL_ENTRY(void, glResumeTransformFeedback, void) 401GL_ENTRY(GLboolean, glIsTransformFeedback, GLuint id) 402GL_ENTRY(void, glTransformFeedbackVaryings, GLuint program, GLsizei count, const GLchar*const* varyings, GLenum bufferMode) 403GL_ENTRY(void, glTransformFeedbackVaryingsAEMU, GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode) 404GL_ENTRY(void, glGetTransformFeedbackVarying, GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, char * name) 405 406# Sampler objects 407GL_ENTRY(void, glGenSamplers, GLsizei n, GLuint *samplers) 408GL_ENTRY(void, glDeleteSamplers, GLsizei n, const GLuint * samplers) 409GL_ENTRY(void, glBindSampler, GLuint unit, GLuint sampler) 410GL_ENTRY(void, glSamplerParameterf, GLuint sampler, GLenum pname, GLfloat param) 411GL_ENTRY(void, glSamplerParameteri, GLuint sampler, GLenum pname, GLint param) 412GL_ENTRY(void, glSamplerParameterfv, GLuint sampler, GLenum pname, const GLfloat * params) 413GL_ENTRY(void, glSamplerParameteriv, GLuint sampler, GLenum pname, const GLint * params) 414GL_ENTRY(void, glGetSamplerParameterfv, GLuint sampler, GLenum pname, GLfloat * params) 415GL_ENTRY(void, glGetSamplerParameteriv, GLuint sampler, GLenum pname, GLint * params) 416GL_ENTRY(GLboolean, glIsSampler, GLuint sampler) 417 418# Query objects 419GL_ENTRY(void, glGenQueries, GLsizei n, GLuint * queries) 420GL_ENTRY(void, glDeleteQueries, GLsizei n, const GLuint * queries) 421GL_ENTRY(void, glBeginQuery, GLenum target, GLuint query) 422GL_ENTRY(void, glEndQuery, GLenum target) 423GL_ENTRY(void, glGetQueryiv, GLenum target, GLenum pname, GLint * params) 424GL_ENTRY(void, glGetQueryObjectuiv, GLuint query, GLenum pname, GLuint * params) 425GL_ENTRY(GLboolean, glIsQuery, GLuint query) 426 427# Shader binary objects - need share group processing 428GL_ENTRY(void, glProgramParameteri, GLuint program, GLenum pname, GLint value) 429GL_ENTRY(void, glProgramBinary, GLuint program, GLenum binaryFormat, const void *binary, GLsizei length) 430GL_ENTRY(void, glGetProgramBinary, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary) 431 432# New glGets - need share group processing for program object 433GL_ENTRY(GLint, glGetFragDataLocation, GLuint program, const char * name) 434GL_ENTRY(void, glGetInteger64v, GLenum pname, GLint64 * data) 435GL_ENTRY(void, glGetIntegeri_v, GLenum target, GLuint index, GLint * data) 436GL_ENTRY(void, glGetInteger64i_v, GLenum target, GLuint index, GLint64 * data) 437 438# Array/3D textures 439GL_ENTRY(void, glTexImage3D, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * data) 440GL_ENTRY(void, glTexImage3DOffsetAEMU, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset) 441GL_ENTRY(void, glTexStorage3D, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); 442GL_ENTRY(void, glTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * data); 443GL_ENTRY(void, glTexSubImage3DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset); 444GL_ENTRY(void, glCompressedTexImage3D, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data) 445GL_ENTRY(void, glCompressedTexImage3DOffsetAEMU, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset) 446GL_ENTRY(void, glCompressedTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); 447GL_ENTRY(void, glCompressedTexSubImage3DOffsetAEMU, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint data); 448GL_ENTRY(void, glCopyTexSubImage3D, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) 449 450# glGetStringi 451GL_ENTRY(const GLubyte*, glGetStringi, GLenum name, GLuint index); 452 453# GLES 3.1: 454 455# New get 456GL_ENTRY(void, glGetBooleani_v, GLenum target, GLuint index, GLboolean * data) 457 458# Memory barriers 459GL_ENTRY(void, glMemoryBarrier, GLbitfield barriers); 460GL_ENTRY(void, glMemoryBarrierByRegion, GLbitfield barriers); 461 462# Program pipelines - may require adding a new shared object type! 463GL_ENTRY(void, glGenProgramPipelines, GLsizei n, GLuint *pipelines) 464GL_ENTRY(void, glDeleteProgramPipelines, GLsizei n, const GLuint *pipelines) 465GL_ENTRY(void, glBindProgramPipeline, GLuint pipeline) 466 467GL_ENTRY(void, glGetProgramPipelineiv, GLuint pipeline, GLenum pname, GLint *params) 468GL_ENTRY(void, glGetProgramPipelineInfoLog, GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog) 469 470GL_ENTRY(void, glValidateProgramPipeline, GLuint pipeline) 471GL_ENTRY(GLboolean, glIsProgramPipeline, GLuint pipeline); 472GL_ENTRY(void, glUseProgramStages, GLuint pipeline, GLbitfield stages, GLuint program) 473 474# Separable shader programs - may need to change how program objects are represented and shared! 475GL_ENTRY(void, glActiveShaderProgram, GLuint pipeline, GLuint program); 476GL_ENTRY(GLuint, glCreateShaderProgramv, GLenum type, GLsizei count, const GLchar*const* strings) 477GL_ENTRY(GLuint, glCreateShaderProgramvAEMU, GLenum type, GLsizei count, const char *packedStrings, GLuint packedLen) 478# Uniforms should work easily if any program object representation problems are solved. 479GL_ENTRY(void, glProgramUniform1f, GLuint program, GLint location, GLfloat v0) 480GL_ENTRY(void, glProgramUniform2f, GLuint program, GLint location, GLfloat v0, GLfloat v1) 481GL_ENTRY(void, glProgramUniform3f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) 482GL_ENTRY(void, glProgramUniform4f, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) 483GL_ENTRY(void, glProgramUniform1i, GLuint program, GLint location, GLint v0) 484GL_ENTRY(void, glProgramUniform2i, GLuint program, GLint location, GLint v0, GLint v1) 485GL_ENTRY(void, glProgramUniform3i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2) 486GL_ENTRY(void, glProgramUniform4i, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) 487GL_ENTRY(void, glProgramUniform1ui, GLuint program, GLint location, GLuint v0) 488GL_ENTRY(void, glProgramUniform2ui, GLuint program, GLint location, GLuint v0, GLuint v1) 489GL_ENTRY(void, glProgramUniform3ui, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) 490GL_ENTRY(void, glProgramUniform4ui, GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) 491GL_ENTRY(void, glProgramUniform1fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) 492GL_ENTRY(void, glProgramUniform2fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) 493GL_ENTRY(void, glProgramUniform3fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) 494GL_ENTRY(void, glProgramUniform4fv, GLuint program, GLint location, GLsizei count, const GLfloat *value) 495GL_ENTRY(void, glProgramUniform1iv, GLuint program, GLint location, GLsizei count, const GLint *value) 496GL_ENTRY(void, glProgramUniform2iv, GLuint program, GLint location, GLsizei count, const GLint *value) 497GL_ENTRY(void, glProgramUniform3iv, GLuint program, GLint location, GLsizei count, const GLint *value) 498GL_ENTRY(void, glProgramUniform4iv, GLuint program, GLint location, GLsizei count, const GLint *value) 499GL_ENTRY(void, glProgramUniform1uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) 500GL_ENTRY(void, glProgramUniform2uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) 501GL_ENTRY(void, glProgramUniform3uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) 502GL_ENTRY(void, glProgramUniform4uiv, GLuint program, GLint location, GLsizei count, const GLuint *value) 503GL_ENTRY(void, glProgramUniformMatrix2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 504GL_ENTRY(void, glProgramUniformMatrix3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 505GL_ENTRY(void, glProgramUniformMatrix4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 506GL_ENTRY(void, glProgramUniformMatrix2x3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 507GL_ENTRY(void, glProgramUniformMatrix3x2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 508GL_ENTRY(void, glProgramUniformMatrix2x4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 509GL_ENTRY(void, glProgramUniformMatrix4x2fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 510GL_ENTRY(void, glProgramUniformMatrix3x4fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 511GL_ENTRY(void, glProgramUniformMatrix4x3fv, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) 512 513# Depending on whether ANGLE shader translator supports ES 3.1, this might require us to enhance the ANGLE shader translator by a LOT. 514GL_ENTRY(void, glGetProgramInterfaceiv, GLuint program, GLenum programInterface, GLenum pname, GLint * params) 515GL_ENTRY(void, glGetProgramResourceiv, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params) 516GL_ENTRY(GLuint, glGetProgramResourceIndex, GLuint program, GLenum programInterface, const char * name) 517GL_ENTRY(GLint, glGetProgramResourceLocation, GLuint program, GLenum programInterface, const char * name) 518GL_ENTRY(void, glGetProgramResourceName, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, char * name) 519 520# Compute shaders. Should just work if everything else does. 521GL_ENTRY(void, glBindImageTexture, GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) 522GL_ENTRY(void, glDispatchCompute, GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) 523 524### This is an indirect call and the |indirect| field could be a GPU pointer. 525### We will need to make sure that |indirect| is updated to the latest version if so, 526### and probably manage a running set of GPU pointers on the host 527### that the guest is using. 528GL_ENTRY(void, glDispatchComputeIndirect, GLintptr indirect) 529 530# Separate vertex format / buffer binding 531### Requires us tp really clean up how draws work in the encoder currently. 532GL_ENTRY(void, glBindVertexBuffer, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) 533GL_ENTRY(void, glVertexAttribBinding, GLuint attribindex, GLuint bindingindex); 534GL_ENTRY(void, glVertexAttribFormat, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) 535GL_ENTRY(void, glVertexAttribIFormat, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) 536GL_ENTRY(void, glVertexBindingDivisor, GLuint bindingindex, GLuint divisor) 537 538# Indirect draws 539### Again, if |indirect| is a GPU pointer, we need to synchronize it before calling. 540GL_ENTRY(void, glDrawArraysIndirect, GLenum mode, const void * indirect) 541GL_ENTRY(void, glDrawArraysIndirectDataAEMU, GLenum mode, const void *indirect, GLuint datalen) 542GL_ENTRY(void, glDrawArraysIndirectOffsetAEMU, GLenum mode, GLuint offset) 543GL_ENTRY(void, glDrawElementsIndirect, GLenum mode, GLenum type, const void * indirect) 544GL_ENTRY(void, glDrawElementsIndirectDataAEMU, GLenum mode, GLenum type, const void *indirect, GLuint datalen) 545GL_ENTRY(void, glDrawElementsIndirectOffsetAEMU, GLenum mode, GLenum type, GLuint offset) 546 547# Multisampling 548GL_ENTRY(void, glTexStorage2DMultisample, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) 549GL_ENTRY(void, glSampleMaski, GLuint maskNumber, GLbitfield mask) 550GL_ENTRY(void, glGetMultisamplefv, GLenum pname, GLuint index, GLfloat *val) 551 552# New framebuffer parameters 553GL_ENTRY(void, glFramebufferParameteri, GLenum target, GLenum pname, GLint param) 554GL_ENTRY(void, glGetFramebufferParameteriv, GLenum target, GLenum pname, GLint * params) 555 556# Texture LOD queries 557# Already used in Translator's validations, just need encoder. 558GL_ENTRY(void, glGetTexLevelParameterfv, GLenum target, GLint level, GLenum pname, GLfloat * params) 559GL_ENTRY(void, glGetTexLevelParameteriv, GLenum target, GLint level, GLenum pname, GLint * params) 560