Commit ed87c16a by Mohan Maiya Committed by Commit Bot

Vulkan: Add GL_EXT_separate_shader_objects support

All the functionality needed for this extension has already been implemented as part of core GLES31. Hook into that along with changes to validation layer to allow non-GLES31 contexts to call into these APIs as long as the extension is exposed. Bug: angleproject:3570 Test: ProgramPipelineTest.GenerateProgramPipelineObjectEXT* Change-Id: I92a61a47517c5cb9573874b2add6a744c9edb755 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2539121 Commit-Queue: Mohan Maiya <m.maiya@samsung.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent cc4ae6da
......@@ -345,6 +345,9 @@ void RendererVk::ensureCapsInitialized() const
// Implemented in the translator
mNativeExtensions.shaderNonConstGlobalInitializersEXT = true;
// Implemented in the front end
mNativeExtensions.separateShaderObjects = true;
// Vulkan has no restrictions of the format of cubemaps, so if the proper formats are supported,
// creating a cube of any of these formats should be implicitly supported.
mNativeExtensions.depthTextureCubeMapOES =
......
......@@ -2014,17 +2014,11 @@ bool ValidateGetProgramBinary(const Context *context,
return ValidateGetProgramBinaryBase(context, program, bufSize, length, binaryFormat, binary);
}
bool ValidateProgramParameteri(const Context *context,
ShaderProgramID program,
GLenum pname,
GLint value)
bool ValidateProgramParameteriBase(const Context *context,
ShaderProgramID program,
GLenum pname,
GLint value)
{
if (context->getClientMajorVersion() < 3)
{
context->validationError(GL_INVALID_OPERATION, kES3Required);
return false;
}
if (GetValidProgram(context, program) == nullptr)
{
return false;
......@@ -2062,6 +2056,20 @@ bool ValidateProgramParameteri(const Context *context,
return true;
}
bool ValidateProgramParameteri(const Context *context,
ShaderProgramID program,
GLenum pname,
GLint value)
{
if (context->getClientMajorVersion() < 3)
{
context->validationError(GL_INVALID_OPERATION, kES3Required);
return false;
}
return ValidateProgramParameteriBase(context, program, pname, value);
}
bool ValidateBlitFramebuffer(const Context *context,
GLint srcX0,
GLint srcY0,
......
......@@ -31,6 +31,11 @@ bool ValidateES3TexImageParametersBase(const Context *context,
GLenum type,
GLsizei imageSize,
const void *pixels);
bool ValidateProgramParameteriBase(const Context *context,
ShaderProgramID program,
GLenum pname,
GLint value);
} // namespace gl
#endif // LIBANGLE_VALIDATION_ES3_H_
......@@ -299,39 +299,25 @@ bool ValidateProgramResourceIndex(const Program *programObject,
}
}
bool ValidateProgramUniform(const Context *context,
GLenum valueType,
ShaderProgramID program,
UniformLocation location,
GLsizei count)
bool ValidateProgramUniformBase(const Context *context,
GLenum valueType,
ShaderProgramID program,
UniformLocation location,
GLsizei count)
{
// Check for ES31 program uniform entry points
if (context->getClientVersion() < Version(3, 1))
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
const LinkedUniform *uniform = nullptr;
Program *programObject = GetValidProgram(context, program);
return ValidateUniformCommonBase(context, programObject, location, count, &uniform) &&
ValidateUniformValue(context, valueType, uniform->type);
}
bool ValidateProgramUniformMatrix(const Context *context,
GLenum valueType,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose)
bool ValidateProgramUniformMatrixBase(const Context *context,
GLenum valueType,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose)
{
// Check for ES31 program uniform entry points
if (context->getClientVersion() < Version(3, 1))
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
const LinkedUniform *uniform = nullptr;
Program *programObject = GetValidProgram(context, program);
return ValidateUniformCommonBase(context, programObject, location, count, &uniform) &&
......@@ -553,344 +539,337 @@ bool ValidateDrawElementsIndirect(const Context *context,
return true;
}
bool ValidateProgramUniform1i(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0)
bool ValidateProgramUniform1iBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0)
{
return ValidateProgramUniform1iv(context, program, location, 1, &v0);
return ValidateProgramUniform1ivBase(context, program, location, 1, &v0);
}
bool ValidateProgramUniform2i(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1)
bool ValidateProgramUniform2iBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1)
{
GLint xy[2] = {v0, v1};
return ValidateProgramUniform2iv(context, program, location, 1, xy);
return ValidateProgramUniform2ivBase(context, program, location, 1, xy);
}
bool ValidateProgramUniform3i(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1,
GLint v2)
bool ValidateProgramUniform3iBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1,
GLint v2)
{
GLint xyz[3] = {v0, v1, v2};
return ValidateProgramUniform3iv(context, program, location, 1, xyz);
return ValidateProgramUniform3ivBase(context, program, location, 1, xyz);
}
bool ValidateProgramUniform4i(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1,
GLint v2,
GLint v3)
bool ValidateProgramUniform4iBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLint v0,
GLint v1,
GLint v2,
GLint v3)
{
GLint xyzw[4] = {v0, v1, v2, v3};
return ValidateProgramUniform4iv(context, program, location, 1, xyzw);
return ValidateProgramUniform4ivBase(context, program, location, 1, xyzw);
}
bool ValidateProgramUniform1ui(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0)
bool ValidateProgramUniform1uiBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0)
{
return ValidateProgramUniform1uiv(context, program, location, 1, &v0);
return ValidateProgramUniform1uivBase(context, program, location, 1, &v0);
}
bool ValidateProgramUniform2ui(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1)
bool ValidateProgramUniform2uiBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1)
{
GLuint xy[2] = {v0, v1};
return ValidateProgramUniform2uiv(context, program, location, 1, xy);
return ValidateProgramUniform2uivBase(context, program, location, 1, xy);
}
bool ValidateProgramUniform3ui(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1,
GLuint v2)
bool ValidateProgramUniform3uiBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1,
GLuint v2)
{
GLuint xyz[3] = {v0, v1, v2};
return ValidateProgramUniform3uiv(context, program, location, 1, xyz);
return ValidateProgramUniform3uivBase(context, program, location, 1, xyz);
}
bool ValidateProgramUniform4ui(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3)
bool ValidateProgramUniform4uiBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3)
{
GLuint xyzw[4] = {v0, v1, v2, v3};
return ValidateProgramUniform4uiv(context, program, location, 1, xyzw);
return ValidateProgramUniform4uivBase(context, program, location, 1, xyzw);
}
bool ValidateProgramUniform1f(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0)
bool ValidateProgramUniform1fBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0)
{
return ValidateProgramUniform1fv(context, program, location, 1, &v0);
return ValidateProgramUniform1fvBase(context, program, location, 1, &v0);
}
bool ValidateProgramUniform2f(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1)
bool ValidateProgramUniform2fBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1)
{
GLfloat xy[2] = {v0, v1};
return ValidateProgramUniform2fv(context, program, location, 1, xy);
return ValidateProgramUniform2fvBase(context, program, location, 1, xy);
}
bool ValidateProgramUniform3f(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1,
GLfloat v2)
bool ValidateProgramUniform3fBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1,
GLfloat v2)
{
GLfloat xyz[3] = {v0, v1, v2};
return ValidateProgramUniform3fv(context, program, location, 1, xyz);
return ValidateProgramUniform3fvBase(context, program, location, 1, xyz);
}
bool ValidateProgramUniform4f(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1,
GLfloat v2,
GLfloat v3)
bool ValidateProgramUniform4fBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLfloat v0,
GLfloat v1,
GLfloat v2,
GLfloat v3)
{
GLfloat xyzw[4] = {v0, v1, v2, v3};
return ValidateProgramUniform4fv(context, program, location, 1, xyzw);
return ValidateProgramUniform4fvBase(context, program, location, 1, xyzw);
}
bool ValidateProgramUniform1iv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
bool ValidateProgramUniform1ivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
{
// Check for ES31 program uniform entry points
if (context->getClientVersion() < Version(3, 1))
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
const LinkedUniform *uniform = nullptr;
Program *programObject = GetValidProgram(context, program);
return ValidateUniformCommonBase(context, programObject, location, count, &uniform) &&
ValidateUniform1ivValue(context, uniform->type, count, value);
}
bool ValidateProgramUniform2iv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
bool ValidateProgramUniform2ivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
{
return ValidateProgramUniform(context, GL_INT_VEC2, program, location, count);
return ValidateProgramUniformBase(context, GL_INT_VEC2, program, location, count);
}
bool ValidateProgramUniform3iv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
bool ValidateProgramUniform3ivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
{
return ValidateProgramUniform(context, GL_INT_VEC3, program, location, count);
return ValidateProgramUniformBase(context, GL_INT_VEC3, program, location, count);
}
bool ValidateProgramUniform4iv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
bool ValidateProgramUniform4ivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLint *value)
{
return ValidateProgramUniform(context, GL_INT_VEC4, program, location, count);
return ValidateProgramUniformBase(context, GL_INT_VEC4, program, location, count);
}
bool ValidateProgramUniform1uiv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
bool ValidateProgramUniform1uivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
{
return ValidateProgramUniform(context, GL_UNSIGNED_INT, program, location, count);
return ValidateProgramUniformBase(context, GL_UNSIGNED_INT, program, location, count);
}
bool ValidateProgramUniform2uiv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
bool ValidateProgramUniform2uivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
{
return ValidateProgramUniform(context, GL_UNSIGNED_INT_VEC2, program, location, count);
return ValidateProgramUniformBase(context, GL_UNSIGNED_INT_VEC2, program, location, count);
}
bool ValidateProgramUniform3uiv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
bool ValidateProgramUniform3uivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
{
return ValidateProgramUniform(context, GL_UNSIGNED_INT_VEC3, program, location, count);
return ValidateProgramUniformBase(context, GL_UNSIGNED_INT_VEC3, program, location, count);
}
bool ValidateProgramUniform4uiv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
bool ValidateProgramUniform4uivBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLuint *value)
{
return ValidateProgramUniform(context, GL_UNSIGNED_INT_VEC4, program, location, count);
return ValidateProgramUniformBase(context, GL_UNSIGNED_INT_VEC4, program, location, count);
}
bool ValidateProgramUniform1fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
bool ValidateProgramUniform1fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
{
return ValidateProgramUniform(context, GL_FLOAT, program, location, count);
return ValidateProgramUniformBase(context, GL_FLOAT, program, location, count);
}
bool ValidateProgramUniform2fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
bool ValidateProgramUniform2fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
{
return ValidateProgramUniform(context, GL_FLOAT_VEC2, program, location, count);
return ValidateProgramUniformBase(context, GL_FLOAT_VEC2, program, location, count);
}
bool ValidateProgramUniform3fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
bool ValidateProgramUniform3fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
{
return ValidateProgramUniform(context, GL_FLOAT_VEC3, program, location, count);
return ValidateProgramUniformBase(context, GL_FLOAT_VEC3, program, location, count);
}
bool ValidateProgramUniform4fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
bool ValidateProgramUniform4fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
const GLfloat *value)
{
return ValidateProgramUniform(context, GL_FLOAT_VEC4, program, location, count);
return ValidateProgramUniformBase(context, GL_FLOAT_VEC4, program, location, count);
}
bool ValidateProgramUniformMatrix2fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix2fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT2, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT2, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix3fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix3fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT3, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT3, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix4fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix4fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT4, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT4, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix2x3fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix2x3fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT2x3, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT2x3, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix3x2fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix3x2fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT3x2, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT3x2, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix2x4fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix2x4fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT2x4, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT2x4, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix4x2fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix4x2fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT4x2, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT4x2, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix3x4fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix3x4fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT3x4, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT3x4, program, location, count,
transpose);
}
bool ValidateProgramUniformMatrix4x3fv(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
bool ValidateProgramUniformMatrix4x3fvBase(const Context *context,
ShaderProgramID program,
UniformLocation location,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
return ValidateProgramUniformMatrix(context, GL_FLOAT_MAT4x3, program, location, count,
transpose);
return ValidateProgramUniformMatrixBase(context, GL_FLOAT_MAT4x3, program, location, count,
transpose);
}
bool ValidateGetTexLevelParameterfv(const Context *context,
......@@ -1681,39 +1660,22 @@ bool ValidateGetProgramInterfaceivRobustANGLE(const Context *context,
return false;
}
static bool ValidateGenOrDeleteES31(const Context *context, GLint n)
bool ValidateGenProgramPipelinesBase(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelines)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateGenOrDelete(context, n);
}
bool ValidateGenProgramPipelines(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelines)
{
return ValidateGenOrDeleteES31(context, n);
}
bool ValidateDeleteProgramPipelines(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelines)
bool ValidateDeleteProgramPipelinesBase(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelines)
{
return ValidateGenOrDeleteES31(context, n);
return ValidateGenOrDelete(context, n);
}
bool ValidateBindProgramPipeline(const Context *context, ProgramPipelineID pipeline)
bool ValidateBindProgramPipelineBase(const Context *context, ProgramPipelineID pipeline)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
if (!context->isProgramPipelineGenerated({pipeline}))
{
context->validationError(GL_INVALID_OPERATION, kObjectNotGenerated);
......@@ -1723,28 +1685,16 @@ bool ValidateBindProgramPipeline(const Context *context, ProgramPipelineID pipel
return true;
}
bool ValidateIsProgramPipeline(const Context *context, ProgramPipelineID pipeline)
bool ValidateIsProgramPipelineBase(const Context *context, ProgramPipelineID pipeline)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return true;
}
bool ValidateUseProgramStages(const Context *context,
ProgramPipelineID pipeline,
GLbitfield stages,
ShaderProgramID programId)
bool ValidateUseProgramStagesBase(const Context *context,
ProgramPipelineID pipeline,
GLbitfield stages,
ShaderProgramID programId)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
// GL_INVALID_VALUE is generated if shaders contains set bits that are not recognized, and is
// not the reserved value GL_ALL_SHADER_BITS.
const GLbitfield knownShaderBits =
......@@ -1801,9 +1751,9 @@ bool ValidateUseProgramStages(const Context *context,
return true;
}
bool ValidateActiveShaderProgram(const Context *context,
ProgramPipelineID pipeline,
ShaderProgramID programId)
bool ValidateActiveShaderProgramBase(const Context *context,
ProgramPipelineID pipeline,
ShaderProgramID programId)
{
// An INVALID_OPERATION error is generated if pipeline is not a name returned from a previous
// call to GenProgramPipelines or if such a name has since been deleted by
......@@ -1841,17 +1791,11 @@ bool ValidateActiveShaderProgram(const Context *context,
return true;
}
bool ValidateCreateShaderProgramv(const Context *context,
ShaderType type,
GLsizei count,
const GLchar *const *strings)
bool ValidateCreateShaderProgramvBase(const Context *context,
ShaderType type,
GLsizei count,
const GLchar *const *strings)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
// GL_INVALID_ENUM is generated if type is not an accepted shader type.
if ((type != ShaderType::Vertex) && (type != ShaderType::Fragment) &&
(type != ShaderType::Compute))
......@@ -1870,10 +1814,19 @@ bool ValidateCreateShaderProgramv(const Context *context,
return true;
}
bool ValidateGetProgramPipelineiv(const Context *context,
ProgramPipelineID pipeline,
GLenum pname,
const GLint *params)
bool ValidateCreateShaderProgramvBase(const Context *context,
ShaderType type,
GLsizei count,
const GLchar **strings)
{
const GLchar *const *tmpStrings = strings;
return ValidateCreateShaderProgramvBase(context, type, count, tmpStrings);
}
bool ValidateGetProgramPipelineivBase(const Context *context,
ProgramPipelineID pipeline,
GLenum pname,
const GLint *params)
{
// An INVALID_OPERATION error is generated if pipeline is not a name returned from a previous
// call to GenProgramPipelines or if such a name has since been deleted by
......@@ -1905,7 +1858,7 @@ bool ValidateGetProgramPipelineiv(const Context *context,
return true;
}
bool ValidateValidateProgramPipeline(const Context *context, ProgramPipelineID pipeline)
bool ValidateValidateProgramPipelineBase(const Context *context, ProgramPipelineID pipeline)
{
if (pipeline.value == 0)
{
......@@ -1921,11 +1874,11 @@ bool ValidateValidateProgramPipeline(const Context *context, ProgramPipelineID p
return true;
}
bool ValidateGetProgramPipelineInfoLog(const Context *context,
ProgramPipelineID pipeline,
GLsizei bufSize,
const GLsizei *length,
const GLchar *infoLog)
bool ValidateGetProgramPipelineInfoLogBase(const Context *context,
ProgramPipelineID pipeline,
GLsizei bufSize,
const GLsizei *length,
const GLchar *infoLog)
{
if (bufSize < 0)
{
......@@ -1942,6 +1895,654 @@ bool ValidateGetProgramPipelineInfoLog(const Context *context,
return true;
}
bool ValidateActiveShaderProgram(const Context *context,
ProgramPipelineID pipelinePacked,
ShaderProgramID programPacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateActiveShaderProgramBase(context, pipelinePacked, programPacked);
}
bool ValidateBindProgramPipeline(const Context *context, ProgramPipelineID pipelinePacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateBindProgramPipelineBase(context, pipelinePacked);
}
bool ValidateCreateShaderProgramv(const Context *context,
ShaderType typePacked,
GLsizei count,
const GLchar *const *strings)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateCreateShaderProgramvBase(context, typePacked, count, strings);
}
bool ValidateDeleteProgramPipelines(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateDeleteProgramPipelinesBase(context, n, pipelinesPacked);
}
bool ValidateGenProgramPipelines(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateGenProgramPipelinesBase(context, n, pipelinesPacked);
}
bool ValidateGetProgramPipelineInfoLog(const Context *context,
ProgramPipelineID pipelinePacked,
GLsizei bufSize,
const GLsizei *length,
const GLchar *infoLog)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateGetProgramPipelineInfoLogBase(context, pipelinePacked, bufSize, length, infoLog);
}
bool ValidateGetProgramPipelineiv(const Context *context,
ProgramPipelineID pipelinePacked,
GLenum pname,
const GLint *params)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateGetProgramPipelineivBase(context, pipelinePacked, pname, params);
}
bool ValidateIsProgramPipeline(const Context *context, ProgramPipelineID pipelinePacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateIsProgramPipelineBase(context, pipelinePacked);
}
bool ValidateProgramUniform1f(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1fBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform1i(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1iBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1iv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform1ui(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1uiBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1uiv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform1uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2f(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2fBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2i(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2iBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2iv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2ui(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2uiBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2uiv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform2uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3f(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1,
GLfloat v2)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3fBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3i(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1,
GLint v2)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3iBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3iv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3ui(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1,
GLuint v2)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3uiBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3uiv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform3uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4f(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1,
GLfloat v2,
GLfloat v3)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4fBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4i(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1,
GLint v2,
GLint v3)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4iBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4iv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4ui(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4uiBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4uiv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniform4uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniformMatrix2fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix2x3fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix2x3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix2x4fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix2x4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3x2fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix3x2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3x4fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix3x4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4x2fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix4x2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4x3fv(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateProgramUniformMatrix4x3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateUseProgramStages(const Context *context,
ProgramPipelineID pipelinePacked,
GLbitfield stages,
ShaderProgramID programPacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateUseProgramStagesBase(context, pipelinePacked, stages, programPacked);
}
bool ValidateValidateProgramPipeline(const Context *context, ProgramPipelineID pipelinePacked)
{
if (context->getClientVersion() < ES_3_1)
{
context->validationError(GL_INVALID_OPERATION, kES31Required);
return false;
}
return ValidateValidateProgramPipelineBase(context, pipelinePacked);
}
bool ValidateMemoryBarrier(const Context *context, GLbitfield barriers)
{
if (context->getClientVersion() < ES_3_1)
......
......@@ -26,6 +26,220 @@ bool ValidateTexBufferRangeBase(const Context *context,
GLintptr offset,
GLsizeiptr size);
// GL_EXT_separate_shader_objects
bool ValidateActiveShaderProgramBase(const Context *context,
ProgramPipelineID pipelinePacked,
ShaderProgramID programPacked);
bool ValidateBindProgramPipelineBase(const Context *context, ProgramPipelineID pipelinePacked);
bool ValidateCreateShaderProgramvBase(const Context *context,
ShaderType typePacked,
GLsizei count,
const GLchar **strings);
bool ValidateDeleteProgramPipelinesBase(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked);
bool ValidateGenProgramPipelinesBase(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked);
bool ValidateGetProgramPipelineInfoLogBase(const Context *context,
ProgramPipelineID pipelinePacked,
GLsizei bufSize,
const GLsizei *length,
const GLchar *infoLog);
bool ValidateGetProgramPipelineivBase(const Context *context,
ProgramPipelineID pipelinePacked,
GLenum pname,
const GLint *params);
bool ValidateIsProgramPipelineBase(const Context *context, ProgramPipelineID pipelinePacked);
bool ValidateProgramParameteriBase(const Context *context,
ShaderProgramID programPacked,
GLenum pname,
GLint value);
bool ValidateProgramUniform1fBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0);
bool ValidateProgramUniform1fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value);
bool ValidateProgramUniform1iBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0);
bool ValidateProgramUniform1ivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value);
bool ValidateProgramUniform1uiBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0);
bool ValidateProgramUniform1uivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value);
bool ValidateProgramUniform2fBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1);
bool ValidateProgramUniform2fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value);
bool ValidateProgramUniform2iBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1);
bool ValidateProgramUniform2ivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value);
bool ValidateProgramUniform2uiBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1);
bool ValidateProgramUniform2uivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value);
bool ValidateProgramUniform3fBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1,
GLfloat v2);
bool ValidateProgramUniform3fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value);
bool ValidateProgramUniform3iBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1,
GLint v2);
bool ValidateProgramUniform3ivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value);
bool ValidateProgramUniform3uiBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1,
GLuint v2);
bool ValidateProgramUniform3uivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value);
bool ValidateProgramUniform4fBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLfloat v0,
GLfloat v1,
GLfloat v2,
GLfloat v3);
bool ValidateProgramUniform4fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLfloat *value);
bool ValidateProgramUniform4iBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLint v0,
GLint v1,
GLint v2,
GLint v3);
bool ValidateProgramUniform4ivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLint *value);
bool ValidateProgramUniform4uiBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLuint v0,
GLuint v1,
GLuint v2,
GLuint v3);
bool ValidateProgramUniform4uivBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
const GLuint *value);
bool ValidateProgramUniformMatrix2fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix2x3fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix2x4fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix3fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix3x2fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix3x4fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix4fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix4x2fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateProgramUniformMatrix4x3fvBase(const Context *context,
ShaderProgramID programPacked,
UniformLocation locationPacked,
GLsizei count,
GLboolean transpose,
const GLfloat *value);
bool ValidateUseProgramStagesBase(const Context *context,
ProgramPipelineID pipelinePacked,
GLbitfield stages,
ShaderProgramID programPacked);
bool ValidateValidateProgramPipelineBase(const Context *context, ProgramPipelineID pipelinePacked);
} // namespace gl
#endif // LIBANGLE_VALIDATION_ES31_H_
......@@ -12,6 +12,8 @@
#include "libANGLE/MemoryObject.h"
#include "libANGLE/validationES.h"
#include "libANGLE/validationES2.h"
#include "libANGLE/validationES3.h"
#include "libANGLE/validationES31.h"
#include "libANGLE/validationES32.h"
namespace gl
......@@ -1192,14 +1194,24 @@ bool ValidateActiveShaderProgramEXT(const Context *context,
ProgramPipelineID pipelinePacked,
ShaderProgramID programPacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateActiveShaderProgramBase(context, pipelinePacked, programPacked);
}
bool ValidateBindProgramPipelineEXT(const Context *context, ProgramPipelineID pipelinePacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateBindProgramPipelineBase(context, pipelinePacked);
}
bool ValidateCreateShaderProgramvEXT(const Context *context,
......@@ -1207,24 +1219,39 @@ bool ValidateCreateShaderProgramvEXT(const Context *context,
GLsizei count,
const GLchar **strings)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateCreateShaderProgramvBase(context, typePacked, count, strings);
}
bool ValidateDeleteProgramPipelinesEXT(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateDeleteProgramPipelinesBase(context, n, pipelinesPacked);
}
bool ValidateGenProgramPipelinesEXT(const Context *context,
GLsizei n,
const ProgramPipelineID *pipelinesPacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateGenProgramPipelinesBase(context, n, pipelinesPacked);
}
bool ValidateGetProgramPipelineInfoLogEXT(const Context *context,
......@@ -1233,8 +1260,13 @@ bool ValidateGetProgramPipelineInfoLogEXT(const Context *context,
const GLsizei *length,
const GLchar *infoLog)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateGetProgramPipelineInfoLogBase(context, pipelinePacked, bufSize, length, infoLog);
}
bool ValidateGetProgramPipelineivEXT(const Context *context,
......@@ -1242,14 +1274,24 @@ bool ValidateGetProgramPipelineivEXT(const Context *context,
GLenum pname,
const GLint *params)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateGetProgramPipelineivBase(context, pipelinePacked, pname, params);
}
bool ValidateIsProgramPipelineEXT(const Context *context, ProgramPipelineID pipelinePacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateIsProgramPipelineBase(context, pipelinePacked);
}
bool ValidateProgramParameteriEXT(const Context *context,
......@@ -1257,8 +1299,13 @@ bool ValidateProgramParameteriEXT(const Context *context,
GLenum pname,
GLint value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramParameteriBase(context, programPacked, pname, value);
}
bool ValidateProgramUniform1fEXT(const Context *context,
......@@ -1266,8 +1313,13 @@ bool ValidateProgramUniform1fEXT(const Context *context,
UniformLocation locationPacked,
GLfloat v0)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1fBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1fvEXT(const Context *context,
......@@ -1276,8 +1328,13 @@ bool ValidateProgramUniform1fvEXT(const Context *context,
GLsizei count,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform1iEXT(const Context *context,
......@@ -1285,8 +1342,13 @@ bool ValidateProgramUniform1iEXT(const Context *context,
UniformLocation locationPacked,
GLint v0)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1iBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1ivEXT(const Context *context,
......@@ -1295,8 +1357,13 @@ bool ValidateProgramUniform1ivEXT(const Context *context,
GLsizei count,
const GLint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform1uiEXT(const Context *context,
......@@ -1304,8 +1371,13 @@ bool ValidateProgramUniform1uiEXT(const Context *context,
UniformLocation locationPacked,
GLuint v0)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1uiBase(context, programPacked, locationPacked, v0);
}
bool ValidateProgramUniform1uivEXT(const Context *context,
......@@ -1314,8 +1386,13 @@ bool ValidateProgramUniform1uivEXT(const Context *context,
GLsizei count,
const GLuint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform1uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2fEXT(const Context *context,
......@@ -1324,8 +1401,13 @@ bool ValidateProgramUniform2fEXT(const Context *context,
GLfloat v0,
GLfloat v1)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2fBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2fvEXT(const Context *context,
......@@ -1334,8 +1416,13 @@ bool ValidateProgramUniform2fvEXT(const Context *context,
GLsizei count,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2iEXT(const Context *context,
......@@ -1344,8 +1431,13 @@ bool ValidateProgramUniform2iEXT(const Context *context,
GLint v0,
GLint v1)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2iBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2ivEXT(const Context *context,
......@@ -1354,8 +1446,13 @@ bool ValidateProgramUniform2ivEXT(const Context *context,
GLsizei count,
const GLint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform2uiEXT(const Context *context,
......@@ -1364,8 +1461,13 @@ bool ValidateProgramUniform2uiEXT(const Context *context,
GLuint v0,
GLuint v1)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2uiBase(context, programPacked, locationPacked, v0, v1);
}
bool ValidateProgramUniform2uivEXT(const Context *context,
......@@ -1374,8 +1476,13 @@ bool ValidateProgramUniform2uivEXT(const Context *context,
GLsizei count,
const GLuint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform2uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3fEXT(const Context *context,
......@@ -1385,8 +1492,13 @@ bool ValidateProgramUniform3fEXT(const Context *context,
GLfloat v1,
GLfloat v2)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3fBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3fvEXT(const Context *context,
......@@ -1395,8 +1507,13 @@ bool ValidateProgramUniform3fvEXT(const Context *context,
GLsizei count,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3iEXT(const Context *context,
......@@ -1406,8 +1523,13 @@ bool ValidateProgramUniform3iEXT(const Context *context,
GLint v1,
GLint v2)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3iBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3ivEXT(const Context *context,
......@@ -1416,8 +1538,13 @@ bool ValidateProgramUniform3ivEXT(const Context *context,
GLsizei count,
const GLint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform3uiEXT(const Context *context,
......@@ -1427,8 +1554,13 @@ bool ValidateProgramUniform3uiEXT(const Context *context,
GLuint v1,
GLuint v2)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3uiBase(context, programPacked, locationPacked, v0, v1, v2);
}
bool ValidateProgramUniform3uivEXT(const Context *context,
......@@ -1437,8 +1569,13 @@ bool ValidateProgramUniform3uivEXT(const Context *context,
GLsizei count,
const GLuint *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform3uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4fEXT(const Context *context,
......@@ -1449,8 +1586,13 @@ bool ValidateProgramUniform4fEXT(const Context *context,
GLfloat v2,
GLfloat v3)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform4fBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4fvEXT(const Context *context,
......@@ -1459,8 +1601,13 @@ bool ValidateProgramUniform4fvEXT(const Context *context,
GLsizei count,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform4fvBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4iEXT(const Context *context,
......@@ -1471,8 +1618,13 @@ bool ValidateProgramUniform4iEXT(const Context *context,
GLint v2,
GLint v3)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform4iBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4ivEXT(const Context *context,
......@@ -1481,8 +1633,7 @@ bool ValidateProgramUniform4ivEXT(const Context *context,
GLsizei count,
const GLint *value)
{
UNIMPLEMENTED();
return false;
return ValidateProgramUniform4ivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniform4uiEXT(const Context *context,
......@@ -1493,8 +1644,13 @@ bool ValidateProgramUniform4uiEXT(const Context *context,
GLuint v2,
GLuint v3)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniform4uiBase(context, programPacked, locationPacked, v0, v1, v2, v3);
}
bool ValidateProgramUniform4uivEXT(const Context *context,
......@@ -1503,8 +1659,7 @@ bool ValidateProgramUniform4uivEXT(const Context *context,
GLsizei count,
const GLuint *value)
{
UNIMPLEMENTED();
return false;
return ValidateProgramUniform4uivBase(context, programPacked, locationPacked, count, value);
}
bool ValidateProgramUniformMatrix2fvEXT(const Context *context,
......@@ -1514,8 +1669,14 @@ bool ValidateProgramUniformMatrix2fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix2x3fvEXT(const Context *context,
......@@ -1525,8 +1686,14 @@ bool ValidateProgramUniformMatrix2x3fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix2x3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix2x4fvEXT(const Context *context,
......@@ -1536,8 +1703,14 @@ bool ValidateProgramUniformMatrix2x4fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix2x4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3fvEXT(const Context *context,
......@@ -1547,8 +1720,14 @@ bool ValidateProgramUniformMatrix3fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3x2fvEXT(const Context *context,
......@@ -1558,8 +1737,14 @@ bool ValidateProgramUniformMatrix3x2fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix3x2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix3x4fvEXT(const Context *context,
......@@ -1569,8 +1754,14 @@ bool ValidateProgramUniformMatrix3x4fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix3x4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4fvEXT(const Context *context,
......@@ -1580,8 +1771,14 @@ bool ValidateProgramUniformMatrix4fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix4fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4x2fvEXT(const Context *context,
......@@ -1591,8 +1788,14 @@ bool ValidateProgramUniformMatrix4x2fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix4x2fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateProgramUniformMatrix4x3fvEXT(const Context *context,
......@@ -1602,8 +1805,14 @@ bool ValidateProgramUniformMatrix4x3fvEXT(const Context *context,
GLboolean transpose,
const GLfloat *value)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateProgramUniformMatrix4x3fvBase(context, programPacked, locationPacked, count,
transpose, value);
}
bool ValidateUseProgramStagesEXT(const Context *context,
......@@ -1611,13 +1820,23 @@ bool ValidateUseProgramStagesEXT(const Context *context,
GLbitfield stages,
ShaderProgramID programPacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateUseProgramStagesBase(context, pipelinePacked, stages, programPacked);
}
bool ValidateValidateProgramPipelineEXT(const Context *context, ProgramPipelineID pipelinePacked)
{
UNIMPLEMENTED();
return false;
if (!context->getExtensions().separateShaderObjects)
{
context->validationError(GL_INVALID_OPERATION, kExtensionNotEnabled);
return false;
}
return ValidateValidateProgramPipelineBase(context, pipelinePacked);
}
} // namespace gl
......@@ -49,6 +49,24 @@ TEST_P(ProgramPipelineTest, GenerateProgramPipelineObject)
}
}
// Verify that program pipeline errors out without GL_EXT_separate_shader_objects extension.
TEST_P(ProgramPipelineTest, GenerateProgramPipelineObjectEXT)
{
GLuint pipeline;
glGenProgramPipelinesEXT(1, &pipeline);
if (!IsGLExtensionEnabled("GL_EXT_separate_shader_objects"))
{
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
}
else
{
EXPECT_GL_NO_ERROR();
glDeleteProgramPipelinesEXT(1, &pipeline);
EXPECT_GL_NO_ERROR();
}
}
class ProgramPipelineTest31 : public ProgramPipelineTest
{
protected:
......
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