diff options
author | kaanb@chromium.org <kaanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 08:58:58 +0000 |
---|---|---|
committer | kaanb@chromium.org <kaanb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-19 08:58:58 +0000 |
commit | f677a16fafa8726a6dd148cc8e6af3d0bdea04a9 (patch) | |
tree | a54e117701c88ebca4eb76f7965403e4f57d9db5 /gpu | |
parent | f4521f66690be0f8c2669d71915b6e58350f23d4 (diff) | |
download | chromium_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.h | 54 | ||||
-rw-r--r-- | gpu/command_buffer/client/gpu_memory_buffer_factory.cc | 8 | ||||
-rw-r--r-- | gpu/command_buffer/client/gpu_memory_buffer_factory.h | 6 | ||||
-rw-r--r-- | gpu/gpu_common.gypi | 5 |
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', |