mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-13 14:48:32 +09:00
[Fix] (MG_Impl/GLImpl): unblock the non-texture sections of GL CTS per-case state reset - clamp advertised GL_MAX_UNIFORM_BUFFER_BINDINGS to the state layer indexed-binding capacity (glBindBufferBase rejected indices past it), let glBindRenderbuffer(0) unbind without recording INVALID_OPERATION (name 0 must never reach the name-table lookup), and allow writes to generic vertex attribute 0 current value (core GL has no attribute-0 restriction; gluStateReset writes vertexAttrib4f(0,...) after every case) - with these plus the default-texture work, multi-case glcts batches complete in one process instead of aborting after the first case
This commit is contained in:
@@ -1894,7 +1894,15 @@ namespace MobileGL::MG_Impl::GLImpl {
|
||||
*params = dynamicParameters.MaxTextureSize;
|
||||
break;
|
||||
case GL_MAX_UNIFORM_BUFFER_BINDINGS:
|
||||
*params = std::max(dynamicParameters.MaxUniformBufferBindings, kFrontendMinUniformBufferBindings);
|
||||
// Never advertise more indexed binding points than the state layer's fixed per-target
|
||||
// array can store (BufferBindingPointCount): glBindBufferBase rejects indices past
|
||||
// that capacity, and GL CTS's per-case state reset walks every advertised binding
|
||||
// (gluStateReset), so an over-advertised value aborts whole test batches. The floor
|
||||
// equals the GL 3.3 core minimum (36), so the clamp never under-advertises.
|
||||
*params = static_cast<GLint>(std::min<SizeT>(
|
||||
static_cast<SizeT>(std::max(dynamicParameters.MaxUniformBufferBindings,
|
||||
kFrontendMinUniformBufferBindings)),
|
||||
MG_State::GLState::BufferBindingPointCount));
|
||||
break;
|
||||
case GL_MAX_UNIFORM_BLOCK_SIZE:
|
||||
*params = dynamicParameters.MaxUniformBlockSize;
|
||||
|
||||
Reference in New Issue
Block a user