xref: /aosp_15_r20/external/angle/src/tests/gl_tests/BlendIntegerTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2020 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/ANGLETest.h"
8*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker class BlendIntegerTest : public ANGLETest<>
13*8975f5c5SAndroid Build Coastguard Worker {
14*8975f5c5SAndroid Build Coastguard Worker   protected:
BlendIntegerTest()15*8975f5c5SAndroid Build Coastguard Worker     BlendIntegerTest()
16*8975f5c5SAndroid Build Coastguard Worker     {
17*8975f5c5SAndroid Build Coastguard Worker         setWindowWidth(128);
18*8975f5c5SAndroid Build Coastguard Worker         setWindowHeight(128);
19*8975f5c5SAndroid Build Coastguard Worker         setConfigRedBits(8);
20*8975f5c5SAndroid Build Coastguard Worker         setConfigGreenBits(8);
21*8975f5c5SAndroid Build Coastguard Worker         setConfigBlueBits(8);
22*8975f5c5SAndroid Build Coastguard Worker         setConfigAlphaBits(8);
23*8975f5c5SAndroid Build Coastguard Worker     }
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker     template <typename T, GLuint components>
compareValue(const T * value,const char * name,GLenum attachment)26*8975f5c5SAndroid Build Coastguard Worker     void compareValue(const T *value, const char *name, GLenum attachment)
27*8975f5c5SAndroid Build Coastguard Worker     {
28*8975f5c5SAndroid Build Coastguard Worker         T pixel[4];
29*8975f5c5SAndroid Build Coastguard Worker         glReadBuffer(attachment);
30*8975f5c5SAndroid Build Coastguard Worker         glReadPixels(0, 0, 1, 1, GL_RGBA_INTEGER,
31*8975f5c5SAndroid Build Coastguard Worker                      std::is_same<T, int32_t>::value ? GL_INT : GL_UNSIGNED_INT, pixel);
32*8975f5c5SAndroid Build Coastguard Worker         for (size_t componentIdx = 0; componentIdx < components; componentIdx++)
33*8975f5c5SAndroid Build Coastguard Worker         {
34*8975f5c5SAndroid Build Coastguard Worker             EXPECT_EQ(value[componentIdx], pixel[componentIdx])
35*8975f5c5SAndroid Build Coastguard Worker                 << " componentIdx=" << componentIdx << std::endl
36*8975f5c5SAndroid Build Coastguard Worker                 << " " << name << "[0]=" << value[0] << " pixel[0]=" << pixel[0] << std::endl
37*8975f5c5SAndroid Build Coastguard Worker                 << " " << name << "[1]=" << value[1] << " pixel[1]=" << pixel[1] << std::endl
38*8975f5c5SAndroid Build Coastguard Worker                 << " " << name << "[2]=" << value[2] << " pixel[2]=" << pixel[2] << std::endl
39*8975f5c5SAndroid Build Coastguard Worker                 << " " << name << "[3]=" << value[3] << " pixel[3]=" << pixel[3];
40*8975f5c5SAndroid Build Coastguard Worker         }
41*8975f5c5SAndroid Build Coastguard Worker     }
42*8975f5c5SAndroid Build Coastguard Worker 
43*8975f5c5SAndroid Build Coastguard Worker     template <GLenum internalformat, GLuint components, bool isSigned>
runTest()44*8975f5c5SAndroid Build Coastguard Worker     void runTest()
45*8975f5c5SAndroid Build Coastguard Worker     {
46*8975f5c5SAndroid Build Coastguard Worker         constexpr char kFsui[] =
47*8975f5c5SAndroid Build Coastguard Worker             "#version 300 es\n"
48*8975f5c5SAndroid Build Coastguard Worker             "out highp uvec4 o_drawBuffer0;\n"
49*8975f5c5SAndroid Build Coastguard Worker             "void main(void)\n"
50*8975f5c5SAndroid Build Coastguard Worker             "{\n"
51*8975f5c5SAndroid Build Coastguard Worker             "    o_drawBuffer0 = uvec4(1, 1, 1, 1);\n"
52*8975f5c5SAndroid Build Coastguard Worker             "}\n";
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker         constexpr char kFssi[] =
55*8975f5c5SAndroid Build Coastguard Worker             "#version 300 es\n"
56*8975f5c5SAndroid Build Coastguard Worker             "out highp ivec4 o_drawBuffer0;\n"
57*8975f5c5SAndroid Build Coastguard Worker             "void main(void)\n"
58*8975f5c5SAndroid Build Coastguard Worker             "{\n"
59*8975f5c5SAndroid Build Coastguard Worker             "    o_drawBuffer0 = ivec4(-1, -1, -1, -1);\n"
60*8975f5c5SAndroid Build Coastguard Worker             "}\n";
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker         ANGLE_GL_PROGRAM(program, essl3_shaders::vs::Simple(), isSigned ? kFssi : kFsui);
63*8975f5c5SAndroid Build Coastguard Worker         glUseProgram(program);
64*8975f5c5SAndroid Build Coastguard Worker 
65*8975f5c5SAndroid Build Coastguard Worker         GLFramebuffer framebuffer;
66*8975f5c5SAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
67*8975f5c5SAndroid Build Coastguard Worker 
68*8975f5c5SAndroid Build Coastguard Worker         GLRenderbuffer colorRenderbuffer;
69*8975f5c5SAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer);
70*8975f5c5SAndroid Build Coastguard Worker         glRenderbufferStorage(GL_RENDERBUFFER, internalformat, getWindowWidth(), getWindowHeight());
71*8975f5c5SAndroid Build Coastguard Worker         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
72*8975f5c5SAndroid Build Coastguard Worker                                   colorRenderbuffer);
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker         if (isSigned)
75*8975f5c5SAndroid Build Coastguard Worker         {
76*8975f5c5SAndroid Build Coastguard Worker             const int32_t clearValueSigned[4] = {-128, -128, -128, -128};
77*8975f5c5SAndroid Build Coastguard Worker             glClearBufferiv(GL_COLOR, 0, clearValueSigned);
78*8975f5c5SAndroid Build Coastguard Worker             ASSERT_GL_NO_ERROR();
79*8975f5c5SAndroid Build Coastguard Worker             compareValue<int32_t, components>(clearValueSigned, "clearValueSigned",
80*8975f5c5SAndroid Build Coastguard Worker                                               GL_COLOR_ATTACHMENT0);
81*8975f5c5SAndroid Build Coastguard Worker         }
82*8975f5c5SAndroid Build Coastguard Worker         else
83*8975f5c5SAndroid Build Coastguard Worker         {
84*8975f5c5SAndroid Build Coastguard Worker             const uint32_t clearValueUnsigned[4] = {127, 127, 127, 3};
85*8975f5c5SAndroid Build Coastguard Worker             glClearBufferuiv(GL_COLOR, 0, clearValueUnsigned);
86*8975f5c5SAndroid Build Coastguard Worker             ASSERT_GL_NO_ERROR();
87*8975f5c5SAndroid Build Coastguard Worker             compareValue<uint32_t, components>(clearValueUnsigned, "clearValueUnsigned",
88*8975f5c5SAndroid Build Coastguard Worker                                                GL_COLOR_ATTACHMENT0);
89*8975f5c5SAndroid Build Coastguard Worker         }
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker         glEnable(GL_BLEND);
92*8975f5c5SAndroid Build Coastguard Worker         glBlendEquation(GL_FUNC_ADD);
93*8975f5c5SAndroid Build Coastguard Worker         glBlendFunc(GL_ONE, GL_ONE);
94*8975f5c5SAndroid Build Coastguard Worker 
95*8975f5c5SAndroid Build Coastguard Worker         drawQuad(program, essl3_shaders::PositionAttrib(), 0.5f);
96*8975f5c5SAndroid Build Coastguard Worker 
97*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
98*8975f5c5SAndroid Build Coastguard Worker 
99*8975f5c5SAndroid Build Coastguard Worker         // Enabled blending must be ignored for integer color attachment.
100*8975f5c5SAndroid Build Coastguard Worker         if (isSigned)
101*8975f5c5SAndroid Build Coastguard Worker         {
102*8975f5c5SAndroid Build Coastguard Worker             const int32_t colorValueSigned[4] = {-1, -1, -1, -1};
103*8975f5c5SAndroid Build Coastguard Worker             compareValue<int32_t, components>(colorValueSigned, "colorValueSigned",
104*8975f5c5SAndroid Build Coastguard Worker                                               GL_COLOR_ATTACHMENT0);
105*8975f5c5SAndroid Build Coastguard Worker         }
106*8975f5c5SAndroid Build Coastguard Worker         else
107*8975f5c5SAndroid Build Coastguard Worker         {
108*8975f5c5SAndroid Build Coastguard Worker             const uint32_t colorValueUnsigned[4] = {1, 1, 1, 1};
109*8975f5c5SAndroid Build Coastguard Worker             compareValue<uint32_t, components>(colorValueUnsigned, "colorValueUnsigned",
110*8975f5c5SAndroid Build Coastguard Worker                                                GL_COLOR_ATTACHMENT0);
111*8975f5c5SAndroid Build Coastguard Worker         }
112*8975f5c5SAndroid Build Coastguard Worker     }
113*8975f5c5SAndroid Build Coastguard Worker 
114*8975f5c5SAndroid Build Coastguard Worker     template <bool isSigned>
runTestMRT()115*8975f5c5SAndroid Build Coastguard Worker     void runTestMRT()
116*8975f5c5SAndroid Build Coastguard Worker     {
117*8975f5c5SAndroid Build Coastguard Worker         constexpr char kFragmentSigned[] = R"(#version 300 es
118*8975f5c5SAndroid Build Coastguard Worker             layout(location = 1) out highp vec4 o_drawBuffer1;
119*8975f5c5SAndroid Build Coastguard Worker             layout(location = 2) out highp ivec4 o_drawBuffer2;
120*8975f5c5SAndroid Build Coastguard Worker             layout(location = 3) out highp vec4 o_drawBuffer3;
121*8975f5c5SAndroid Build Coastguard Worker             void main(void)
122*8975f5c5SAndroid Build Coastguard Worker             {
123*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer1 = vec4(0, 0, 0, 0);
124*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer2 = ivec4(0, 0, 0, 0);
125*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer3 = vec4(0, 0, 0, 0);
126*8975f5c5SAndroid Build Coastguard Worker             })";
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker         constexpr char kFragmentUnsigned[] = R"(#version 300 es
129*8975f5c5SAndroid Build Coastguard Worker             layout(location = 1) out highp vec4 o_drawBuffer1;
130*8975f5c5SAndroid Build Coastguard Worker             layout(location = 2) out highp uvec4 o_drawBuffer2;
131*8975f5c5SAndroid Build Coastguard Worker             layout(location = 3) out highp vec4 o_drawBuffer3;
132*8975f5c5SAndroid Build Coastguard Worker             void main(void)
133*8975f5c5SAndroid Build Coastguard Worker             {
134*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer1 = vec4(0, 0, 0, 0);
135*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer2 = uvec4(0, 0, 0, 0);
136*8975f5c5SAndroid Build Coastguard Worker                 o_drawBuffer3 = vec4(0, 0, 0, 0);
137*8975f5c5SAndroid Build Coastguard Worker             })";
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker         ANGLE_GL_PROGRAM(program, essl3_shaders::vs::Simple(),
140*8975f5c5SAndroid Build Coastguard Worker                          isSigned ? kFragmentSigned : kFragmentUnsigned);
141*8975f5c5SAndroid Build Coastguard Worker         glUseProgram(program);
142*8975f5c5SAndroid Build Coastguard Worker 
143*8975f5c5SAndroid Build Coastguard Worker         GLFramebuffer framebuffer;
144*8975f5c5SAndroid Build Coastguard Worker         glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
145*8975f5c5SAndroid Build Coastguard Worker 
146*8975f5c5SAndroid Build Coastguard Worker         GLRenderbuffer colorRenderbuffer1;
147*8975f5c5SAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer1);
148*8975f5c5SAndroid Build Coastguard Worker         glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, getWindowWidth(), getWindowHeight());
149*8975f5c5SAndroid Build Coastguard Worker         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_RENDERBUFFER,
150*8975f5c5SAndroid Build Coastguard Worker                                   colorRenderbuffer1);
151*8975f5c5SAndroid Build Coastguard Worker 
152*8975f5c5SAndroid Build Coastguard Worker         GLRenderbuffer colorRenderbuffer2;
153*8975f5c5SAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer2);
154*8975f5c5SAndroid Build Coastguard Worker         glRenderbufferStorage(GL_RENDERBUFFER, isSigned ? GL_RGBA32I : GL_RGBA32UI,
155*8975f5c5SAndroid Build Coastguard Worker                               getWindowWidth(), getWindowHeight());
156*8975f5c5SAndroid Build Coastguard Worker         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_RENDERBUFFER,
157*8975f5c5SAndroid Build Coastguard Worker                                   colorRenderbuffer2);
158*8975f5c5SAndroid Build Coastguard Worker 
159*8975f5c5SAndroid Build Coastguard Worker         GLRenderbuffer colorRenderbuffer3;
160*8975f5c5SAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer3);
161*8975f5c5SAndroid Build Coastguard Worker         glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, getWindowWidth(), getWindowHeight());
162*8975f5c5SAndroid Build Coastguard Worker         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_RENDERBUFFER,
163*8975f5c5SAndroid Build Coastguard Worker                                   colorRenderbuffer3);
164*8975f5c5SAndroid Build Coastguard Worker 
165*8975f5c5SAndroid Build Coastguard Worker         GLenum drawBuffers[] = {GL_NONE, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2,
166*8975f5c5SAndroid Build Coastguard Worker                                 GL_COLOR_ATTACHMENT3};
167*8975f5c5SAndroid Build Coastguard Worker         glDrawBuffers(4, drawBuffers);
168*8975f5c5SAndroid Build Coastguard Worker 
169*8975f5c5SAndroid Build Coastguard Worker         if (isSigned)
170*8975f5c5SAndroid Build Coastguard Worker         {
171*8975f5c5SAndroid Build Coastguard Worker             const int32_t clearValue[4] = {-1, 2, -3, 4};
172*8975f5c5SAndroid Build Coastguard Worker             glClearBufferiv(GL_COLOR, 2, clearValue);
173*8975f5c5SAndroid Build Coastguard Worker             ASSERT_GL_NO_ERROR();
174*8975f5c5SAndroid Build Coastguard Worker             compareValue<int32_t, 4>(clearValue, "clearValue", GL_COLOR_ATTACHMENT2);
175*8975f5c5SAndroid Build Coastguard Worker         }
176*8975f5c5SAndroid Build Coastguard Worker         else
177*8975f5c5SAndroid Build Coastguard Worker         {
178*8975f5c5SAndroid Build Coastguard Worker             const uint32_t clearValue[4] = {1, 2, 3, 4};
179*8975f5c5SAndroid Build Coastguard Worker             glClearBufferuiv(GL_COLOR, 2, clearValue);
180*8975f5c5SAndroid Build Coastguard Worker             ASSERT_GL_NO_ERROR();
181*8975f5c5SAndroid Build Coastguard Worker             compareValue<uint32_t, 4>(clearValue, "clearValue", GL_COLOR_ATTACHMENT2);
182*8975f5c5SAndroid Build Coastguard Worker         }
183*8975f5c5SAndroid Build Coastguard Worker 
184*8975f5c5SAndroid Build Coastguard Worker         glBlendEquation(GL_MAX);
185*8975f5c5SAndroid Build Coastguard Worker         glEnable(GL_BLEND);
186*8975f5c5SAndroid Build Coastguard Worker 
187*8975f5c5SAndroid Build Coastguard Worker         drawQuad(program, essl3_shaders::PositionAttrib(), 0.5f);
188*8975f5c5SAndroid Build Coastguard Worker         ASSERT_GL_NO_ERROR();
189*8975f5c5SAndroid Build Coastguard Worker 
190*8975f5c5SAndroid Build Coastguard Worker         if (isSigned)
191*8975f5c5SAndroid Build Coastguard Worker         {
192*8975f5c5SAndroid Build Coastguard Worker             const int32_t drawValue[4] = {0, 0, 0, 0};
193*8975f5c5SAndroid Build Coastguard Worker             compareValue<int32_t, 4>(drawValue, "drawValue", GL_COLOR_ATTACHMENT2);
194*8975f5c5SAndroid Build Coastguard Worker         }
195*8975f5c5SAndroid Build Coastguard Worker         else
196*8975f5c5SAndroid Build Coastguard Worker         {
197*8975f5c5SAndroid Build Coastguard Worker             const uint32_t drawValue[4] = {0, 0, 0, 0};
198*8975f5c5SAndroid Build Coastguard Worker             compareValue<uint32_t, 4>(drawValue, "drawValue", GL_COLOR_ATTACHMENT2);
199*8975f5c5SAndroid Build Coastguard Worker         }
200*8975f5c5SAndroid Build Coastguard Worker     }
201*8975f5c5SAndroid Build Coastguard Worker };
202*8975f5c5SAndroid Build Coastguard Worker 
203*8975f5c5SAndroid Build Coastguard Worker // Test that blending is not applied to signed integer attachments.
TEST_P(BlendIntegerTest,R8I)204*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R8I)
205*8975f5c5SAndroid Build Coastguard Worker {
206*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R8I, 1, true>();
207*8975f5c5SAndroid Build Coastguard Worker }
208*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,R16I)209*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R16I)
210*8975f5c5SAndroid Build Coastguard Worker {
211*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R16I, 1, true>();
212*8975f5c5SAndroid Build Coastguard Worker }
213*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,R32I)214*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R32I)
215*8975f5c5SAndroid Build Coastguard Worker {
216*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R32I, 1, true>();
217*8975f5c5SAndroid Build Coastguard Worker }
218*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG8I)219*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG8I)
220*8975f5c5SAndroid Build Coastguard Worker {
221*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG8I, 2, true>();
222*8975f5c5SAndroid Build Coastguard Worker }
223*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG16I)224*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG16I)
225*8975f5c5SAndroid Build Coastguard Worker {
226*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG16I, 2, true>();
227*8975f5c5SAndroid Build Coastguard Worker }
228*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG32I)229*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG32I)
230*8975f5c5SAndroid Build Coastguard Worker {
231*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG32I, 2, true>();
232*8975f5c5SAndroid Build Coastguard Worker }
233*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA8I)234*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA8I)
235*8975f5c5SAndroid Build Coastguard Worker {
236*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA8I, 4, true>();
237*8975f5c5SAndroid Build Coastguard Worker }
238*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA16I)239*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA16I)
240*8975f5c5SAndroid Build Coastguard Worker {
241*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA16I, 4, true>();
242*8975f5c5SAndroid Build Coastguard Worker }
243*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA32I)244*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA32I)
245*8975f5c5SAndroid Build Coastguard Worker {
246*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA32I, 4, true>();
247*8975f5c5SAndroid Build Coastguard Worker }
248*8975f5c5SAndroid Build Coastguard Worker 
249*8975f5c5SAndroid Build Coastguard Worker // Test that blending is not applied to unsigned integer attachments.
TEST_P(BlendIntegerTest,R8UI)250*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R8UI)
251*8975f5c5SAndroid Build Coastguard Worker {
252*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R8UI, 1, false>();
253*8975f5c5SAndroid Build Coastguard Worker }
254*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,R16UI)255*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R16UI)
256*8975f5c5SAndroid Build Coastguard Worker {
257*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R16UI, 1, false>();
258*8975f5c5SAndroid Build Coastguard Worker }
259*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,R32UI)260*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, R32UI)
261*8975f5c5SAndroid Build Coastguard Worker {
262*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_R32UI, 1, false>();
263*8975f5c5SAndroid Build Coastguard Worker }
264*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG8UI)265*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG8UI)
266*8975f5c5SAndroid Build Coastguard Worker {
267*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG8UI, 2, false>();
268*8975f5c5SAndroid Build Coastguard Worker }
269*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG16UI)270*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG16UI)
271*8975f5c5SAndroid Build Coastguard Worker {
272*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG16UI, 2, false>();
273*8975f5c5SAndroid Build Coastguard Worker }
274*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RG32UI)275*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RG32UI)
276*8975f5c5SAndroid Build Coastguard Worker {
277*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RG32UI, 2, false>();
278*8975f5c5SAndroid Build Coastguard Worker }
279*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA8UI)280*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA8UI)
281*8975f5c5SAndroid Build Coastguard Worker {
282*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA8UI, 4, false>();
283*8975f5c5SAndroid Build Coastguard Worker }
284*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA16UI)285*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA16UI)
286*8975f5c5SAndroid Build Coastguard Worker {
287*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA16UI, 4, false>();
288*8975f5c5SAndroid Build Coastguard Worker }
289*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGBA32UI)290*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGBA32UI)
291*8975f5c5SAndroid Build Coastguard Worker {
292*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGBA32UI, 4, false>();
293*8975f5c5SAndroid Build Coastguard Worker }
294*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlendIntegerTest,RGB10_A2UI)295*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, RGB10_A2UI)
296*8975f5c5SAndroid Build Coastguard Worker {
297*8975f5c5SAndroid Build Coastguard Worker     runTest<GL_RGB10_A2UI, 4, false>();
298*8975f5c5SAndroid Build Coastguard Worker }
299*8975f5c5SAndroid Build Coastguard Worker 
300*8975f5c5SAndroid Build Coastguard Worker // Test that blending does not cancel draws on signed integer attachments.
TEST_P(BlendIntegerTest,MRTSigned)301*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, MRTSigned)
302*8975f5c5SAndroid Build Coastguard Worker {
303*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263640
304*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsVulkan() && IsWindows() && IsIntel());
305*8975f5c5SAndroid Build Coastguard Worker 
306*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263688
307*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsOpenGL() && IsMac() && IsIntel());
308*8975f5c5SAndroid Build Coastguard Worker 
309*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263689
310*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsVulkan() && IsAdreno());
311*8975f5c5SAndroid Build Coastguard Worker 
312*8975f5c5SAndroid Build Coastguard Worker     runTestMRT<true>();
313*8975f5c5SAndroid Build Coastguard Worker }
314*8975f5c5SAndroid Build Coastguard Worker 
315*8975f5c5SAndroid Build Coastguard Worker // Test that blending does not cancel draws on unsigned integer attachments.
TEST_P(BlendIntegerTest,MRTUnsigned)316*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlendIntegerTest, MRTUnsigned)
317*8975f5c5SAndroid Build Coastguard Worker {
318*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263640
319*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsVulkan() && IsWindows() && IsIntel());
320*8975f5c5SAndroid Build Coastguard Worker 
321*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263688
322*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsOpenGL() && IsMac() && IsIntel());
323*8975f5c5SAndroid Build Coastguard Worker 
324*8975f5c5SAndroid Build Coastguard Worker     // http://anglebug.com/42263689
325*8975f5c5SAndroid Build Coastguard Worker     ANGLE_SKIP_TEST_IF(IsVulkan() && IsAdreno());
326*8975f5c5SAndroid Build Coastguard Worker 
327*8975f5c5SAndroid Build Coastguard Worker     runTestMRT<false>();
328*8975f5c5SAndroid Build Coastguard Worker }
329*8975f5c5SAndroid Build Coastguard Worker 
330*8975f5c5SAndroid Build Coastguard Worker // Use this to select which configurations (e.g. which renderer, which GLES major version) these
331*8975f5c5SAndroid Build Coastguard Worker // tests should be run against.
332*8975f5c5SAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BlendIntegerTest);
333*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST_ES3(BlendIntegerTest);
334