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 ¶ms)
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