blob: e762d3184ef7ccd6f5cc603389a73b0d56f61a1c [file] [log] [blame]
custom_preprocesses = {
"glBindVertexArray" : """
ctx->setVertexArrayObject(array);
""",
"glDeleteVertexArrays" : """
ctx->removeVertexArrayObjects(n, arrays);
""",
"glBindBufferRange" : """
ctx->bindBuffer(target, buffer);
ctx->bindIndexedBuffer(target, index, buffer, offset, size);
""",
"glBindBufferBase" : """
ctx->bindBuffer(target, buffer);
ctx->bindIndexedBuffer(target, index, buffer);
""",
"glVertexAttribIPointer" : """
SET_ERROR_IF((!GLESv2Validate::arrayIndex(ctx,index)),GL_INVALID_VALUE);
s_glPrepareVertexAttribPointer(ctx, index, size, type, false, stride, pointer, true);
if (ctx->isBindedBuffer(GL_ARRAY_BUFFER)) {
""",
"glVertexAttribDivisor" : """
SET_ERROR_IF((!GLESv2Validate::arrayIndex(ctx,index)),GL_INVALID_VALUE);
ctx->setVertexAttribBindingIndex(index, index);
ctx->setVertexAttribDivisor(index, divisor);
""",
"glRenderbufferStorageMultisample" : """
GLint err = GL_NO_ERROR;
internalformat = sPrepareRenderbufferStorage(internalformat, &err);
SET_ERROR_IF(err != GL_NO_ERROR, err);
""",
"glFramebufferTextureLayer" : """
GLenum textarget = GL_TEXTURE_2D_ARRAY;
SET_ERROR_IF(!(GLESv2Validate::framebufferTarget(ctx, target) &&
GLESv2Validate::framebufferAttachment(ctx, attachment)), GL_INVALID_ENUM);
if (texture) {
if (!ctx->shareGroup()->isObject(NamedObjectType::TEXTURE, texture)) {
ctx->shareGroup()->genName(NamedObjectType::TEXTURE, texture);
}
TextureData* texData = getTextureData(texture);
textarget = texData->target;
}
""",
"glTexStorage2D" : """
GLint err = GL_NO_ERROR;
GLenum format, type;
GLESv2Validate::getCompatibleFormatTypeForInternalFormat(internalformat, &format, &type);
for (GLsizei i = 0; i < levels; i++)
sPrepareTexImage2D(target, i, (GLint)internalformat, width, height, 0, format, type, NULL, &type, (GLint*)&internalformat, &err);
SET_ERROR_IF(err != GL_NO_ERROR, err);
""",
"glGenSamplers" : """
if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
samplers[i] = ctx->shareGroup()->genName(NamedObjectType::SAMPLER,
0, true);
}
}
""",
"glDeleteSamplers" : """
if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
ctx->shareGroup()->deleteName(NamedObjectType::SAMPLER, samplers[i]);
}
}
""",
"glGenQueries" : """
if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
queries[i] = ctx->shareGroup()->genName(NamedObjectType::QUERY,
0, true);
}
}
""",
"glDeleteQueries" : """
if(ctx->shareGroup().get()) {
for(int i=0; i<n ;i++) {
ctx->shareGroup()->deleteName(NamedObjectType::QUERY, queries[i]);
}
}
""",
"glTexImage3D" : """
SET_ERROR_IF(!GLESv2Validate::isCompressedFormat(internalFormat) &&
!GLESv2Validate::pixelSizedFrmt(ctx, internalFormat, format, type),
GL_INVALID_OPERATION);
s_glInitTexImage3D(target, level, internalFormat, width, height, depth, border);
""",
"glTexStorage3D" : """
for (int i = 0; i < levels; i++) {
s_glInitTexImage3D(target, i, internalformat, width, height, depth, 0);
}
""",
"glDrawArraysInstanced" : """
SET_ERROR_IF(count < 0,GL_INVALID_VALUE)
SET_ERROR_IF(!(GLESv2Validate::drawMode(mode)),GL_INVALID_ENUM);
s_glDrawPre(ctx, mode);
if (ctx->isBindedBuffer(GL_ARRAY_BUFFER)) {
ctx->dispatcher().glDrawArraysInstanced(mode, first, count, primcount);
} else {
GLESConversionArrays tmpArrs;
s_glDrawSetupArraysPre(ctx, tmpArrs, first, count, 0, NULL, true);
ctx->dispatcher().glDrawArrays(mode,first,count);
s_glDrawSetupArraysPost(ctx);
}
s_glDrawPost(ctx, mode);
""",
"glDrawElementsInstanced" : """
SET_ERROR_IF(count < 0,GL_INVALID_VALUE)
SET_ERROR_IF(!(GLESv2Validate::drawMode(mode) && GLESv2Validate::drawType(type)),GL_INVALID_ENUM);
s_glDrawPre(ctx, mode);
if (ctx->isBindedBuffer(GL_ELEMENT_ARRAY_BUFFER)) {
ctx->dispatcher().glDrawElementsInstanced(mode,count,type,indices, primcount);
} else {
s_glDrawEmulateClientArraysPre(ctx);
GLESConversionArrays tmpArrs;
s_glDrawSetupArraysPre(ctx,tmpArrs,0,count,type,indices,false);
ctx->dispatcher().glDrawElementsInstanced(mode,count,type,indices, primcount);
s_glDrawSetupArraysPost(ctx);
s_glDrawEmulateClientArraysPost(ctx);
}
s_glDrawPost(ctx, mode);
""",
"glDrawRangeElements" : """
SET_ERROR_IF(count < 0,GL_INVALID_VALUE)
SET_ERROR_IF(!(GLESv2Validate::drawMode(mode) && GLESv2Validate::drawType(type)),GL_INVALID_ENUM);
s_glDrawPre(ctx, mode);
if (ctx->isBindedBuffer(GL_ELEMENT_ARRAY_BUFFER)) {
ctx->dispatcher().glDrawRangeElements(mode,start,end,count,type,indices);
} else {
s_glDrawEmulateClientArraysPre(ctx);
GLESConversionArrays tmpArrs;
s_glDrawSetupArraysPre(ctx,tmpArrs,0,count,type,indices,false);
ctx->dispatcher().glDrawRangeElements(mode,start,end,count,type,indices);
s_glDrawSetupArraysPost(ctx);
s_glDrawEmulateClientArraysPost(ctx);
}
s_glDrawPost(ctx, mode);
""",
"glGetUniformuiv" : """
SET_ERROR_IF(location < 0,GL_INVALID_OPERATION);
""",
}
custom_postprocesses = {
"glGenVertexArrays" : """
ctx->addVertexArrayObjects(n, arrays);
""",
"glVertexAttribIPointer" : """
}
""",
"glFramebufferTextureLayer" : """
GLuint fbName = ctx->getFramebufferBinding(target);
auto fbObj = ctx->shareGroup()->getObjectData(
NamedObjectType::FRAMEBUFFER, fbName);
if (fbObj) {
FramebufferData *fbData = (FramebufferData *)fbObj;
fbData->setAttachment(attachment, textarget,
texture, ObjectDataPtr());
}
""",
"glGetInteger64v" : """
s_glStateQueryTv<GLint64>(true, pname, data, s_glGetInteger64v_wrapper);
""",
"glGetIntegeri_v" : """
s_glStateQueryTi_v<GLint>(target, index, data, s_glGetIntegeri_v_wrapper);
""",
"glGetInteger64i_v" : """
s_glStateQueryTi_v<GLint64>(target, index, data, s_glGetInteger64i_v_wrapper);
""",
}
custom_share_processing = {
"glBindSampler" : """
SET_ERROR_IF(sampler && !globalSampler, GL_INVALID_OPERATION);
""",
"glGetUniformuiv" : """
SET_ERROR_IF(globalProgramName==0, GL_INVALID_VALUE);
auto objData = ctx->shareGroup()->getObjectData(
NamedObjectType::SHADER_OR_PROGRAM, program);
SET_ERROR_IF(objData->getDataType()!=PROGRAM_DATA,GL_INVALID_OPERATION);
ProgramData* pData = (ProgramData *)objData;
SET_ERROR_IF(pData->getLinkStatus() != GL_TRUE,GL_INVALID_OPERATION);
""",
}
no_passthrough = {
"glGenSamplers": True,
"glDeleteSamplers": True,
"glGenQueries": True,
"glDeleteQueries": True,
"glGetInteger64_v": True,
"glGetIntegeri_v": True,
"glGetInteger64i_v": True,
}