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

Unified Diff: mojo/gles2/command_buffer_client_impl.cc

Issue 1181013010: Support impl-side painting in Mandoline. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix unittest and android gn build Created 5 years, 6 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: mojo/gles2/command_buffer_client_impl.cc
diff --git a/mojo/gles2/command_buffer_client_impl.cc b/mojo/gles2/command_buffer_client_impl.cc
index 97ea89a4e3481282c121ad7159e2d7aa4328f3ed..d6c8fb4ff570aa0a94987ec9e2f5d3f93d3d9483 100644
--- a/mojo/gles2/command_buffer_client_impl.cc
+++ b/mojo/gles2/command_buffer_client_impl.cc
@@ -10,6 +10,9 @@
#include "base/process/process_handle.h"
#include "components/view_manager/gles2/command_buffer_type_conversions.h"
#include "components/view_manager/gles2/mojo_buffer_backing.h"
+#include "components/view_manager/gles2/mojo_gpu_memory_buffer.h"
+#include "gpu/command_buffer/service/image_factory.h"
+#include "mojo/platform_handle/platform_handle_functions.h"
namespace gles2 {
@@ -245,24 +248,72 @@ int32_t CommandBufferClientImpl::CreateImage(ClientBuffer buffer,
size_t width,
size_t height,
unsigned internalformat) {
- // TODO(piman)
- NOTIMPLEMENTED();
- return -1;
+ int32 new_id = next_image_id_.GetNext();
+
+ mojo::SizePtr size = mojo::Size::New();
+ size->width = width;
yzshen1 2015/06/15 20:04:42 FYI, I tried to compile the patch on Windows and i
jam 2015/06/15 22:06:02 that's strange, i'm compiling on Windows and I don
yzshen1 2015/06/16 16:34:25 That is strange. I didn't explicitly set any gn ar
+ size->height = height;
+
+ MojoGpuMemoryBufferImpl* gpu_memory_buffer =
+ MojoGpuMemoryBufferImpl::FromClientBuffer(buffer);
+ gfx::GpuMemoryBufferHandle handle = gpu_memory_buffer->GetHandle();
+
+ bool requires_sync_point = false;
+ base::SharedMemoryHandle dupd_handle =
+ base::SharedMemory::DuplicateHandle(handle.handle);
+#if defined(OS_WIN)
+ HANDLE platform_handle = dupd_handle;
+#else
+ int platform_handle = dupd_handle.fd;
+#endif
+
+ if (handle.type != gfx::SHARED_MEMORY_BUFFER) {
+ requires_sync_point = true;
+ NOTIMPLEMENTED();
+ return -1;
+ }
+
+ MojoHandle mojo_handle = MOJO_HANDLE_INVALID;
+ MojoResult create_result = MojoCreatePlatformHandleWrapper(
+ platform_handle, &mojo_handle);
+ if (create_result != MOJO_RESULT_OK) {
+ NOTIMPLEMENTED();
+ return -1;
+ }
+ mojo::ScopedHandle scoped_handle;
+ scoped_handle.reset(mojo::Handle(mojo_handle));
+ command_buffer_->CreateImage(new_id,
+ scoped_handle.Pass(),
+ handle.type,
+ size.Pass(),
+ gpu_memory_buffer->GetFormat(),
+ internalformat);
+ if (requires_sync_point) {
+ NOTIMPLEMENTED();
+ //gpu_memory_buffer_manager->SetDestructionSyncPoint(gpu_memory_buffer,
danakj 2015/06/15 18:20:36 is a TODO needed?
jam 2015/06/15 22:06:01 Done.
+ // InsertSyncPoint());
piman 2015/06/15 18:14:33 nit: remove/add TODO?
jam 2015/06/15 22:06:01 Done.
+ }
+
+ return new_id;
}
void CommandBufferClientImpl::DestroyImage(int32 id) {
- // TODO(piman)
- NOTIMPLEMENTED();
+ command_buffer_->DestroyImage(id);
}
int32_t CommandBufferClientImpl::CreateGpuMemoryBufferImage(
size_t width,
size_t height,
unsigned internalformat,
- unsigned usage) {
- // TODO(piman)
- NOTIMPLEMENTED();
- return -1;
+ unsigned usage) {
+ scoped_ptr<gfx::GpuMemoryBuffer> buffer(MojoGpuMemoryBufferImpl::Create(
+ gfx::Size(width, height),
+ gpu::ImageFactory::ImageFormatToGpuMemoryBufferFormat(internalformat),
+ gpu::ImageFactory::ImageUsageToGpuMemoryBufferUsage(usage)));
+ if (!buffer)
+ return -1;
+
+ return CreateImage(buffer->AsClientBuffer(), width, height, internalformat);
}
uint32_t CommandBufferClientImpl::InsertSyncPoint() {

Powered by Google App Engine
This is Rietveld 408576698