Index: gpu/command_buffer/tests/gl_manager.cc |
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc |
index 2a837eb42c4f3f07ff7a953464bbae27b1f87091..567877890ed8423c8e1be32bce67612cb9eb311b 100644 |
--- a/gpu/command_buffer/tests/gl_manager.cc |
+++ b/gpu/command_buffer/tests/gl_manager.cc |
@@ -6,6 +6,7 @@ |
#include <GLES2/gl2.h> |
#include <GLES2/gl2ext.h> |
+#include <GLES2/gl2extchromium.h> |
#include <vector> |
@@ -35,25 +36,30 @@ |
namespace gpu { |
namespace { |
-int BytesPerPixel(unsigned internalformat) { |
- switch (internalformat) { |
- case GL_RGBA8_OES: |
+size_t BytesPerPixel(gfx::GpuMemoryBuffer::Format format) { |
+ switch (format) { |
+ case gfx::GpuMemoryBuffer::RGBA_8888: |
+ case gfx::GpuMemoryBuffer::BGRA_8888: |
return 4; |
- default: |
+ case gfx::GpuMemoryBuffer::RGBX_8888: |
NOTREACHED(); |
return 0; |
} |
+ |
+ NOTREACHED(); |
+ return 0; |
} |
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { |
public: |
GpuMemoryBufferImpl(base::RefCountedBytes* bytes, |
const gfx::Size& size, |
- unsigned internalformat) |
- : bytes_(bytes), |
- size_(size), |
- internalformat_(internalformat), |
- mapped_(false) {} |
+ gfx::GpuMemoryBuffer::Format format) |
+ : bytes_(bytes), size_(size), format_(format), mapped_(false) {} |
+ |
+ static GpuMemoryBufferImpl* FromClientBuffer(ClientBuffer buffer) { |
+ return reinterpret_cast<GpuMemoryBufferImpl*>(buffer); |
+ } |
// Overridden from gfx::GpuMemoryBuffer: |
virtual void* Map() override { |
@@ -62,18 +68,24 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { |
} |
virtual void Unmap() override { mapped_ = false; } |
virtual bool IsMapped() const override { return mapped_; } |
+ virtual Format GetFormat() const override { return format_; } |
virtual uint32 GetStride() const override { |
- return size_.width() * BytesPerPixel(internalformat_); |
+ return size_.width() * BytesPerPixel(format_); |
} |
virtual gfx::GpuMemoryBufferHandle GetHandle() const override { |
NOTREACHED(); |
return gfx::GpuMemoryBufferHandle(); |
} |
+ virtual ClientBuffer AsClientBuffer() override { |
+ return reinterpret_cast<ClientBuffer>(this); |
+ } |
+ |
+ base::RefCountedBytes* bytes() { return bytes_.get(); } |
private: |
scoped_refptr<base::RefCountedBytes> bytes_; |
const gfx::Size size_; |
- unsigned internalformat_; |
+ gfx::GpuMemoryBuffer::Format format_; |
bool mapped_; |
}; |
@@ -116,6 +128,16 @@ GLManager::~GLManager() { |
} |
} |
+// static |
+scoped_ptr<gfx::GpuMemoryBuffer> GLManager::CreateGpuMemoryBuffer( |
+ const gfx::Size& size, |
+ gfx::GpuMemoryBuffer::Format format) { |
+ std::vector<unsigned char> data(size.GetArea() * BytesPerPixel(format), 0); |
+ scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data)); |
+ return make_scoped_ptr<gfx::GpuMemoryBuffer>( |
+ new GpuMemoryBufferImpl(bytes.get(), size, format)); |
+} |
+ |
void GLManager::Initialize(const GLManager::Options& options) { |
const int32 kCommandBufferSize = 1024 * 1024; |
const size_t kStartTransferBufferSize = 4 * 1024 * 1024; |
@@ -315,45 +337,44 @@ Capabilities GLManager::GetCapabilities() { |
return decoder_->GetCapabilities(); |
} |
-gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer( |
- size_t width, |
- size_t height, |
- unsigned internalformat, |
- unsigned usage, |
- int32* id) { |
- gfx::Size size(width, height); |
+int32 GLManager::CreateImage(ClientBuffer buffer, |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat) { |
+ GpuMemoryBufferImpl* gpu_memory_buffer = |
+ GpuMemoryBufferImpl::FromClientBuffer(buffer); |
- *id = -1; |
- |
- std::vector<unsigned char> data( |
- size.GetArea() * BytesPerPixel(internalformat), 0); |
- scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data)); |
- scoped_ptr<gfx::GpuMemoryBuffer> buffer( |
- new GpuMemoryBufferImpl(bytes.get(), size, internalformat)); |
+ scoped_refptr<gfx::GLImageRefCountedMemory> image( |
+ new gfx::GLImageRefCountedMemory(gfx::Size(width, height), |
+ internalformat)); |
+ if (!image->Initialize(gpu_memory_buffer->bytes(), |
+ gpu_memory_buffer->GetFormat())) { |
+ return -1; |
+ } |
static int32 next_id = 1; |
int32 new_id = next_id++; |
- scoped_refptr<gfx::GLImageRefCountedMemory> image( |
- new gfx::GLImageRefCountedMemory(size, internalformat)); |
- if (!image->Initialize(bytes.get())) |
- return NULL; |
- |
gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); |
DCHECK(image_manager); |
image_manager->AddImage(image.get(), new_id); |
+ return new_id; |
+} |
- *id = new_id; |
- DCHECK(gpu_memory_buffers_.find(new_id) == gpu_memory_buffers_.end()); |
- return gpu_memory_buffers_.add(new_id, buffer.Pass()).first->second; |
+int32 GLManager::CreateGpuMemoryBufferImage(size_t width, |
+ size_t height, |
+ unsigned internalformat, |
+ unsigned usage) { |
+ DCHECK_EQ(usage, static_cast<unsigned>(GL_MAP_CHROMIUM)); |
+ scoped_ptr<gfx::GpuMemoryBuffer> buffer = GLManager::CreateGpuMemoryBuffer( |
+ gfx::Size(width, height), gfx::GpuMemoryBuffer::RGBA_8888); |
+ return CreateImage(buffer->AsClientBuffer(), width, height, internalformat); |
} |
-void GLManager::DestroyGpuMemoryBuffer(int32 id) { |
+void GLManager::DestroyImage(int32 id) { |
gpu::gles2::ImageManager* image_manager = decoder_->GetImageManager(); |
DCHECK(image_manager); |
image_manager->RemoveImage(id); |
- |
- gpu_memory_buffers_.erase(id); |
} |
uint32 GLManager::InsertSyncPoint() { |