Making Program use the currently active context device. Fixes bug swiftshader:73. Change-Id: I6d36348996d22cf507a4badc3af90ce8d654eb71 Reviewed-on: https://swiftshader-review.googlesource.com/10510 Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp index dbb5cf2..2265aa6 100644 --- a/src/OpenGL/libGLESv2/Context.cpp +++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -2981,9 +2981,9 @@ mAppliedProgramSerial = programObject->getSerial(); } - programObject->applyTransformFeedback(getTransformFeedback()); - programObject->applyUniformBuffers(mState.uniformBuffers); - programObject->applyUniforms(); + programObject->applyTransformFeedback(device, getTransformFeedback()); + programObject->applyUniformBuffers(device, mState.uniformBuffers); + programObject->applyUniforms(device); } void Context::applyTextures()
diff --git a/src/OpenGL/libGLESv2/Program.cpp b/src/OpenGL/libGLESv2/Program.cpp index 400da5d..24d1f3c 100644 --- a/src/OpenGL/libGLESv2/Program.cpp +++ b/src/OpenGL/libGLESv2/Program.cpp
@@ -151,8 +151,6 @@ Program::Program(ResourceManager *manager, GLuint handle) : serial(issueSerial()), resourceManager(manager), handle(handle) { - device = getDevice(); - fragmentShader = 0; vertexShader = 0; pixelBinary = 0; @@ -1064,7 +1062,7 @@ } // Applies all the uniforms set for this program object to the device - void Program::applyUniforms() + void Program::applyUniforms(Device *device) { GLint numUniforms = static_cast<GLint>(uniformIndex.size()); for(GLint location = 0; location < numUniforms; location++) @@ -1086,23 +1084,23 @@ switch(targetUniform->type) { - case GL_BOOL: applyUniform1bv(location, size, b); break; - case GL_BOOL_VEC2: applyUniform2bv(location, size, b); break; - case GL_BOOL_VEC3: applyUniform3bv(location, size, b); break; - case GL_BOOL_VEC4: applyUniform4bv(location, size, b); break; - case GL_FLOAT: applyUniform1fv(location, size, f); break; - case GL_FLOAT_VEC2: applyUniform2fv(location, size, f); break; - case GL_FLOAT_VEC3: applyUniform3fv(location, size, f); break; - case GL_FLOAT_VEC4: applyUniform4fv(location, size, f); break; - case GL_FLOAT_MAT2: applyUniformMatrix2fv(location, size, f); break; - case GL_FLOAT_MAT2x3: applyUniformMatrix2x3fv(location, size, f); break; - case GL_FLOAT_MAT2x4: applyUniformMatrix2x4fv(location, size, f); break; - case GL_FLOAT_MAT3x2: applyUniformMatrix3x2fv(location, size, f); break; - case GL_FLOAT_MAT3: applyUniformMatrix3fv(location, size, f); break; - case GL_FLOAT_MAT3x4: applyUniformMatrix3x4fv(location, size, f); break; - case GL_FLOAT_MAT4x2: applyUniformMatrix4x2fv(location, size, f); break; - case GL_FLOAT_MAT4x3: applyUniformMatrix4x3fv(location, size, f); break; - case GL_FLOAT_MAT4: applyUniformMatrix4fv(location, size, f); break; + case GL_BOOL: applyUniform1bv(device, location, size, b); break; + case GL_BOOL_VEC2: applyUniform2bv(device, location, size, b); break; + case GL_BOOL_VEC3: applyUniform3bv(device, location, size, b); break; + case GL_BOOL_VEC4: applyUniform4bv(device, location, size, b); break; + case GL_FLOAT: applyUniform1fv(device, location, size, f); break; + case GL_FLOAT_VEC2: applyUniform2fv(device, location, size, f); break; + case GL_FLOAT_VEC3: applyUniform3fv(device, location, size, f); break; + case GL_FLOAT_VEC4: applyUniform4fv(device, location, size, f); break; + case GL_FLOAT_MAT2: applyUniformMatrix2fv(device, location, size, f); break; + case GL_FLOAT_MAT2x3: applyUniformMatrix2x3fv(device, location, size, f); break; + case GL_FLOAT_MAT2x4: applyUniformMatrix2x4fv(device, location, size, f); break; + case GL_FLOAT_MAT3x2: applyUniformMatrix3x2fv(device, location, size, f); break; + case GL_FLOAT_MAT3: applyUniformMatrix3fv(device, location, size, f); break; + case GL_FLOAT_MAT3x4: applyUniformMatrix3x4fv(device, location, size, f); break; + case GL_FLOAT_MAT4x2: applyUniformMatrix4x2fv(device, location, size, f); break; + case GL_FLOAT_MAT4x3: applyUniformMatrix4x3fv(device, location, size, f); break; + case GL_FLOAT_MAT4: applyUniformMatrix4fv(device, location, size, f); break; case GL_SAMPLER_2D: case GL_SAMPLER_CUBE: case GL_SAMPLER_EXTERNAL_OES: @@ -1119,14 +1117,14 @@ case GL_UNSIGNED_INT_SAMPLER_3D: case GL_INT_SAMPLER_2D_ARRAY: case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: - case GL_INT: applyUniform1iv(location, size, i); break; - case GL_INT_VEC2: applyUniform2iv(location, size, i); break; - case GL_INT_VEC3: applyUniform3iv(location, size, i); break; - case GL_INT_VEC4: applyUniform4iv(location, size, i); break; - case GL_UNSIGNED_INT: applyUniform1uiv(location, size, ui); break; - case GL_UNSIGNED_INT_VEC2: applyUniform2uiv(location, size, ui); break; - case GL_UNSIGNED_INT_VEC3: applyUniform3uiv(location, size, ui); break; - case GL_UNSIGNED_INT_VEC4: applyUniform4uiv(location, size, ui); break; + case GL_INT: applyUniform1iv(device, location, size, i); break; + case GL_INT_VEC2: applyUniform2iv(device, location, size, i); break; + case GL_INT_VEC3: applyUniform3iv(device, location, size, i); break; + case GL_INT_VEC4: applyUniform4iv(device, location, size, i); break; + case GL_UNSIGNED_INT: applyUniform1uiv(device, location, size, ui); break; + case GL_UNSIGNED_INT_VEC2: applyUniform2uiv(device, location, size, ui); break; + case GL_UNSIGNED_INT_VEC3: applyUniform3uiv(device, location, size, ui); break; + case GL_UNSIGNED_INT_VEC4: applyUniform4uiv(device, location, size, ui); break; default: UNREACHABLE(targetUniform->type); } @@ -1136,7 +1134,7 @@ } } - void Program::applyUniformBuffers(BufferBinding* uniformBuffers) + void Program::applyUniformBuffers(Device *device, BufferBinding* uniformBuffers) { GLint vertexUniformBuffers[MAX_UNIFORM_BUFFER_BINDINGS]; GLint fragmentUniformBuffers[MAX_UNIFORM_BUFFER_BINDINGS]; @@ -1189,7 +1187,7 @@ } } - void Program::applyTransformFeedback(TransformFeedback* transformFeedback) + void Program::applyTransformFeedback(Device *device, TransformFeedback* transformFeedback) { // Make sure the flags will fit in a 64 bit unsigned int variable ASSERT(sw::max<int>(MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS, sw::MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS) <= 64); @@ -1930,7 +1928,7 @@ return true; } - bool Program::applyUniform(GLint location, float* data) + bool Program::applyUniform(Device *device, GLint location, float* data) { Uniform *targetUniform = uniforms[uniformIndex[location].index]; @@ -1947,7 +1945,7 @@ return true; } - bool Program::applyUniform1bv(GLint location, GLsizei count, const GLboolean *v) + bool Program::applyUniform1bv(Device *device, GLint location, GLsizei count, const GLboolean *v) { int vector[MAX_UNIFORM_VECTORS][4]; @@ -1961,10 +1959,10 @@ v += 1; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform2bv(GLint location, GLsizei count, const GLboolean *v) + bool Program::applyUniform2bv(Device *device, GLint location, GLsizei count, const GLboolean *v) { int vector[MAX_UNIFORM_VECTORS][4]; @@ -1978,10 +1976,10 @@ v += 2; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform3bv(GLint location, GLsizei count, const GLboolean *v) + bool Program::applyUniform3bv(Device *device, GLint location, GLsizei count, const GLboolean *v) { int vector[MAX_UNIFORM_VECTORS][4]; @@ -1995,10 +1993,10 @@ v += 3; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform4bv(GLint location, GLsizei count, const GLboolean *v) + bool Program::applyUniform4bv(Device *device, GLint location, GLsizei count, const GLboolean *v) { int vector[MAX_UNIFORM_VECTORS][4]; @@ -2012,10 +2010,10 @@ v += 4; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform1fv(GLint location, GLsizei count, const GLfloat *v) + bool Program::applyUniform1fv(Device *device, GLint location, GLsizei count, const GLfloat *v) { float vector[MAX_UNIFORM_VECTORS][4]; @@ -2029,10 +2027,10 @@ v += 1; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform2fv(GLint location, GLsizei count, const GLfloat *v) + bool Program::applyUniform2fv(Device *device, GLint location, GLsizei count, const GLfloat *v) { float vector[MAX_UNIFORM_VECTORS][4]; @@ -2046,10 +2044,10 @@ v += 2; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform3fv(GLint location, GLsizei count, const GLfloat *v) + bool Program::applyUniform3fv(Device *device, GLint location, GLsizei count, const GLfloat *v) { float vector[MAX_UNIFORM_VECTORS][4]; @@ -2063,15 +2061,15 @@ v += 3; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform4fv(GLint location, GLsizei count, const GLfloat *v) + bool Program::applyUniform4fv(Device *device, GLint location, GLsizei count, const GLfloat *v) { - return applyUniform(location, (float*)v); + return applyUniform(device, location, (float*)v); } - bool Program::applyUniformMatrix2fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix2fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 1) / 2][2][4]; @@ -2083,10 +2081,10 @@ value += 4; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix2x3fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix2x3fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 1) / 2][2][4]; @@ -2098,10 +2096,10 @@ value += 6; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix2x4fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix2x4fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 1) / 2][2][4]; @@ -2113,10 +2111,10 @@ value += 8; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix3fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 2) / 3][3][4]; @@ -2129,10 +2127,10 @@ value += 9; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix3x2fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix3x2fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 2) / 3][3][4]; @@ -2145,10 +2143,10 @@ value += 6; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix3x4fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix3x4fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 2) / 3][3][4]; @@ -2161,15 +2159,15 @@ value += 12; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix4fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { - return applyUniform(location, (float*)value); + return applyUniform(device, location, (float*)value); } - bool Program::applyUniformMatrix4x2fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix4x2fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 3) / 4][4][4]; @@ -2183,10 +2181,10 @@ value += 8; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniformMatrix4x3fv(GLint location, GLsizei count, const GLfloat *value) + bool Program::applyUniformMatrix4x3fv(Device *device, GLint location, GLsizei count, const GLfloat *value) { float matrix[(MAX_UNIFORM_VECTORS + 3) / 4][4][4]; @@ -2200,10 +2198,10 @@ value += 12; } - return applyUniform(location, (float*)matrix); + return applyUniform(device, location, (float*)matrix); } - bool Program::applyUniform1iv(GLint location, GLsizei count, const GLint *v) + bool Program::applyUniform1iv(Device *device, GLint location, GLsizei count, const GLint *v) { GLint vector[MAX_UNIFORM_VECTORS][4]; @@ -2248,13 +2246,13 @@ } else { - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } return true; } - bool Program::applyUniform2iv(GLint location, GLsizei count, const GLint *v) + bool Program::applyUniform2iv(Device *device, GLint location, GLsizei count, const GLint *v) { GLint vector[MAX_UNIFORM_VECTORS][4]; @@ -2268,10 +2266,10 @@ v += 2; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform3iv(GLint location, GLsizei count, const GLint *v) + bool Program::applyUniform3iv(Device *device, GLint location, GLsizei count, const GLint *v) { GLint vector[MAX_UNIFORM_VECTORS][4]; @@ -2285,10 +2283,10 @@ v += 3; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform4iv(GLint location, GLsizei count, const GLint *v) + bool Program::applyUniform4iv(Device *device, GLint location, GLsizei count, const GLint *v) { GLint vector[MAX_UNIFORM_VECTORS][4]; @@ -2302,10 +2300,10 @@ v += 4; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform1uiv(GLint location, GLsizei count, const GLuint *v) + bool Program::applyUniform1uiv(Device *device, GLint location, GLsizei count, const GLuint *v) { GLuint vector[MAX_UNIFORM_VECTORS][4]; @@ -2350,13 +2348,13 @@ } else { - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } return true; } - bool Program::applyUniform2uiv(GLint location, GLsizei count, const GLuint *v) + bool Program::applyUniform2uiv(Device *device, GLint location, GLsizei count, const GLuint *v) { GLuint vector[MAX_UNIFORM_VECTORS][4]; @@ -2370,10 +2368,10 @@ v += 2; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform3uiv(GLint location, GLsizei count, const GLuint *v) + bool Program::applyUniform3uiv(Device *device, GLint location, GLsizei count, const GLuint *v) { GLuint vector[MAX_UNIFORM_VECTORS][4]; @@ -2387,10 +2385,10 @@ v += 3; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } - bool Program::applyUniform4uiv(GLint location, GLsizei count, const GLuint *v) + bool Program::applyUniform4uiv(Device *device, GLint location, GLsizei count, const GLuint *v) { GLuint vector[MAX_UNIFORM_VECTORS][4]; @@ -2404,7 +2402,7 @@ v += 4; } - return applyUniform(location, (float*)vector); + return applyUniform(device, location, (float*)vector); } void Program::appendToInfoLog(const char *format, ...) @@ -2875,7 +2873,7 @@ return orphaned; } - void Program::validate() + void Program::validate(Device* device) { resetInfoLog(); @@ -2886,7 +2884,7 @@ } else { - applyUniforms(); + applyUniforms(device); if(!validateSamplers(true)) { validated = false;
diff --git a/src/OpenGL/libGLESv2/Program.h b/src/OpenGL/libGLESv2/Program.h index ff4bc5f..56f7df7 100644 --- a/src/OpenGL/libGLESv2/Program.h +++ b/src/OpenGL/libGLESv2/Program.h
@@ -172,9 +172,9 @@ bool getUniformuiv(GLint location, GLsizei *bufSize, GLuint *params); void dirtyAllUniforms(); - void applyUniforms(); - void applyUniformBuffers(BufferBinding* uniformBuffers); - void applyTransformFeedback(TransformFeedback* transformFeedback); + void applyUniforms(Device *device); + void applyUniformBuffers(Device *device, BufferBinding* uniformBuffers); + void applyTransformFeedback(Device *device, TransformFeedback* transformFeedback); void link(); bool isLinked() const; @@ -207,7 +207,7 @@ void flagForDeletion(); bool isFlaggedForDeletion() const; - void validate(); + void validate(Device* device); bool validateSamplers(bool logErrors); bool isValidated() const; @@ -232,32 +232,32 @@ bool areMatchingUniformBlocks(const glsl::UniformBlock &block1, const glsl::UniformBlock &block2, const Shader *shader1, const Shader *shader2); bool defineUniform(GLenum shader, GLenum type, GLenum precision, const std::string &_name, unsigned int arraySize, int registerIndex, const Uniform::BlockInfo& blockInfo); bool defineUniformBlock(const Shader *shader, const glsl::UniformBlock &block); - bool applyUniform(GLint location, float* data); - bool applyUniform1bv(GLint location, GLsizei count, const GLboolean *v); - bool applyUniform2bv(GLint location, GLsizei count, const GLboolean *v); - bool applyUniform3bv(GLint location, GLsizei count, const GLboolean *v); - bool applyUniform4bv(GLint location, GLsizei count, const GLboolean *v); - bool applyUniform1fv(GLint location, GLsizei count, const GLfloat *v); - bool applyUniform2fv(GLint location, GLsizei count, const GLfloat *v); - bool applyUniform3fv(GLint location, GLsizei count, const GLfloat *v); - bool applyUniform4fv(GLint location, GLsizei count, const GLfloat *v); - bool applyUniformMatrix2fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix2x3fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix2x4fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix3x2fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix3x4fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix4x2fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniformMatrix4x3fv(GLint location, GLsizei count, const GLfloat *value); - bool applyUniform1iv(GLint location, GLsizei count, const GLint *v); - bool applyUniform2iv(GLint location, GLsizei count, const GLint *v); - bool applyUniform3iv(GLint location, GLsizei count, const GLint *v); - bool applyUniform4iv(GLint location, GLsizei count, const GLint *v); - bool applyUniform1uiv(GLint location, GLsizei count, const GLuint *v); - bool applyUniform2uiv(GLint location, GLsizei count, const GLuint *v); - bool applyUniform3uiv(GLint location, GLsizei count, const GLuint *v); - bool applyUniform4uiv(GLint location, GLsizei count, const GLuint *v); + bool applyUniform(Device *device, GLint location, float* data); + bool applyUniform1bv(Device *device, GLint location, GLsizei count, const GLboolean *v); + bool applyUniform2bv(Device *device, GLint location, GLsizei count, const GLboolean *v); + bool applyUniform3bv(Device *device, GLint location, GLsizei count, const GLboolean *v); + bool applyUniform4bv(Device *device, GLint location, GLsizei count, const GLboolean *v); + bool applyUniform1fv(Device *device, GLint location, GLsizei count, const GLfloat *v); + bool applyUniform2fv(Device *device, GLint location, GLsizei count, const GLfloat *v); + bool applyUniform3fv(Device *device, GLint location, GLsizei count, const GLfloat *v); + bool applyUniform4fv(Device *device, GLint location, GLsizei count, const GLfloat *v); + bool applyUniformMatrix2fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix2x3fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix2x4fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix3fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix3x2fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix3x4fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix4fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix4x2fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniformMatrix4x3fv(Device *device, GLint location, GLsizei count, const GLfloat *value); + bool applyUniform1iv(Device *device, GLint location, GLsizei count, const GLint *v); + bool applyUniform2iv(Device *device, GLint location, GLsizei count, const GLint *v); + bool applyUniform3iv(Device *device, GLint location, GLsizei count, const GLint *v); + bool applyUniform4iv(Device *device, GLint location, GLsizei count, const GLint *v); + bool applyUniform1uiv(Device *device, GLint location, GLsizei count, const GLuint *v); + bool applyUniform2uiv(Device *device, GLint location, GLsizei count, const GLuint *v); + bool applyUniform3uiv(Device *device, GLint location, GLsizei count, const GLuint *v); + bool applyUniform4uiv(Device *device, GLint location, GLsizei count, const GLuint *v); bool setUniformfv(GLint location, GLsizei count, const GLfloat *v, int numElements); bool setUniformMatrixfv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value, GLenum type); @@ -270,7 +270,6 @@ static unsigned int issueSerial(); private: - es2::Device *device; FragmentShader *fragmentShader; VertexShader *vertexShader;
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp index 8be9056..920e1a0 100644 --- a/src/OpenGL/libGLESv2/libGLESv2.cpp +++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -5970,7 +5970,7 @@ } } - programObject->validate(); + programObject->validate(context->getDevice()); } }