blob: fac12a4ab1f9cd4c6d29b469fc34832bb0c17fba [file] [log] [blame]
Jamie Madillfa05f602015-05-07 13:47:11 -04001//
2// Copyright 2015 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
Corentin Wallezd3970de2015-05-14 11:07:48 -04007#include "test_utils/ANGLETest.h"
Geoff Lang58795982015-01-07 14:25:10 -05008
Jamie Madillfa05f602015-05-07 13:47:11 -04009using namespace angle;
Geoff Lang58795982015-01-07 14:25:10 -050010
Geoff Lang58795982015-01-07 14:25:10 -050011class CubeMapTextureTest : public ANGLETest
12{
Jamie Madillfa05f602015-05-07 13:47:11 -040013 protected:
14 CubeMapTextureTest()
Geoff Lang58795982015-01-07 14:25:10 -050015 {
16 setWindowWidth(256);
17 setWindowHeight(256);
18 setConfigRedBits(8);
19 setConfigGreenBits(8);
20 setConfigBlueBits(8);
21 setConfigAlphaBits(8);
22 }
23
24 virtual void SetUp()
25 {
26 ANGLETest::SetUp();
27
Olli Etuaho5804dc82018-04-13 14:11:46 +030028 mProgram = CompileProgram(essl1_shaders::vs::Simple(), essl1_shaders::fs::UniformColor());
Geoff Lang58795982015-01-07 14:25:10 -050029 if (mProgram == 0)
30 {
31 FAIL() << "shader compilation failed.";
32 }
33
Olli Etuaho5804dc82018-04-13 14:11:46 +030034 mColorLocation = glGetUniformLocation(mProgram, essl1_shaders::ColorUniform());
Geoff Lang58795982015-01-07 14:25:10 -050035
36 glUseProgram(mProgram);
37
38 glClearColor(0, 0, 0, 0);
39 glClearDepthf(0.0);
40 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
41
42 glEnable(GL_BLEND);
43 glDisable(GL_DEPTH_TEST);
44
45 ASSERT_GL_NO_ERROR();
46 }
47
48 virtual void TearDown()
49 {
50 glDeleteProgram(mProgram);
51
52 ANGLETest::TearDown();
53 }
54
55 GLuint mProgram;
56 GLint mColorLocation;
57};
58
Jamie Madillb980c562018-11-27 11:34:27 -050059// Verify that rendering to the faces of a cube map consecutively will correctly render to each
60// face.
Jamie Madillfa05f602015-05-07 13:47:11 -040061TEST_P(CubeMapTextureTest, RenderToFacesConsecutively)
Geoff Lang58795982015-01-07 14:25:10 -050062{
Shahbaz Youssefi0864a7a2018-11-07 15:50:15 -050063 // TODO: Diagnose and fix. http://anglebug.com/2954
64 ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsWindows());
65
Michael Spangd8506c72019-01-29 15:35:09 -050066 // http://anglebug.com/3145
67 ANGLE_SKIP_TEST_IF(IsVulkan() && IsIntel() && IsFuchsia());
68
Jamie Madillb980c562018-11-27 11:34:27 -050069 const GLfloat faceColors[] = {
70 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,
71 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f,
Geoff Lang58795982015-01-07 14:25:10 -050072 };
73
74 GLuint tex = 0;
75 glGenTextures(1, &tex);
76 glBindTexture(GL_TEXTURE_CUBE_MAP, tex);
Geoff Langc4e93662017-05-01 10:45:59 -040077 for (GLenum face = 0; face < 6; face++)
78 {
79 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, GL_RGBA, 1, 1, 0, GL_RGBA,
80 GL_UNSIGNED_BYTE, nullptr);
81 }
Geoff Lang58795982015-01-07 14:25:10 -050082 EXPECT_GL_NO_ERROR();
83
84 GLuint fbo = 0;
85 glGenFramebuffers(1, &fbo);
86 glBindFramebuffer(GL_FRAMEBUFFER, fbo);
87 EXPECT_GL_NO_ERROR();
88
Cooper Partin4d61f7e2015-08-12 10:56:50 -070089 for (GLenum face = 0; face < 6; face++)
Geoff Lang58795982015-01-07 14:25:10 -050090 {
Jamie Madillb980c562018-11-27 11:34:27 -050091 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
92 GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, tex, 0);
Geoff Lang58795982015-01-07 14:25:10 -050093 EXPECT_GL_NO_ERROR();
94
95 glUseProgram(mProgram);
96
97 const GLfloat *faceColor = faceColors + (face * 4);
98 glUniform4f(mColorLocation, faceColor[0], faceColor[1], faceColor[2], faceColor[3]);
99
Olli Etuaho5804dc82018-04-13 14:11:46 +0300100 drawQuad(mProgram, essl1_shaders::PositionAttrib(), 0.5f);
Geoff Lang58795982015-01-07 14:25:10 -0500101 EXPECT_GL_NO_ERROR();
102 }
103
Cooper Partin4d61f7e2015-08-12 10:56:50 -0700104 for (GLenum face = 0; face < 6; face++)
Geoff Lang58795982015-01-07 14:25:10 -0500105 {
Jamie Madillb980c562018-11-27 11:34:27 -0500106 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
107 GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, tex, 0);
Geoff Lang58795982015-01-07 14:25:10 -0500108 EXPECT_GL_NO_ERROR();
109
110 const GLfloat *faceColor = faceColors + (face * 4);
Jamie Madillb980c562018-11-27 11:34:27 -0500111 EXPECT_PIXEL_EQ(0, 0, faceColor[0] * 255, faceColor[1] * 255, faceColor[2] * 255,
112 faceColor[3] * 255);
Geoff Lang58795982015-01-07 14:25:10 -0500113 EXPECT_GL_NO_ERROR();
114 }
115
116 glDeleteFramebuffers(1, &fbo);
117 glDeleteTextures(1, &tex);
118
119 EXPECT_GL_NO_ERROR();
120}
Jamie Madillfa05f602015-05-07 13:47:11 -0400121
Jamie Madillb980c562018-11-27 11:34:27 -0500122// Use this to select which configurations (e.g. which renderer, which GLES major version) these
123// tests should be run against.
Geoff Lange0cc2a42016-01-20 10:58:17 -0500124ANGLE_INSTANTIATE_TEST(CubeMapTextureTest,
125 ES2_D3D11(),
Geoff Langf7480ad2017-10-24 11:46:02 -0400126 ES2_D3D11_FL10_0(),
Geoff Lange0cc2a42016-01-20 10:58:17 -0500127 ES2_D3D11_FL9_3(),
128 ES2_OPENGL(),
129 ES3_OPENGL(),
130 ES2_OPENGLES(),
Shahbaz Youssefi0864a7a2018-11-07 15:50:15 -0500131 ES3_OPENGLES(),
132 ES2_VULKAN());