xref: /aosp_15_r20/external/angle/src/tests/perf_tests/MultisampledRenderToTexturePerf.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 // MultisampledRenderToTextureBenchmark:
7*8975f5c5SAndroid Build Coastguard Worker //   Performance test for rendering to multisampled-render-to-texture attachments.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include "ANGLEPerfTest.h"
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include <iostream>
13*8975f5c5SAndroid Build Coastguard Worker #include <random>
14*8975f5c5SAndroid Build Coastguard Worker #include <sstream>
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "util/shader_utils.h"
18*8975f5c5SAndroid Build Coastguard Worker 
19*8975f5c5SAndroid Build Coastguard Worker using namespace angle;
20*8975f5c5SAndroid Build Coastguard Worker 
21*8975f5c5SAndroid Build Coastguard Worker namespace
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker constexpr uint32_t kMultipassPassCount = 5;
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker struct MultisampledRenderToTextureParams final : public RenderTestParams
26*8975f5c5SAndroid Build Coastguard Worker {
MultisampledRenderToTextureParams__anon99bcfd070111::MultisampledRenderToTextureParams27*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureParams()
28*8975f5c5SAndroid Build Coastguard Worker     {
29*8975f5c5SAndroid Build Coastguard Worker         iterationsPerStep = 1;
30*8975f5c5SAndroid Build Coastguard Worker         trackGpuTime      = true;
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker         textureWidth  = 1920;
33*8975f5c5SAndroid Build Coastguard Worker         textureHeight = 1080;
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker         multiplePasses   = false;
36*8975f5c5SAndroid Build Coastguard Worker         withDepthStencil = false;
37*8975f5c5SAndroid Build Coastguard Worker     }
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker     std::string story() const override;
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker     GLsizei textureWidth;
42*8975f5c5SAndroid Build Coastguard Worker     GLsizei textureHeight;
43*8975f5c5SAndroid Build Coastguard Worker 
44*8975f5c5SAndroid Build Coastguard Worker     bool multiplePasses;
45*8975f5c5SAndroid Build Coastguard Worker     bool withDepthStencil;
46*8975f5c5SAndroid Build Coastguard Worker };
47*8975f5c5SAndroid Build Coastguard Worker 
operator <<(std::ostream & os,const MultisampledRenderToTextureParams & params)48*8975f5c5SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &os, const MultisampledRenderToTextureParams &params)
49*8975f5c5SAndroid Build Coastguard Worker {
50*8975f5c5SAndroid Build Coastguard Worker     return os << params.backendAndStory().substr(1);
51*8975f5c5SAndroid Build Coastguard Worker }
52*8975f5c5SAndroid Build Coastguard Worker 
story() const53*8975f5c5SAndroid Build Coastguard Worker std::string MultisampledRenderToTextureParams::story() const
54*8975f5c5SAndroid Build Coastguard Worker {
55*8975f5c5SAndroid Build Coastguard Worker     std::stringstream strstr;
56*8975f5c5SAndroid Build Coastguard Worker 
57*8975f5c5SAndroid Build Coastguard Worker     strstr << RenderTestParams::story();
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     if (multiplePasses)
60*8975f5c5SAndroid Build Coastguard Worker     {
61*8975f5c5SAndroid Build Coastguard Worker         strstr << "_multipass";
62*8975f5c5SAndroid Build Coastguard Worker     }
63*8975f5c5SAndroid Build Coastguard Worker 
64*8975f5c5SAndroid Build Coastguard Worker     if (withDepthStencil)
65*8975f5c5SAndroid Build Coastguard Worker     {
66*8975f5c5SAndroid Build Coastguard Worker         strstr << "_ds";
67*8975f5c5SAndroid Build Coastguard Worker     }
68*8975f5c5SAndroid Build Coastguard Worker 
69*8975f5c5SAndroid Build Coastguard Worker     return strstr.str();
70*8975f5c5SAndroid Build Coastguard Worker }
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker class MultisampledRenderToTextureBenchmark
73*8975f5c5SAndroid Build Coastguard Worker     : public ANGLERenderTest,
74*8975f5c5SAndroid Build Coastguard Worker       public ::testing::WithParamInterface<MultisampledRenderToTextureParams>
75*8975f5c5SAndroid Build Coastguard Worker {
76*8975f5c5SAndroid Build Coastguard Worker   public:
77*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureBenchmark();
78*8975f5c5SAndroid Build Coastguard Worker 
79*8975f5c5SAndroid Build Coastguard Worker     void initializeBenchmark() override;
80*8975f5c5SAndroid Build Coastguard Worker     void destroyBenchmark() override;
81*8975f5c5SAndroid Build Coastguard Worker     void drawBenchmark() override;
82*8975f5c5SAndroid Build Coastguard Worker 
83*8975f5c5SAndroid Build Coastguard Worker   protected:
84*8975f5c5SAndroid Build Coastguard Worker     void initShaders();
85*8975f5c5SAndroid Build Coastguard Worker 
86*8975f5c5SAndroid Build Coastguard Worker     GLuint mFramebuffer              = 0;
87*8975f5c5SAndroid Build Coastguard Worker     GLuint mProgram                  = 0;
88*8975f5c5SAndroid Build Coastguard Worker     GLuint mColorTexture             = 0;
89*8975f5c5SAndroid Build Coastguard Worker     GLuint mDepthStencilRenderbuffer = 0;
90*8975f5c5SAndroid Build Coastguard Worker 
91*8975f5c5SAndroid Build Coastguard Worker     std::vector<uint8_t> mTextureData;
92*8975f5c5SAndroid Build Coastguard Worker };
93*8975f5c5SAndroid Build Coastguard Worker 
MultisampledRenderToTextureBenchmark()94*8975f5c5SAndroid Build Coastguard Worker MultisampledRenderToTextureBenchmark::MultisampledRenderToTextureBenchmark()
95*8975f5c5SAndroid Build Coastguard Worker     : ANGLERenderTest("MultisampledRenderToTexture", GetParam())
96*8975f5c5SAndroid Build Coastguard Worker {
97*8975f5c5SAndroid Build Coastguard Worker     if (GetParam().getRenderer() == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE)
98*8975f5c5SAndroid Build Coastguard Worker     {
99*8975f5c5SAndroid Build Coastguard Worker         skipTest("http://crbug.com/945415 Crashes on nvidia+d3d11");
100*8975f5c5SAndroid Build Coastguard Worker     }
101*8975f5c5SAndroid Build Coastguard Worker 
102*8975f5c5SAndroid Build Coastguard Worker     if (IsWindows7() && IsNVIDIA() &&
103*8975f5c5SAndroid Build Coastguard Worker         GetParam().eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE)
104*8975f5c5SAndroid Build Coastguard Worker     {
105*8975f5c5SAndroid Build Coastguard Worker         skipTest(
106*8975f5c5SAndroid Build Coastguard Worker             "http://crbug.com/1096510 Fails on Windows7 NVIDIA Vulkan, presumably due to old "
107*8975f5c5SAndroid Build Coastguard Worker             "drivers");
108*8975f5c5SAndroid Build Coastguard Worker     }
109*8975f5c5SAndroid Build Coastguard Worker 
110*8975f5c5SAndroid Build Coastguard Worker     if (IsPixel4() && GetParam().eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE)
111*8975f5c5SAndroid Build Coastguard Worker     {
112*8975f5c5SAndroid Build Coastguard Worker         skipTest("http://anglebug.com/40096724 Fails on Pixel 4 GLES");
113*8975f5c5SAndroid Build Coastguard Worker     }
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker     if (IsLinux() && IsAMD() &&
116*8975f5c5SAndroid Build Coastguard Worker         GetParam().eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE &&
117*8975f5c5SAndroid Build Coastguard Worker         GetParam().multiplePasses && GetParam().withDepthStencil)
118*8975f5c5SAndroid Build Coastguard Worker     {
119*8975f5c5SAndroid Build Coastguard Worker         skipTest("http://anglebug.com/42263920");
120*8975f5c5SAndroid Build Coastguard Worker     }
121*8975f5c5SAndroid Build Coastguard Worker 
122*8975f5c5SAndroid Build Coastguard Worker     if (IsLinux() && IsIntel() &&
123*8975f5c5SAndroid Build Coastguard Worker         GetParam().eglParameters.renderer == EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE)
124*8975f5c5SAndroid Build Coastguard Worker     {
125*8975f5c5SAndroid Build Coastguard Worker         skipTest("http://anglebug.com/42264836");
126*8975f5c5SAndroid Build Coastguard Worker     }
127*8975f5c5SAndroid Build Coastguard Worker }
128*8975f5c5SAndroid Build Coastguard Worker 
initializeBenchmark()129*8975f5c5SAndroid Build Coastguard Worker void MultisampledRenderToTextureBenchmark::initializeBenchmark()
130*8975f5c5SAndroid Build Coastguard Worker {
131*8975f5c5SAndroid Build Coastguard Worker     if (!IsGLExtensionEnabled("GL_EXT_multisampled_render_to_texture"))
132*8975f5c5SAndroid Build Coastguard Worker     {
133*8975f5c5SAndroid Build Coastguard Worker         skipTest("missing GL_EXT_multisampled_render_to_texture");
134*8975f5c5SAndroid Build Coastguard Worker         return;
135*8975f5c5SAndroid Build Coastguard Worker     }
136*8975f5c5SAndroid Build Coastguard Worker 
137*8975f5c5SAndroid Build Coastguard Worker     const auto &params = GetParam();
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker     initShaders();
140*8975f5c5SAndroid Build Coastguard Worker     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
141*8975f5c5SAndroid Build Coastguard Worker     glViewport(0, 0, getWindow()->getWidth(), getWindow()->getHeight());
142*8975f5c5SAndroid Build Coastguard Worker 
143*8975f5c5SAndroid Build Coastguard Worker     glGenFramebuffers(1, &mFramebuffer);
144*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer);
145*8975f5c5SAndroid Build Coastguard Worker 
146*8975f5c5SAndroid Build Coastguard Worker     glGenTextures(1, &mColorTexture);
147*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_2D, mColorTexture);
148*8975f5c5SAndroid Build Coastguard Worker 
149*8975f5c5SAndroid Build Coastguard Worker     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, params.textureWidth, params.textureHeight, 0, GL_RGBA,
150*8975f5c5SAndroid Build Coastguard Worker                  GL_UNSIGNED_BYTE, nullptr);
151*8975f5c5SAndroid Build Coastguard Worker     glFramebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
152*8975f5c5SAndroid Build Coastguard Worker                                          mColorTexture, 0, 4);
153*8975f5c5SAndroid Build Coastguard Worker 
154*8975f5c5SAndroid Build Coastguard Worker     if (params.withDepthStencil)
155*8975f5c5SAndroid Build Coastguard Worker     {
156*8975f5c5SAndroid Build Coastguard Worker         glGenRenderbuffers(1, &mDepthStencilRenderbuffer);
157*8975f5c5SAndroid Build Coastguard Worker         glBindRenderbuffer(GL_RENDERBUFFER, mDepthStencilRenderbuffer);
158*8975f5c5SAndroid Build Coastguard Worker         glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER, 4, GL_DEPTH24_STENCIL8,
159*8975f5c5SAndroid Build Coastguard Worker                                             params.textureWidth, params.textureHeight);
160*8975f5c5SAndroid Build Coastguard Worker         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER,
161*8975f5c5SAndroid Build Coastguard Worker                                   mDepthStencilRenderbuffer);
162*8975f5c5SAndroid Build Coastguard Worker     }
163*8975f5c5SAndroid Build Coastguard Worker 
164*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
165*8975f5c5SAndroid Build Coastguard Worker }
166*8975f5c5SAndroid Build Coastguard Worker 
initShaders()167*8975f5c5SAndroid Build Coastguard Worker void MultisampledRenderToTextureBenchmark::initShaders()
168*8975f5c5SAndroid Build Coastguard Worker {
169*8975f5c5SAndroid Build Coastguard Worker     constexpr char kVS[] = R"(void main()
170*8975f5c5SAndroid Build Coastguard Worker {
171*8975f5c5SAndroid Build Coastguard Worker     gl_Position = vec4(0, 0, 0, 1);
172*8975f5c5SAndroid Build Coastguard Worker })";
173*8975f5c5SAndroid Build Coastguard Worker 
174*8975f5c5SAndroid Build Coastguard Worker     constexpr char kFS[] = R"(precision mediump float;
175*8975f5c5SAndroid Build Coastguard Worker void main()
176*8975f5c5SAndroid Build Coastguard Worker {
177*8975f5c5SAndroid Build Coastguard Worker     gl_FragColor = vec4(0);
178*8975f5c5SAndroid Build Coastguard Worker })";
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker     mProgram = CompileProgram(kVS, kFS);
181*8975f5c5SAndroid Build Coastguard Worker     ASSERT_NE(0u, mProgram);
182*8975f5c5SAndroid Build Coastguard Worker 
183*8975f5c5SAndroid Build Coastguard Worker     glUseProgram(mProgram);
184*8975f5c5SAndroid Build Coastguard Worker 
185*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
186*8975f5c5SAndroid Build Coastguard Worker }
187*8975f5c5SAndroid Build Coastguard Worker 
destroyBenchmark()188*8975f5c5SAndroid Build Coastguard Worker void MultisampledRenderToTextureBenchmark::destroyBenchmark()
189*8975f5c5SAndroid Build Coastguard Worker {
190*8975f5c5SAndroid Build Coastguard Worker     glDeleteFramebuffers(1, &mFramebuffer);
191*8975f5c5SAndroid Build Coastguard Worker     glDeleteRenderbuffers(1, &mDepthStencilRenderbuffer);
192*8975f5c5SAndroid Build Coastguard Worker     glDeleteTextures(1, &mColorTexture);
193*8975f5c5SAndroid Build Coastguard Worker     glDeleteProgram(mProgram);
194*8975f5c5SAndroid Build Coastguard Worker }
195*8975f5c5SAndroid Build Coastguard Worker 
drawBenchmark()196*8975f5c5SAndroid Build Coastguard Worker void MultisampledRenderToTextureBenchmark::drawBenchmark()
197*8975f5c5SAndroid Build Coastguard Worker {
198*8975f5c5SAndroid Build Coastguard Worker     const auto &params = GetParam();
199*8975f5c5SAndroid Build Coastguard Worker 
200*8975f5c5SAndroid Build Coastguard Worker     GLTexture mMockTexture;
201*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(GL_TEXTURE_2D, mMockTexture);
202*8975f5c5SAndroid Build Coastguard Worker 
203*8975f5c5SAndroid Build Coastguard Worker     startGpuTimer();
204*8975f5c5SAndroid Build Coastguard Worker 
205*8975f5c5SAndroid Build Coastguard Worker     // Initially clear the color attachment to avoid having to load from the resolved image.  The
206*8975f5c5SAndroid Build Coastguard Worker     // depth/stencil attachment doesn't need this as it's contents are always undefined between
207*8975f5c5SAndroid Build Coastguard Worker     // render passes.
208*8975f5c5SAndroid Build Coastguard Worker     glClear(GL_COLOR_BUFFER_BIT);
209*8975f5c5SAndroid Build Coastguard Worker 
210*8975f5c5SAndroid Build Coastguard Worker     const uint32_t passCount = params.multiplePasses ? kMultipassPassCount : 1;
211*8975f5c5SAndroid Build Coastguard Worker     for (uint32_t pass = 0; pass < passCount; ++pass)
212*8975f5c5SAndroid Build Coastguard Worker     {
213*8975f5c5SAndroid Build Coastguard Worker         // Perform a draw just to have something in the render pass.  With the position attributes
214*8975f5c5SAndroid Build Coastguard Worker         // not set, a constant default value is used, resulting in a very cheap draw.
215*8975f5c5SAndroid Build Coastguard Worker         glDrawArrays(GL_TRIANGLES, 0, 3);
216*8975f5c5SAndroid Build Coastguard Worker 
217*8975f5c5SAndroid Build Coastguard Worker         // Force the render pass to break by cheaply reading back from the color attachment.
218*8975f5c5SAndroid Build Coastguard Worker         glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 1, 1, 0);
219*8975f5c5SAndroid Build Coastguard Worker     }
220*8975f5c5SAndroid Build Coastguard Worker     stopGpuTimer();
221*8975f5c5SAndroid Build Coastguard Worker 
222*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
223*8975f5c5SAndroid Build Coastguard Worker }
224*8975f5c5SAndroid Build Coastguard Worker 
D3D11Params(bool multiplePasses,bool withDepthStencil)225*8975f5c5SAndroid Build Coastguard Worker MultisampledRenderToTextureParams D3D11Params(bool multiplePasses, bool withDepthStencil)
226*8975f5c5SAndroid Build Coastguard Worker {
227*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureParams params;
228*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters    = egl_platform::D3D11();
229*8975f5c5SAndroid Build Coastguard Worker     params.majorVersion     = 3;
230*8975f5c5SAndroid Build Coastguard Worker     params.minorVersion     = 0;
231*8975f5c5SAndroid Build Coastguard Worker     params.multiplePasses   = multiplePasses;
232*8975f5c5SAndroid Build Coastguard Worker     params.withDepthStencil = withDepthStencil;
233*8975f5c5SAndroid Build Coastguard Worker     return params;
234*8975f5c5SAndroid Build Coastguard Worker }
235*8975f5c5SAndroid Build Coastguard Worker 
MetalParams(bool multiplePasses,bool withDepthStencil)236*8975f5c5SAndroid Build Coastguard Worker MultisampledRenderToTextureParams MetalParams(bool multiplePasses, bool withDepthStencil)
237*8975f5c5SAndroid Build Coastguard Worker {
238*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureParams params;
239*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters    = egl_platform::METAL();
240*8975f5c5SAndroid Build Coastguard Worker     params.majorVersion     = 3;
241*8975f5c5SAndroid Build Coastguard Worker     params.minorVersion     = 0;
242*8975f5c5SAndroid Build Coastguard Worker     params.multiplePasses   = multiplePasses;
243*8975f5c5SAndroid Build Coastguard Worker     params.withDepthStencil = withDepthStencil;
244*8975f5c5SAndroid Build Coastguard Worker     return params;
245*8975f5c5SAndroid Build Coastguard Worker }
246*8975f5c5SAndroid Build Coastguard Worker 
OpenGLOrGLESParams(bool multiplePasses,bool withDepthStencil)247*8975f5c5SAndroid Build Coastguard Worker MultisampledRenderToTextureParams OpenGLOrGLESParams(bool multiplePasses, bool withDepthStencil)
248*8975f5c5SAndroid Build Coastguard Worker {
249*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureParams params;
250*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters    = egl_platform::OPENGL_OR_GLES();
251*8975f5c5SAndroid Build Coastguard Worker     params.majorVersion     = 3;
252*8975f5c5SAndroid Build Coastguard Worker     params.minorVersion     = 0;
253*8975f5c5SAndroid Build Coastguard Worker     params.multiplePasses   = multiplePasses;
254*8975f5c5SAndroid Build Coastguard Worker     params.withDepthStencil = withDepthStencil;
255*8975f5c5SAndroid Build Coastguard Worker     return params;
256*8975f5c5SAndroid Build Coastguard Worker }
257*8975f5c5SAndroid Build Coastguard Worker 
VulkanParams(bool multiplePasses,bool withDepthStencil)258*8975f5c5SAndroid Build Coastguard Worker MultisampledRenderToTextureParams VulkanParams(bool multiplePasses, bool withDepthStencil)
259*8975f5c5SAndroid Build Coastguard Worker {
260*8975f5c5SAndroid Build Coastguard Worker     MultisampledRenderToTextureParams params;
261*8975f5c5SAndroid Build Coastguard Worker     params.eglParameters    = egl_platform::VULKAN();
262*8975f5c5SAndroid Build Coastguard Worker     params.majorVersion     = 3;
263*8975f5c5SAndroid Build Coastguard Worker     params.minorVersion     = 0;
264*8975f5c5SAndroid Build Coastguard Worker     params.multiplePasses   = multiplePasses;
265*8975f5c5SAndroid Build Coastguard Worker     params.withDepthStencil = withDepthStencil;
266*8975f5c5SAndroid Build Coastguard Worker     return params;
267*8975f5c5SAndroid Build Coastguard Worker }
268*8975f5c5SAndroid Build Coastguard Worker 
269*8975f5c5SAndroid Build Coastguard Worker }  // anonymous namespace
270*8975f5c5SAndroid Build Coastguard Worker 
TEST_P(MultisampledRenderToTextureBenchmark,Run)271*8975f5c5SAndroid Build Coastguard Worker TEST_P(MultisampledRenderToTextureBenchmark, Run)
272*8975f5c5SAndroid Build Coastguard Worker {
273*8975f5c5SAndroid Build Coastguard Worker     run();
274*8975f5c5SAndroid Build Coastguard Worker }
275*8975f5c5SAndroid Build Coastguard Worker 
276*8975f5c5SAndroid Build Coastguard Worker using namespace params;
277*8975f5c5SAndroid Build Coastguard Worker 
278*8975f5c5SAndroid Build Coastguard Worker ANGLE_INSTANTIATE_TEST(MultisampledRenderToTextureBenchmark,
279*8975f5c5SAndroid Build Coastguard Worker                        D3D11Params(false, false),
280*8975f5c5SAndroid Build Coastguard Worker                        D3D11Params(true, true),
281*8975f5c5SAndroid Build Coastguard Worker                        MetalParams(false, false),
282*8975f5c5SAndroid Build Coastguard Worker                        MetalParams(true, true),
283*8975f5c5SAndroid Build Coastguard Worker                        OpenGLOrGLESParams(false, false),
284*8975f5c5SAndroid Build Coastguard Worker                        OpenGLOrGLESParams(true, true),
285*8975f5c5SAndroid Build Coastguard Worker                        VulkanParams(false, false),
286*8975f5c5SAndroid Build Coastguard Worker                        VulkanParams(true, false),
287*8975f5c5SAndroid Build Coastguard Worker                        VulkanParams(false, true),
288*8975f5c5SAndroid Build Coastguard Worker                        VulkanParams(true, true));
289