diff options
author | bohu <bohu@google.com> | 2014-11-17 22:44:27 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-11-17 22:44:29 +0000 |
commit | bfe4a23956e144704f90b69bdab53cd4eb7dd8ba (patch) | |
tree | 4efcfac6bd5741289b3c5f82fd64dbe8f2e945f5 /emulator | |
parent | 6ea3614f82922dbd32aae5ef94a873557d7e7747 (diff) | |
parent | f82369b16b7413740c78b683f0c82acef067bdc2 (diff) | |
download | sdk-bfe4a23956e144704f90b69bdab53cd4eb7dd8ba.zip sdk-bfe4a23956e144704f90b69bdab53cd4eb7dd8ba.tar.gz sdk-bfe4a23956e144704f90b69bdab53cd4eb7dd8ba.tar.bz2 |
Merge "Correctly set error code"
Diffstat (limited to 'emulator')
-rw-r--r-- | emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp | 31 | ||||
-rw-r--r-- | emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Validate.cpp | 1 |
2 files changed, 28 insertions, 4 deletions
diff --git a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 45b39d5..fc201bb 100644 --- a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -1125,7 +1125,10 @@ GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target FramebufferData *fbData = (FramebufferData *)fbObj.Ptr(); GLenum target; GLuint name = fbData->getAttachment(attachment, &target, NULL); - SET_ERROR_IF(!name && pname != GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, GL_INVALID_ENUM); + if (!name) { + SET_ERROR_IF(pname != GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE && + pname != GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, GL_INVALID_ENUM); + } if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) { if (target == GL_TEXTURE_2D) { *params = GL_TEXTURE; @@ -1134,6 +1137,8 @@ GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target else if (target == GL_RENDERBUFFER) { *params = GL_RENDERBUFFER; return; + } else { + *params = GL_NONE; } } else if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) { @@ -1473,10 +1478,15 @@ GL_APICALL int GL_APIENTRY glGetUniformLocation(GLuint program, const GLchar* na return -1; } - +static bool s_invalidVertexAttribIndex(GLuint index) { + GLint param=0; + glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, ¶m); + return (param < 0 || index >= (GLuint)param); +} GL_APICALL void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params){ GET_CTX_V2(); + SET_ERROR_IF(s_invalidVertexAttribIndex(index), GL_INVALID_VALUE); const GLESpointer* p = ctx->getPointer(index); if(p) { switch(pname){ @@ -1518,6 +1528,7 @@ GL_APICALL void GL_APIENTRY glGetVertexAttribfv(GLuint index, GLenum pname, GLf GL_APICALL void GL_APIENTRY glGetVertexAttribiv(GLuint index, GLenum pname, GLint* params){ GET_CTX_V2(); + SET_ERROR_IF(s_invalidVertexAttribIndex(index), GL_INVALID_VALUE); const GLESpointer* p = ctx->getPointer(index); if(p) { switch(pname){ @@ -1594,7 +1605,8 @@ GL_APICALL GLboolean GL_APIENTRY glIsBuffer(GLuint buffer){ GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer){ GET_CTX_RET(GL_FALSE) if(framebuffer && ctx->shareGroup().Ptr()){ - return ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) ? GL_TRUE :GL_FALSE; + return (ctx->shareGroup()->isObject(FRAMEBUFFER,framebuffer) && + ctx->getFramebufferBinding() == framebuffer) ? GL_TRUE :GL_FALSE; } return GL_FALSE; } @@ -1602,7 +1614,8 @@ GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer(GLuint framebuffer){ GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer(GLuint renderbuffer){ GET_CTX_RET(GL_FALSE) if(renderbuffer && ctx->shareGroup().Ptr()){ - return ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) ? GL_TRUE :GL_FALSE; + return (ctx->shareGroup()->isObject(RENDERBUFFER,renderbuffer) && + ctx->getRenderbufferBinding() == renderbuffer) ? GL_TRUE :GL_FALSE; } return GL_FALSE; } @@ -1694,7 +1707,9 @@ GL_APICALL void GL_APIENTRY glPolygonOffset(GLfloat factor, GLfloat units){ GL_APICALL void GL_APIENTRY glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels){ GET_CTX(); SET_ERROR_IF(!(GLESv2Validate::readPixelFrmt(format) && GLESv2Validate::pixelType(ctx,type)),GL_INVALID_ENUM); + SET_ERROR_IF((width < 0 || height < 0),GL_INVALID_VALUE); SET_ERROR_IF(!(GLESv2Validate::pixelOp(format,type)),GL_INVALID_OPERATION); + SET_ERROR_IF(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE, GL_INVALID_FRAMEBUFFER_OPERATION); ctx->dispatcher().glReadPixels(x,y,width,height,format,type,pixels); } @@ -1810,6 +1825,14 @@ GL_APICALL void GL_APIENTRY glStencilOp(GLenum fail, GLenum zfail, GLenum zpass GL_APICALL void GL_APIENTRY glStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass){ GET_CTX(); + switch (face) { + case GL_FRONT: + case GL_BACK: + case GL_FRONT_AND_BACK: + break; + default: + SET_ERROR_IF(1, GL_INVALID_ENUM); + } ctx->dispatcher().glStencilOp(fail,zfail,zpass); } diff --git a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Validate.cpp b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Validate.cpp index 3f00428..b711317 100644 --- a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Validate.cpp +++ b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Validate.cpp @@ -113,6 +113,7 @@ bool GLESv2Validate::pixelStoreParam(GLenum param){ bool GLESv2Validate::readPixelFrmt(GLenum format){ switch(format) { case GL_ALPHA: + case GL_LUMINANCE_ALPHA: case GL_RGB: case GL_RGBA: return true; |