11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CONTENT_COMMON_GPU_GPU_MEMORY_BUFFER_FACTORY_IO_SURFACE_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CONTENT_COMMON_GPU_GPU_MEMORY_BUFFER_FACTORY_IO_SURFACE_H_
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <IOSurface/IOSurfaceAPI.h>
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/containers/hash_tables.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/mac/scoped_cftyperef.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/geometry/size.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/gpu_memory_buffer.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace gfx {
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GLImage;
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content {
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GpuMemoryBufferFactoryIOSurface {
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GpuMemoryBufferFactoryIOSurface();
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ~GpuMemoryBufferFactoryIOSurface();
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Creates a IOSurface backed GPU memory buffer with |size| and
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |internalformat|. A valid handle is returned on success.
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::GpuMemoryBufferId& id,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Size& size,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      unsigned internalformat);
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Destroy a previously created GPU memory buffer.
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void DestroyGpuMemoryBuffer(const gfx::GpuMemoryBufferId& id);
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Creates a GLImage instance for a GPU memory buffer.
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::GpuMemoryBufferId& id,
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const gfx::Size& size,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      unsigned internalformat);
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef std::pair<int, int> IOSurfaceMapKey;
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef base::hash_map<IOSurfaceMapKey, base::ScopedCFTypeRef<IOSurfaceRef>>
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      IOSurfaceMap;
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  IOSurfaceMap io_surfaces_;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace content
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // CONTENT_COMMON_GPU_GPU_MEMORY_BUFFER_FACTORY_IO_SURFACE_H_
53