Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: gpu/command_buffer/tests/gl_manager.cc

Issue 634083002: gpu: Compositor management of GpuMemoryBuffer instances. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cc-pre-chromium-image-refactor
Patch Set: rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gpu/command_buffer/tests/gl_manager.h ('k') | gpu/gles2_conform_support/egl/display.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « gpu/command_buffer/tests/gl_manager.h ('k') | gpu/gles2_conform_support/egl/display.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698