Commit b3f5ed7a by Alexis Hetu Committed by Alexis Hétu

glGetFragDataLocation implementation

Implemented glGetFragDataLocation. There's very little coverage for this function in dEQP, but the one test that uses it passes. Change-Id: I6cfc93d7eaad54f23c922e45dafee9cba3401c83 Note: Chromium's ES3 path requires this function to be implemented. Reviewed-on: https://swiftshader-review.googlesource.com/11728Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 0e22d3ac
...@@ -254,6 +254,27 @@ namespace es2 ...@@ -254,6 +254,27 @@ namespace es2
return vertexBinary; return vertexBinary;
} }
GLint Program::getFragDataLocation(const GLchar *name)
{
if(name && linked)
{
std::string baseName(name);
unsigned int subscript = GL_INVALID_INDEX;
baseName = ParseUniformName(baseName, &subscript);
for(glsl::VaryingList::iterator input = fragmentShader->varyings.begin(); input != fragmentShader->varyings.end(); ++input)
{
if(input->name == baseName)
{
int rowCount = VariableRowCount(input->type);
int colCount = VariableColumnCount(input->type);
return (subscript == GL_INVALID_INDEX) ? input->reg : input->reg + (rowCount > 1 ? colCount * subscript : subscript);
}
}
}
return -1;
}
void Program::bindAttributeLocation(GLuint index, const char *name) void Program::bindAttributeLocation(GLuint index, const char *name)
{ {
if(index < MAX_VERTEX_ATTRIBS) if(index < MAX_VERTEX_ATTRIBS)
......
...@@ -182,6 +182,8 @@ namespace es2 ...@@ -182,6 +182,8 @@ namespace es2
void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog); void getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog);
void getAttachedShaders(GLsizei maxCount, GLsizei *count, GLuint *shaders); void getAttachedShaders(GLsizei maxCount, GLsizei *count, GLuint *shaders);
GLint getFragDataLocation(const GLchar *name);
void getActiveAttribute(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const; void getActiveAttribute(GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, GLchar *name) const;
size_t getActiveAttributeCount() const; size_t getActiveAttributeCount() const;
GLint getActiveAttributeMaxLength() const; GLint getActiveAttributeMaxLength() const;
......
...@@ -2280,11 +2280,6 @@ GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar ...@@ -2280,11 +2280,6 @@ GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar
es2::Context *context = es2::getContext(); es2::Context *context = es2::getContext();
if(strstr(name, "gl_") == name)
{
return -1;
}
if(context) if(context)
{ {
es2::Program *programObject = context->getProgram(program); es2::Program *programObject = context->getProgram(program);
...@@ -2305,9 +2300,10 @@ GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar ...@@ -2305,9 +2300,10 @@ GL_APICALL GLint GL_APIENTRY glGetFragDataLocation(GLuint program, const GLchar
{ {
return error(GL_INVALID_OPERATION, -1); return error(GL_INVALID_OPERATION, -1);
} }
return programObject->getFragDataLocation(name);
} }
UNIMPLEMENTED();
return -1; return -1;
} }
......
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