Commit 6cfbe252 by Shahbaz Youssefi Committed by Commit Bot

Fix geometry/tessellation checks to account for ES3.2

Bug: angleproject:5557 Bug: angleproject:5579 Change-Id: Iae54940cefb5ba516dc173413b35b646e1968ba6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2653906 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
parent 74f7be6d
...@@ -9226,7 +9226,7 @@ void StateCache::updateValidDrawModes(Context *context) ...@@ -9226,7 +9226,7 @@ void StateCache::updateValidDrawModes(Context *context)
// active and not paused, regardless of mode. Any primitive type may be used while transform // active and not paused, regardless of mode. Any primitive type may be used while transform
// feedback is paused. // feedback is paused.
if (!context->getExtensions().geometryShader && if (!context->getExtensions().geometryShader &&
!context->getExtensions().tessellationShaderEXT) !context->getExtensions().tessellationShaderEXT && context->getClientVersion() < ES_3_2)
{ {
mCachedValidDrawModes.fill(false); mCachedValidDrawModes.fill(false);
mCachedValidDrawModes[curTransformFeedback->getPrimitiveMode()] = true; mCachedValidDrawModes[curTransformFeedback->getPrimitiveMode()] = true;
......
...@@ -249,7 +249,8 @@ bool ValidateTextureWrapModeValue(const Context *context, ...@@ -249,7 +249,8 @@ bool ValidateTextureWrapModeValue(const Context *context,
break; break;
case GL_CLAMP_TO_BORDER: case GL_CLAMP_TO_BORDER:
if (!context->getExtensions().textureBorderClampOES) if (!context->getExtensions().textureBorderClampOES &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled);
return false; return false;
...@@ -727,7 +728,9 @@ bool ValidateTransformFeedbackPrimitiveMode(const Context *context, ...@@ -727,7 +728,9 @@ bool ValidateTransformFeedbackPrimitiveMode(const Context *context,
{ {
ASSERT(context); ASSERT(context);
if (!context->getExtensions().geometryShader || !context->getExtensions().tessellationShaderEXT) if ((!context->getExtensions().geometryShader ||
!context->getExtensions().tessellationShaderEXT) &&
context->getClientVersion() < ES_3_2)
{ {
// It is an invalid operation to call DrawArrays or DrawArraysInstanced with a draw mode // It is an invalid operation to call DrawArrays or DrawArraysInstanced with a draw mode
// that does not match the current transform feedback object's draw mode (if transform // that does not match the current transform feedback object's draw mode (if transform
...@@ -1176,7 +1179,7 @@ bool ValidQueryType(const Context *context, QueryType queryType) ...@@ -1176,7 +1179,7 @@ bool ValidQueryType(const Context *context, QueryType queryType)
case QueryType::CommandsCompleted: case QueryType::CommandsCompleted:
return context->getExtensions().syncQuery; return context->getExtensions().syncQuery;
case QueryType::PrimitivesGenerated: case QueryType::PrimitivesGenerated:
return context->getExtensions().geometryShader; return context->getClientVersion() >= ES_3_2 || context->getExtensions().geometryShader;
default: default:
return false; return false;
} }
...@@ -3926,7 +3929,7 @@ void RecordDrawModeError(const Context *context, PrimitiveMode mode) ...@@ -3926,7 +3929,7 @@ void RecordDrawModeError(const Context *context, PrimitiveMode mode)
case PrimitiveMode::LineStripAdjacency: case PrimitiveMode::LineStripAdjacency:
case PrimitiveMode::TrianglesAdjacency: case PrimitiveMode::TrianglesAdjacency:
case PrimitiveMode::TriangleStripAdjacency: case PrimitiveMode::TriangleStripAdjacency:
if (!extensions.geometryShader) if (!extensions.geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled);
return; return;
...@@ -4031,7 +4034,7 @@ const char *ValidateDrawElementsStates(const Context *context) ...@@ -4031,7 +4034,7 @@ const char *ValidateDrawElementsStates(const Context *context)
{ {
// EXT_geometry_shader allows transform feedback to work with all draw commands. // EXT_geometry_shader allows transform feedback to work with all draw commands.
// [EXT_geometry_shader] Section 12.1, "Transform Feedback" // [EXT_geometry_shader] Section 12.1, "Transform Feedback"
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
// It is an invalid operation to call DrawElements, DrawRangeElements or // It is an invalid operation to call DrawElements, DrawRangeElements or
// DrawElementsInstanced while transform feedback is active, (3.0.2, section 2.14, pg // DrawElementsInstanced while transform feedback is active, (3.0.2, section 2.14, pg
...@@ -5019,7 +5022,7 @@ bool ValidateGetFramebufferAttachmentParameterivBase(const Context *context, ...@@ -5019,7 +5022,7 @@ bool ValidateGetFramebufferAttachmentParameterivBase(const Context *context,
break; break;
case GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT: case GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT:
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled);
return false; return false;
...@@ -5416,7 +5419,7 @@ bool ValidateGetProgramivBase(const Context *context, ...@@ -5416,7 +5419,7 @@ bool ValidateGetProgramivBase(const Context *context,
case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT: case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT:
case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT: case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT:
case GL_GEOMETRY_SHADER_INVOCATIONS_EXT: case GL_GEOMETRY_SHADER_INVOCATIONS_EXT:
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled);
return false; return false;
...@@ -5451,7 +5454,8 @@ bool ValidateGetProgramivBase(const Context *context, ...@@ -5451,7 +5454,8 @@ bool ValidateGetProgramivBase(const Context *context,
case GL_TESS_GEN_SPACING_EXT: case GL_TESS_GEN_SPACING_EXT:
case GL_TESS_GEN_VERTEX_ORDER_EXT: case GL_TESS_GEN_VERTEX_ORDER_EXT:
case GL_TESS_GEN_POINT_MODE_EXT: case GL_TESS_GEN_POINT_MODE_EXT:
if (!context->getExtensions().tessellationShaderEXT) if (!context->getExtensions().tessellationShaderEXT &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kTessellationShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kTessellationShaderExtensionNotEnabled);
return false; return false;
...@@ -6406,7 +6410,7 @@ bool ValidateGetTexParameterBase(const Context *context, ...@@ -6406,7 +6410,7 @@ bool ValidateGetTexParameterBase(const Context *context,
case GL_DEPTH_STENCIL_TEXTURE_MODE: case GL_DEPTH_STENCIL_TEXTURE_MODE:
case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: case GL_IMAGE_FORMAT_COMPATIBILITY_TYPE:
if (context->getClientVersion() < Version(3, 1)) if (context->getClientVersion() < ES_3_1)
{ {
context->validationError(GL_INVALID_ENUM, kEnumRequiresGLES31); context->validationError(GL_INVALID_ENUM, kEnumRequiresGLES31);
return false; return false;
...@@ -6433,7 +6437,8 @@ bool ValidateGetTexParameterBase(const Context *context, ...@@ -6433,7 +6437,8 @@ bool ValidateGetTexParameterBase(const Context *context,
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (!context->getExtensions().textureBorderClampOES) if (!context->getExtensions().textureBorderClampOES &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled);
return false; return false;
...@@ -7147,7 +7152,8 @@ bool ValidateTexParameterBase(const Context *context, ...@@ -7147,7 +7152,8 @@ bool ValidateTexParameterBase(const Context *context,
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (!context->getExtensions().textureBorderClampOES) if (!context->getExtensions().textureBorderClampOES &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled);
return false; return false;
...@@ -7358,7 +7364,8 @@ bool ValidateSamplerParameterBase(const Context *context, ...@@ -7358,7 +7364,8 @@ bool ValidateSamplerParameterBase(const Context *context,
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (!context->getExtensions().textureBorderClampOES) if (!context->getExtensions().textureBorderClampOES &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled);
return false; return false;
...@@ -7448,7 +7455,8 @@ bool ValidateGetSamplerParameterBase(const Context *context, ...@@ -7448,7 +7455,8 @@ bool ValidateGetSamplerParameterBase(const Context *context,
break; break;
case GL_TEXTURE_BORDER_COLOR: case GL_TEXTURE_BORDER_COLOR:
if (!context->getExtensions().textureBorderClampOES) if (!context->getExtensions().textureBorderClampOES &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kExtensionNotEnabled);
return false; return false;
......
...@@ -3741,7 +3741,7 @@ bool ValidateCreateShader(const Context *context, ShaderType type) ...@@ -3741,7 +3741,7 @@ bool ValidateCreateShader(const Context *context, ShaderType type)
break; break;
case ShaderType::Compute: case ShaderType::Compute:
if (context->getClientVersion() < Version(3, 1)) if (context->getClientVersion() < ES_3_1)
{ {
context->validationError(GL_INVALID_ENUM, kES31Required); context->validationError(GL_INVALID_ENUM, kES31Required);
return false; return false;
...@@ -3749,7 +3749,7 @@ bool ValidateCreateShader(const Context *context, ShaderType type) ...@@ -3749,7 +3749,7 @@ bool ValidateCreateShader(const Context *context, ShaderType type)
break; break;
case ShaderType::Geometry: case ShaderType::Geometry:
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kInvalidShaderType); context->validationError(GL_INVALID_ENUM, kInvalidShaderType);
return false; return false;
...@@ -3757,7 +3757,8 @@ bool ValidateCreateShader(const Context *context, ShaderType type) ...@@ -3757,7 +3757,8 @@ bool ValidateCreateShader(const Context *context, ShaderType type)
break; break;
case ShaderType::TessControl: case ShaderType::TessControl:
if (!context->getExtensions().tessellationShaderEXT) if (!context->getExtensions().tessellationShaderEXT &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kInvalidShaderType); context->validationError(GL_INVALID_ENUM, kInvalidShaderType);
return false; return false;
...@@ -3765,7 +3766,8 @@ bool ValidateCreateShader(const Context *context, ShaderType type) ...@@ -3765,7 +3766,8 @@ bool ValidateCreateShader(const Context *context, ShaderType type)
break; break;
case ShaderType::TessEvaluation: case ShaderType::TessEvaluation:
if (!context->getExtensions().tessellationShaderEXT) if (!context->getExtensions().tessellationShaderEXT &&
context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kInvalidShaderType); context->validationError(GL_INVALID_ENUM, kInvalidShaderType);
return false; return false;
......
...@@ -102,12 +102,13 @@ bool ValidateProgramResourceProperty(const Context *context, GLenum prop) ...@@ -102,12 +102,13 @@ bool ValidateProgramResourceProperty(const Context *context, GLenum prop)
return true; return true;
case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT: case GL_REFERENCED_BY_GEOMETRY_SHADER_EXT:
return context->getExtensions().geometryShader; return context->getExtensions().geometryShader || context->getClientVersion() >= ES_3_2;
case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT: case GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT:
case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT: case GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT:
case GL_IS_PER_PATCH_EXT: case GL_IS_PER_PATCH_EXT:
return context->getExtensions().tessellationShaderEXT; return context->getExtensions().tessellationShaderEXT ||
context->getClientVersion() >= ES_3_2;
case GL_LOCATION_INDEX_EXT: case GL_LOCATION_INDEX_EXT:
return context->getExtensions().blendFuncExtended; return context->getExtensions().blendFuncExtended;
...@@ -480,7 +481,7 @@ bool ValidateDrawArraysIndirect(const Context *context, PrimitiveMode mode, cons ...@@ -480,7 +481,7 @@ bool ValidateDrawArraysIndirect(const Context *context, PrimitiveMode mode, cons
{ {
// EXT_geometry_shader allows transform feedback to work with all draw commands. // EXT_geometry_shader allows transform feedback to work with all draw commands.
// [EXT_geometry_shader] Section 12.1, "Transform Feedback" // [EXT_geometry_shader] Section 12.1, "Transform Feedback"
if (context->getExtensions().geometryShader) if (context->getExtensions().geometryShader || context->getClientVersion() >= ES_3_2)
{ {
if (!ValidateTransformFeedbackPrimitiveMode( if (!ValidateTransformFeedbackPrimitiveMode(
context, curTransformFeedback->getPrimitiveMode(), mode)) context, curTransformFeedback->getPrimitiveMode(), mode))
...@@ -1056,7 +1057,7 @@ bool ValidateFramebufferParameteri(const Context *context, GLenum target, GLenum ...@@ -1056,7 +1057,7 @@ bool ValidateFramebufferParameteri(const Context *context, GLenum target, GLenum
} }
case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT: case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
{ {
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled);
return false; return false;
...@@ -1111,7 +1112,7 @@ bool ValidateGetFramebufferParameteriv(const Context *context, ...@@ -1111,7 +1112,7 @@ bool ValidateGetFramebufferParameteriv(const Context *context,
case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: case GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS:
break; break;
case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT: case GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT:
if (!context->getExtensions().geometryShader) if (!context->getExtensions().geometryShader && context->getClientVersion() < ES_3_2)
{ {
context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled); context->validationError(GL_INVALID_ENUM, kGeometryShaderExtensionNotEnabled);
return false; return false;
...@@ -1715,12 +1716,12 @@ bool ValidateUseProgramStagesBase(const Context *context, ...@@ -1715,12 +1716,12 @@ bool ValidateUseProgramStagesBase(const Context *context,
GLbitfield knownShaderBits = GLbitfield knownShaderBits =
GL_VERTEX_SHADER_BIT | GL_FRAGMENT_SHADER_BIT | GL_COMPUTE_SHADER_BIT; GL_VERTEX_SHADER_BIT | GL_FRAGMENT_SHADER_BIT | GL_COMPUTE_SHADER_BIT;
if (context->getClientVersion() == ES_3_2 || context->getExtensions().geometryShader) if (context->getClientVersion() >= ES_3_2 || context->getExtensions().geometryShader)
{ {
knownShaderBits |= GL_GEOMETRY_SHADER_BIT; knownShaderBits |= GL_GEOMETRY_SHADER_BIT;
} }
if (context->getClientVersion() == ES_3_2 || context->getExtensions().tessellationShaderEXT) if (context->getClientVersion() >= ES_3_2 || context->getExtensions().tessellationShaderEXT)
{ {
knownShaderBits |= GL_TESS_CONTROL_SHADER_BIT; knownShaderBits |= GL_TESS_CONTROL_SHADER_BIT;
knownShaderBits |= GL_TESS_EVALUATION_SHADER_BIT; knownShaderBits |= GL_TESS_EVALUATION_SHADER_BIT;
......
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