aboutsummaryrefslogtreecommitdiffstats
path: root/emulator
diff options
context:
space:
mode:
authorbohu <bohu@google.com>2014-10-29 11:44:42 -0700
committerbohu <bohu@google.com>2014-10-29 11:44:42 -0700
commitded85d81e7738a5011eb31bb5d7531130da117c1 (patch)
tree21217b3a3b1e73ded2cb806083b069e889ab3d21 /emulator
parentcf7e8c7948b3b811a6693ac871d2578a2bdf0a46 (diff)
downloadsdk-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')
-rw-r--r--emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp1
-rw-r--r--emulator/opengl/host/libs/Translator/GLcommon/GLESvalidate.cpp10
-rw-r--r--emulator/opengl/host/libs/Translator/include/GLcommon/GLESvalidate.h1
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);