blob: 42298a236828136aac6f4744d9f0e3000b964c6f [file] [log] [blame]
Olli Etuahof26b27e2018-08-17 11:01:19 +03001//
2// Copyright 2018 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6// MultiviewTest:
7// Implementation of helpers for multiview testing.
8//
9
10#include "test_utils/MultiviewTest.h"
11#include "platform/WorkaroundsD3D.h"
12
13namespace angle
14{
15
16GLuint CreateSimplePassthroughProgram(int numViews)
17{
18 const std::string vsSource =
19 "#version 300 es\n"
20 "#extension GL_OVR_multiview : require\n"
21 "layout(num_views = " +
22 ToString(numViews) +
23 ") in;\n"
24 "layout(location=0) in vec2 vPosition;\n"
25 "void main()\n"
26 "{\n"
27 " gl_PointSize = 1.;\n"
28 " gl_Position = vec4(vPosition.xy, 0.0, 1.0);\n"
29 "}\n";
30
31 const std::string fsSource =
32 "#version 300 es\n"
33 "#extension GL_OVR_multiview : require\n"
34 "precision mediump float;\n"
35 "out vec4 col;\n"
36 "void main()\n"
37 "{\n"
38 " col = vec4(0,1,0,1);\n"
39 "}\n";
40 return CompileProgram(vsSource, fsSource);
41}
42
43std::ostream &operator<<(std::ostream &os, const MultiviewImplementationParams &params)
44{
45 const PlatformParameters &base = static_cast<const PlatformParameters &>(params);
46 os << base;
47 if (params.mForceUseGeometryShaderOnD3D)
48 {
49 os << "_force_geom_shader";
50 }
51 else
52 {
53 os << "_vertex_shader";
54 }
55 return os;
56}
57
58MultiviewImplementationParams VertexShaderOpenGL(GLint majorVersion, GLint minorVersion)
59{
60 return MultiviewImplementationParams(majorVersion, minorVersion, false, egl_platform::OPENGL());
61}
62
63MultiviewImplementationParams VertexShaderD3D11(GLint majorVersion, GLint minorVersion)
64{
65 return MultiviewImplementationParams(majorVersion, minorVersion, false, egl_platform::D3D11());
66}
67
68MultiviewImplementationParams GeomShaderD3D11(GLint majorVersion, GLint minorVersion)
69{
70 return MultiviewImplementationParams(majorVersion, minorVersion, true, egl_platform::D3D11());
71}
72
73void MultiviewTest::overrideWorkaroundsD3D(WorkaroundsD3D *workarounds)
74{
75 workarounds->selectViewInGeometryShader = GetParam().mForceUseGeometryShaderOnD3D;
76}
77
78} // namespace angle