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