Edit

kc3-lang/angle/src/tests/compiler_tests/Pack_Unpack_test.cpp

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2016-11-07 13:58:48
    Hash : 45bcc784
    Message : translator: Scope all classes with "sh". I was seeing an odd problem with our PoolAlloc conflicting with the glslang/Vulkan TIntermNode, so the fix was to move everything to a separate namespace. The bison grammars are also regenerated. No functional changes. BUG=angleproject:1576 Change-Id: I959c7afe4c092f0d458432c07b4dcee4d39513f3 Reviewed-on: https://chromium-review.googlesource.com/408267 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>

  • src/tests/compiler_tests/Pack_Unpack_test.cpp
  • //
    // Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // Pack_Unpack_test.cpp:
    //   Tests for the emulating pack_unpack functions for GLSL.
    //
    
    #include "angle_gl.h"
    #include "gtest/gtest.h"
    #include "GLSLANG/ShaderLang.h"
    #include "tests/test_utils/compiler_test.h"
    
    using namespace sh;
    
    namespace
    {
    
    class PackUnpackTest : public MatchOutputCodeTest
    {
      public:
        PackUnpackTest() : MatchOutputCodeTest(GL_FRAGMENT_SHADER, 0, SH_GLSL_400_CORE_OUTPUT) {}
    };
    
    // Check if PackSnorm2x16 Emulation for GLSL < 4.2 compile correctly.
    TEST_F(PackUnpackTest, PackSnorm2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   vec2 v;\n"
            "   uint u = packSnorm2x16(v);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("uint webgl_packSnorm2x16_emu(vec2 v)"));
    }
    
    // Check if UnpackSnorm2x16 Emulation for GLSL < 4.2 compile correctly.
    TEST_F(PackUnpackTest, UnpackSnorm2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   uint u;\n"
            "   vec2 v=unpackSnorm2x16(u);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("vec2 webgl_unpackSnorm2x16_emu(uint u)"));
    }
    
    // Check if PackUnorm2x16 Emulation for GLSL < 4.1 compiles correctly.
    TEST_F(PackUnpackTest, PackUnorm2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   vec2 v;\n"
            "   uint u = packUnorm2x16(v);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("uint webgl_packUnorm2x16_emu(vec2 v)"));
    }
    
    // Check if UnpackSnorm2x16 Emulation for GLSL < 4.1 compiles correctly.
    TEST_F(PackUnpackTest, UnpackUnorm2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   uint u;\n"
            "   vec2 v=unpackUnorm2x16(u);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("vec2 webgl_unpackUnorm2x16_emu(uint u)"));
    }
    
    // Check if PackHalf2x16 Emulation for GLSL < 4.2 compiles correctly.
    TEST_F(PackUnpackTest, PackHalf2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   vec2 v;\n"
            "   uint u=packHalf2x16(v);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("uint webgl_packHalf2x16_emu(vec2 v)"));
    }
    
    // Check if UnpackHalf2x16 Emulation for GLSL < 4.2 compiles correctly.
    TEST_F(PackUnpackTest, UnpackHalf2x16Emulation)
    {
        const std::string &shaderString =
            "#version 300 es\n"
            "precision mediump float;\n"
            "layout(location = 0) out mediump vec4 fragColor;"
            "void main() {\n"
            "   uint u;\n"
            "   vec2 v=unpackHalf2x16(u);\n"
            "   fragColor = vec4(0.0);\n"
            "}\n";
        compile(shaderString);
        ASSERT_TRUE(foundInCode("vec2 webgl_unpackHalf2x16_emu(uint u)"));
    }
    
    } // namespace