xref: /aosp_15_r20/external/angle/src/tests/perf_tests/BlitFramebufferPerf.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2017 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 // BlitFramebufferPerf:
7*8975f5c5SAndroid Build Coastguard Worker //   Performance tests for glBlitFramebuffer in ES3. Includes tests for
8*8975f5c5SAndroid Build Coastguard Worker //   color, depth, and stencil blit, as well as the mutlisample versions.
9*8975f5c5SAndroid Build Coastguard Worker //   The test works by clearing a framebuffer, then blitting it to a second.
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "ANGLEPerfTest.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "util/gles_loader_autogen.h"
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker namespace
16*8975f5c5SAndroid Build Coastguard Worker {
17*8975f5c5SAndroid Build Coastguard Worker constexpr unsigned int kIterationsPerStep = 5;
18*8975f5c5SAndroid Build Coastguard Worker 
19*8975f5c5SAndroid Build Coastguard Worker enum class BufferType
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker     COLOR,
22*8975f5c5SAndroid Build Coastguard Worker     DEPTH,
23*8975f5c5SAndroid Build Coastguard Worker     STENCIL,
24*8975f5c5SAndroid Build Coastguard Worker     DEPTH_STENCIL
25*8975f5c5SAndroid Build Coastguard Worker };
26*8975f5c5SAndroid Build Coastguard Worker 
BufferTypeString(BufferType type)27*8975f5c5SAndroid Build Coastguard Worker const char *BufferTypeString(BufferType type)
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker     switch (type)
30*8975f5c5SAndroid Build Coastguard Worker     {
31*8975f5c5SAndroid Build Coastguard Worker         case BufferType::COLOR:
32*8975f5c5SAndroid Build Coastguard Worker             return "color";
33*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH:
34*8975f5c5SAndroid Build Coastguard Worker             return "depth";
35*8975f5c5SAndroid Build Coastguard Worker         case BufferType::STENCIL:
36*8975f5c5SAndroid Build Coastguard Worker             return "stencil";
37*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH_STENCIL:
38*8975f5c5SAndroid Build Coastguard Worker             return "depth_stencil";
39*8975f5c5SAndroid Build Coastguard Worker         default:
40*8975f5c5SAndroid Build Coastguard Worker             return "error";
41*8975f5c5SAndroid Build Coastguard Worker     }
42*8975f5c5SAndroid Build Coastguard Worker }
43*8975f5c5SAndroid Build Coastguard Worker 
BufferTypeMask(BufferType type)44*8975f5c5SAndroid Build Coastguard Worker GLbitfield BufferTypeMask(BufferType type)
45*8975f5c5SAndroid Build Coastguard Worker {
46*8975f5c5SAndroid Build Coastguard Worker     switch (type)
47*8975f5c5SAndroid Build Coastguard Worker     {
48*8975f5c5SAndroid Build Coastguard Worker         case BufferType::COLOR:
49*8975f5c5SAndroid Build Coastguard Worker             return GL_COLOR_BUFFER_BIT;
50*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH:
51*8975f5c5SAndroid Build Coastguard Worker             return GL_DEPTH_BUFFER_BIT;
52*8975f5c5SAndroid Build Coastguard Worker         case BufferType::STENCIL:
53*8975f5c5SAndroid Build Coastguard Worker             return GL_STENCIL_BUFFER_BIT;
54*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH_STENCIL:
55*8975f5c5SAndroid Build Coastguard Worker             return (GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
56*8975f5c5SAndroid Build Coastguard Worker         default:
57*8975f5c5SAndroid Build Coastguard Worker             return 0;
58*8975f5c5SAndroid Build Coastguard Worker     }
59*8975f5c5SAndroid Build Coastguard Worker }
60*8975f5c5SAndroid Build Coastguard Worker 
BufferTypeFormat(BufferType type)61*8975f5c5SAndroid Build Coastguard Worker GLenum BufferTypeFormat(BufferType type)
62*8975f5c5SAndroid Build Coastguard Worker {
63*8975f5c5SAndroid Build Coastguard Worker     switch (type)
64*8975f5c5SAndroid Build Coastguard Worker     {
65*8975f5c5SAndroid Build Coastguard Worker         case BufferType::COLOR:
66*8975f5c5SAndroid Build Coastguard Worker             return GL_RGBA8;
67*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH:
68*8975f5c5SAndroid Build Coastguard Worker             return GL_DEPTH_COMPONENT24;
69*8975f5c5SAndroid Build Coastguard Worker         case BufferType::STENCIL:
70*8975f5c5SAndroid Build Coastguard Worker             return GL_STENCIL_INDEX8;
71*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH_STENCIL:
72*8975f5c5SAndroid Build Coastguard Worker             return GL_DEPTH24_STENCIL8;
73*8975f5c5SAndroid Build Coastguard Worker         default:
74*8975f5c5SAndroid Build Coastguard Worker             return GL_NONE;
75*8975f5c5SAndroid Build Coastguard Worker     }
76*8975f5c5SAndroid Build Coastguard Worker }
77*8975f5c5SAndroid Build Coastguard Worker 
BufferTypeAttachment(BufferType type)78*8975f5c5SAndroid Build Coastguard Worker GLenum BufferTypeAttachment(BufferType type)
79*8975f5c5SAndroid Build Coastguard Worker {
80*8975f5c5SAndroid Build Coastguard Worker     switch (type)
81*8975f5c5SAndroid Build Coastguard Worker     {
82*8975f5c5SAndroid Build Coastguard Worker         case BufferType::COLOR:
83*8975f5c5SAndroid Build Coastguard Worker             return GL_COLOR_ATTACHMENT0;
84*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH:
85*8975f5c5SAndroid Build Coastguard Worker             return GL_DEPTH_ATTACHMENT;
86*8975f5c5SAndroid Build Coastguard Worker         case BufferType::STENCIL:
87*8975f5c5SAndroid Build Coastguard Worker             return GL_STENCIL_ATTACHMENT;
88*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH_STENCIL:
89*8975f5c5SAndroid Build Coastguard Worker             return GL_DEPTH_STENCIL_ATTACHMENT;
90*8975f5c5SAndroid Build Coastguard Worker         default:
91*8975f5c5SAndroid Build Coastguard Worker             return GL_NONE;
92*8975f5c5SAndroid Build Coastguard Worker     }
93*8975f5c5SAndroid Build Coastguard Worker }
94*8975f5c5SAndroid Build Coastguard Worker 
95*8975f5c5SAndroid Build Coastguard Worker struct BlitFramebufferParams final : public RenderTestParams
96*8975f5c5SAndroid Build Coastguard Worker {
BlitFramebufferParams__anon1971e1b20111::BlitFramebufferParams97*8975f5c5SAndroid Build Coastguard Worker     BlitFramebufferParams()
98*8975f5c5SAndroid Build Coastguard Worker     {
99*8975f5c5SAndroid Build Coastguard Worker         iterationsPerStep = kIterationsPerStep;
100*8975f5c5SAndroid Build Coastguard Worker         majorVersion      = 3;
101*8975f5c5SAndroid Build Coastguard Worker         minorVersion      = 0;
102*8975f5c5SAndroid Build Coastguard Worker         windowWidth       = 256;
103*8975f5c5SAndroid Build Coastguard Worker         windowHeight      = 256;
104*8975f5c5SAndroid Build Coastguard Worker     }
105*8975f5c5SAndroid Build Coastguard Worker 
story__anon1971e1b20111::BlitFramebufferParams106*8975f5c5SAndroid Build Coastguard Worker     std::string story() const override
107*8975f5c5SAndroid Build Coastguard Worker     {
108*8975f5c5SAndroid Build Coastguard Worker         std::stringstream storyStr;
109*8975f5c5SAndroid Build Coastguard Worker         storyStr << RenderTestParams::story();
110*8975f5c5SAndroid Build Coastguard Worker         storyStr << "_" << BufferTypeString(type);
111*8975f5c5SAndroid Build Coastguard Worker         if (samples > 1)
112*8975f5c5SAndroid Build Coastguard Worker         {
113*8975f5c5SAndroid Build Coastguard Worker             storyStr << "_" << samples << "_samples";
114*8975f5c5SAndroid Build Coastguard Worker         }
115*8975f5c5SAndroid Build Coastguard Worker         return storyStr.str();
116*8975f5c5SAndroid Build Coastguard Worker     }
117*8975f5c5SAndroid Build Coastguard Worker 
118*8975f5c5SAndroid Build Coastguard Worker     BufferType type              = BufferType::COLOR;
119*8975f5c5SAndroid Build Coastguard Worker     unsigned int framebufferSize = 512;
120*8975f5c5SAndroid Build Coastguard Worker     unsigned int samples         = 0;
121*8975f5c5SAndroid Build Coastguard Worker };
122*8975f5c5SAndroid Build Coastguard Worker 
operator <<(std::ostream & os,const BlitFramebufferParams & params)123*8975f5c5SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &os, const BlitFramebufferParams &params)
124*8975f5c5SAndroid Build Coastguard Worker {
125*8975f5c5SAndroid Build Coastguard Worker     os << params.backendAndStory().substr(1);
126*8975f5c5SAndroid Build Coastguard Worker     return os;
127*8975f5c5SAndroid Build Coastguard Worker }
128*8975f5c5SAndroid Build Coastguard Worker 
129*8975f5c5SAndroid Build Coastguard Worker class BlitFramebufferPerf : public ANGLERenderTest,
130*8975f5c5SAndroid Build Coastguard Worker                             public ::testing::WithParamInterface<BlitFramebufferParams>
131*8975f5c5SAndroid Build Coastguard Worker {
132*8975f5c5SAndroid Build Coastguard Worker   public:
BlitFramebufferPerf()133*8975f5c5SAndroid Build Coastguard Worker     BlitFramebufferPerf() : ANGLERenderTest("BlitFramebufferPerf", GetParam()) {}
134*8975f5c5SAndroid Build Coastguard Worker 
135*8975f5c5SAndroid Build Coastguard Worker     void initializeBenchmark() override;
136*8975f5c5SAndroid Build Coastguard Worker     void destroyBenchmark() override;
137*8975f5c5SAndroid Build Coastguard Worker     void drawBenchmark() override;
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker   private:
140*8975f5c5SAndroid Build Coastguard Worker     GLuint mReadFramebuffer  = 0;
141*8975f5c5SAndroid Build Coastguard Worker     GLuint mReadRenderbuffer = 0;
142*8975f5c5SAndroid Build Coastguard Worker     GLuint mDrawFramebuffer  = 0;
143*8975f5c5SAndroid Build Coastguard Worker     GLuint mDrawRenderbuffer = 0;
144*8975f5c5SAndroid Build Coastguard Worker };
145*8975f5c5SAndroid Build Coastguard Worker 
initializeBenchmark()146*8975f5c5SAndroid Build Coastguard Worker void BlitFramebufferPerf::initializeBenchmark()
147*8975f5c5SAndroid Build Coastguard Worker {
148*8975f5c5SAndroid Build Coastguard Worker     const auto &param = GetParam();
149*8975f5c5SAndroid Build Coastguard Worker 
150*8975f5c5SAndroid Build Coastguard Worker     glGenFramebuffers(1, &mReadFramebuffer);
151*8975f5c5SAndroid Build Coastguard Worker     glGenFramebuffers(1, &mDrawFramebuffer);
152*8975f5c5SAndroid Build Coastguard Worker 
153*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_READ_FRAMEBUFFER, mReadFramebuffer);
154*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawFramebuffer);
155*8975f5c5SAndroid Build Coastguard Worker 
156*8975f5c5SAndroid Build Coastguard Worker     // Create source and destination Renderbuffers.
157*8975f5c5SAndroid Build Coastguard Worker     glGenRenderbuffers(1, &mReadRenderbuffer);
158*8975f5c5SAndroid Build Coastguard Worker     glGenRenderbuffers(1, &mDrawRenderbuffer);
159*8975f5c5SAndroid Build Coastguard Worker 
160*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
161*8975f5c5SAndroid Build Coastguard Worker 
162*8975f5c5SAndroid Build Coastguard Worker     GLenum format     = BufferTypeFormat(param.type);
163*8975f5c5SAndroid Build Coastguard Worker     GLuint size       = param.framebufferSize;
164*8975f5c5SAndroid Build Coastguard Worker     GLenum attachment = BufferTypeAttachment(param.type);
165*8975f5c5SAndroid Build Coastguard Worker 
166*8975f5c5SAndroid Build Coastguard Worker     glBindRenderbuffer(GL_RENDERBUFFER, mReadRenderbuffer);
167*8975f5c5SAndroid Build Coastguard Worker     glRenderbufferStorageMultisample(GL_RENDERBUFFER, param.samples, format, size, size);
168*8975f5c5SAndroid Build Coastguard Worker     glFramebufferRenderbuffer(GL_READ_FRAMEBUFFER, attachment, GL_RENDERBUFFER, mReadRenderbuffer);
169*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_READ_FRAMEBUFFER));
170*8975f5c5SAndroid Build Coastguard Worker 
171*8975f5c5SAndroid Build Coastguard Worker     glBindRenderbuffer(GL_RENDERBUFFER, mDrawRenderbuffer);
172*8975f5c5SAndroid Build Coastguard Worker     glRenderbufferStorageMultisample(GL_RENDERBUFFER, 0, format, size, size);
173*8975f5c5SAndroid Build Coastguard Worker     glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, attachment, GL_RENDERBUFFER, mDrawRenderbuffer);
174*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GLENUM_EQ(GL_FRAMEBUFFER_COMPLETE, glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER));
175*8975f5c5SAndroid Build Coastguard Worker 
176*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
177*8975f5c5SAndroid Build Coastguard Worker }
178*8975f5c5SAndroid Build Coastguard Worker 
destroyBenchmark()179*8975f5c5SAndroid Build Coastguard Worker void BlitFramebufferPerf::destroyBenchmark()
180*8975f5c5SAndroid Build Coastguard Worker {
181*8975f5c5SAndroid Build Coastguard Worker     glDeleteFramebuffers(1, &mReadFramebuffer);
182*8975f5c5SAndroid Build Coastguard Worker     glDeleteRenderbuffers(1, &mReadRenderbuffer);
183*8975f5c5SAndroid Build Coastguard Worker     glDeleteFramebuffers(1, &mDrawFramebuffer);
184*8975f5c5SAndroid Build Coastguard Worker     glDeleteRenderbuffers(1, &mDrawRenderbuffer);
185*8975f5c5SAndroid Build Coastguard Worker }
186*8975f5c5SAndroid Build Coastguard Worker 
drawBenchmark()187*8975f5c5SAndroid Build Coastguard Worker void BlitFramebufferPerf::drawBenchmark()
188*8975f5c5SAndroid Build Coastguard Worker {
189*8975f5c5SAndroid Build Coastguard Worker     const auto &param = GetParam();
190*8975f5c5SAndroid Build Coastguard Worker     auto size         = param.framebufferSize;
191*8975f5c5SAndroid Build Coastguard Worker     auto mask         = BufferTypeMask(param.type);
192*8975f5c5SAndroid Build Coastguard Worker 
193*8975f5c5SAndroid Build Coastguard Worker     // We don't read from the draw buffer (ie rendering) to simplify the test, but we could.
194*8975f5c5SAndroid Build Coastguard Worker     // This might trigger a flush, or we could trigger a flush manually to ensure the blit happens.
195*8975f5c5SAndroid Build Coastguard Worker     // TODO(jmadill): Investigate performance on Vulkan, and placement of Clear call.
196*8975f5c5SAndroid Build Coastguard Worker 
197*8975f5c5SAndroid Build Coastguard Worker     switch (param.type)
198*8975f5c5SAndroid Build Coastguard Worker     {
199*8975f5c5SAndroid Build Coastguard Worker         case BufferType::COLOR:
200*8975f5c5SAndroid Build Coastguard Worker         {
201*8975f5c5SAndroid Build Coastguard Worker             GLfloat clearValues[4] = {1.0f, 0.0f, 0.0f, 1.0f};
202*8975f5c5SAndroid Build Coastguard Worker             glClearBufferfv(GL_COLOR, 0, clearValues);
203*8975f5c5SAndroid Build Coastguard Worker             break;
204*8975f5c5SAndroid Build Coastguard Worker         }
205*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH:
206*8975f5c5SAndroid Build Coastguard Worker         {
207*8975f5c5SAndroid Build Coastguard Worker             GLfloat clearDepthValue = 0.5f;
208*8975f5c5SAndroid Build Coastguard Worker             glClearBufferfv(GL_DEPTH, 0, &clearDepthValue);
209*8975f5c5SAndroid Build Coastguard Worker             break;
210*8975f5c5SAndroid Build Coastguard Worker         }
211*8975f5c5SAndroid Build Coastguard Worker         case BufferType::STENCIL:
212*8975f5c5SAndroid Build Coastguard Worker         {
213*8975f5c5SAndroid Build Coastguard Worker             GLint clearStencilValue = 1;
214*8975f5c5SAndroid Build Coastguard Worker             glClearBufferiv(GL_STENCIL, 0, &clearStencilValue);
215*8975f5c5SAndroid Build Coastguard Worker             break;
216*8975f5c5SAndroid Build Coastguard Worker         }
217*8975f5c5SAndroid Build Coastguard Worker         case BufferType::DEPTH_STENCIL:
218*8975f5c5SAndroid Build Coastguard Worker             glClearBufferfi(GL_DEPTH_STENCIL, 0, 0.5f, 1);
219*8975f5c5SAndroid Build Coastguard Worker             break;
220*8975f5c5SAndroid Build Coastguard Worker     }
221*8975f5c5SAndroid Build Coastguard Worker 
222*8975f5c5SAndroid Build Coastguard Worker     for (unsigned int iteration = 0; iteration < param.iterationsPerStep; ++iteration)
223*8975f5c5SAndroid Build Coastguard Worker     {
224*8975f5c5SAndroid Build Coastguard Worker         glBlitFramebuffer(0, 0, size, size, 0, 0, size, size, mask, GL_NEAREST);
225*8975f5c5SAndroid Build Coastguard Worker     }
226*8975f5c5SAndroid Build Coastguard Worker }
227*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(BlitFramebufferPerf,Run)228*8975f5c5SAndroid Build Coastguard Worker TEST_P(BlitFramebufferPerf, Run)
229*8975f5c5SAndroid Build Coastguard Worker {
230*8975f5c5SAndroid Build Coastguard Worker     run();
231*8975f5c5SAndroid Build Coastguard Worker }
232*8975f5c5SAndroid Build Coastguard Worker 
Vulkan(BufferType type,unsigned int samples)233*8975f5c5SAndroid Build Coastguard Worker BlitFramebufferParams Vulkan(BufferType type, unsigned int samples)
234*8975f5c5SAndroid Build Coastguard Worker {
235*8975f5c5SAndroid Build Coastguard Worker     BlitFramebufferParams params;
236*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters = angle::egl_platform::VULKAN();
237*8975f5c5SAndroid Build Coastguard Worker     params.type          = type;
238*8975f5c5SAndroid Build Coastguard Worker     params.samples       = samples;
239*8975f5c5SAndroid Build Coastguard Worker     return params;
240*8975f5c5SAndroid Build Coastguard Worker }
D3D11(BufferType type,unsigned int samples)241*8975f5c5SAndroid Build Coastguard Worker BlitFramebufferParams D3D11(BufferType type, unsigned int samples)
242*8975f5c5SAndroid Build Coastguard Worker {
243*8975f5c5SAndroid Build Coastguard Worker     BlitFramebufferParams params;
244*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters = angle::egl_platform::D3D11();
245*8975f5c5SAndroid Build Coastguard Worker     params.type          = type;
246*8975f5c5SAndroid Build Coastguard Worker     params.samples       = samples;
247*8975f5c5SAndroid Build Coastguard Worker     return params;
248*8975f5c5SAndroid Build Coastguard Worker }
249*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
250*8975f5c5SAndroid Build Coastguard Worker 
251*8975f5c5SAndroid Build Coastguard Worker // TODO(jmadill): Programatically generate these combinations.
252*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST(BlitFramebufferPerf,
253*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::COLOR, 0),
254*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::DEPTH, 0),
255*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::STENCIL, 0),
256*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::DEPTH_STENCIL, 0),
257*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::COLOR, 2),
258*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::DEPTH, 2),
259*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::STENCIL, 2),
260*8975f5c5SAndroid Build Coastguard Worker                        D3D11(BufferType::DEPTH_STENCIL, 2),
261*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::COLOR, 0),
262*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::DEPTH, 0),
263*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::STENCIL, 0),
264*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::DEPTH_STENCIL, 0),
265*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::COLOR, 2),
266*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::DEPTH, 2),
267*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::STENCIL, 2),
268*8975f5c5SAndroid Build Coastguard Worker                        Vulkan(BufferType::DEPTH_STENCIL, 2));
269*8975f5c5SAndroid Build Coastguard Worker 
270*8975f5c5SAndroid Build Coastguard Worker // This test suite is not instantiated on some OSes.
271*8975f5c5SAndroid Build Coastguard Worker GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BlitFramebufferPerf);
272