Commit ce57a9a5 by Alexis Hetu Committed by Alexis Hétu

Removing a few UNIMPLEMENTED cases

A few remaining cases in Context.cpp are actually implemented, so we can remove the UNIMPLEMENTED() calls in these cases: Primitive restart, uniform blocks, fragment inputs and vertex outputs are all implemented. Also, the implementation can legally support 0 program binary formats. Change-Id: I74b51b511c66170e284ac5d82f573453332872cc Reviewed-on: https://swiftshader-review.googlesource.com/8788Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent eb84fe06
...@@ -627,7 +627,6 @@ bool Context::isDitherEnabled() const ...@@ -627,7 +627,6 @@ bool Context::isDitherEnabled() const
void Context::setPrimitiveRestartFixedIndexEnabled(bool enabled) void Context::setPrimitiveRestartFixedIndexEnabled(bool enabled)
{ {
UNIMPLEMENTED();
mState.primitiveRestartFixedIndexEnabled = enabled; mState.primitiveRestartFixedIndexEnabled = enabled;
} }
...@@ -2063,7 +2062,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2063,7 +2062,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; break;
case GL_TEXTURE_BINDING_2D_ARRAY: // GLES 3.0 case GL_TEXTURE_BINDING_2D_ARRAY:
if(clientVersion < 3) if(clientVersion < 3)
{ {
return false; return false;
...@@ -2076,7 +2075,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2076,7 +2075,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
*params = mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].name(); *params = mState.samplerTexture[TEXTURE_2D_ARRAY][mState.activeSampler].name();
break; break;
case GL_COPY_READ_BUFFER_BINDING: // name, initially 0 case GL_COPY_READ_BUFFER_BINDING:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = mState.copyReadBuffer.name(); *params = mState.copyReadBuffer.name();
...@@ -2086,7 +2085,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2086,7 +2085,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_COPY_WRITE_BUFFER_BINDING: // name, initially 0 case GL_COPY_WRITE_BUFFER_BINDING:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = mState.copyWriteBuffer.name(); *params = mState.copyWriteBuffer.name();
...@@ -2124,23 +2123,22 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2124,23 +2123,22 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_MAX_3D_TEXTURE_SIZE: // GLint, at least 2048 case GL_MAX_3D_TEXTURE_SIZE:
*params = IMPLEMENTATION_MAX_TEXTURE_SIZE; *params = IMPLEMENTATION_MAX_TEXTURE_SIZE;
break; break;
case GL_MAX_ARRAY_TEXTURE_LAYERS: // GLint, at least 2048 case GL_MAX_ARRAY_TEXTURE_LAYERS:
*params = IMPLEMENTATION_MAX_TEXTURE_SIZE; *params = IMPLEMENTATION_MAX_TEXTURE_SIZE;
break; break;
case GL_MAX_COLOR_ATTACHMENTS: case GL_MAX_COLOR_ATTACHMENTS:
*params = MAX_COLOR_ATTACHMENTS; *params = MAX_COLOR_ATTACHMENTS;
break; break;
case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: // integer, at least 50048 case GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:
*params = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS; *params = MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS;
break; break;
case GL_MAX_COMBINED_UNIFORM_BLOCKS: // integer, at least 70 case GL_MAX_COMBINED_UNIFORM_BLOCKS:
UNIMPLEMENTED(); *params = MAX_VERTEX_UNIFORM_BLOCKS + MAX_FRAGMENT_UNIFORM_BLOCKS;
*params = 70;
break; break;
case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: // integer, at least 50176 case GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:
*params = MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS; *params = MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS;
break; break;
case GL_MAX_DRAW_BUFFERS: case GL_MAX_DRAW_BUFFERS:
...@@ -2155,84 +2153,89 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2155,84 +2153,89 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
case GL_MAX_ELEMENTS_VERTICES: case GL_MAX_ELEMENTS_VERTICES:
*params = MAX_ELEMENTS_VERTICES; *params = MAX_ELEMENTS_VERTICES;
break; break;
case GL_MAX_FRAGMENT_INPUT_COMPONENTS: // integer, at least 128 case GL_MAX_FRAGMENT_INPUT_COMPONENTS:
UNIMPLEMENTED(); *params = MAX_FRAGMENT_INPUT_VECTORS * 4;
*params = 128;
break; break;
case GL_MAX_FRAGMENT_UNIFORM_BLOCKS: // integer, at least 12 case GL_MAX_FRAGMENT_UNIFORM_BLOCKS:
*params = MAX_FRAGMENT_UNIFORM_BLOCKS; *params = MAX_FRAGMENT_UNIFORM_BLOCKS;
break; break;
case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: // integer, at least 896 case GL_MAX_FRAGMENT_UNIFORM_COMPONENTS:
*params = MAX_FRAGMENT_UNIFORM_COMPONENTS; *params = MAX_FRAGMENT_UNIFORM_COMPONENTS;
break; break;
case GL_MAX_PROGRAM_TEXEL_OFFSET: // integer, minimum is 7 case GL_MAX_PROGRAM_TEXEL_OFFSET:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = 7; *params = MAX_PROGRAM_TEXEL_OFFSET;
break; break;
case GL_MAX_SERVER_WAIT_TIMEOUT: // integer case GL_MAX_SERVER_WAIT_TIMEOUT:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = 0; *params = 0;
break; break;
case GL_MAX_TEXTURE_LOD_BIAS: // integer, at least 2.0 case GL_MAX_TEXTURE_LOD_BIAS:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = 2; *params = 2;
break; break;
case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: // integer, at least 64 case GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:
*params = sw::MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS; *params = sw::MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS;
break; break;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: // integer, at least 4 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:
*params = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS; *params = MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS;
break; break;
case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: // integer, at least 4 case GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:
*params = sw::MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS; *params = sw::MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS;
break; break;
case GL_MAX_UNIFORM_BLOCK_SIZE: // integer, at least 16384 case GL_MAX_UNIFORM_BLOCK_SIZE:
*params = MAX_UNIFORM_BLOCK_SIZE; *params = MAX_UNIFORM_BLOCK_SIZE;
break; break;
case GL_MAX_UNIFORM_BUFFER_BINDINGS: // integer, at least 24 case GL_MAX_UNIFORM_BUFFER_BINDINGS:
*params = MAX_UNIFORM_BUFFER_BINDINGS; *params = MAX_UNIFORM_BUFFER_BINDINGS;
break; break;
case GL_MAX_VARYING_COMPONENTS: // integer, at least 60 case GL_MAX_VARYING_COMPONENTS:
UNIMPLEMENTED(); UNIMPLEMENTED();
// FIXME: should be MAX_VARYING_VECTORS * 4, but MAX_VARYING_VECTORS
// must be increased (see MAX_VERTEX_OUTPUTS and MAX_FRAGMENT_INPUTS)
*params = 60; *params = 60;
break; break;
case GL_MAX_VERTEX_OUTPUT_COMPONENTS: // integer, at least 64 case GL_MAX_VERTEX_OUTPUT_COMPONENTS:
UNIMPLEMENTED(); *params = MAX_VERTEX_OUTPUT_VECTORS * 4;
*params = 64;
break; break;
case GL_MAX_VERTEX_UNIFORM_BLOCKS: // integer, at least 12 case GL_MAX_VERTEX_UNIFORM_BLOCKS:
*params = MAX_VERTEX_UNIFORM_BLOCKS; *params = MAX_VERTEX_UNIFORM_BLOCKS;
break; break;
case GL_MAX_VERTEX_UNIFORM_COMPONENTS: // integer, at least 1024 case GL_MAX_VERTEX_UNIFORM_COMPONENTS:
*params = MAX_VERTEX_UNIFORM_COMPONENTS; *params = MAX_VERTEX_UNIFORM_COMPONENTS;
break; break;
case GL_MIN_PROGRAM_TEXEL_OFFSET: // integer, maximum is -8 case GL_MIN_PROGRAM_TEXEL_OFFSET:
UNIMPLEMENTED(); UNIMPLEMENTED();
*params = -8; *params = MIN_PROGRAM_TEXEL_OFFSET;
break; break;
case GL_MINOR_VERSION: // integer case GL_MINOR_VERSION:
UNIMPLEMENTED(); if (clientVersion >= 3)
{
*params = 0; *params = 0;
}
else
{
return false;
}
break; break;
case GL_NUM_EXTENSIONS: // integer case GL_NUM_EXTENSIONS:
GLuint numExtensions; GLuint numExtensions;
getExtensions(0, &numExtensions); getExtensions(0, &numExtensions);
*params = numExtensions; *params = numExtensions;
break; break;
case GL_NUM_PROGRAM_BINARY_FORMATS: // integer, at least 0 case GL_NUM_PROGRAM_BINARY_FORMATS:
UNIMPLEMENTED(); *params = NUM_PROGRAM_BINARY_FORMATS;
*params = 0;
break; break;
case GL_PACK_ROW_LENGTH: // integer, initially 0 case GL_PACK_ROW_LENGTH:
*params = mState.packRowLength; *params = mState.packRowLength;
break; break;
case GL_PACK_SKIP_PIXELS: // integer, initially 0 case GL_PACK_SKIP_PIXELS:
*params = mState.packSkipPixels; *params = mState.packSkipPixels;
break; break;
case GL_PACK_SKIP_ROWS: // integer, initially 0 case GL_PACK_SKIP_ROWS:
*params = mState.packSkipRows; *params = mState.packSkipRows;
break; break;
case GL_PIXEL_PACK_BUFFER_BINDING: // integer, initially 0 case GL_PIXEL_PACK_BUFFER_BINDING:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = mState.pixelPackBuffer.name(); *params = mState.pixelPackBuffer.name();
...@@ -2242,7 +2245,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2242,7 +2245,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_PIXEL_UNPACK_BUFFER_BINDING: // integer, initially 0 case GL_PIXEL_UNPACK_BUFFER_BINDING:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = mState.pixelUnpackBuffer.name(); *params = mState.pixelUnpackBuffer.name();
...@@ -2252,17 +2255,17 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2252,17 +2255,17 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_PROGRAM_BINARY_FORMATS: // integer[GL_NUM_PROGRAM_BINARY_FORMATS​] case GL_PROGRAM_BINARY_FORMATS:
UNIMPLEMENTED(); // Since NUM_PROGRAM_BINARY_FORMATS is 0, the input
*params = 0; // should be a 0 sized array, so don't write to params
break; break;
case GL_READ_BUFFER: // symbolic constant, initial value is GL_BACK​ case GL_READ_BUFFER:
*params = getReadFramebuffer()->getReadBuffer(); *params = getReadFramebuffer()->getReadBuffer();
break; break;
case GL_SAMPLER_BINDING: // GLint, default 0 case GL_SAMPLER_BINDING:
*params = mState.sampler[mState.activeSampler].name(); *params = mState.sampler[mState.activeSampler].name();
break; break;
case GL_UNIFORM_BUFFER_BINDING: // name, initially 0 case GL_UNIFORM_BUFFER_BINDING:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = mState.genericUniformBuffer.name(); *params = mState.genericUniformBuffer.name();
...@@ -2272,10 +2275,10 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2272,10 +2275,10 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: // integer, defaults to 1 case GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT:
*params = UNIFORM_BUFFER_OFFSET_ALIGNMENT; *params = UNIFORM_BUFFER_OFFSET_ALIGNMENT;
break; break;
case GL_UNIFORM_BUFFER_SIZE: // indexed[n] 64-bit integer, initially 0 case GL_UNIFORM_BUFFER_SIZE:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = static_cast<T>(mState.genericUniformBuffer->size()); *params = static_cast<T>(mState.genericUniformBuffer->size());
...@@ -2285,7 +2288,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2285,7 +2288,7 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
return false; return false;
} }
break; break;
case GL_UNIFORM_BUFFER_START: // indexed[n] 64-bit integer, initially 0 case GL_UNIFORM_BUFFER_START:
if(clientVersion >= 3) if(clientVersion >= 3)
{ {
*params = static_cast<T>(mState.genericUniformBuffer->offset()); *params = static_cast<T>(mState.genericUniformBuffer->offset());
...@@ -2296,22 +2299,22 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const ...@@ -2296,22 +2299,22 @@ template<typename T> bool Context::getIntegerv(GLenum pname, T *params) const
} }
*params = 0; *params = 0;
break; break;
case GL_UNPACK_IMAGE_HEIGHT: // integer, initially 0 case GL_UNPACK_IMAGE_HEIGHT:
*params = mState.unpackInfo.imageHeight; *params = mState.unpackInfo.imageHeight;
break; break;
case GL_UNPACK_ROW_LENGTH: // integer, initially 0 case GL_UNPACK_ROW_LENGTH:
*params = mState.unpackInfo.rowLength; *params = mState.unpackInfo.rowLength;
break; break;
case GL_UNPACK_SKIP_IMAGES: // integer, initially 0 case GL_UNPACK_SKIP_IMAGES:
*params = mState.unpackInfo.skipImages; *params = mState.unpackInfo.skipImages;
break; break;
case GL_UNPACK_SKIP_PIXELS: // integer, initially 0 case GL_UNPACK_SKIP_PIXELS:
*params = mState.unpackInfo.skipPixels; *params = mState.unpackInfo.skipPixels;
break; break;
case GL_UNPACK_SKIP_ROWS: // integer, initially 0 case GL_UNPACK_SKIP_ROWS:
*params = mState.unpackInfo.skipRows; *params = mState.unpackInfo.skipRows;
break; break;
case GL_VERTEX_ARRAY_BINDING: // GLint, initially 0 case GL_VERTEX_ARRAY_BINDING:
*params = getCurrentVertexArray()->name; *params = getCurrentVertexArray()->name;
break; break;
case GL_TRANSFORM_FEEDBACK_BINDING: case GL_TRANSFORM_FEEDBACK_BINDING:
......
...@@ -103,6 +103,7 @@ enum ...@@ -103,6 +103,7 @@ enum
MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4, MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS = 4,
MAX_UNIFORM_BUFFER_BINDINGS = sw::MAX_UNIFORM_BUFFER_BINDINGS, MAX_UNIFORM_BUFFER_BINDINGS = sw::MAX_UNIFORM_BUFFER_BINDINGS,
UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1, UNIFORM_BUFFER_OFFSET_ALIGNMENT = 1,
NUM_PROGRAM_BINARY_FORMATS = 0,
}; };
const GLenum compressedTextureFormats[] = const GLenum compressedTextureFormats[] =
......
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