xref: /aosp_15_r20/external/angle/src/tests/test_utils/MultiviewTest.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2018 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 // MultiviewTest:
7*8975f5c5SAndroid Build Coastguard Worker //   Implementation of helpers for multiview testing.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/MultiviewTest.h"
11*8975f5c5SAndroid Build Coastguard Worker #include "platform/autogen/FeaturesD3D_autogen.h"
12*8975f5c5SAndroid Build Coastguard Worker #include "test_utils/gl_raii.h"
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker namespace angle
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker 
CreateSimplePassthroughProgram(int numViews,ExtensionName multiviewExtension)17*8975f5c5SAndroid Build Coastguard Worker GLuint CreateSimplePassthroughProgram(int numViews, ExtensionName multiviewExtension)
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker     std::string ext;
20*8975f5c5SAndroid Build Coastguard Worker     switch (multiviewExtension)
21*8975f5c5SAndroid Build Coastguard Worker     {
22*8975f5c5SAndroid Build Coastguard Worker         case multiview:
23*8975f5c5SAndroid Build Coastguard Worker             ext = "GL_OVR_multiview";
24*8975f5c5SAndroid Build Coastguard Worker             break;
25*8975f5c5SAndroid Build Coastguard Worker         case multiview2:
26*8975f5c5SAndroid Build Coastguard Worker             ext = "GL_OVR_multiview2";
27*8975f5c5SAndroid Build Coastguard Worker             break;
28*8975f5c5SAndroid Build Coastguard Worker         default:
29*8975f5c5SAndroid Build Coastguard Worker             // Unknown extension.
30*8975f5c5SAndroid Build Coastguard Worker             break;
31*8975f5c5SAndroid Build Coastguard Worker     }
32*8975f5c5SAndroid Build Coastguard Worker 
33*8975f5c5SAndroid Build Coastguard Worker     const std::string vsSource =
34*8975f5c5SAndroid Build Coastguard Worker         "#version 300 es\n"
35*8975f5c5SAndroid Build Coastguard Worker         "#extension " +
36*8975f5c5SAndroid Build Coastguard Worker         ext +
37*8975f5c5SAndroid Build Coastguard Worker         " : require\n"
38*8975f5c5SAndroid Build Coastguard Worker         "layout(num_views = " +
39*8975f5c5SAndroid Build Coastguard Worker         ToString(numViews) +
40*8975f5c5SAndroid Build Coastguard Worker         ") in;\n"
41*8975f5c5SAndroid Build Coastguard Worker         "layout(location=0) in vec2 vPosition;\n"
42*8975f5c5SAndroid Build Coastguard Worker         "void main()\n"
43*8975f5c5SAndroid Build Coastguard Worker         "{\n"
44*8975f5c5SAndroid Build Coastguard Worker         "   gl_PointSize = 1.;\n"
45*8975f5c5SAndroid Build Coastguard Worker         "   gl_Position = vec4(vPosition.xy, 0.0, 1.0);\n"
46*8975f5c5SAndroid Build Coastguard Worker         "}\n";
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker     const std::string fsSource =
49*8975f5c5SAndroid Build Coastguard Worker         "#version 300 es\n"
50*8975f5c5SAndroid Build Coastguard Worker         "#extension " +
51*8975f5c5SAndroid Build Coastguard Worker         ext +
52*8975f5c5SAndroid Build Coastguard Worker         " : require\n"
53*8975f5c5SAndroid Build Coastguard Worker         "precision mediump float;\n"
54*8975f5c5SAndroid Build Coastguard Worker         "out vec4 col;\n"
55*8975f5c5SAndroid Build Coastguard Worker         "void main()\n"
56*8975f5c5SAndroid Build Coastguard Worker         "{\n"
57*8975f5c5SAndroid Build Coastguard Worker         "   col = vec4(0,1,0,1);\n"
58*8975f5c5SAndroid Build Coastguard Worker         "}\n";
59*8975f5c5SAndroid Build Coastguard Worker     return CompileProgram(vsSource.c_str(), fsSource.c_str());
60*8975f5c5SAndroid Build Coastguard Worker }
61*8975f5c5SAndroid Build Coastguard Worker 
CreateMultiviewBackingTextures(int samples,int viewWidth,int height,int numLayers,std::vector<GLuint> colorTextures,GLuint depthTexture,GLuint depthStencilTexture)62*8975f5c5SAndroid Build Coastguard Worker void CreateMultiviewBackingTextures(int samples,
63*8975f5c5SAndroid Build Coastguard Worker                                     int viewWidth,
64*8975f5c5SAndroid Build Coastguard Worker                                     int height,
65*8975f5c5SAndroid Build Coastguard Worker                                     int numLayers,
66*8975f5c5SAndroid Build Coastguard Worker                                     std::vector<GLuint> colorTextures,
67*8975f5c5SAndroid Build Coastguard Worker                                     GLuint depthTexture,
68*8975f5c5SAndroid Build Coastguard Worker                                     GLuint depthStencilTexture)
69*8975f5c5SAndroid Build Coastguard Worker {
70*8975f5c5SAndroid Build Coastguard Worker     // The same zero data is used to initialize both color and depth/stencil textures.
71*8975f5c5SAndroid Build Coastguard Worker     std::vector<GLubyte> textureData;
72*8975f5c5SAndroid Build Coastguard Worker     textureData.resize(viewWidth * height * numLayers * 4, 0u);
73*8975f5c5SAndroid Build Coastguard Worker 
74*8975f5c5SAndroid Build Coastguard Worker     // We can't upload data to multisample textures, so we clear them using a temporary framebuffer
75*8975f5c5SAndroid Build Coastguard Worker     // instead. The current framebuffer binding is stored so we can restore it once we're done with
76*8975f5c5SAndroid Build Coastguard Worker     // using the temporary framebuffers.
77*8975f5c5SAndroid Build Coastguard Worker     GLint restoreDrawFramebuffer;
78*8975f5c5SAndroid Build Coastguard Worker     glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &restoreDrawFramebuffer);
79*8975f5c5SAndroid Build Coastguard Worker 
80*8975f5c5SAndroid Build Coastguard Worker     // Create color and depth textures.
81*8975f5c5SAndroid Build Coastguard Worker     GLenum texTarget = (samples > 0) ? GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES : GL_TEXTURE_2D_ARRAY;
82*8975f5c5SAndroid Build Coastguard Worker     for (auto colorTexture : colorTextures)
83*8975f5c5SAndroid Build Coastguard Worker     {
84*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(texTarget, colorTexture);
85*8975f5c5SAndroid Build Coastguard Worker         if (samples > 0)
86*8975f5c5SAndroid Build Coastguard Worker         {
87*8975f5c5SAndroid Build Coastguard Worker             glTexStorage3DMultisampleOES(texTarget, samples, GL_RGBA8, viewWidth, height, numLayers,
88*8975f5c5SAndroid Build Coastguard Worker                                          false);
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker             GLFramebuffer tempFbo;
91*8975f5c5SAndroid Build Coastguard Worker             glBindFramebuffer(GL_DRAW_FRAMEBUFFER, tempFbo);
92*8975f5c5SAndroid Build Coastguard Worker             glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
93*8975f5c5SAndroid Build Coastguard Worker             for (int layerIndex = 0; layerIndex < numLayers; ++layerIndex)
94*8975f5c5SAndroid Build Coastguard Worker             {
95*8975f5c5SAndroid Build Coastguard Worker                 glFramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, colorTexture,
96*8975f5c5SAndroid Build Coastguard Worker                                           0, layerIndex);
97*8975f5c5SAndroid Build Coastguard Worker                 glClear(GL_COLOR_BUFFER_BIT);
98*8975f5c5SAndroid Build Coastguard Worker             }
99*8975f5c5SAndroid Build Coastguard Worker         }
100*8975f5c5SAndroid Build Coastguard Worker         else
101*8975f5c5SAndroid Build Coastguard Worker         {
102*8975f5c5SAndroid Build Coastguard Worker             glTexImage3D(texTarget, 0, GL_RGBA8, viewWidth, height, numLayers, 0, GL_RGBA,
103*8975f5c5SAndroid Build Coastguard Worker                          GL_UNSIGNED_BYTE, textureData.data());
104*8975f5c5SAndroid Build Coastguard Worker             glTexParameteri(texTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
105*8975f5c5SAndroid Build Coastguard Worker             glTexParameteri(texTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
106*8975f5c5SAndroid Build Coastguard Worker         }
107*8975f5c5SAndroid Build Coastguard Worker     }
108*8975f5c5SAndroid Build Coastguard Worker 
109*8975f5c5SAndroid Build Coastguard Worker     if (depthTexture != 0)
110*8975f5c5SAndroid Build Coastguard Worker     {
111*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(texTarget, depthTexture);
112*8975f5c5SAndroid Build Coastguard Worker         if (samples > 0)
113*8975f5c5SAndroid Build Coastguard Worker         {
114*8975f5c5SAndroid Build Coastguard Worker             glTexStorage3DMultisampleOES(texTarget, samples, GL_DEPTH_COMPONENT32F, viewWidth,
115*8975f5c5SAndroid Build Coastguard Worker                                          height, numLayers, false);
116*8975f5c5SAndroid Build Coastguard Worker 
117*8975f5c5SAndroid Build Coastguard Worker             GLFramebuffer tempFbo;
118*8975f5c5SAndroid Build Coastguard Worker             glBindFramebuffer(GL_DRAW_FRAMEBUFFER, tempFbo);
119*8975f5c5SAndroid Build Coastguard Worker             glClearDepthf(0.0f);
120*8975f5c5SAndroid Build Coastguard Worker             for (int layerIndex = 0; layerIndex < numLayers; ++layerIndex)
121*8975f5c5SAndroid Build Coastguard Worker             {
122*8975f5c5SAndroid Build Coastguard Worker                 glFramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthTexture, 0,
123*8975f5c5SAndroid Build Coastguard Worker                                           layerIndex);
124*8975f5c5SAndroid Build Coastguard Worker                 glClear(GL_DEPTH_BUFFER_BIT);
125*8975f5c5SAndroid Build Coastguard Worker             }
126*8975f5c5SAndroid Build Coastguard Worker         }
127*8975f5c5SAndroid Build Coastguard Worker         else
128*8975f5c5SAndroid Build Coastguard Worker         {
129*8975f5c5SAndroid Build Coastguard Worker             glTexImage3D(texTarget, 0, GL_DEPTH_COMPONENT32F, viewWidth, height, numLayers, 0,
130*8975f5c5SAndroid Build Coastguard Worker                          GL_DEPTH_COMPONENT, GL_FLOAT, textureData.data());
131*8975f5c5SAndroid Build Coastguard Worker         }
132*8975f5c5SAndroid Build Coastguard Worker     }
133*8975f5c5SAndroid Build Coastguard Worker     if (depthStencilTexture != 0)
134*8975f5c5SAndroid Build Coastguard Worker     {
135*8975f5c5SAndroid Build Coastguard Worker         glBindTexture(texTarget, depthStencilTexture);
136*8975f5c5SAndroid Build Coastguard Worker         if (samples > 0)
137*8975f5c5SAndroid Build Coastguard Worker         {
138*8975f5c5SAndroid Build Coastguard Worker             glTexStorage3DMultisampleOES(texTarget, samples, GL_DEPTH24_STENCIL8, viewWidth, height,
139*8975f5c5SAndroid Build Coastguard Worker                                          numLayers, false);
140*8975f5c5SAndroid Build Coastguard Worker 
141*8975f5c5SAndroid Build Coastguard Worker             GLFramebuffer tempFbo;
142*8975f5c5SAndroid Build Coastguard Worker             glBindFramebuffer(GL_DRAW_FRAMEBUFFER, tempFbo);
143*8975f5c5SAndroid Build Coastguard Worker             glClearDepthf(0.0f);
144*8975f5c5SAndroid Build Coastguard Worker             glClearStencil(0);
145*8975f5c5SAndroid Build Coastguard Worker             for (int layerIndex = 0; layerIndex < numLayers; ++layerIndex)
146*8975f5c5SAndroid Build Coastguard Worker             {
147*8975f5c5SAndroid Build Coastguard Worker                 glFramebufferTextureLayer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
148*8975f5c5SAndroid Build Coastguard Worker                                           depthTexture, 0, layerIndex);
149*8975f5c5SAndroid Build Coastguard Worker                 glClear(GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
150*8975f5c5SAndroid Build Coastguard Worker             }
151*8975f5c5SAndroid Build Coastguard Worker         }
152*8975f5c5SAndroid Build Coastguard Worker         else
153*8975f5c5SAndroid Build Coastguard Worker         {
154*8975f5c5SAndroid Build Coastguard Worker             glTexImage3D(texTarget, 0, GL_DEPTH24_STENCIL8, viewWidth, height, numLayers, 0,
155*8975f5c5SAndroid Build Coastguard Worker                          GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, textureData.data());
156*8975f5c5SAndroid Build Coastguard Worker         }
157*8975f5c5SAndroid Build Coastguard Worker     }
158*8975f5c5SAndroid Build Coastguard Worker     glBindTexture(texTarget, 0);
159*8975f5c5SAndroid Build Coastguard Worker     ASSERT_GL_NO_ERROR();
160*8975f5c5SAndroid Build Coastguard Worker 
161*8975f5c5SAndroid Build Coastguard Worker     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, restoreDrawFramebuffer);
162*8975f5c5SAndroid Build Coastguard Worker }
163*8975f5c5SAndroid Build Coastguard Worker 
CreateMultiviewBackingTextures(int samples,int viewWidth,int height,int numLayers,GLuint colorTexture,GLuint depthTexture,GLuint depthStencilTexture)164*8975f5c5SAndroid Build Coastguard Worker void CreateMultiviewBackingTextures(int samples,
165*8975f5c5SAndroid Build Coastguard Worker                                     int viewWidth,
166*8975f5c5SAndroid Build Coastguard Worker                                     int height,
167*8975f5c5SAndroid Build Coastguard Worker                                     int numLayers,
168*8975f5c5SAndroid Build Coastguard Worker                                     GLuint colorTexture,
169*8975f5c5SAndroid Build Coastguard Worker                                     GLuint depthTexture,
170*8975f5c5SAndroid Build Coastguard Worker                                     GLuint depthStencilTexture)
171*8975f5c5SAndroid Build Coastguard Worker {
172*8975f5c5SAndroid Build Coastguard Worker     ASSERT_TRUE(colorTexture != 0u);
173*8975f5c5SAndroid Build Coastguard Worker     std::vector<GLuint> colorTextures(1, colorTexture);
174*8975f5c5SAndroid Build Coastguard Worker     CreateMultiviewBackingTextures(samples, viewWidth, height, numLayers, colorTextures,
175*8975f5c5SAndroid Build Coastguard Worker                                    depthTexture, depthStencilTexture);
176*8975f5c5SAndroid Build Coastguard Worker }
177*8975f5c5SAndroid Build Coastguard Worker 
AttachMultiviewTextures(GLenum target,int viewWidth,int numViews,int baseViewIndex,std::vector<GLuint> colorTextures,GLuint depthTexture,GLuint depthStencilTexture)178*8975f5c5SAndroid Build Coastguard Worker void AttachMultiviewTextures(GLenum target,
179*8975f5c5SAndroid Build Coastguard Worker                              int viewWidth,
180*8975f5c5SAndroid Build Coastguard Worker                              int numViews,
181*8975f5c5SAndroid Build Coastguard Worker                              int baseViewIndex,
182*8975f5c5SAndroid Build Coastguard Worker                              std::vector<GLuint> colorTextures,
183*8975f5c5SAndroid Build Coastguard Worker                              GLuint depthTexture,
184*8975f5c5SAndroid Build Coastguard Worker                              GLuint depthStencilTexture)
185*8975f5c5SAndroid Build Coastguard Worker {
186*8975f5c5SAndroid Build Coastguard Worker     ASSERT_TRUE(depthTexture == 0u || depthStencilTexture == 0u);
187*8975f5c5SAndroid Build Coastguard Worker     for (size_t i = 0; i < colorTextures.size(); ++i)
188*8975f5c5SAndroid Build Coastguard Worker     {
189*8975f5c5SAndroid Build Coastguard Worker         GLenum attachment = static_cast<GLenum>(GL_COLOR_ATTACHMENT0 + i);
190*8975f5c5SAndroid Build Coastguard Worker         glFramebufferTextureMultiviewOVR(target, attachment, colorTextures[i], 0, baseViewIndex,
191*8975f5c5SAndroid Build Coastguard Worker                                          numViews);
192*8975f5c5SAndroid Build Coastguard Worker     }
193*8975f5c5SAndroid Build Coastguard Worker     if (depthTexture)
194*8975f5c5SAndroid Build Coastguard Worker     {
195*8975f5c5SAndroid Build Coastguard Worker         glFramebufferTextureMultiviewOVR(target, GL_DEPTH_ATTACHMENT, depthTexture, 0,
196*8975f5c5SAndroid Build Coastguard Worker                                          baseViewIndex, numViews);
197*8975f5c5SAndroid Build Coastguard Worker     }
198*8975f5c5SAndroid Build Coastguard Worker     if (depthStencilTexture)
199*8975f5c5SAndroid Build Coastguard Worker     {
200*8975f5c5SAndroid Build Coastguard Worker         glFramebufferTextureMultiviewOVR(target, GL_DEPTH_STENCIL_ATTACHMENT, depthStencilTexture,
201*8975f5c5SAndroid Build Coastguard Worker                                          0, baseViewIndex, numViews);
202*8975f5c5SAndroid Build Coastguard Worker     }
203*8975f5c5SAndroid Build Coastguard Worker }
204*8975f5c5SAndroid Build Coastguard Worker 
AttachMultiviewTextures(GLenum target,int viewWidth,int numViews,int baseViewIndex,GLuint colorTexture,GLuint depthTexture,GLuint depthStencilTexture)205*8975f5c5SAndroid Build Coastguard Worker void AttachMultiviewTextures(GLenum target,
206*8975f5c5SAndroid Build Coastguard Worker                              int viewWidth,
207*8975f5c5SAndroid Build Coastguard Worker                              int numViews,
208*8975f5c5SAndroid Build Coastguard Worker                              int baseViewIndex,
209*8975f5c5SAndroid Build Coastguard Worker                              GLuint colorTexture,
210*8975f5c5SAndroid Build Coastguard Worker                              GLuint depthTexture,
211*8975f5c5SAndroid Build Coastguard Worker                              GLuint depthStencilTexture)
212*8975f5c5SAndroid Build Coastguard Worker {
213*8975f5c5SAndroid Build Coastguard Worker     ASSERT_TRUE(colorTexture != 0u);
214*8975f5c5SAndroid Build Coastguard Worker     std::vector<GLuint> colorTextures(1, colorTexture);
215*8975f5c5SAndroid Build Coastguard Worker     AttachMultiviewTextures(target, viewWidth, numViews, baseViewIndex, colorTextures, depthTexture,
216*8975f5c5SAndroid Build Coastguard Worker                             depthStencilTexture);
217*8975f5c5SAndroid Build Coastguard Worker }
218*8975f5c5SAndroid Build Coastguard Worker 
operator <<(std::ostream & os,const MultiviewImplementationParams & params)219*8975f5c5SAndroid Build Coastguard Worker std::ostream &operator<<(std::ostream &os, const MultiviewImplementationParams &params)
220*8975f5c5SAndroid Build Coastguard Worker {
221*8975f5c5SAndroid Build Coastguard Worker     const PlatformParameters &base = static_cast<const PlatformParameters &>(params);
222*8975f5c5SAndroid Build Coastguard Worker     os << base << "_";
223*8975f5c5SAndroid Build Coastguard Worker     if (params.mMultiviewExtension)
224*8975f5c5SAndroid Build Coastguard Worker     {
225*8975f5c5SAndroid Build Coastguard Worker         os << "_multiview";
226*8975f5c5SAndroid Build Coastguard Worker     }
227*8975f5c5SAndroid Build Coastguard Worker     else
228*8975f5c5SAndroid Build Coastguard Worker     {
229*8975f5c5SAndroid Build Coastguard Worker         os << "_multiview2";
230*8975f5c5SAndroid Build Coastguard Worker     }
231*8975f5c5SAndroid Build Coastguard Worker     return os;
232*8975f5c5SAndroid Build Coastguard Worker }
233*8975f5c5SAndroid Build Coastguard Worker 
VertexShaderOpenGL(GLint majorVersion,GLint minorVersion,ExtensionName multiviewExtension)234*8975f5c5SAndroid Build Coastguard Worker MultiviewImplementationParams VertexShaderOpenGL(GLint majorVersion,
235*8975f5c5SAndroid Build Coastguard Worker                                                  GLint minorVersion,
236*8975f5c5SAndroid Build Coastguard Worker                                                  ExtensionName multiviewExtension)
237*8975f5c5SAndroid Build Coastguard Worker {
238*8975f5c5SAndroid Build Coastguard Worker     return MultiviewImplementationParams(majorVersion, minorVersion, egl_platform::OPENGL(),
239*8975f5c5SAndroid Build Coastguard Worker                                          multiviewExtension);
240*8975f5c5SAndroid Build Coastguard Worker }
241*8975f5c5SAndroid Build Coastguard Worker 
VertexShaderVulkan(GLint majorVersion,GLint minorVersion,ExtensionName multiviewExtension)242*8975f5c5SAndroid Build Coastguard Worker MultiviewImplementationParams VertexShaderVulkan(GLint majorVersion,
243*8975f5c5SAndroid Build Coastguard Worker                                                  GLint minorVersion,
244*8975f5c5SAndroid Build Coastguard Worker                                                  ExtensionName multiviewExtension)
245*8975f5c5SAndroid Build Coastguard Worker {
246*8975f5c5SAndroid Build Coastguard Worker     return MultiviewImplementationParams(majorVersion, minorVersion, egl_platform::VULKAN(),
247*8975f5c5SAndroid Build Coastguard Worker                                          multiviewExtension);
248*8975f5c5SAndroid Build Coastguard Worker }
249*8975f5c5SAndroid Build Coastguard Worker 
VertexShaderD3D11(GLint majorVersion,GLint minorVersion,ExtensionName multiviewExtension)250*8975f5c5SAndroid Build Coastguard Worker MultiviewImplementationParams VertexShaderD3D11(GLint majorVersion,
251*8975f5c5SAndroid Build Coastguard Worker                                                 GLint minorVersion,
252*8975f5c5SAndroid Build Coastguard Worker                                                 ExtensionName multiviewExtension)
253*8975f5c5SAndroid Build Coastguard Worker {
254*8975f5c5SAndroid Build Coastguard Worker     return MultiviewImplementationParams(majorVersion, minorVersion, egl_platform::D3D11(),
255*8975f5c5SAndroid Build Coastguard Worker                                          multiviewExtension);
256*8975f5c5SAndroid Build Coastguard Worker }
257*8975f5c5SAndroid Build Coastguard Worker 
GeomShaderD3D11(GLint majorVersion,GLint minorVersion,ExtensionName multiviewExtension)258*8975f5c5SAndroid Build Coastguard Worker MultiviewImplementationParams GeomShaderD3D11(GLint majorVersion,
259*8975f5c5SAndroid Build Coastguard Worker                                               GLint minorVersion,
260*8975f5c5SAndroid Build Coastguard Worker                                               ExtensionName multiviewExtension)
261*8975f5c5SAndroid Build Coastguard Worker {
262*8975f5c5SAndroid Build Coastguard Worker     return MultiviewImplementationParams(
263*8975f5c5SAndroid Build Coastguard Worker         majorVersion, minorVersion,
264*8975f5c5SAndroid Build Coastguard Worker         egl_platform::D3D11().enable(Feature::SelectViewInGeometryShader), multiviewExtension);
265*8975f5c5SAndroid Build Coastguard Worker }
266*8975f5c5SAndroid Build Coastguard Worker 
267*8975f5c5SAndroid Build Coastguard Worker }  // namespace angle
268