Commit db799e66 by Alexis Hetu Committed by Alexis Hétu

Adding uniform related APIs for GLES3

- Added NxM size matrices - Added unsigned int uniforms - Removed dead code(packVaryings) in Program Change-Id: I0ecb47fa468245f60b9aa026d07fa9ed1f871340 Reviewed-on: https://swiftshader-review.googlesource.com/2745Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent b508ff81
......@@ -91,15 +91,26 @@ namespace es2
bool setUniform3fv(GLint location, GLsizei count, const GLfloat *v);
bool setUniform4fv(GLint location, GLsizei count, const GLfloat *v);
bool setUniformMatrix2fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix2x3fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix2x4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix3fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix3x2fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix3x4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4x2fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniformMatrix4x3fv(GLint location, GLsizei count, const GLfloat *value);
bool setUniform1iv(GLint location, GLsizei count, const GLint *v);
bool setUniform2iv(GLint location, GLsizei count, const GLint *v);
bool setUniform3iv(GLint location, GLsizei count, const GLint *v);
bool setUniform4iv(GLint location, GLsizei count, const GLint *v);
bool setUniform1uiv(GLint location, GLsizei count, const GLuint *v);
bool setUniform2uiv(GLint location, GLsizei count, const GLuint *v);
bool setUniform3uiv(GLint location, GLsizei count, const GLuint *v);
bool setUniform4uiv(GLint location, GLsizei count, const GLuint *v);
bool getUniformfv(GLint location, GLsizei *bufSize, GLfloat *params);
bool getUniformiv(GLint location, GLsizei *bufSize, GLint *params);
bool getUniformuiv(GLint location, GLsizei *bufSize, GLuint *params);
void dirtyAllUniforms();
void applyUniforms();
......@@ -133,7 +144,6 @@ namespace es2
private:
void unlink();
int packVaryings(const glsl::Varying *packing[][4]);
bool linkVaryings();
bool linkAttributes();
......@@ -155,7 +165,12 @@ namespace es2
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 applyUniform4iv(GLint location, GLsizei count, const GLint *v);
bool setUniformfv(GLint location, GLsizei count, const GLfloat *v, int numElements);
bool setUniformMatrixfv(GLint location, GLsizei count, const GLfloat *value, GLenum type);
bool setUniformiv(GLint location, GLsizei count, const GLint *v, int numElements);
bool setUniformuiv(GLint location, GLsizei count, const GLuint *v, int numElements);
void appendToInfoLog(const char *info, ...);
void resetInfoLog();
......@@ -169,7 +184,7 @@ namespace es2
sw::PixelShader *pixelBinary;
sw::VertexShader *vertexBinary;
std::set<std::string> attributeBinding[MAX_VERTEX_ATTRIBS];
glsl::Attribute linkedAttribute[MAX_VERTEX_ATTRIBS];
int attributeStream[MAX_VERTEX_ATTRIBS];
......
......@@ -864,31 +864,161 @@ void GL_APIENTRY glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean t
void GL_APIENTRY glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = 0x%0.8p)", location, count, transpose, value);
UNIMPLEMENTED();
if(count < 0 || transpose != GL_FALSE)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniformMatrix3x2fv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = 0x%0.8p)", location, count, transpose, value);
UNIMPLEMENTED();
if(count < 0 || transpose != GL_FALSE)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniformMatrix2x4fv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = 0x%0.8p)", location, count, transpose, value);
UNIMPLEMENTED();
if(count < 0 || transpose != GL_FALSE)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniformMatrix4x2fv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = 0x%0.8p)", location, count, transpose, value);
UNIMPLEMENTED();
if(count < 0 || transpose != GL_FALSE)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniformMatrix3x4fv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, GLboolean transpose = %d, const GLfloat *value = 0x%0.8p)", location, count, transpose, value);
UNIMPLEMENTED();
if(count < 0 || transpose != GL_FALSE)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniformMatrix4x3fv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
......@@ -1418,28 +1548,132 @@ void GL_APIENTRY glUniform1uiv(GLint location, GLsizei count, const GLuint *valu
{
TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)",
location, count, value);
UNIMPLEMENTED();
if(count < 0)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniform1uiv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniform2uiv(GLint location, GLsizei count, const GLuint *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)",
location, count, value);
UNIMPLEMENTED();
if(count < 0)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniform2uiv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniform3uiv(GLint location, GLsizei count, const GLuint *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)",
location, count, value);
UNIMPLEMENTED();
if(count < 0)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniform3uiv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glUniform4uiv(GLint location, GLsizei count, const GLuint *value)
{
TRACE("(GLint location = %d, GLsizei count = %d, const GLuint *value = 0x%0.8p)",
location, count, value);
UNIMPLEMENTED();
if(count < 0)
{
return error(GL_INVALID_VALUE);
}
if(location == -1)
{
return;
}
es2::Context *context = es2::getContext();
if(context)
{
es2::Program *program = context->getCurrentProgram();
if(!program)
{
return error(GL_INVALID_OPERATION);
}
if(!program->setUniform4uiv(location, count, value))
{
return error(GL_INVALID_OPERATION);
}
}
}
void GL_APIENTRY glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment