blob: 0de5310ba144f265d834f78217164d80048d885b [file] [log] [blame]
//
// Copyright 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 "GLSLANG/ShaderLang.h"
#include "angle_gl.h"
#include "gtest/gtest.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 =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
vec2 v;
uint u = packSnorm2x16(v);
fragColor = vec4(u);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("uint packSnorm2x16_emu(vec2 v)"));
}
// Check if UnpackSnorm2x16 Emulation for GLSL < 4.2 compile correctly.
TEST_F(PackUnpackTest, UnpackSnorm2x16Emulation)
{
const std::string &shaderString =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
uint u;
vec2 v = unpackSnorm2x16(u);
fragColor = vec4(v, 0.0, 0.0);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("vec2 unpackSnorm2x16_emu(uint u)"));
}
// Check if PackUnorm2x16 Emulation for GLSL < 4.1 compiles correctly.
TEST_F(PackUnpackTest, PackUnorm2x16Emulation)
{
const std::string &shaderString =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
vec2 v;
uint u = packUnorm2x16(v);
fragColor = vec4(u);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("uint packUnorm2x16_emu(vec2 v)"));
}
// Check if UnpackSnorm2x16 Emulation for GLSL < 4.1 compiles correctly.
TEST_F(PackUnpackTest, UnpackUnorm2x16Emulation)
{
const std::string &shaderString =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
uint u;
vec2 v = unpackUnorm2x16(u);
fragColor = vec4(v, 0.0, 0.0);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("vec2 unpackUnorm2x16_emu(uint u)"));
}
// Check if PackHalf2x16 Emulation for GLSL < 4.2 compiles correctly.
TEST_F(PackUnpackTest, PackHalf2x16Emulation)
{
const std::string &shaderString =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
vec2 v;
uint u = packHalf2x16(v);
fragColor = vec4(u);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("uint packHalf2x16_emu(vec2 v)"));
}
// Check if UnpackHalf2x16 Emulation for GLSL < 4.2 compiles correctly.
TEST_F(PackUnpackTest, UnpackHalf2x16Emulation)
{
const std::string &shaderString =
R"(#version 300 es
precision mediump float;
layout(location = 0) out mediump vec4 fragColor;
void main()
{
uint u;
vec2 v = unpackHalf2x16(u);
fragColor = vec4(v, 0.0, 0.0);
})";
compile(shaderString);
ASSERT_TRUE(foundInCode("vec2 unpackHalf2x16_emu(uint u)"));
}
} // namespace