diff options
author | bohu <bohu@google.com> | 2014-10-29 11:44:42 -0700 |
---|---|---|
committer | bohu <bohu@google.com> | 2014-10-29 11:44:42 -0700 |
commit | ded85d81e7738a5011eb31bb5d7531130da117c1 (patch) | |
tree | 21217b3a3b1e73ded2cb806083b069e889ab3d21 /emulator | |
parent | cf7e8c7948b3b811a6693ac871d2578a2bdf0a46 (diff) | |
download | sdk-ded85d81e7738a5011eb31bb5d7531130da117c1.zip sdk-ded85d81e7738a5011eb31bb5d7531130da117c1.tar.gz sdk-ded85d81e7738a5011eb31bb5d7531130da117c1.tar.bz2 |
validate glBufferData's usage parameter
Only GL_STREAM_DRAW, GL_STATIC_DRAW and GL_DYNAMIC_DRAW
usages are allowed.
Change-Id: I2d6a425363c32330d25272d26884d32610d8dd19
Diffstat (limited to 'emulator')
3 files changed, 12 insertions, 0 deletions
diff --git a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index fe64f6f..c97e061 100644 --- a/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -302,6 +302,7 @@ GL_APICALL void GL_APIENTRY glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, G GL_APICALL void GL_APIENTRY glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage){ GET_CTX(); SET_ERROR_IF(!GLESv2Validate::bufferTarget(target),GL_INVALID_ENUM); + SET_ERROR_IF(!GLESv2Validate::bufferUsage(usage),GL_INVALID_ENUM); SET_ERROR_IF(!ctx->isBindedBuffer(target),GL_INVALID_OPERATION); ctx->setBufferData(target,size,data,usage); } diff --git a/emulator/opengl/host/libs/Translator/GLcommon/GLESvalidate.cpp b/emulator/opengl/host/libs/Translator/GLcommon/GLESvalidate.cpp index 882d95b..8e35978 100644 --- a/emulator/opengl/host/libs/Translator/GLcommon/GLESvalidate.cpp +++ b/emulator/opengl/host/libs/Translator/GLcommon/GLESvalidate.cpp @@ -78,6 +78,16 @@ bool GLESvalidate::bufferTarget(GLenum target) { return target == GL_ARRAY_BUFFER || target == GL_ELEMENT_ARRAY_BUFFER; } +bool GLESvalidate::bufferUsage(GLenum usage) { + switch(usage) { + case GL_STREAM_DRAW: + case GL_STATIC_DRAW: + case GL_DYNAMIC_DRAW: + return true; + } + return false; +} + bool GLESvalidate::bufferParam(GLenum param) { return (param == GL_BUFFER_SIZE) || (param == GL_BUFFER_USAGE); } diff --git a/emulator/opengl/host/libs/Translator/include/GLcommon/GLESvalidate.h b/emulator/opengl/host/libs/Translator/include/GLcommon/GLESvalidate.h index 3daaa7c..92c1f33 100644 --- a/emulator/opengl/host/libs/Translator/include/GLcommon/GLESvalidate.h +++ b/emulator/opengl/host/libs/Translator/include/GLcommon/GLESvalidate.h @@ -25,6 +25,7 @@ static bool pixelType(GLEScontext * ctx,GLenum type); static bool pixelOp(GLenum format,GLenum type); static bool pixelFrmt(GLEScontext* ctx , GLenum format); static bool bufferTarget(GLenum target); +static bool bufferUsage(GLenum usage); static bool bufferParam(GLenum param); static bool drawMode(GLenum mode); static bool drawType(GLenum mode); |