blob: 03b2f1e7e6e0fff1608aea9f47dee51dad787bde [file] [log] [blame]
// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <GLES2/gl2extchromium.h>
#include <stdint.h>
#include "gpu/command_buffer/tests/gl_manager.h"
#include "gpu/command_buffer/tests/gl_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace gpu {
// Test that an offscreen surface with zero size initializes correctly
TEST(OffscreenSurfaceTest, ZeroInitialSize) {
GLManager::Options options;
options.size = gfx::Size(0, 0);
options.context_type = CONTEXT_TYPE_OPENGLES2;
GLManager gl;
gl.Initialize(options);
ASSERT_TRUE(gl.IsInitialized());
gl.Destroy();
}
// Test that an offscreen surface can be resized to zero
TEST(OffscreenSurfaceTest, ResizeToZero) {
GLManager::Options options;
options.size = gfx::Size(4, 4);
options.context_type = CONTEXT_TYPE_OPENGLES2;
GLManager gl;
gl.Initialize(options);
ASSERT_TRUE(gl.IsInitialized());
gl.MakeCurrent();
// If losing the context will cause the process to exit, do not perform this
// test as it will cause all subsequent tests to not run.
if (gl.workarounds().exit_on_context_lost) {
gl.Destroy();
return;
}
// Generates context loss and fails the test if the resize fails.
glResizeCHROMIUM(0, 0, 1.0f, GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM, GL_TRUE);
gl.Destroy();
}
// Resize to a number between maximum int and uint
TEST(OffscreenSurfaceTest, ResizeOverflow) {
GLManager::Options options;
options.size = gfx::Size(4, 4);
options.context_type = CONTEXT_TYPE_OPENGLES2;
options.context_lost_allowed = true;
GLManager gl;
gl.Initialize(options);
ASSERT_TRUE(gl.IsInitialized());
gl.MakeCurrent();
// If losing the context will cause the process to exit, do not perform this
// test as it will cause all subsequent tests to not run.
if (gl.workarounds().exit_on_context_lost) {
gl.Destroy();
return;
}
// Context loss is allowed trying to resize to such a huge value but make sure
// that no asserts or undefined behavior is triggered
static const GLuint kLargeSize =
static_cast<GLuint>(std::numeric_limits<int>::max()) + 10;
glResizeCHROMIUM(kLargeSize, 1, 1.0f, GL_COLOR_SPACE_UNSPECIFIED_CHROMIUM,
GL_TRUE);
gl.Destroy();
}
} // namespace gpu