• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2020 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 #include "test_utils/ANGLETest.h"
8 #include "test_utils/gl_raii.h"
9 
10 using namespace angle;
11 
12 class BlendPackedTest : public ANGLETest
13 {
14   protected:
BlendPackedTest()15     BlendPackedTest()
16     {
17         setWindowWidth(128);
18         setWindowHeight(128);
19         setConfigRedBits(8);
20         setConfigGreenBits(8);
21         setConfigBlueBits(8);
22         setConfigAlphaBits(8);
23     }
24 
25     template <GLenum internalformat, GLuint components>
runTest()26     void runTest()
27     {
28         constexpr char kFs[] =
29             "#version 100\n"
30             "void main(void)\n"
31             "{\n"
32             "    gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\n"
33             "}\n";
34 
35         ANGLE_GL_PROGRAM(program, essl1_shaders::vs::Simple(), kFs);
36         glUseProgram(program);
37 
38         GLFramebuffer framebuffer;
39         glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
40 
41         GLRenderbuffer colorRenderbuffer;
42         glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
43         glRenderbufferStorage(GL_RENDERBUFFER, internalformat, getWindowWidth(), getWindowHeight());
44         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
45                                   colorRenderbuffer);
46 
47         glClearColor(1.0, 1.0, 0.0, 0.0);
48         glClear(GL_COLOR_BUFFER_BIT);
49         ASSERT_GL_NO_ERROR();
50 
51         if (components == 3)
52         {
53             EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::yellow);
54         }
55         else
56         {
57             EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor(255u, 255u, 0, 0));
58         }
59 
60         glEnable(GL_BLEND);
61         glBlendEquation(GL_FUNC_ADD);
62         glBlendFunc(GL_ONE, GL_ONE);
63 
64         drawQuad(program, essl1_shaders::PositionAttrib(), 0.5f);
65         ASSERT_GL_NO_ERROR();
66 
67         EXPECT_PIXEL_COLOR_EQ(0, 0, GLColor::white);
68     }
69 };
70 
71 // Test that blending is applied to attachments with packed formats.
TEST_P(BlendPackedTest,RGB565)72 TEST_P(BlendPackedTest, RGB565)
73 {
74     runTest<GL_RGB565, 3>();
75 }
76 
TEST_P(BlendPackedTest,RGBA4)77 TEST_P(BlendPackedTest, RGBA4)
78 {
79     runTest<GL_RGBA4, 4>();
80 }
81 
TEST_P(BlendPackedTest,RGB5_A1)82 TEST_P(BlendPackedTest, RGB5_A1)
83 {
84     // RGB5_A1 is not color-renderable on NVIDIA Mac, see https://crbug.com/676209.
85     ANGLE_SKIP_TEST_IF(IsNVIDIA() && IsOSX() && IsOpenGL());
86     runTest<GL_RGB5_A1, 4>();
87 }
88 
TEST_P(BlendPackedTest,RGB10_A2)89 TEST_P(BlendPackedTest, RGB10_A2)
90 {
91     ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3);
92     runTest<GL_RGB10_A2, 4>();
93 }
94 
95 // Use this to select which configurations (e.g. which renderer, which GLES major version) these
96 // tests should be run against.
97 ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(BlendPackedTest);
98