From: leiche02 Date: Wed, 11 Nov 2020 06:42:14 +0000 (+0800) Subject: Use shader to calculate sample point X-Git-Tag: upstream/1.3.5~1094^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c32937eaad33a47ecf39ed34673746b94e674cf6;p=platform%2Fupstream%2FVK-GL-CTS.git Use shader to calculate sample point The test's sampling point is taking from interpolated varying, the inaccuracy of interpolation may cause wrong sampling, use gl_FragCoord in fragment shader to calcuate sample point directly. Component: OpenGL Affected tests: KHR-GLES32.core.nearest_edge.offset_* VK-GL-CTS issue: 2651 Change-Id: Ib91595ca07a2b146059c51f2d68ebf086c10553c (cherry picked from commit 3d55f6adbf38215ce3c4e2986a2a2e8a91086f08) --- diff --git a/external/openglcts/modules/common/glcNearestEdgeTests.cpp b/external/openglcts/modules/common/glcNearestEdgeTests.cpp index 621a662..f9c754a 100644 --- a/external/openglcts/modules/common/glcNearestEdgeTests.cpp +++ b/external/openglcts/modules/common/glcNearestEdgeTests.cpp @@ -171,32 +171,44 @@ void NearestEdgeTestCase::init() TCU_THROW(NotSupportedError, "Render target size too small"); m_vertShaderText = - "#version ${VERSION}\n" - "\n" - "in highp vec2 position;\n" - "in highp vec2 inTexCoord;\n" - "out highp vec2 commonTexCoord;\n" - "\n" - "void main()\n" - "{\n" - " commonTexCoord = inTexCoord;\n" - " gl_Position = vec4(position, 0.0, 1.0);\n" - "}\n" - ; - - m_fragShaderText = - "#version ${VERSION}\n" - "\n" - "in highp vec2 commonTexCoord;\n" - "out highp vec4 fragColor;\n" - "\n" - "uniform highp sampler2D texSampler;\n" - "\n" - "void main()\n" - "{\n" - " fragColor = texture(texSampler, commonTexCoord);\n" - "}\n" - "\n"; + "#version ${VERSION}\n" + "\n" + "in highp vec2 position;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = vec4(position, 0.0, 1.0);\n" + "}\n" + ; + m_fragShaderText = + "#version ${VERSION}\n" + "\n" + "precision highp float;\n" + "out highp vec4 fragColor;\n" + "\n" + "uniform highp sampler2D texSampler;\n" + "uniform int texOffset;\n" + "uniform float texWidth;\n" + "uniform float texHeight;\n" + "\n" + "void main()\n" + "{\n" + " float texCoordX;\n" + " float texCoordY;\n" + " if(texOffset > 0)\n" + " {\n" + " texCoordX = (gl_FragCoord.x + 0.499) / texWidth;\n " + " texCoordY = (gl_FragCoord.y + 0.499) / texHeight;\n" + " }\n" + " else\n" + " {\n" + " texCoordX = (gl_FragCoord.x - 0.499) / texWidth;\n" + " texCoordY = (gl_FragCoord.y - 0.499) / texHeight;\n" + " }\n" + " vec2 sampleCoord = vec2(texCoordX, texCoordY);\n" + " fragColor = texture(texSampler, sampleCoord);\n" + "}\n" + "\n"; tcu::StringTemplate vertShaderTemplate{m_vertShaderText}; tcu::StringTemplate fragShaderTemplate{m_fragShaderText}; @@ -301,8 +313,7 @@ void NearestEdgeTestCase::renderQuad () const std::vector vertexArrays = { - glu::va::Float("position", 2, 4, 0, positions.data()), - glu::va::Float("inTexCoord", 2, 4, 0, texCoords.data()) + glu::va::Float("position", 2, 4, 0, positions.data()) }; glu::ShaderProgram program(m_context.getRenderContext(), glu::makeVtxFragSources(m_vertShaderText, m_fragShaderText)); @@ -315,6 +326,11 @@ void NearestEdgeTestCase::renderQuad () gl.uniform1i(gl.getUniformLocation(program.getProgram(), "texSampler"), 0); GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i failed"); + gl.uniform1i(gl.getUniformLocation(program.getProgram(), "texOffset"),m_offsetSign); + gl.uniform1f(gl.getUniformLocation(program.getProgram(), "texWidth"), float(m_width)); + gl.uniform1f(gl.getUniformLocation(program.getProgram(), "texHeight"), float(m_height)); + GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i failed"); + gl.clear(GL_COLOR_BUFFER_BIT); glu::draw(renderContext, program.getProgram(),