glProgramParameteri API implementation
This function is simply used to notify the
program that the binary may be queried later
on by the application. For now, this hint is
stored in the program, but otherwise ignored,
as querying the binary is still unimplemented.
Change-Id: Ie59f21d7b803111ce6091718b84ecfbe78c03bdd
Reviewed-on: https://swiftshader-review.googlesource.com/3545
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/Program.cpp b/src/OpenGL/libGLESv2/Program.cpp
index 4f89f04..81045ee 100644
--- a/src/OpenGL/libGLESv2/Program.cpp
+++ b/src/OpenGL/libGLESv2/Program.cpp
@@ -118,6 +118,7 @@
unlink();
orphaned = false;
+ retrievableBinary = false;
referenceCount = 0;
}
diff --git a/src/OpenGL/libGLESv2/Program.h b/src/OpenGL/libGLESv2/Program.h
index c05cc92..89f5e48 100644
--- a/src/OpenGL/libGLESv2/Program.h
+++ b/src/OpenGL/libGLESv2/Program.h
@@ -216,6 +216,8 @@
unsigned int getSerial() const;
+ void setBinaryRetrievable(bool retrievable) { retrievableBinary = retrievable; }
+
private:
void unlink();
void resetUniformBlockBindings();
@@ -303,6 +305,7 @@
bool orphaned; // Flag to indicate that the program can be deleted when no longer in use
char *infoLog;
bool validated;
+ bool retrievableBinary;
unsigned int referenceCount;
const unsigned int serial;
diff --git a/src/OpenGL/libGLESv2/libGLESv3.cpp b/src/OpenGL/libGLESv2/libGLESv3.cpp
index 806c554..5a90245 100644
--- a/src/OpenGL/libGLESv2/libGLESv3.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv3.cpp
@@ -3865,7 +3865,26 @@
TRACE("(GLuint program = %d, GLenum pname = 0x%X, GLint value = %d)",
program, pname, value);
- UNIMPLEMENTED();
+ es2::Context *context = es2::getContext();
+
+ if(context)
+ {
+ es2::Program *programObject = context->getProgram(program);
+
+ if(!programObject)
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+
+ switch(pname)
+ {
+ case GL_PROGRAM_BINARY_RETRIEVABLE_HINT:
+ programObject->setBinaryRetrievable(value != GL_FALSE);
+ break;
+ default:
+ return error(GL_INVALID_ENUM);
+ }
+ }
}
GL_APICALL void GL_APIENTRY glInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)