| Index: gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..802290c862841150462a8a2515781e6c149ed667
|
| --- /dev/null
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_attribs.cc
|
| @@ -0,0 +1,544 @@
|
| +// Copyright (c) 2012 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 "gpu/command_buffer/service/gles2_cmd_decoder.h"
|
| +
|
| +#include "base/command_line.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "gpu/command_buffer/common/gles2_cmd_format.h"
|
| +#include "gpu/command_buffer/common/gles2_cmd_utils.h"
|
| +#include "gpu/command_buffer/common/id_allocator.h"
|
| +#include "gpu/command_buffer/service/async_pixel_transfer_delegate_mock.h"
|
| +#include "gpu/command_buffer/service/async_pixel_transfer_manager.h"
|
| +#include "gpu/command_buffer/service/async_pixel_transfer_manager_mock.h"
|
| +#include "gpu/command_buffer/service/cmd_buffer_engine.h"
|
| +#include "gpu/command_buffer/service/context_group.h"
|
| +#include "gpu/command_buffer/service/context_state.h"
|
| +#include "gpu/command_buffer/service/gl_surface_mock.h"
|
| +#include "gpu/command_buffer/service/gles2_cmd_decoder_unittest.h"
|
| +
|
| +#include "gpu/command_buffer/service/gpu_switches.h"
|
| +#include "gpu/command_buffer/service/image_manager.h"
|
| +#include "gpu/command_buffer/service/mailbox_manager.h"
|
| +#include "gpu/command_buffer/service/mocks.h"
|
| +#include "gpu/command_buffer/service/program_manager.h"
|
| +#include "gpu/command_buffer/service/test_helper.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/gl/gl_implementation.h"
|
| +#include "ui/gl/gl_mock.h"
|
| +#include "ui/gl/gl_surface_stub.h"
|
| +
|
| +#if !defined(GL_DEPTH24_STENCIL8)
|
| +#define GL_DEPTH24_STENCIL8 0x88F0
|
| +#endif
|
| +
|
| +using ::gfx::MockGLInterface;
|
| +using ::testing::_;
|
| +using ::testing::DoAll;
|
| +using ::testing::InSequence;
|
| +using ::testing::Invoke;
|
| +using ::testing::MatcherCast;
|
| +using ::testing::Mock;
|
| +using ::testing::Pointee;
|
| +using ::testing::Return;
|
| +using ::testing::SaveArg;
|
| +using ::testing::SetArrayArgument;
|
| +using ::testing::SetArgumentPointee;
|
| +using ::testing::SetArgPointee;
|
| +using ::testing::StrEq;
|
| +using ::testing::StrictMock;
|
| +
|
| +namespace gpu {
|
| +namespace gles2 {
|
| +
|
| +using namespace cmds;
|
| +
|
| +TEST_F(GLES2DecoderWithShaderTest, GetVertexAttribPointervSucceeds) {
|
| + const float dummy = 0;
|
| + const GLuint kOffsetToTestFor = sizeof(dummy) * 4;
|
| + const GLuint kIndexToTest = 1;
|
| + GetVertexAttribPointerv::Result* result =
|
| + static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
|
| + result->size = 0;
|
| + const GLuint* result_value = result->GetData();
|
| + // Test that initial value is 0.
|
| + GetVertexAttribPointerv cmd;
|
| + cmd.Init(kIndexToTest,
|
| + GL_VERTEX_ATTRIB_ARRAY_POINTER,
|
| + shared_memory_id_,
|
| + shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(sizeof(*result_value), result->size);
|
| + EXPECT_EQ(0u, *result_value);
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +
|
| + // Set the value and see that we get it.
|
| + SetupVertexBuffer();
|
| + DoVertexAttribPointer(kIndexToTest, 2, GL_FLOAT, 0, kOffsetToTestFor);
|
| + result->size = 0;
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(sizeof(*result_value), result->size);
|
| + EXPECT_EQ(kOffsetToTestFor, *result_value);
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderWithShaderTest, GetVertexAttribPointervBadArgsFails) {
|
| + const GLuint kIndexToTest = 1;
|
| + GetVertexAttribPointerv::Result* result =
|
| + static_cast<GetVertexAttribPointerv::Result*>(shared_memory_address_);
|
| + result->size = 0;
|
| + const GLuint* result_value = result->GetData();
|
| + // Test pname invalid fails.
|
| + GetVertexAttribPointerv cmd;
|
| + cmd.Init(kIndexToTest,
|
| + GL_VERTEX_ATTRIB_ARRAY_POINTER + 1,
|
| + shared_memory_id_,
|
| + shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(0u, result->size);
|
| + EXPECT_EQ(kInitialResult, *result_value);
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| +
|
| + // Test index out of range fails.
|
| + result->size = 0;
|
| + cmd.Init(kNumVertexAttribs,
|
| + GL_VERTEX_ATTRIB_ARRAY_POINTER,
|
| + shared_memory_id_,
|
| + shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(0u, result->size);
|
| + EXPECT_EQ(kInitialResult, *result_value);
|
| + EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
|
| +
|
| + // Test memory id bad fails.
|
| + cmd.Init(kIndexToTest,
|
| + GL_VERTEX_ATTRIB_ARRAY_POINTER,
|
| + kInvalidSharedMemoryId,
|
| + shared_memory_offset_);
|
| + EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
|
| +
|
| + // Test memory offset bad fails.
|
| + cmd.Init(kIndexToTest,
|
| + GL_VERTEX_ATTRIB_ARRAY_POINTER,
|
| + shared_memory_id_,
|
| + kInvalidSharedMemoryOffset);
|
| + EXPECT_NE(error::kNoError, ExecuteCmd(cmd));
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderWithShaderTest, BindBufferToDifferentTargetFails) {
|
| + // Bind the buffer to GL_ARRAY_BUFFER
|
| + DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
|
| + // Attempt to rebind to GL_ELEMENT_ARRAY_BUFFER
|
| + // NOTE: Real GLES2 does not have this restriction but WebGL and we do.
|
| + // This can be restriction can be removed at runtime.
|
| + EXPECT_CALL(*gl_, BindBuffer(_, _)).Times(0);
|
| + BindBuffer cmd;
|
| + cmd.Init(GL_ELEMENT_ARRAY_BUFFER, client_buffer_id_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderWithShaderTest, VertexAttribPointer) {
|
| + SetupVertexBuffer();
|
| + static const GLenum types[] = {
|
| + GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT,
|
| + GL_FLOAT, GL_FIXED, GL_INT, GL_UNSIGNED_INT,
|
| + };
|
| + static const GLsizei sizes[] = {
|
| + 1, 1, 2, 2, 4, 4, 4, 4,
|
| + };
|
| + static const GLuint indices[] = {
|
| + 0, 1, kNumVertexAttribs - 1, kNumVertexAttribs,
|
| + };
|
| + static const GLsizei offset_mult[] = {
|
| + 0, 0, 1, 1, 2, 1000,
|
| + };
|
| + static const GLsizei offset_offset[] = {
|
| + 0, 1, 0, 1, 0, 0,
|
| + };
|
| + static const GLsizei stride_mult[] = {
|
| + -1, 0, 0, 1, 1, 2, 1000,
|
| + };
|
| + static const GLsizei stride_offset[] = {
|
| + 0, 0, 1, 0, 1, 0, 0,
|
| + };
|
| + for (size_t tt = 0; tt < arraysize(types); ++tt) {
|
| + GLenum type = types[tt];
|
| + GLsizei num_bytes = sizes[tt];
|
| + for (size_t ii = 0; ii < arraysize(indices); ++ii) {
|
| + GLuint index = indices[ii];
|
| + for (GLint size = 0; size < 5; ++size) {
|
| + for (size_t oo = 0; oo < arraysize(offset_mult); ++oo) {
|
| + GLuint offset = num_bytes * offset_mult[oo] + offset_offset[oo];
|
| + for (size_t ss = 0; ss < arraysize(stride_mult); ++ss) {
|
| + GLsizei stride = num_bytes * stride_mult[ss] + stride_offset[ss];
|
| + for (int normalize = 0; normalize < 2; ++normalize) {
|
| + bool index_good = index < static_cast<GLuint>(kNumVertexAttribs);
|
| + bool size_good = (size > 0 && size < 5);
|
| + bool offset_good = (offset % num_bytes == 0);
|
| + bool stride_good =
|
| + (stride % num_bytes == 0) && stride >= 0 && stride <= 255;
|
| + bool type_good = (type != GL_INT && type != GL_UNSIGNED_INT &&
|
| + type != GL_FIXED);
|
| + bool good = size_good && offset_good && stride_good &&
|
| + type_good && index_good;
|
| + bool call = good && (type != GL_FIXED);
|
| + if (call) {
|
| + EXPECT_CALL(*gl_,
|
| + VertexAttribPointer(index,
|
| + size,
|
| + type,
|
| + normalize,
|
| + stride,
|
| + BufferOffset(offset)));
|
| + }
|
| + VertexAttribPointer cmd;
|
| + cmd.Init(index, size, type, normalize, stride, offset);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + if (good) {
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + } else if (size_good && offset_good && stride_good && type_good &&
|
| + !index_good) {
|
| + EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
|
| + } else if (size_good && offset_good && stride_good &&
|
| + !type_good && index_good) {
|
| + EXPECT_EQ(GL_INVALID_ENUM, GetGLError());
|
| + } else if (size_good && offset_good && !stride_good &&
|
| + type_good && index_good) {
|
| + if (stride < 0 || stride > 255) {
|
| + EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
|
| + } else {
|
| + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
|
| + }
|
| + } else if (size_good && !offset_good && stride_good &&
|
| + type_good && index_good) {
|
| + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
|
| + } else if (!size_good && offset_good && stride_good &&
|
| + type_good && index_good) {
|
| + EXPECT_EQ(GL_INVALID_VALUE, GetGLError());
|
| + } else {
|
| + EXPECT_NE(GL_NO_ERROR, GetGLError());
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +class GLES2DecoderVertexArraysOESTest : public GLES2DecoderWithShaderTest {
|
| + public:
|
| + GLES2DecoderVertexArraysOESTest() {}
|
| +
|
| + bool vertex_array_deleted_manually_;
|
| +
|
| + virtual void SetUp() {
|
| + InitState init;
|
| + init.extensions = "GL_OES_vertex_array_object";
|
| + init.gl_version = "opengl es 2.0";
|
| + init.bind_generates_resource = true;
|
| + InitDecoder(init);
|
| + SetupDefaultProgram();
|
| +
|
| + AddExpectationsForGenVertexArraysOES();
|
| + GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
|
| +
|
| + vertex_array_deleted_manually_ = false;
|
| + }
|
| +
|
| + virtual void TearDown() {
|
| + // This should only be set if the test handled deletion of the vertex array
|
| + // itself. Necessary because vertex_array_objects are not sharable, and thus
|
| + // not managed in the ContextGroup, meaning they will be destroyed during
|
| + // test tear down
|
| + if (!vertex_array_deleted_manually_) {
|
| + AddExpectationsForDeleteVertexArraysOES();
|
| + }
|
| +
|
| + GLES2DecoderWithShaderTest::TearDown();
|
| + }
|
| +
|
| + void GenVertexArraysOESValidArgs() {
|
| + AddExpectationsForGenVertexArraysOES();
|
| + GetSharedMemoryAs<GLuint*>()[0] = kNewClientId;
|
| + GenVertexArraysOES cmd;
|
| + cmd.Init(1, shared_memory_id_, shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_TRUE(GetVertexArrayInfo(kNewClientId) != NULL);
|
| + AddExpectationsForDeleteVertexArraysOES();
|
| + }
|
| +
|
| + void GenVertexArraysOESInvalidArgs() {
|
| + EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
|
| + GetSharedMemoryAs<GLuint*>()[0] = client_vertexarray_id_;
|
| + GenVertexArraysOES cmd;
|
| + cmd.Init(1, shared_memory_id_, shared_memory_offset_);
|
| + EXPECT_EQ(error::kInvalidArguments, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + void GenVertexArraysOESImmediateValidArgs() {
|
| + AddExpectationsForGenVertexArraysOES();
|
| + GenVertexArraysOESImmediate* cmd =
|
| + GetImmediateAs<GenVertexArraysOESImmediate>();
|
| + GLuint temp = kNewClientId;
|
| + cmd->Init(1, &temp);
|
| + EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(*cmd, sizeof(temp)));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_TRUE(GetVertexArrayInfo(kNewClientId) != NULL);
|
| + AddExpectationsForDeleteVertexArraysOES();
|
| + }
|
| +
|
| + void GenVertexArraysOESImmediateInvalidArgs() {
|
| + EXPECT_CALL(*gl_, GenVertexArraysOES(_, _)).Times(0);
|
| + GenVertexArraysOESImmediate* cmd =
|
| + GetImmediateAs<GenVertexArraysOESImmediate>();
|
| + cmd->Init(1, &client_vertexarray_id_);
|
| + EXPECT_EQ(error::kInvalidArguments,
|
| + ExecuteImmediateCmd(*cmd, sizeof(&client_vertexarray_id_)));
|
| + }
|
| +
|
| + void DeleteVertexArraysOESValidArgs() {
|
| + AddExpectationsForDeleteVertexArraysOES();
|
| + GetSharedMemoryAs<GLuint*>()[0] = client_vertexarray_id_;
|
| + DeleteVertexArraysOES cmd;
|
| + cmd.Init(1, shared_memory_id_, shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
|
| + vertex_array_deleted_manually_ = true;
|
| + }
|
| +
|
| + void DeleteVertexArraysOESInvalidArgs() {
|
| + GetSharedMemoryAs<GLuint*>()[0] = kInvalidClientId;
|
| + DeleteVertexArraysOES cmd;
|
| + cmd.Init(1, shared_memory_id_, shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + void DeleteVertexArraysOESImmediateValidArgs() {
|
| + AddExpectationsForDeleteVertexArraysOES();
|
| + DeleteVertexArraysOESImmediate& cmd =
|
| + *GetImmediateAs<DeleteVertexArraysOESImmediate>();
|
| + cmd.Init(1, &client_vertexarray_id_);
|
| + EXPECT_EQ(error::kNoError,
|
| + ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
|
| + vertex_array_deleted_manually_ = true;
|
| + }
|
| +
|
| + void DeleteVertexArraysOESImmediateInvalidArgs() {
|
| + DeleteVertexArraysOESImmediate& cmd =
|
| + *GetImmediateAs<DeleteVertexArraysOESImmediate>();
|
| + GLuint temp = kInvalidClientId;
|
| + cmd.Init(1, &temp);
|
| + EXPECT_EQ(error::kNoError, ExecuteImmediateCmd(cmd, sizeof(temp)));
|
| + }
|
| +
|
| + void DeleteBoundVertexArraysOESImmediateValidArgs() {
|
| + BindVertexArrayOESValidArgs();
|
| +
|
| + AddExpectationsForDeleteBoundVertexArraysOES();
|
| + DeleteVertexArraysOESImmediate& cmd =
|
| + *GetImmediateAs<DeleteVertexArraysOESImmediate>();
|
| + cmd.Init(1, &client_vertexarray_id_);
|
| + EXPECT_EQ(error::kNoError,
|
| + ExecuteImmediateCmd(cmd, sizeof(client_vertexarray_id_)));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + EXPECT_TRUE(GetVertexArrayInfo(client_vertexarray_id_) == NULL);
|
| + vertex_array_deleted_manually_ = true;
|
| + }
|
| +
|
| + void IsVertexArrayOESValidArgs() {
|
| + IsVertexArrayOES cmd;
|
| + cmd.Init(client_vertexarray_id_, shared_memory_id_, shared_memory_offset_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + }
|
| +
|
| + void IsVertexArrayOESInvalidArgsBadSharedMemoryId() {
|
| + IsVertexArrayOES cmd;
|
| + cmd.Init(
|
| + client_vertexarray_id_, kInvalidSharedMemoryId, shared_memory_offset_);
|
| + EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
|
| + cmd.Init(
|
| + client_vertexarray_id_, shared_memory_id_, kInvalidSharedMemoryOffset);
|
| + EXPECT_EQ(error::kOutOfBounds, ExecuteCmd(cmd));
|
| + }
|
| +
|
| + void BindVertexArrayOESValidArgs() {
|
| + AddExpectationsForBindVertexArrayOES();
|
| + BindVertexArrayOES cmd;
|
| + cmd.Init(client_vertexarray_id_);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_NO_ERROR, GetGLError());
|
| + }
|
| +
|
| + void BindVertexArrayOESValidArgsNewId() {
|
| + BindVertexArrayOES cmd;
|
| + cmd.Init(kNewClientId);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
|
| + }
|
| +};
|
| +
|
| +class GLES2DecoderEmulatedVertexArraysOESTest
|
| + : public GLES2DecoderVertexArraysOESTest {
|
| + public:
|
| + GLES2DecoderEmulatedVertexArraysOESTest() {}
|
| +
|
| + virtual void SetUp() {
|
| + InitState init;
|
| + init.gl_version = "3.0";
|
| + init.bind_generates_resource = true;
|
| + InitDecoder(init);
|
| + SetupDefaultProgram();
|
| +
|
| + AddExpectationsForGenVertexArraysOES();
|
| + GenHelper<GenVertexArraysOESImmediate>(client_vertexarray_id_);
|
| +
|
| + vertex_array_deleted_manually_ = false;
|
| + }
|
| +};
|
| +
|
| +// Test vertex array objects with native support
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESValidArgs) {
|
| + GenVertexArraysOESValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, GenVertexArraysOESValidArgs) {
|
| + GenVertexArraysOESValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESInvalidArgs) {
|
| + GenVertexArraysOESInvalidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, ) {
|
| + GenVertexArraysOESInvalidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, GenVertexArraysOESImmediateValidArgs) {
|
| + GenVertexArraysOESImmediateValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + GenVertexArraysOESImmediateValidArgs) {
|
| + GenVertexArraysOESImmediateValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest,
|
| + GenVertexArraysOESImmediateInvalidArgs) {
|
| + GenVertexArraysOESImmediateInvalidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + GenVertexArraysOESImmediateInvalidArgs) {
|
| + GenVertexArraysOESImmediateInvalidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, DeleteVertexArraysOESValidArgs) {
|
| + DeleteVertexArraysOESValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + DeleteVertexArraysOESValidArgs) {
|
| + DeleteVertexArraysOESValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, DeleteVertexArraysOESInvalidArgs) {
|
| + DeleteVertexArraysOESInvalidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + DeleteVertexArraysOESInvalidArgs) {
|
| + DeleteVertexArraysOESInvalidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest,
|
| + DeleteVertexArraysOESImmediateValidArgs) {
|
| + DeleteVertexArraysOESImmediateValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + DeleteVertexArraysOESImmediateValidArgs) {
|
| + DeleteVertexArraysOESImmediateValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest,
|
| + DeleteVertexArraysOESImmediateInvalidArgs) {
|
| + DeleteVertexArraysOESImmediateInvalidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + DeleteVertexArraysOESImmediateInvalidArgs) {
|
| + DeleteVertexArraysOESImmediateInvalidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest,
|
| + DeleteBoundVertexArraysOESImmediateValidArgs) {
|
| + DeleteBoundVertexArraysOESImmediateValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + DeleteBoundVertexArraysOESImmediateValidArgs) {
|
| + DeleteBoundVertexArraysOESImmediateValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, IsVertexArrayOESValidArgs) {
|
| + IsVertexArrayOESValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, IsVertexArrayOESValidArgs) {
|
| + IsVertexArrayOESValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest,
|
| + IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
|
| + IsVertexArrayOESInvalidArgsBadSharedMemoryId();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + IsVertexArrayOESInvalidArgsBadSharedMemoryId) {
|
| + IsVertexArrayOESInvalidArgsBadSharedMemoryId();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgs) {
|
| + BindVertexArrayOESValidArgs();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest, BindVertexArrayOESValidArgs) {
|
| + BindVertexArrayOESValidArgs();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderVertexArraysOESTest, BindVertexArrayOESValidArgsNewId) {
|
| + BindVertexArrayOESValidArgsNewId();
|
| +}
|
| +TEST_F(GLES2DecoderEmulatedVertexArraysOESTest,
|
| + BindVertexArrayOESValidArgsNewId) {
|
| + BindVertexArrayOESValidArgsNewId();
|
| +}
|
| +
|
| +TEST_F(GLES2DecoderTest, BufferDataGLError) {
|
| + GLenum target = GL_ARRAY_BUFFER;
|
| + GLsizeiptr size = 4;
|
| + DoBindBuffer(GL_ARRAY_BUFFER, client_buffer_id_, kServiceBufferId);
|
| + BufferManager* manager = group().buffer_manager();
|
| + Buffer* buffer = manager->GetBuffer(client_buffer_id_);
|
| + ASSERT_TRUE(buffer != NULL);
|
| + EXPECT_EQ(0, buffer->size());
|
| + EXPECT_CALL(*gl_, GetError())
|
| + .WillOnce(Return(GL_NO_ERROR))
|
| + .WillOnce(Return(GL_OUT_OF_MEMORY))
|
| + .RetiresOnSaturation();
|
| + EXPECT_CALL(*gl_, BufferData(target, size, _, GL_STREAM_DRAW))
|
| + .Times(1)
|
| + .RetiresOnSaturation();
|
| + BufferData cmd;
|
| + cmd.Init(target, size, 0, 0, GL_STREAM_DRAW);
|
| + EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
|
| + EXPECT_EQ(GL_OUT_OF_MEMORY, GetGLError());
|
| + EXPECT_EQ(0, buffer->size());
|
| +}
|
| +
|
| +// TODO(gman): BufferData
|
| +
|
| +// TODO(gman): BufferDataImmediate
|
| +
|
| +// TODO(gman): BufferSubData
|
| +
|
| +// TODO(gman): BufferSubDataImmediate
|
| +
|
| +} // namespace gles2
|
| +} // namespace gpu
|
|
|