ES31: Add glGetProgramResourceLocation API
Add API entry and validation checks(GLES 3.1 section 7.3).
Add the first 2 interfaces(PROGRAM_INPUT and PROGRAM_OUTPUT) implementation.
BUG=angleproject:1920
TEST=angle_end2end_tests:ProgramInterfaceTestES31.*
Change-Id: I5128cda43b0d9176c910b036cdc76bf37757670e
Reviewed-on: https://chromium-review.googlesource.com/474212
Commit-Queue: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/queryutils.cpp b/src/libANGLE/queryutils.cpp
index a274824..389f3a5 100644
--- a/src/libANGLE/queryutils.cpp
+++ b/src/libANGLE/queryutils.cpp
@@ -1050,7 +1050,7 @@
case GL_PROGRAM_OUTPUT:
return program->getOutputResourceIndex(name);
- // TODO(Jie): more interfaces.
+ // TODO(jie.a.chen@intel.com): more interfaces.
case GL_UNIFORM:
case GL_UNIFORM_BLOCK:
case GL_TRANSFORM_FEEDBACK_VARYING:
@@ -1082,7 +1082,7 @@
program->getOutputResourceName(index, bufSize, length, name);
break;
- // TODO(Jie): more interfaces.
+ // TODO(jie.a.chen@intel.com): more interfaces.
case GL_UNIFORM:
case GL_UNIFORM_BLOCK:
case GL_TRANSFORM_FEEDBACK_VARYING:
@@ -1096,6 +1096,33 @@
}
}
+GLint QueryProgramResourceLocation(const Program *program,
+ GLenum programInterface,
+ const GLchar *name)
+{
+ switch (programInterface)
+ {
+ case GL_PROGRAM_INPUT:
+ return program->getAttributeLocation(name);
+
+ case GL_PROGRAM_OUTPUT:
+ return program->getFragDataLocation(name);
+
+ // TODO(jie.a.chen@intel.com): more interfaces.
+ case GL_UNIFORM:
+ case GL_UNIFORM_BLOCK:
+ case GL_TRANSFORM_FEEDBACK_VARYING:
+ case GL_BUFFER_VARIABLE:
+ case GL_SHADER_STORAGE_BLOCK:
+ UNIMPLEMENTED();
+ return -1;
+
+ default:
+ UNREACHABLE();
+ return -1;
+ }
+}
+
} // namespace gl
namespace egl