1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#ifndef UI_GFX_GPU_MEMORY_BUFFER_H_ 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#define UI_GFX_GPU_MEMORY_BUFFER_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/memory/shared_memory.h" 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "build/build_config.h" 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ui/gfx/gfx_export.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(USE_X11) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "ui/gfx/x/x11_types.h" 14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace gfx { 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)enum GpuMemoryBufferType { 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) EMPTY_BUFFER, 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) SHARED_MEMORY_BUFFER, 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) IO_SURFACE_BUFFER, 224ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch ANDROID_NATIVE_BUFFER, 234ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SURFACE_TEXTURE_BUFFER, 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) X11_PIXMAP_BUFFER, 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) OZONE_NATIVE_BUFFER, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GPU_MEMORY_BUFFER_TYPE_LAST = OZONE_NATIVE_BUFFER 274ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch}; 284ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// TODO(alexst): Merge this with GpuMemoryBufferId as part of switchover to 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// the new API for GpuMemoryBuffer allocation when it's done. 314ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#if defined(OS_ANDROID) 324ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdochstruct SurfaceTextureId { 334ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SurfaceTextureId() : primary_id(0), secondary_id(0) {} 344ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SurfaceTextureId(int32 primary_id, int32 secondary_id) 354ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch : primary_id(primary_id), secondary_id(secondary_id) {} 364ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int32 primary_id; 374ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch int32 secondary_id; 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 394ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct GpuMemoryBufferId { 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GpuMemoryBufferId() : primary_id(0), secondary_id(0) {} 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GpuMemoryBufferId(int32 primary_id, int32 secondary_id) 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : primary_id(primary_id), secondary_id(secondary_id) {} 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int32 primary_id; 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int32 secondary_id; 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct GFX_EXPORT GpuMemoryBufferHandle { 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GpuMemoryBufferHandle(); 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool is_null() const { return type == EMPTY_BUFFER; } 52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GpuMemoryBufferType type; 53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::SharedMemoryHandle handle; 54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GpuMemoryBufferId global_id; 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_MACOSX) 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) uint32 io_surface_id; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 584ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#if defined(OS_ANDROID) 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long buffer_id; 604ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch SurfaceTextureId surface_texture_id; 614ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#endif 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(USE_X11) 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) XID pixmap; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// This interface typically correspond to a type of shared memory that is also 68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// shared with the GPU. A GPU memory buffer can be written to directly by 69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// regular CPU code, but can also be read by the GPU. 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GFX_EXPORT GpuMemoryBuffer { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GpuMemoryBuffer(); 73a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual ~GpuMemoryBuffer(); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Maps the buffer into the client's address space so it can be written to by 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // the CPU. This call may block, for instance if the GPU needs to finish 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // accessing the buffer or if CPU caches need to be synchronized. Returns NULL 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // on failure. 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void* Map() = 0; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Unmaps the buffer. It's illegal to use the pointer returned by Map() after 82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // this has been called. 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Unmap() = 0; 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns true iff the buffer is mapped. 86a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool IsMapped() const = 0; 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Returns the stride in bytes for the buffer. 89a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual uint32 GetStride() const = 0; 90a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 91a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Returns a platform specific handle for this buffer. 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual GpuMemoryBufferHandle GetHandle() const = 0; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} // namespace gfx 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 97a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif // UI_GFX_GPU_MEMORY_BUFFER_H_ 98