Commit b7afead1 by Alexis Hetu Committed by Alexis Hétu

Fixed glGetIntegerv for OpenGL ES 2

Many new OpenGL ES 3 specific entries in Context::getIntegerv were not hidden when an OpenGL ES 2 context is created. The switch statement was separated in 2 statements in order to fix this. Change-Id: Ib218b72e854f5857958cfa14ecdfef5ae03ee92b Reviewed-on: https://swiftshader-review.googlesource.com/8851Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 802d142a
...@@ -1851,55 +1851,55 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -1851,55 +1851,55 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
// Context::getFloatv. // Context::getFloatv.
switch(pname) switch(pname)
{ {
case GL_MAX_VERTEX_ATTRIBS: *params = MAX_VERTEX_ATTRIBS; break; case GL_MAX_VERTEX_ATTRIBS: *params = MAX_VERTEX_ATTRIBS; return true;
case GL_MAX_VERTEX_UNIFORM_VECTORS: *params = MAX_VERTEX_UNIFORM_VECTORS; break; case GL_MAX_VERTEX_UNIFORM_VECTORS: *params = MAX_VERTEX_UNIFORM_VECTORS; return true;
case GL_MAX_VARYING_VECTORS: *params = MAX_VARYING_VECTORS; break; case GL_MAX_VARYING_VECTORS: *params = MAX_VARYING_VECTORS; return true;
case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: *params = MAX_COMBINED_TEXTURE_IMAGE_UNITS; break; case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: *params = MAX_COMBINED_TEXTURE_IMAGE_UNITS; return true;
case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: *params = MAX_VERTEX_TEXTURE_IMAGE_UNITS; break; case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: *params = MAX_VERTEX_TEXTURE_IMAGE_UNITS; return true;
case GL_MAX_TEXTURE_IMAGE_UNITS: *params = MAX_TEXTURE_IMAGE_UNITS; break; case GL_MAX_TEXTURE_IMAGE_UNITS: *params = MAX_TEXTURE_IMAGE_UNITS; return true;
case GL_MAX_FRAGMENT_UNIFORM_VECTORS: *params = MAX_FRAGMENT_UNIFORM_VECTORS; break; case GL_MAX_FRAGMENT_UNIFORM_VECTORS: *params = MAX_FRAGMENT_UNIFORM_VECTORS; return true;
case GL_MAX_RENDERBUFFER_SIZE: *params = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE; break; case GL_MAX_RENDERBUFFER_SIZE: *params = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE; return true;
case GL_NUM_SHADER_BINARY_FORMATS: *params = 0; break; case GL_NUM_SHADER_BINARY_FORMATS: *params = 0; return true;
case GL_SHADER_BINARY_FORMATS: /* no shader binary formats are supported */ break; case GL_SHADER_BINARY_FORMATS: /* no shader binary formats are supported */ return true;
case GL_ARRAY_BUFFER_BINDING: *params = getArrayBufferName(); break; case GL_ARRAY_BUFFER_BINDING: *params = getArrayBufferName(); return true;
case GL_ELEMENT_ARRAY_BUFFER_BINDING: *params = getElementArrayBufferName(); break; case GL_ELEMENT_ARRAY_BUFFER_BINDING: *params = getElementArrayBufferName(); return true;
// case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE // case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mState.drawFramebuffer; break; case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mState.drawFramebuffer; return true;
case GL_READ_FRAMEBUFFER_BINDING_ANGLE: *params = mState.readFramebuffer; break; case GL_READ_FRAMEBUFFER_BINDING_ANGLE: *params = mState.readFramebuffer; return true;
case GL_RENDERBUFFER_BINDING: *params = mState.renderbuffer.name(); break; case GL_RENDERBUFFER_BINDING: *params = mState.renderbuffer.name(); return true;
case GL_CURRENT_PROGRAM: *params = mState.currentProgram; break; case GL_CURRENT_PROGRAM: *params = mState.currentProgram; return true;
case GL_PACK_ALIGNMENT: *params = mState.packAlignment; break; case GL_PACK_ALIGNMENT: *params = mState.packAlignment; return true;
case GL_UNPACK_ALIGNMENT: *params = mState.unpackInfo.alignment; break; case GL_UNPACK_ALIGNMENT: *params = mState.unpackInfo.alignment; return true;
case GL_GENERATE_MIPMAP_HINT: *params = mState.generateMipmapHint; break; case GL_GENERATE_MIPMAP_HINT: *params = mState.generateMipmapHint; return true;
case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: *params = mState.fragmentShaderDerivativeHint; break; case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: *params = mState.fragmentShaderDerivativeHint; return true;
case GL_ACTIVE_TEXTURE: *params = (mState.activeSampler + GL_TEXTURE0); break; case GL_ACTIVE_TEXTURE: *params = (mState.activeSampler + GL_TEXTURE0); return true;
case GL_STENCIL_FUNC: *params = mState.stencilFunc; break; case GL_STENCIL_FUNC: *params = mState.stencilFunc; return true;
case GL_STENCIL_REF: *params = mState.stencilRef; break; case GL_STENCIL_REF: *params = mState.stencilRef; return true;
case GL_STENCIL_VALUE_MASK: *params = sw::clampToSignedInt(mState.stencilMask); break; case GL_STENCIL_VALUE_MASK: *params = sw::clampToSignedInt(mState.stencilMask); return true;
case GL_STENCIL_BACK_FUNC: *params = mState.stencilBackFunc; break; case GL_STENCIL_BACK_FUNC: *params = mState.stencilBackFunc; return true;
case GL_STENCIL_BACK_REF: *params = mState.stencilBackRef; break; case GL_STENCIL_BACK_REF: *params = mState.stencilBackRef; return true;
case GL_STENCIL_BACK_VALUE_MASK: *params = sw::clampToSignedInt(mState.stencilBackMask); break; case GL_STENCIL_BACK_VALUE_MASK: *params = sw::clampToSignedInt(mState.stencilBackMask); return true;
case GL_STENCIL_FAIL: *params = mState.stencilFail; break; case GL_STENCIL_FAIL: *params = mState.stencilFail; return true;
case GL_STENCIL_PASS_DEPTH_FAIL: *params = mState.stencilPassDepthFail; break; case GL_STENCIL_PASS_DEPTH_FAIL: *params = mState.stencilPassDepthFail; return true;
case GL_STENCIL_PASS_DEPTH_PASS: *params = mState.stencilPassDepthPass; break; case GL_STENCIL_PASS_DEPTH_PASS: *params = mState.stencilPassDepthPass; return true;
case GL_STENCIL_BACK_FAIL: *params = mState.stencilBackFail; break; case GL_STENCIL_BACK_FAIL: *params = mState.stencilBackFail; return true;
case GL_STENCIL_BACK_PASS_DEPTH_FAIL: *params = mState.stencilBackPassDepthFail; break; case GL_STENCIL_BACK_PASS_DEPTH_FAIL: *params = mState.stencilBackPassDepthFail; return true;
case GL_STENCIL_BACK_PASS_DEPTH_PASS: *params = mState.stencilBackPassDepthPass; break; case GL_STENCIL_BACK_PASS_DEPTH_PASS: *params = mState.stencilBackPassDepthPass; return true;
case GL_DEPTH_FUNC: *params = mState.depthFunc; break; case GL_DEPTH_FUNC: *params = mState.depthFunc; return true;
case GL_BLEND_SRC_RGB: *params = mState.sourceBlendRGB; break; case GL_BLEND_SRC_RGB: *params = mState.sourceBlendRGB; return true;
case GL_BLEND_SRC_ALPHA: *params = mState.sourceBlendAlpha; break; case GL_BLEND_SRC_ALPHA: *params = mState.sourceBlendAlpha; return true;
case GL_BLEND_DST_RGB: *params = mState.destBlendRGB; break; case GL_BLEND_DST_RGB: *params = mState.destBlendRGB; return true;
case GL_BLEND_DST_ALPHA: *params = mState.destBlendAlpha; break; case GL_BLEND_DST_ALPHA: *params = mState.destBlendAlpha; return true;
case GL_BLEND_EQUATION_RGB: *params = mState.blendEquationRGB; break; case GL_BLEND_EQUATION_RGB: *params = mState.blendEquationRGB; return true;
case GL_BLEND_EQUATION_ALPHA: *params = mState.blendEquationAlpha; break; case GL_BLEND_EQUATION_ALPHA: *params = mState.blendEquationAlpha; return true;
case GL_STENCIL_WRITEMASK: *params = sw::clampToSignedInt(mState.stencilWritemask); break; case GL_STENCIL_WRITEMASK: *params = sw::clampToSignedInt(mState.stencilWritemask); return true;
case GL_STENCIL_BACK_WRITEMASK: *params = sw::clampToSignedInt(mState.stencilBackWritemask); break; case GL_STENCIL_BACK_WRITEMASK: *params = sw::clampToSignedInt(mState.stencilBackWritemask); return true;
case GL_STENCIL_CLEAR_VALUE: *params = mState.stencilClearValue; break; case GL_STENCIL_CLEAR_VALUE: *params = mState.stencilClearValue; return true;
case GL_SUBPIXEL_BITS: *params = 4; break; case GL_SUBPIXEL_BITS: *params = 4; return true;
case GL_MAX_TEXTURE_SIZE: *params = IMPLEMENTATION_MAX_TEXTURE_SIZE; break; case GL_MAX_TEXTURE_SIZE: *params = IMPLEMENTATION_MAX_TEXTURE_SIZE; return true;
case GL_MAX_CUBE_MAP_TEXTURE_SIZE: *params = IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE; break; case GL_MAX_CUBE_MAP_TEXTURE_SIZE: *params = IMPLEMENTATION_MAX_CUBE_MAP_TEXTURE_SIZE; return true;
case GL_NUM_COMPRESSED_TEXTURE_FORMATS: *params = NUM_COMPRESSED_TEXTURE_FORMATS; break; case GL_NUM_COMPRESSED_TEXTURE_FORMATS: *params = NUM_COMPRESSED_TEXTURE_FORMATS; return true;
case GL_MAX_SAMPLES_ANGLE: *params = IMPLEMENTATION_MAX_SAMPLES; break; case GL_MAX_SAMPLES_ANGLE: *params = IMPLEMENTATION_MAX_SAMPLES; return true;
case GL_SAMPLE_BUFFERS: case GL_SAMPLE_BUFFERS:
case GL_SAMPLES: case GL_SAMPLES:
{ {
...@@ -1930,26 +1930,26 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -1930,26 +1930,26 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
*params = 0; *params = 0;
} }
} }
break; return true;
case GL_IMPLEMENTATION_COLOR_READ_TYPE: case GL_IMPLEMENTATION_COLOR_READ_TYPE:
{ {
Framebuffer *framebuffer = getReadFramebuffer(); Framebuffer *framebuffer = getReadFramebuffer();
*params = framebuffer->getImplementationColorReadType(); *params = framebuffer->getImplementationColorReadType();
} }
break; return true;
case GL_IMPLEMENTATION_COLOR_READ_FORMAT: case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
{ {
Framebuffer *framebuffer = getReadFramebuffer(); Framebuffer *framebuffer = getReadFramebuffer();
*params = framebuffer->getImplementationColorReadFormat(); *params = framebuffer->getImplementationColorReadFormat();
} }
break; return true;
case GL_MAX_VIEWPORT_DIMS: case GL_MAX_VIEWPORT_DIMS:
{ {
int maxDimension = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE; int maxDimension = IMPLEMENTATION_MAX_RENDERBUFFER_SIZE;
params[0] = maxDimension; params[0] = maxDimension;
params[1] = maxDimension; params[1] = maxDimension;
} }
break; return true;
case GL_COMPRESSED_TEXTURE_FORMATS: case GL_COMPRESSED_TEXTURE_FORMATS:
{ {
for(int i = 0; i < NUM_COMPRESSED_TEXTURE_FORMATS; i++) for(int i = 0; i < NUM_COMPRESSED_TEXTURE_FORMATS; i++)
...@@ -1957,21 +1957,21 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -1957,21 +1957,21 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
params[i] = compressedTextureFormats[i]; params[i] = compressedTextureFormats[i];
} }
} }
break; return true;
case GL_VIEWPORT: case GL_VIEWPORT:
params[0] = mState.viewportX; params[0] = mState.viewportX;
params[1] = mState.viewportY; params[1] = mState.viewportY;
params[2] = mState.viewportWidth; params[2] = mState.viewportWidth;
params[3] = mState.viewportHeight; params[3] = mState.viewportHeight;
break; return true;
case GL_SCISSOR_BOX: case GL_SCISSOR_BOX:
params[0] = mState.scissorX; params[0] = mState.scissorX;
params[1] = mState.scissorY; params[1] = mState.scissorY;
params[2] = mState.scissorWidth; params[2] = mState.scissorWidth;
params[3] = mState.scissorHeight; params[3] = mState.scissorHeight;
break; return true;
case GL_CULL_FACE_MODE: *params = mState.cullMode; break; case GL_CULL_FACE_MODE: *params = mState.cullMode; return true;
case GL_FRONT_FACE: *params = mState.frontFace; break; case GL_FRONT_FACE: *params = mState.frontFace; return true;
case GL_RED_BITS: case GL_RED_BITS:
case GL_GREEN_BITS: case GL_GREEN_BITS:
case GL_BLUE_BITS: case GL_BLUE_BITS:
...@@ -1984,10 +1984,10 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -1984,10 +1984,10 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
{ {
switch(pname) switch(pname)
{ {
case GL_RED_BITS: *params = colorbuffer->getRedSize(); break; case GL_RED_BITS: *params = colorbuffer->getRedSize(); return true;
case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(); break; case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(); return true;
case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(); break; case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(); return true;
case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(); break; case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(); return true;
} }
} }
else else
...@@ -1995,7 +1995,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -1995,7 +1995,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
*params = 0; *params = 0;
} }
} }
break; return true;
case GL_DEPTH_BITS: case GL_DEPTH_BITS:
{ {
Framebuffer *framebuffer = getDrawFramebuffer(); Framebuffer *framebuffer = getDrawFramebuffer();
...@@ -2010,7 +2010,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2010,7 +2010,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
*params = 0; *params = 0;
} }
} }
break; return true;
case GL_STENCIL_BITS: case GL_STENCIL_BITS:
{ {
Framebuffer *framebuffer = getDrawFramebuffer(); Framebuffer *framebuffer = getDrawFramebuffer();
...@@ -2025,7 +2025,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2025,7 +2025,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
*params = 0; *params = 0;
} }
} }
break; return true;
case GL_TEXTURE_BINDING_2D: case GL_TEXTURE_BINDING_2D:
if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1) if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{ {
...@@ -2034,7 +2034,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2034,7 +2034,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
} }
*params = mState.samplerTexture[TEXTURE_2D][mState.activeSampler].name(); *params = mState.samplerTexture[TEXTURE_2D][mState.activeSampler].name();
break; return true;
case GL_TEXTURE_BINDING_CUBE_MAP: case GL_TEXTURE_BINDING_CUBE_MAP:
if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1) if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{ {
...@@ -2043,7 +2043,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2043,7 +2043,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
} }
*params = mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].name(); *params = mState.samplerTexture[TEXTURE_CUBE][mState.activeSampler].name();
break; return true;
case GL_TEXTURE_BINDING_EXTERNAL_OES: case GL_TEXTURE_BINDING_EXTERNAL_OES:
if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1) if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{ {
...@@ -2052,7 +2052,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2052,7 +2052,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
} }
*params = mState.samplerTexture[TEXTURE_EXTERNAL][mState.activeSampler].name(); *params = mState.samplerTexture[TEXTURE_EXTERNAL][mState.activeSampler].name();
break; return true;
case GL_TEXTURE_BINDING_3D_OES: case GL_TEXTURE_BINDING_3D_OES:
if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1) if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{ {
...@@ -2061,40 +2061,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2061,40 +2061,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
} }
*params = mState.samplerTexture[TEXTURE_3D][mState.activeSampler].name(); *params = mState.samplerTexture[TEXTURE_3D][mState.activeSampler].name();
break; return true;
case GL_TEXTURE_BINDING_2D_ARRAY:
if(clientVersion < 3)
{
return false;
}
else if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{
error(GL_INVALID_OPERATION);
return false;
}
*params = mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].name();
break;
case GL_COPY_READ_BUFFER_BINDING:
if(clientVersion >= 3)
{
*params = mState.copyReadBuffer.name();
}
else
{
return false;
}
break;
case GL_COPY_WRITE_BUFFER_BINDING:
if(clientVersion >= 3)
{
*params = mState.copyWriteBuffer.name();
}
else
{
return false;
}
break;
case GL_DRAW_BUFFER0: case GL_DRAW_BUFFER0:
case GL_DRAW_BUFFER1: case GL_DRAW_BUFFER1:
case GL_DRAW_BUFFER2: case GL_DRAW_BUFFER2:
...@@ -2111,212 +2078,192 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2111,212 +2078,192 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
case GL_DRAW_BUFFER13: case GL_DRAW_BUFFER13:
case GL_DRAW_BUFFER14: case GL_DRAW_BUFFER14:
case GL_DRAW_BUFFER15: case GL_DRAW_BUFFER15:
*params = getDrawFramebuffer()->getDrawBuffer(pname - GL_DRAW_BUFFER0); if((pname - GL_DRAW_BUFFER0) < MAX_DRAW_BUFFERS)
break;
case GL_MAJOR_VERSION:
if(clientVersion >= 3)
{ {
*params = clientVersion; *params = getDrawFramebuffer()->getDrawBuffer(pname - GL_DRAW_BUFFER0);
} }
else else
{ {
return false; return false;
} }
return true;
case GL_MAX_DRAW_BUFFERS:
*params = MAX_DRAW_BUFFERS;
return true;
default:
break; break;
}
if(clientVersion >= 3)
{
switch(pname)
{
case GL_TEXTURE_BINDING_2D_ARRAY:
if(mState.activeSampler > MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1)
{
error(GL_INVALID_OPERATION);
return false;
}
*params = mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].name();
return true;
case GL_COPY_READ_BUFFER_BINDING:
*params = mState.copyReadBuffer.name();
return true;
case GL_COPY_WRITE_BUFFER_BINDING:
*params = mState.copyWriteBuffer.name();
return true;
case GL_MAJOR_VERSION:
*params = clientVersion;
return true;
case GL_MAX_3D_TEXTURE_SIZE: case GL_MAX_3D_TEXTURE_SIZE:
*params = IMPLEMENTATION_MAX_TEXTURE_SIZE; *params = IMPLEMENTATION_MAX_TEXTURE_SIZE;
break; return true;
case GL_MAX_ARRAY_TEXTURE_LAYERS: case GL_MAX_ARRAY_TEXTURE_LAYERS:
*params = IMPLEMENTATION_MAX_TEXTURE_SIZE; *params = IMPLEMENTATION_MAX_TEXTURE_SIZE;
break; return true;
case GL_MAX_COLOR_ATTACHMENTS: case GL_MAX_COLOR_ATTACHMENTS: // Note: not supported in OES_framebuffer_object
*params = MAX_COLOR_ATTACHMENTS; *params = MAX_COLOR_ATTACHMENTS;
break; return true;
case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
*params = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; *params = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;
break; return true;
case GL_MAX_COMBINED_UNIFORM_BLOCKS: case GL_MAX_COMBINED_UNIFORM_BLOCKS:
*params = MAX_VERTEX_UNIFORM_BLOCKS + MAX_FRAGMENT_UNIFORM_BLOCKS; *params = MAX_VERTEX_UNIFORM_BLOCKS + MAX_FRAGMENT_UNIFORM_BLOCKS;
break; return true;
case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
*params = MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; *params = MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;
break; return true;
case GL_MAX_DRAW_BUFFERS:
*params = MAX_DRAW_BUFFERS;
break;
case GL_MAX_ELEMENT_INDEX: case GL_MAX_ELEMENT_INDEX:
*params = MAX_ELEMENT_INDEX; *params = MAX_ELEMENT_INDEX;
break; return true;
case GL_MAX_ELEMENTS_INDICES: case GL_MAX_ELEMENTS_INDICES:
*params = MAX_ELEMENTS_INDICES; *params = MAX_ELEMENTS_INDICES;
break; return true;
case GL_MAX_ELEMENTS_VERTICES: case GL_MAX_ELEMENTS_VERTICES:
*params = MAX_ELEMENTS_VERTICES; *params = MAX_ELEMENTS_VERTICES;
break; return true;
case GL_MAX_FRAGMENT_INPUT_COMPONENTS: case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
*params = MAX_FRAGMENT_INPUT_VECTORS * 4; *params = MAX_FRAGMENT_INPUT_VECTORS * 4;
break; return true;
case GL_MAX_FRAGMENT_UNIFORM_BLOCKS: case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
*params = MAX_FRAGMENT_UNIFORM_BLOCKS; *params = MAX_FRAGMENT_UNIFORM_BLOCKS;
break; return true;
case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
*params = MAX_FRAGMENT_UNIFORM_COMPONENTS; *params = MAX_FRAGMENT_UNIFORM_COMPONENTS;
break; return true;
case GL_MAX_PROGRAM_TEXEL_OFFSET: case GL_MAX_PROGRAM_TEXEL_OFFSET:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = MAX_PROGRAM_TEXEL_OFFSET; *params = MAX_PROGRAM_TEXEL_OFFSET;
break; return true;
case GL_MAX_SERVER_WAIT_TIMEOUT: case GL_MAX_SERVER_WAIT_TIMEOUT:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = 0; *params = 0;
break; return true;
case GL_MAX_TEXTURE_LOD_BIAS: case GL_MAX_TEXTURE_LOD_BIAS:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = 2; *params = 2;
break; return true;
case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
*params = sw::MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS; *params = sw::MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS;
break; return true;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
*params = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; *params = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;
break; return true;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
*params = sw::MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; *params = sw::MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;
break; return true;
case GL_MAX_UNIFORM_BLOCK_SIZE: case GL_MAX_UNIFORM_BLOCK_SIZE:
*params = MAX_UNIFORM_BLOCK_SIZE; *params = MAX_UNIFORM_BLOCK_SIZE;
break; return true;
case GL_MAX_UNIFORM_BUFFER_BINDINGS: case GL_MAX_UNIFORM_BUFFER_BINDINGS:
*params = MAX_UNIFORM_BUFFER_BINDINGS; *params = MAX_UNIFORM_BUFFER_BINDINGS;
break; return true;
case GL_MAX_VARYING_COMPONENTS: case GL_MAX_VARYING_COMPONENTS:
UNIMPLEMENTED(); UNIMPLEMENTED();
// FIXME: should be MAX_VARYING_VECTORS * 4, but MAX_VARYING_VECTORS // FIXME: should be MAX_VARYING_VECTORS * 4, but MAX_VARYING_VECTORS
// must be increased (see MAX_VERTEX_OUTPUTS and MAX_FRAGMENT_INPUTS) // must be increased (see MAX_VERTEX_OUTPUTS and MAX_FRAGMENT_INPUTS)
*params = 60; *params = 60;
break; return true;
case GL_MAX_VERTEX_OUTPUT_COMPONENTS: case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
*params = MAX_VERTEX_OUTPUT_VECTORS * 4; *params = MAX_VERTEX_OUTPUT_VECTORS * 4;
break; return true;
case GL_MAX_VERTEX_UNIFORM_BLOCKS: case GL_MAX_VERTEX_UNIFORM_BLOCKS:
*params = MAX_VERTEX_UNIFORM_BLOCKS; *params = MAX_VERTEX_UNIFORM_BLOCKS;
break; return true;
case GL_MAX_VERTEX_UNIFORM_COMPONENTS: case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
*params = MAX_VERTEX_UNIFORM_COMPONENTS; *params = MAX_VERTEX_UNIFORM_COMPONENTS;
break; return true;
case GL_MIN_PROGRAM_TEXEL_OFFSET: case GL_MIN_PROGRAM_TEXEL_OFFSET:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = MIN_PROGRAM_TEXEL_OFFSET; *params = MIN_PROGRAM_TEXEL_OFFSET;
break; return true;
case GL_MINOR_VERSION: case GL_MINOR_VERSION:
if (clientVersion >= 3)
{
*params = 0; *params = 0;
} return true;
else
{
return false;
}
break;
case GL_NUM_EXTENSIONS: case GL_NUM_EXTENSIONS:
GLuint numExtensions; GLuint numExtensions;
getExtensions(0, &numExtensions); getExtensions(0, &numExtensions);
*params = numExtensions; *params = numExtensions;
break; return true;
case GL_NUM_PROGRAM_BINARY_FORMATS: case GL_NUM_PROGRAM_BINARY_FORMATS:
*params = NUM_PROGRAM_BINARY_FORMATS; *params = NUM_PROGRAM_BINARY_FORMATS;
break; return true;
case GL_PACK_ROW_LENGTH: case GL_PACK_ROW_LENGTH:
*params = mState.packRowLength; *params = mState.packRowLength;
break; return true;
case GL_PACK_SKIP_PIXELS: case GL_PACK_SKIP_PIXELS:
*params = mState.packSkipPixels; *params = mState.packSkipPixels;
break; return true;
case GL_PACK_SKIP_ROWS: case GL_PACK_SKIP_ROWS:
*params = mState.packSkipRows; *params = mState.packSkipRows;
break; return true;
case GL_PIXEL_PACK_BUFFER_BINDING: case GL_PIXEL_PACK_BUFFER_BINDING:
if(clientVersion >= 3)
{
*params = mState.pixelPackBuffer.name(); *params = mState.pixelPackBuffer.name();
} return true;
else
{
return false;
}
break;
case GL_PIXEL_UNPACK_BUFFER_BINDING: case GL_PIXEL_UNPACK_BUFFER_BINDING:
if(clientVersion >= 3)
{
*params = mState.pixelUnpackBuffer.name(); *params = mState.pixelUnpackBuffer.name();
} return true;
else
{
return false;
}
break;
case GL_PROGRAM_BINARY_FORMATS: case GL_PROGRAM_BINARY_FORMATS:
// Since NUM_PROGRAM_BINARY_FORMATS is 0, the input // Since NUM_PROGRAM_BINARY_FORMATS is 0, the input
// should be a 0 sized array, so don't write to params // should be a 0 sized array, so don't write to params
break; return true;
case GL_READ_BUFFER: case GL_READ_BUFFER:
*params = getReadFramebuffer()->getReadBuffer(); *params = getReadFramebuffer()->getReadBuffer();
break; return true;
case GL_SAMPLER_BINDING: case GL_SAMPLER_BINDING:
*params = mState.sampler[mState.activeSampler].name(); *params = mState.sampler[mState.activeSampler].name();
break; return true;
case GL_UNIFORM_BUFFER_BINDING: case GL_UNIFORM_BUFFER_BINDING:
if(clientVersion >= 3)
{
*params = mState.genericUniformBuffer.name(); *params = mState.genericUniformBuffer.name();
} return true;
else
{
return false;
}
break;
case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
*params = UNIFORM_BUFFER_OFFSET_ALIGNMENT; *params = UNIFORM_BUFFER_OFFSET_ALIGNMENT;
break; return true;
case GL_UNIFORM_BUFFER_SIZE: case GL_UNIFORM_BUFFER_SIZE:
if(clientVersion >= 3)
{
*params = static_cast<T>(mState.genericUniformBuffer->size()); *params = static_cast<T>(mState.genericUniformBuffer->size());
} return true;
else
{
return false;
}
break;
case GL_UNIFORM_BUFFER_START: case GL_UNIFORM_BUFFER_START:
if(clientVersion >= 3)
{
*params = static_cast<T>(mState.genericUniformBuffer->offset()); *params = static_cast<T>(mState.genericUniformBuffer->offset());
} return true;
else
{
return false;
}
*params = 0;
break;
case GL_UNPACK_IMAGE_HEIGHT: case GL_UNPACK_IMAGE_HEIGHT:
*params = mState.unpackInfo.imageHeight; *params = mState.unpackInfo.imageHeight;
break; return true;
case GL_UNPACK_ROW_LENGTH: case GL_UNPACK_ROW_LENGTH:
*params = mState.unpackInfo.rowLength; *params = mState.unpackInfo.rowLength;
break; return true;
case GL_UNPACK_SKIP_IMAGES: case GL_UNPACK_SKIP_IMAGES:
*params = mState.unpackInfo.skipImages; *params = mState.unpackInfo.skipImages;
break; return true;
case GL_UNPACK_SKIP_PIXELS: case GL_UNPACK_SKIP_PIXELS:
*params = mState.unpackInfo.skipPixels; *params = mState.unpackInfo.skipPixels;
break; return true;
case GL_UNPACK_SKIP_ROWS: case GL_UNPACK_SKIP_ROWS:
*params = mState.unpackInfo.skipRows; *params = mState.unpackInfo.skipRows;
break; return true;
case GL_VERTEX_ARRAY_BINDING: case GL_VERTEX_ARRAY_BINDING:
*params = getCurrentVertexArray()->name; *params = getCurrentVertexArray()->name;
break; return true;
case GL_TRANSFORM_FEEDBACK_BINDING: case GL_TRANSFORM_FEEDBACK_BINDING:
{ {
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback); TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
...@@ -2329,7 +2276,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2329,7 +2276,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
} }
break; return true;
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
{ {
TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback); TransformFeedback* transformFeedback = getTransformFeedback(mState.transformFeedback);
...@@ -2342,12 +2289,13 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2342,12 +2289,13 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
} }
break; return true;
default: default:
return false; break;
}
} }
return true; return false;
} }
template bool Context::getTransformFeedbackiv<GLint>(GLuint index, GLenum pname, GLint *param) const; template bool Context::getTransformFeedbackiv<GLint>(GLuint index, GLenum pname, GLint *param) const;
......
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