12c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang#include "ANGLETest.h"
22c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
32c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang#include <vector>
42c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
52c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Langclass SwizzleTest : public ANGLETest
62c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
72c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Langprotected:
82c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    SwizzleTest()
92c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
102c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setWindowWidth(128);
112c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setWindowHeight(128);
122c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setConfigRedBits(8);
132c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setConfigGreenBits(8);
142c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setConfigBlueBits(8);
152c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setConfigAlphaBits(8);
162c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        setClientVersion(3);
172c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
182c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLenum swizzles[] =
192c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        {
202c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_RED,
212c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_GREEN,
222c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_BLUE,
232c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_ALPHA,
242c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_ZERO,
252c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            GL_ONE,
262c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        };
272c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
282c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        for (int r = 0; r < 6; r++)
292c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        {
302c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            for (int g = 0; g < 6; g++)
312c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            {
322c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                for (int b = 0; b < 6; b++)
332c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                {
342c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                    for (int a = 0; a < 6; a++)
352c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                    {
362c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        swizzlePermutation permutation;
372c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        permutation.swizzleRed = swizzles[r];
382c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        permutation.swizzleGreen = swizzles[g];
392c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        permutation.swizzleBlue = swizzles[b];
402c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        permutation.swizzleAlpha = swizzles[a];
412c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                        mPermutations.push_back(permutation);
422c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                    }
432c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                }
442c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            }
452c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        }
462c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
472c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
482c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    virtual void SetUp()
492c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
502c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        ANGLETest::SetUp();
512c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
522c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        const std::string vertexShaderSource = SHADER_SOURCE
532c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        (
542c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            precision highp float;
552c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            attribute vec4 position;
562c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            varying vec2 texcoord;
572c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
582c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            void main()
592c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            {
602c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                gl_Position = position;
612c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                texcoord = (position.xy * 0.5) + 0.5;
622c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            }
632c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        );
642c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
652c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        const std::string fragmentShaderSource = SHADER_SOURCE
662c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        (
672c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            precision highp float;
682c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            uniform sampler2D tex;
692c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            varying vec2 texcoord;
702c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
712c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            void main()
722c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            {
732c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                gl_FragColor = texture2D(tex, texcoord);
742c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            }
752c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        );
762c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
775599c8f6ffa7239c40069288461e015f9e545ff4Jamie Madill        mProgram = CompileProgram(vertexShaderSource, fragmentShaderSource);
782c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        if (mProgram == 0)
792c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        {
802c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            FAIL() << "shader compilation failed.";
812c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        }
822c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
832c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        mTextureUniformLocation = glGetUniformLocation(mProgram, "tex");
842c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
852c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
862c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
872c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
882c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    virtual void TearDown()
892c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
902c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glDeleteProgram(mProgram);
912c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glDeleteTextures(1, &mTexture);
922c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
932c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        ANGLETest::TearDown();
942c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
952c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
962c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    template <typename T>
972c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    void init2DTexture(GLenum internalFormat, GLenum dataFormat, GLenum dataType, const T* data)
982c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
992c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glGenTextures(1, &mTexture);
1002c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glBindTexture(GL_TEXTURE_2D, mTexture);
1012c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexStorage2D(GL_TEXTURE_2D, 1, internalFormat, 1, 1);
1022c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, dataFormat, dataType, data);
1032c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1042c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1052c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1062c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
1072c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1082c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    void init2DCompressedTexture(GLenum internalFormat, GLsizei width, GLsizei height, GLsizei dataSize, const GLubyte* data)
1092c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
1102c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glGenTextures(1, &mTexture);
1112c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glBindTexture(GL_TEXTURE_2D, mTexture);
1122c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, width, height, 0, dataSize, data);
1132c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1142c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1152c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1162c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
1172c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1182c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLubyte getExpectedValue(GLenum swizzle, GLubyte unswizzled[4])
1192c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
1202c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        switch (swizzle)
1212c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        {
1222c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_RED:   return unswizzled[0];
1232c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_GREEN: return unswizzled[1];
1242c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_BLUE:  return unswizzled[2];
1252c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_ALPHA: return unswizzled[3];
1262c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_ZERO:  return 0;
1272c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          case GL_ONE:   return 255;
1282c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang          default:       return 0;
1292c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        }
1302c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
1312c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1322c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    void runTest2D()
1332c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
1342c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glUseProgram(mProgram);
1352c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glBindTexture(GL_TEXTURE_2D, mTexture);
1362c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glUniform1i(mTextureUniformLocation, 0);
1372c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1382c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, GL_RED);
1392c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, GL_GREEN);
1402c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, GL_BLUE);
1412c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_ALPHA);
1422c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1432c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glClear(GL_COLOR_BUFFER_BIT);
1442c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        drawQuad(mProgram, "position", 0.5f);
1452c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1462c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLubyte unswizzled[4];
1472c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &unswizzled);
1482c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1492c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        for (size_t i = 0; i < mPermutations.size(); i++)
1502c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        {
1512c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            const swizzlePermutation& permutation = mPermutations[i];
1522c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1532c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_R, permutation.swizzleRed);
1542c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_G, permutation.swizzleGreen);
1552c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_B, permutation.swizzleBlue);
1562c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, permutation.swizzleAlpha);
1572c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1582c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            glClear(GL_COLOR_BUFFER_BIT);
1592c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            drawQuad(mProgram, "position", 0.5f);
1602c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1612c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang            EXPECT_PIXEL_EQ(0, 0,
1622c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                            getExpectedValue(permutation.swizzleRed, unswizzled),
1632c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                            getExpectedValue(permutation.swizzleGreen, unswizzled),
1642c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                            getExpectedValue(permutation.swizzleBlue, unswizzled),
1652c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang                            getExpectedValue(permutation.swizzleAlpha, unswizzled));
1662c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        }
1672c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    }
1682c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1692c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLuint mProgram;
1702c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLint mTextureUniformLocation;
1712c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1722c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLuint mTexture;
1732c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
1742c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    struct swizzlePermutation
1752c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    {
1762c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLenum swizzleRed;
1772c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLenum swizzleGreen;
1782c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLenum swizzleBlue;
1792c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang        GLenum swizzleAlpha;
1802c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    };
1812c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    std::vector<swizzlePermutation> mPermutations;
1822c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang};
1832c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
184b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RGBA8_2D)
1852c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
1862c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLubyte data[] = { 1, 64, 128, 200 };
1872c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, data);
1882c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
1892c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
1902c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
191b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RGB8_2D)
1922c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
1932c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLubyte data[] = { 77, 66, 55 };
1942c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RGB8, GL_RGB, GL_UNSIGNED_BYTE, data);
1952c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
1962c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
1972c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
198b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RG8_2D)
1992c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2002c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLubyte data[] = { 11, 99 };
2012c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RG8, GL_RG, GL_UNSIGNED_BYTE, data);
2022c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2032c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2042c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
205b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, R8_2D)
2062c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2072c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLubyte data[] = { 2 };
2082c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture<GLubyte>(GL_R8, GL_RED, GL_UNSIGNED_BYTE, data);
2092c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2102c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2112c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
212b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RGBA32F_2D)
2132c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2142c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLfloat data[] = { 0.25f, 0.5f, 0.75f, 0.8f };
2152c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RGBA32F, GL_RGBA, GL_FLOAT, data);
2162c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2172c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2182c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
219b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RGB32F_2D)
2202c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2212c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLfloat data[] = { 0.1f, 0.2f, 0.3f };
2222c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RGB32F, GL_RGB, GL_FLOAT, data);
2232c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2242c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2252c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
226b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, RG32F_2D)
2272c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2282c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLfloat data[] = { 0.9f, 0.1f  };
2292c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_RG32F, GL_RG, GL_FLOAT, data);
2302c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2312c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2322c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
233b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, R32F_2D)
2342c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2352c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLfloat data[] = { 0.5f };
2362c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_R32F, GL_RED, GL_FLOAT, data);
2372c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2382c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2392c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
240b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, D32F_2D)
2412c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2422c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLfloat data[] = { 0.5f };
2432c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_DEPTH_COMPONENT32F, GL_DEPTH_COMPONENT, GL_FLOAT, data);
2442c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2452c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2462c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
247b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, D16_2D)
2482c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2492c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLushort data[] = { 0xFF };
2502c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, data);
2512c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2522c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2532c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
254b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, D24_2D)
2552c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2562c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    GLuint data[] = { 0xFFFF };
2572c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DTexture(GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, data);
2582c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2592c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
2602c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
2612c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang#include "media/pixel.inl"
2622c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang
263b759a748730b4a0b169ebb588046feb63dc164b5Jamie MadillTEST_F(SwizzleTest, CompressedDXT_2D)
2642c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang{
2652c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    init2DCompressedTexture(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, pixel_0_width, pixel_0_height, pixel_0_size, pixel_0_data);
2662c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang    runTest2D();
2672c254d8f0edea485e16433f7ee84859129d6c3c8Geoff Lang}
268