Edit

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

Branch :

  • Show log

    Commit

  • Author : Geoff Lang
    Date : 2015-07-21 18:56:48
    Hash : 91d56945
    Message : Emulate the pack/unpack functions for unorms. BUG=angleproject:1044 Change-Id: I2cfb792de43d3a6fddd750100c74f948948dc1f6 Reviewed-on: https://chromium-review.googlesource.com/287290 Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Geoff Lang <geofflang@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"
    
    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