diff options
Diffstat (limited to 'chromium/ui/gfx/gpu_memory_buffer.h')
-rw-r--r-- | chromium/ui/gfx/gpu_memory_buffer.h | 76 |
1 files changed, 39 insertions, 37 deletions
diff --git a/chromium/ui/gfx/gpu_memory_buffer.h b/chromium/ui/gfx/gpu_memory_buffer.h index 4a7b142d175..1a622016c7c 100644 --- a/chromium/ui/gfx/gpu_memory_buffer.h +++ b/chromium/ui/gfx/gpu_memory_buffer.h @@ -18,61 +18,63 @@ namespace gfx { enum GpuMemoryBufferType { EMPTY_BUFFER, SHARED_MEMORY_BUFFER, - EGL_CLIENT_BUFFER, - IO_SURFACE_BUFFER + IO_SURFACE_BUFFER, + ANDROID_NATIVE_BUFFER, + SURFACE_TEXTURE_BUFFER, + GPU_MEMORY_BUFFER_TYPE_LAST = SURFACE_TEXTURE_BUFFER }; -struct GpuMemoryBufferHandle { - GpuMemoryBufferHandle() - : type(EMPTY_BUFFER), - handle(base::SharedMemory::NULLHandle()) +// TODO(alexst): Merge this with GpuMemoryBufferId as part of switchover to +// the new API for GpuMemoryBuffer allocation when it's done. #if defined(OS_ANDROID) - , native_buffer(NULL) -#endif -#if defined(OS_MACOSX) - , io_surface_id(0) +struct SurfaceTextureId { + SurfaceTextureId() : primary_id(0), secondary_id(0) {} + SurfaceTextureId(int32 primary_id, int32 secondary_id) + : primary_id(primary_id), secondary_id(secondary_id) {} + int32 primary_id; + int32 secondary_id; +}; #endif - { - } + +struct GpuMemoryBufferId { + GpuMemoryBufferId() : primary_id(0), secondary_id(0) {} + GpuMemoryBufferId(int32 primary_id, int32 secondary_id) + : primary_id(primary_id), secondary_id(secondary_id) {} + int32 primary_id; + int32 secondary_id; +}; + +struct GFX_EXPORT GpuMemoryBufferHandle { + GpuMemoryBufferHandle(); bool is_null() const { return type == EMPTY_BUFFER; } GpuMemoryBufferType type; base::SharedMemoryHandle handle; -#if defined(OS_ANDROID) - EGLClientBuffer native_buffer; -#endif + GpuMemoryBufferId global_id; #if defined(OS_MACOSX) uint32 io_surface_id; #endif - +#if defined(OS_ANDROID) + EGLClientBuffer native_buffer; + SurfaceTextureId surface_texture_id; +#endif }; -// 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. +// This interface typically correspond to a type of shared memory that is also +// shared with the GPU. A GPU memory buffer can be written to directly by +// regular CPU code, but can also be read by the GPU. class GFX_EXPORT GpuMemoryBuffer { public: - enum AccessMode { - READ_ONLY, - WRITE_ONLY, - READ_WRITE, - }; - GpuMemoryBuffer(); 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; + // Maps the buffer into the client's address space so it can be written to by + // the CPU. This call may block, for instance if the GPU needs to finish + // accessing the buffer or if CPU caches need to be synchronized. Returns NULL + // on failure. + virtual void* Map() = 0; - // Unmaps the buffer. Called after all changes to the buffer are - // completed. + // Unmaps the buffer. It's illegal to use the pointer returned by Map() after + // this has been called. virtual void Unmap() = 0; // Returns true iff the buffer is mapped. |