Commit 447bfac1 by Jiawei Shao Committed by Commit Bot

ES31: Support program parameter queries on geometry shader

This patch implements all the program queries on the geometry shader stage of a program by glGetProgramiv(), including the queries on geometry shader input/output primitives, invocations and maximum output vertices BUG=angleproject:1941 TEST=dEQP-GLES31.functional.geometry_shading.query.geometry_linked_* dEQP-GLES31.functional.geometry_shading.query.geometry_shader_invocations dEQP-GLES31.functional.state_query.program.geometry_shader_state_get_programiv Change-Id: Ibfa630c64dba5baf52ff84ce7e0bf4c567eef8c4 Reviewed-on: https://chromium-review.googlesource.com/961397 Commit-Queue: Corentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJiajia Qin <jiajia.qin@intel.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 7cec3353
...@@ -142,6 +142,7 @@ ERRMSG(NegativeSize, "Cannot have negative height or width."); ...@@ -142,6 +142,7 @@ ERRMSG(NegativeSize, "Cannot have negative height or width.");
ERRMSG(NegativeStart, "Cannot have negative start."); ERRMSG(NegativeStart, "Cannot have negative start.");
ERRMSG(NegativeStride, "Cannot have negative stride."); ERRMSG(NegativeStride, "Cannot have negative stride.");
ERRMSG(NoActiveComputeShaderStage, "No active compute shader stage in this program."); ERRMSG(NoActiveComputeShaderStage, "No active compute shader stage in this program.");
ERRMSG(NoActiveGeometryShaderStage, "No active geometry shader stage in this program.");
ERRMSG(NoActiveProgramWithComputeShader, "No active program for the compute shader stage."); ERRMSG(NoActiveProgramWithComputeShader, "No active program for the compute shader stage.");
ERRMSG(NoSuchPath, "No such path object."); ERRMSG(NoSuchPath, "No such path object.");
ERRMSG(NoTransformFeedbackOutputVariables, ERRMSG(NoTransformFeedbackOutputVariables,
......
...@@ -664,6 +664,12 @@ class Program final : angle::NonCopyable, public LabeledObject ...@@ -664,6 +664,12 @@ class Program final : angle::NonCopyable, public LabeledObject
{ {
return mState.mGeometryShaderInputPrimitiveType; return mState.mGeometryShaderInputPrimitiveType;
} }
GLenum getGeometryShaderOutputPrimitiveType() const
{
return mState.mGeometryShaderOutputPrimitiveType;
}
GLint getGeometryShaderInvocations() const { return mState.mGeometryShaderInvocations; }
GLint getGeometryShaderMaxVertices() const { return mState.mGeometryShaderMaxVertices; }
const ProgramState &getState() const { return mState; } const ProgramState &getState() const { return mState; }
......
...@@ -1019,6 +1019,18 @@ void QueryProgramiv(const Context *context, const Program *program, GLenum pname ...@@ -1019,6 +1019,18 @@ void QueryProgramiv(const Context *context, const Program *program, GLenum pname
case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS:
*params = program->getActiveAtomicCounterBufferCount(); *params = program->getActiveAtomicCounterBufferCount();
break; break;
case GL_GEOMETRY_LINKED_INPUT_TYPE_EXT:
*params = program->getGeometryShaderInputPrimitiveType();
break;
case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT:
*params = program->getGeometryShaderOutputPrimitiveType();
break;
case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT:
*params = program->getGeometryShaderMaxVertices();
break;
case GL_GEOMETRY_SHADER_INVOCATIONS_EXT:
*params = program->getGeometryShaderInvocations();
break;
default: default:
UNREACHABLE(); UNREACHABLE();
break; break;
......
...@@ -4237,6 +4237,33 @@ bool ValidateGetProgramivBase(Context *context, GLuint program, GLenum pname, GL ...@@ -4237,6 +4237,33 @@ bool ValidateGetProgramivBase(Context *context, GLuint program, GLenum pname, GL
} }
break; break;
case GL_GEOMETRY_LINKED_INPUT_TYPE_EXT:
case GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT:
case GL_GEOMETRY_LINKED_VERTICES_OUT_EXT:
case GL_GEOMETRY_SHADER_INVOCATIONS_EXT:
if (!context->getExtensions().geometryShader)
{
ANGLE_VALIDATION_ERR(context, InvalidEnum(), GeometryShaderExtensionNotEnabled);
return false;
}
// [EXT_geometry_shader] Chapter 7.12
// An INVALID_OPERATION error is generated if GEOMETRY_LINKED_VERTICES_OUT_EXT,
// GEOMETRY_LINKED_INPUT_TYPE_EXT, GEOMETRY_LINKED_OUTPUT_TYPE_EXT, or
// GEOMETRY_SHADER_INVOCATIONS_EXT are queried for a program which has not been linked
// successfully, or which does not contain objects to form a geometry shader.
if (!programObject->isLinked())
{
ANGLE_VALIDATION_ERR(context, InvalidOperation(), ProgramNotLinked);
return false;
}
if (!programObject->hasLinkedGeometryShader())
{
ANGLE_VALIDATION_ERR(context, InvalidOperation(), NoActiveGeometryShaderStage);
return false;
}
break;
default: default:
ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported); ANGLE_VALIDATION_ERR(context, InvalidEnum(), EnumNotSupported);
return false; return false;
......
...@@ -1566,6 +1566,8 @@ ...@@ -1566,6 +1566,8 @@
1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_mediump_geometry = FAIL 1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_mediump_geometry = FAIL
1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_highp_geometry = FAIL 1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_functions.integer.findmsb.uvec4_highp_geometry = FAIL
1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_constants.geometry_shader.* = FAIL 1941 D3D11 : dEQP-GLES31.functional.shaders.builtin_constants.geometry_shader.* = FAIL
1941 D3D11 : dEQP-GLES31.functional.state_query.program.geometry_shader_state_get_programiv = FAIL
1941 D3D11 : dEQP-GLES31.functional.geometry_shading.query.* = FAIL
1941 D3D11 : dEQP-GLES31.functional.geometry_shading.basic.* = FAIL 1941 D3D11 : dEQP-GLES31.functional.geometry_shading.basic.* = FAIL
1941 D3D11 : dEQP-GLES31.functional.geometry_shading.conversion.* = FAIL 1941 D3D11 : dEQP-GLES31.functional.geometry_shading.conversion.* = FAIL
1941 D3D11 : dEQP-GLES31.functional.geometry_shading.emit.* = FAIL 1941 D3D11 : dEQP-GLES31.functional.geometry_shading.emit.* = FAIL
...@@ -1641,8 +1643,8 @@ ...@@ -1641,8 +1643,8 @@
1442 OPENGL D3D11 : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_directive.tessellation_shader = FAIL 1442 OPENGL D3D11 : dEQP-GLES31.functional.debug.negative_coverage.get_error.shader_directive.tessellation_shader = FAIL
1442 OPENGL D3D11 : dEQP-GLES31.functional.debug.object_labels.program_pipeline = FAIL 1442 OPENGL D3D11 : dEQP-GLES31.functional.debug.object_labels.program_pipeline = FAIL
1941 OPENGL D3D11 : dEQP-GLES31.functional.state_query.program.geometry_shader_state_get_programiv = FAIL 1941 OPENGL D3D11 : dEQP-GLES31.functional.geometry_shading.query.primitives_* = FAIL
1941 OPENGL D3D11 : dEQP-GLES31.functional.geometry_shading.query.* = FAIL 1941 OPENGL D3D11 : dEQP-GLES31.functional.geometry_shading.query.referenced_by_geometry_shader = FAIL
2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.compute.program_not_active = FAIL 2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.callbacks.compute.program_not_active = FAIL
2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.compute.program_not_active = FAIL 2324 DEBUG RELEASE : dEQP-GLES31.functional.debug.negative_coverage.log.compute.program_not_active = FAIL
......
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