summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorkaanb@chromium.org <kaanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-19 08:58:58 +0000
committerkaanb@chromium.org <kaanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-19 08:58:58 +0000
commitf677a16fafa8726a6dd148cc8e6af3d0bdea04a9 (patch)
treea54e117701c88ebca4eb76f7965403e4f57d9db5 /gpu
parentf4521f66690be0f8c2669d71915b6e58350f23d4 (diff)
downloadchromium_src-f677a16fafa8726a6dd148cc8e6af3d0bdea04a9.zip
chromium_src-f677a16fafa8726a6dd148cc8e6af3d0bdea04a9.tar.gz
chromium_src-f677a16fafa8726a6dd148cc8e6af3d0bdea04a9.tar.bz2
Move GpuMemoryBuffer interface from ui/gl to gpu/command_buffer/client
BUG=175012 Review URL: https://chromiumcodereview.appspot.com/13870010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195112 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/client/gpu_memory_buffer.h54
-rw-r--r--gpu/command_buffer/client/gpu_memory_buffer_factory.cc8
-rw-r--r--gpu/command_buffer/client/gpu_memory_buffer_factory.h6
-rw-r--r--gpu/gpu_common.gypi5
4 files changed, 64 insertions, 9 deletions
diff --git a/gpu/command_buffer/client/gpu_memory_buffer.h b/gpu/command_buffer/client/gpu_memory_buffer.h
new file mode 100644
index 0000000..0c75bdd
--- /dev/null
+++ b/gpu/command_buffer/client/gpu_memory_buffer.h
@@ -0,0 +1,54 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_H_
+#define GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_H_
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+
+namespace gpu {
+
+// Interface for creating and accessing a zero-copy GPU memory buffer.
+// This design evolved from the generalization of GraphicBuffer API
+// of Android framework.
+//
+// THREADING CONSIDERATIONS:
+//
+// This interface is thread-safe. However, multiple threads mapping
+// a buffer for Write or ReadOrWrite simultaneously may result in undefined
+// behavior and is not allowed.
+class GpuMemoryBuffer {
+ public:
+ typedef base::Callback<scoped_ptr<GpuMemoryBuffer>(int, int)> Creator;
+ enum AccessMode {
+ READ_ONLY,
+ WRITE_ONLY,
+ READ_OR_WRITE,
+ };
+
+ // Frees a previously allocated buffer. Freeing a buffer that is still
+ // mapped in any process is undefined behavior.
+ virtual ~GpuMemoryBuffer() {}
+
+ // Maps the buffer so the client can write the bitmap data in |*vaddr|
+ // subsequently. This call may block, for instance if the hardware needs
+ // to finish rendering or if CPU caches need to be synchronized.
+ virtual void Map(AccessMode mode, void** vaddr) = 0;
+
+ // Unmaps the buffer. Called after all changes to the buffer are
+ // completed.
+ virtual void Unmap() = 0;
+
+ // Returns the native pointer for the buffer.
+ virtual void* GetNativeBuffer() = 0;
+
+ // Returns the stride in pixels for the buffer.
+ virtual uint32 GetStride() = 0;
+};
+
+} // namespace gpu
+
+#endif // GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_H_
diff --git a/gpu/command_buffer/client/gpu_memory_buffer_factory.cc b/gpu/command_buffer/client/gpu_memory_buffer_factory.cc
index 26404b5..c0e5b9f 100644
--- a/gpu/command_buffer/client/gpu_memory_buffer_factory.cc
+++ b/gpu/command_buffer/client/gpu_memory_buffer_factory.cc
@@ -9,17 +9,17 @@
namespace gpu {
namespace {
-gfx::GpuMemoryBuffer::Creator* g_gpu_memory_buffer_factory_ = NULL;
+GpuMemoryBuffer::Creator* g_gpu_memory_buffer_factory_ = NULL;
}
-const gfx::GpuMemoryBuffer::Creator& GetProcessDefaultGpuMemoryBufferFactory() {
+const GpuMemoryBuffer::Creator& GetProcessDefaultGpuMemoryBufferFactory() {
return *g_gpu_memory_buffer_factory_;
}
void SetProcessDefaultGpuMemoryBufferFactory(
- const gfx::GpuMemoryBuffer::Creator& factory) {
+ const GpuMemoryBuffer::Creator& factory) {
DCHECK(g_gpu_memory_buffer_factory_ == NULL);
- g_gpu_memory_buffer_factory_ = new gfx::GpuMemoryBuffer::Creator(factory);
+ g_gpu_memory_buffer_factory_ = new GpuMemoryBuffer::Creator(factory);
}
} // namespace gpu
diff --git a/gpu/command_buffer/client/gpu_memory_buffer_factory.h b/gpu/command_buffer/client/gpu_memory_buffer_factory.h
index a2df559..db15743 100644
--- a/gpu/command_buffer/client/gpu_memory_buffer_factory.h
+++ b/gpu/command_buffer/client/gpu_memory_buffer_factory.h
@@ -5,8 +5,8 @@
#ifndef GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_FACTORY_H_
#define GPU_COMMAND_BUFFER_CLIENT_GPU_MEMORY_BUFFER_FACTORY_H_
-#include "ui/gl/gpu_memory_buffer.h"
#include "gles2_impl_export.h"
+#include "gpu/command_buffer/client/gpu_memory_buffer.h"
namespace gpu {
@@ -15,11 +15,11 @@ namespace gpu {
// renderer are within the same process.
// It is not valid to call this method before the setter is called.
-const gfx::GpuMemoryBuffer::Creator& GetProcessDefaultGpuMemoryBufferFactory();
+const GpuMemoryBuffer::Creator& GetProcessDefaultGpuMemoryBufferFactory();
// It is illegal to call the setter more than once.
GLES2_IMPL_EXPORT void SetProcessDefaultGpuMemoryBufferFactory(
- const gfx::GpuMemoryBuffer::Creator& factory);
+ const GpuMemoryBuffer::Creator& factory);
} // namespace gpu
diff --git a/gpu/gpu_common.gypi b/gpu/gpu_common.gypi
index a2b563c..432457b 100644
--- a/gpu/gpu_common.gypi
+++ b/gpu/gpu_common.gypi
@@ -25,8 +25,6 @@
'command_buffer/client/client_context_state.cc',
'command_buffer/client/client_context_state_autogen.h',
'command_buffer/client/client_context_state_impl_autogen.h',
- 'command_buffer/client/gpu_memory_buffer_factory.cc',
- 'command_buffer/client/gpu_memory_buffer_factory.h',
'command_buffer/client/gles2_impl_export.h',
'command_buffer/client/gles2_implementation_autogen.h',
'command_buffer/client/gles2_implementation.cc',
@@ -38,6 +36,9 @@
'command_buffer/client/gles2_trace_implementation.cc',
'command_buffer/client/gles2_trace_implementation.h',
'command_buffer/client/gles2_trace_implementation_impl_autogen.h',
+ 'command_buffer/client/gpu_memory_buffer.h',
+ 'command_buffer/client/gpu_memory_buffer_factory.cc',
+ 'command_buffer/client/gpu_memory_buffer_factory.h',
'command_buffer/client/program_info_manager.cc',
'command_buffer/client/program_info_manager.h',
'command_buffer/client/query_tracker.cc',