diff options
Diffstat (limited to 'gfx/angle/src/tests/gl_tests/SimpleOperationTest.cpp')
-rwxr-xr-x | gfx/angle/src/tests/gl_tests/SimpleOperationTest.cpp | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/gfx/angle/src/tests/gl_tests/SimpleOperationTest.cpp b/gfx/angle/src/tests/gl_tests/SimpleOperationTest.cpp new file mode 100755 index 000000000..b11fb9fe9 --- /dev/null +++ b/gfx/angle/src/tests/gl_tests/SimpleOperationTest.cpp @@ -0,0 +1,212 @@ +// +// Copyright 2015 The ANGLE Project Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// SimpleOperationTest: +// Basic GL commands such as linking a program, initializing a buffer, etc. + +#include "test_utils/ANGLETest.h" + +#include <vector> + +using namespace angle; + +namespace +{ + +class SimpleOperationTest : public ANGLETest +{ + protected: + SimpleOperationTest() + { + setWindowWidth(128); + setWindowHeight(128); + setConfigRedBits(8); + setConfigGreenBits(8); + setConfigBlueBits(8); + setConfigAlphaBits(8); + } +}; + +TEST_P(SimpleOperationTest, CompileVertexShader) +{ + const std::string source = SHADER_SOURCE + ( + attribute vec4 a_input; + void main() + { + gl_Position = a_input; + } + ); + + GLuint shader = CompileShader(GL_VERTEX_SHADER, source); + EXPECT_NE(shader, 0u); + glDeleteShader(shader); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, CompileFragmentShader) +{ + const std::string source = SHADER_SOURCE + ( + precision mediump float; + varying vec4 v_input; + void main() + { + gl_FragColor = v_input; + } + ); + + GLuint shader = CompileShader(GL_FRAGMENT_SHADER, source); + EXPECT_NE(shader, 0u); + glDeleteShader(shader); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, LinkProgram) +{ + const std::string vsSource = SHADER_SOURCE + ( + void main() + { + gl_Position = vec4(1.0, 1.0, 1.0, 1.0); + } + ); + + const std::string fsSource = SHADER_SOURCE + ( + void main() + { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + ); + + GLuint program = CompileProgram(vsSource, fsSource); + EXPECT_NE(program, 0u); + glDeleteProgram(program); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, LinkProgramWithUniforms) +{ + const std::string vsSource = SHADER_SOURCE + ( + void main() + { + gl_Position = vec4(1.0, 1.0, 1.0, 1.0); + } + ); + + const std::string fsSource = SHADER_SOURCE + ( + precision mediump float; + uniform vec4 u_input; + void main() + { + gl_FragColor = u_input; + } + ); + + GLuint program = CompileProgram(vsSource, fsSource); + EXPECT_NE(program, 0u); + + GLint uniformLoc = glGetUniformLocation(program, "u_input"); + EXPECT_NE(-1, uniformLoc); + + glDeleteProgram(program); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, LinkProgramWithAttributes) +{ + const std::string vsSource = SHADER_SOURCE + ( + attribute vec4 a_input; + void main() + { + gl_Position = a_input; + } + ); + + const std::string fsSource = SHADER_SOURCE + ( + void main() + { + gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); + } + ); + + GLuint program = CompileProgram(vsSource, fsSource); + EXPECT_NE(program, 0u); + + GLint attribLoc = glGetAttribLocation(program, "a_input"); + EXPECT_NE(-1, attribLoc); + + glDeleteProgram(program); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, BufferDataWithData) +{ + GLuint buffer; + glGenBuffers(1, &buffer); + glBindBuffer(GL_ARRAY_BUFFER, buffer); + + std::vector<uint8_t> data(1024); + glBufferData(GL_ARRAY_BUFFER, data.size(), &data[0], GL_STATIC_DRAW); + + glDeleteBuffers(1, &buffer); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, BufferDataWithNoData) +{ + GLuint buffer; + glGenBuffers(1, &buffer); + glBindBuffer(GL_ARRAY_BUFFER, buffer); + glBufferData(GL_ARRAY_BUFFER, 1024, nullptr, GL_STATIC_DRAW); + glDeleteBuffers(1, &buffer); + + EXPECT_GL_NO_ERROR(); +} + +TEST_P(SimpleOperationTest, BufferSubData) +{ + GLuint buffer; + glGenBuffers(1, &buffer); + glBindBuffer(GL_ARRAY_BUFFER, buffer); + + const size_t bufferSize = 1024; + glBufferData(GL_ARRAY_BUFFER, bufferSize, nullptr, GL_STATIC_DRAW); + + const size_t subDataCount = 16; + std::vector<uint8_t> data(bufferSize / subDataCount); + for (size_t i = 0; i < subDataCount; i++) + { + glBufferSubData(GL_ARRAY_BUFFER, data.size() * i, data.size(), &data[0]); + } + + glDeleteBuffers(1, &buffer); + + EXPECT_GL_NO_ERROR(); +} + +// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against. +ANGLE_INSTANTIATE_TEST(SimpleOperationTest, + ES2_D3D9(), + ES2_D3D11(EGL_EXPERIMENTAL_PRESENT_PATH_COPY_ANGLE), + ES2_D3D11(EGL_EXPERIMENTAL_PRESENT_PATH_FAST_ANGLE), + ES3_D3D11(), + ES2_OPENGL(), + ES3_OPENGL(), + ES2_OPENGLES(), + ES3_OPENGLES()); + +} // namespace |