Allow PROVOKING_VERTEX for LAYER_PROVOKING_VERTEX
authorJames Helferty <jhelferty@nvidia.com>
Thu, 6 Apr 2017 18:55:44 +0000 (14:55 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Fri, 7 Apr 2017 16:02:51 +0000 (12:02 -0400)
OpenGL differs from ES in that it allows GL_PROVOKING_VERTEX as a valid
response to a query about GL_LAYER_PROVOKING_VERTEX. In this case, the
test needs to then retrieve and use the value of GL_PROVOKING_VERTEX.

Affects:

KHR-GLES31.core.geometry_shader.layered_rendering.layered_rendering
KHR-GLES32.core.geometry_shader.layered_rendering.layered_rendering
KHR-GL44.geometry_shader.layered_rendering.layered_rendering
KHR-GL45.geometry_shader.layered_rendering.layered_rendering

(without the mustpass list patch applied, KHR-GLxx.* are GLxx-CTS.*)

Components: OpenGL
VK-GL-CTS issue: 341

Change-Id: I3fbd87f1ec47ee08f6584c4be27b41e80bc4e750

external/openglcts/modules/glesext/geometry_shader/esextcGeometryShaderLayeredRendering.cpp

index b8f9257..3e6df31 100644 (file)
@@ -201,6 +201,7 @@ bool GeometryShaderLayeredRendering::buildProgramForLRTest(_layered_rendering_te
  **/
 tcu::TestNode::IterateResult GeometryShaderLayeredRendering::iterate(void)
 {
+       const glu::ContextType& context_type = m_context.getRenderContext().getType();
        const glw::Functions& gl = m_context.getRenderContext().getFunctions();
 
        /* Helper variables to support shader compilation process */
@@ -335,6 +336,12 @@ tcu::TestNode::IterateResult GeometryShaderLayeredRendering::iterate(void)
        gl.getIntegerv(m_glExtTokens.LAYER_PROVOKING_VERTEX, &layer_provoking_vertex_gl_value);
        GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv() failed for GL_LAYER_PROVOKING_VERTEX_EXT pname");
 
+       if (!glu::isContextTypeES(context_type) && ((glw::GLenum)layer_provoking_vertex_gl_value == GL_PROVOKING_VERTEX))
+       {
+               gl.getIntegerv(GL_PROVOKING_VERTEX, &layer_provoking_vertex_gl_value);
+               GLU_EXPECT_NO_ERROR(gl.getError(), "glGetIntegerv() failed for GL_PROVOKING_VERTEX pname");
+       }
+
        if ((glw::GLenum)layer_provoking_vertex_gl_value == m_glExtTokens.FIRST_VERTEX_CONVENTION)
        {
                layer_provoking_vertex_uniform_value = 1; /* as per geometry shader implementation */