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

Unified Diff: content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc

Issue 1134993003: ozone: Implement zero/one-copy texture for Ozone GBM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: open VGEM device in renderer in ad-hoc manner Created 5 years, 4 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
Index: content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc b/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
index 7acf59c8e51527215405b8ee7a18c12c2f90160c..0279fd22ad5352cef9efd3bbe715213328b6b61c 100644
--- a/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.cc
@@ -4,7 +4,7 @@
#include "content/common/gpu/client/gpu_memory_buffer_impl_ozone_native_pixmap.h"
-#include "ui/ozone/public/surface_factory_ozone.h"
+#include "ui/ozone/public/client_native_pixmap_factory.h"
namespace content {
@@ -12,8 +12,9 @@ GpuMemoryBufferImplOzoneNativePixmap::GpuMemoryBufferImplOzoneNativePixmap(
gfx::GpuMemoryBufferId id,
const gfx::Size& size,
gfx::BufferFormat format,
+ gfx::BufferUsage usage,
const DestructionCallback& callback)
- : GpuMemoryBufferImpl(id, size, format, callback) {}
+ : GpuMemoryBufferImpl(id, size, format, callback), usage_(usage) {}
GpuMemoryBufferImplOzoneNativePixmap::~GpuMemoryBufferImplOzoneNativePixmap() {}
@@ -25,22 +26,54 @@ GpuMemoryBufferImplOzoneNativePixmap::CreateFromHandle(
gfx::BufferFormat format,
gfx::BufferUsage usage,
const DestructionCallback& callback) {
- return make_scoped_ptr<GpuMemoryBufferImpl>(
- new GpuMemoryBufferImplOzoneNativePixmap(handle.id, size, format,
- callback));
+ scoped_ptr<GpuMemoryBufferImplOzoneNativePixmap> buffer =
+ make_scoped_ptr(new GpuMemoryBufferImplOzoneNativePixmap(
+ handle.id, size, format, usage, callback));
+
+ if (!buffer->Initialize(handle))
+ return nullptr;
+ return buffer.Pass();
}
-bool GpuMemoryBufferImplOzoneNativePixmap::Map(void** data) {
+bool GpuMemoryBufferImplOzoneNativePixmap::Initialize(
+ const gfx::GpuMemoryBufferHandle& handle) {
+ DCHECK(ui::ClientNativePixmapFactory::GetInstance());
+ switch (usage_) {
+ case gfx::BufferUsage::MAP:
+ pixmap_ = ui::ClientNativePixmapFactory::GetInstance()
+ ->ImportNativePixmap(handle.handle, size_, format_, usage_)
+ .Pass();
+ return !!pixmap_;
+ case gfx::BufferUsage::PERSISTENT_MAP:
+ NOTREACHED();
+ return false;
+ case gfx::BufferUsage::SCANOUT:
+ return true;
+ }
NOTREACHED();
return false;
}
+bool GpuMemoryBufferImplOzoneNativePixmap::Map(void** data) {
+ DCHECK(!mapped_);
+ DCHECK(usage_ == gfx::BufferUsage::MAP);
+ DCHECK(pixmap_);
+ mapped_ = true;
+ return pixmap_->Map(data);
+}
+
void GpuMemoryBufferImplOzoneNativePixmap::Unmap() {
- NOTREACHED();
+ DCHECK(mapped_);
+ DCHECK(usage_ == gfx::BufferUsage::MAP);
+ DCHECK(pixmap_);
+ pixmap_->Unmap();
+ mapped_ = false;
}
void GpuMemoryBufferImplOzoneNativePixmap::GetStride(int* stride) const {
- NOTREACHED();
+ DCHECK(usage_ == gfx::BufferUsage::MAP);
+ DCHECK(pixmap_);
+ pixmap_->GetStride(stride);
}
gfx::GpuMemoryBufferHandle GpuMemoryBufferImplOzoneNativePixmap::GetHandle()

Powered by Google App Engine
This is Rietveld 408576698