| Index: cc/test/test_web_graphics_context_3d.cc
|
| diff --git a/cc/test/test_web_graphics_context_3d.cc b/cc/test/test_web_graphics_context_3d.cc
|
| index 2d82f89a71cdd8005f69f41cecde3d8a6061e9f6..8aa392de290b6d7301b9d79d4ed6559d9f5a7f94 100644
|
| --- a/cc/test/test_web_graphics_context_3d.cc
|
| +++ b/cc/test/test_web_graphics_context_3d.cc
|
| @@ -18,9 +18,6 @@
|
|
|
| namespace cc {
|
|
|
| -static const GLuint kFramebufferId = 1;
|
| -static const GLuint kRenderbufferId = 2;
|
| -
|
| static unsigned s_context_id = 1;
|
|
|
| const GLuint TestWebGraphicsContext3D::kExternalTextureId = 1337;
|
| @@ -34,7 +31,8 @@ TestWebGraphicsContext3D::Namespace*
|
| TestWebGraphicsContext3D::Namespace::Namespace()
|
| : next_buffer_id(1),
|
| next_image_id(1),
|
| - next_texture_id(1) {
|
| + next_texture_id(1),
|
| + next_renderbuffer_id(1) {
|
| }
|
|
|
| TestWebGraphicsContext3D::Namespace::~Namespace() {
|
| @@ -58,6 +56,8 @@ TestWebGraphicsContext3D::TestWebGraphicsContext3D()
|
| max_used_transfer_buffer_usage_bytes_(0),
|
| next_program_id_(1000),
|
| next_shader_id_(2000),
|
| + next_framebuffer_id_(1),
|
| + current_framebuffer_(0),
|
| max_texture_size_(2048),
|
| reshape_called_(false),
|
| width_(0),
|
| @@ -162,13 +162,13 @@ void TestWebGraphicsContext3D::genBuffers(GLsizei count, GLuint* ids) {
|
| void TestWebGraphicsContext3D::genFramebuffers(
|
| GLsizei count, GLuint* ids) {
|
| for (int i = 0; i < count; ++i)
|
| - ids[i] = kFramebufferId | context_id_ << 16;
|
| + ids[i] = NextFramebufferId();
|
| }
|
|
|
| void TestWebGraphicsContext3D::genRenderbuffers(
|
| GLsizei count, GLuint* ids) {
|
| for (int i = 0; i < count; ++i)
|
| - ids[i] = kRenderbufferId | context_id_ << 16;
|
| + ids[i] = NextRenderbufferId();
|
| }
|
|
|
| void TestWebGraphicsContext3D::genTextures(GLsizei count, GLuint* ids) {
|
| @@ -188,14 +188,19 @@ void TestWebGraphicsContext3D::deleteBuffers(GLsizei count, GLuint* ids) {
|
|
|
| void TestWebGraphicsContext3D::deleteFramebuffers(
|
| GLsizei count, GLuint* ids) {
|
| - for (int i = 0; i < count; ++i)
|
| - DCHECK_EQ(kFramebufferId | context_id_ << 16, ids[i]);
|
| + for (int i = 0; i < count; ++i) {
|
| + if (ids[i]) {
|
| + RetireFramebufferId(ids[i]);
|
| + if (ids[i] == current_framebuffer_)
|
| + current_framebuffer_ = 0;
|
| + }
|
| + }
|
| }
|
|
|
| void TestWebGraphicsContext3D::deleteRenderbuffers(
|
| GLsizei count, GLuint* ids) {
|
| for (int i = 0; i < count; ++i)
|
| - DCHECK_EQ(kRenderbufferId | context_id_ << 16, ids[i]);
|
| + RetireRenderbufferId(ids[i]);
|
| }
|
|
|
| void TestWebGraphicsContext3D::deleteTextures(GLsizei count, GLuint* ids) {
|
| @@ -294,16 +299,31 @@ void TestWebGraphicsContext3D::useProgram(GLuint program) {
|
|
|
| void TestWebGraphicsContext3D::bindFramebuffer(
|
| GLenum target, GLuint framebuffer) {
|
| - if (!framebuffer)
|
| - return;
|
| - DCHECK_EQ(kFramebufferId | context_id_ << 16, framebuffer);
|
| + base::AutoLock lock_for_framebuffer_access(namespace_->lock);
|
| + if (framebuffer != 0 &&
|
| + framebuffer_set_.find(framebuffer) == framebuffer_set_.end()) {
|
| + ADD_FAILURE() << "bindFramebuffer called with unknown framebuffer";
|
| + } else if (framebuffer != 0 && (framebuffer >> 16) != context_id_) {
|
| + ADD_FAILURE()
|
| + << "bindFramebuffer called with framebuffer from other context";
|
| + } else {
|
| + current_framebuffer_ = framebuffer;
|
| + }
|
| }
|
|
|
| void TestWebGraphicsContext3D::bindRenderbuffer(
|
| GLenum target, GLuint renderbuffer) {
|
| if (!renderbuffer)
|
| return;
|
| - DCHECK_EQ(kRenderbufferId | context_id_ << 16, renderbuffer);
|
| + base::AutoLock lock_for_renderbuffer_access(namespace_->lock);
|
| + if (renderbuffer != 0 &&
|
| + namespace_->renderbuffer_set.find(renderbuffer) ==
|
| + namespace_->renderbuffer_set.end()) {
|
| + ADD_FAILURE() << "bindRenderbuffer called with unknown renderbuffer";
|
| + } else if ((renderbuffer >> 16) != context_id_) {
|
| + ADD_FAILURE()
|
| + << "bindRenderbuffer called with renderbuffer from other context";
|
| + }
|
| }
|
|
|
| void TestWebGraphicsContext3D::bindTexture(
|
| @@ -370,6 +390,8 @@ void TestWebGraphicsContext3D::getIntegerv(
|
| *value = GL_TEXTURE0;
|
| else if (pname == GL_UNPACK_ALIGNMENT)
|
| *value = unpack_alignment_;
|
| + else if (pname == GL_FRAMEBUFFER_BINDING)
|
| + *value = current_framebuffer_;
|
| }
|
|
|
| void TestWebGraphicsContext3D::getProgramiv(GLuint program,
|
| @@ -674,6 +696,37 @@ void TestWebGraphicsContext3D::RetireImageId(GLuint id) {
|
| DCHECK_EQ(context_id, context_id_);
|
| }
|
|
|
| +GLuint TestWebGraphicsContext3D::NextFramebufferId() {
|
| + base::AutoLock lock_for_framebuffer_access(namespace_->lock);
|
| + GLuint id = next_framebuffer_id_++;
|
| + DCHECK(id < (1 << 16));
|
| + id |= context_id_ << 16;
|
| + framebuffer_set_.insert(id);
|
| + return id;
|
| +}
|
| +
|
| +void TestWebGraphicsContext3D::RetireFramebufferId(GLuint id) {
|
| + base::AutoLock lock_for_framebuffer_access(namespace_->lock);
|
| + DCHECK(framebuffer_set_.find(id) != framebuffer_set_.end());
|
| + framebuffer_set_.erase(id);
|
| +}
|
| +
|
| +GLuint TestWebGraphicsContext3D::NextRenderbufferId() {
|
| + base::AutoLock lock_for_renderbuffer_access(namespace_->lock);
|
| + GLuint id = namespace_->next_renderbuffer_id++;
|
| + DCHECK(id < (1 << 16));
|
| + id |= context_id_ << 16;
|
| + namespace_->renderbuffer_set.insert(id);
|
| + return id;
|
| +}
|
| +
|
| +void TestWebGraphicsContext3D::RetireRenderbufferId(GLuint id) {
|
| + base::AutoLock lock_for_renderbuffer_access(namespace_->lock);
|
| + DCHECK(namespace_->renderbuffer_set.find(id) !=
|
| + namespace_->renderbuffer_set.end());
|
| + namespace_->renderbuffer_set.erase(id);
|
| +}
|
| +
|
| void TestWebGraphicsContext3D::SetMaxTransferBufferUsageBytes(
|
| size_t max_transfer_buffer_usage_bytes) {
|
| test_capabilities_.max_transfer_buffer_usage_bytes =
|
|
|