15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/gpu/gpu_memory_buffer_factory.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_image_shared_memory.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuMemoryBufferFactoryImpl : public GpuMemoryBufferFactory {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from GpuMemoryBufferFactory:
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::GpuMemoryBufferHandle CreateGpuMemoryBuffer(
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const gfx::GpuMemoryBufferHandle& handle,
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const gfx::Size& size,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      unsigned internalformat,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      unsigned usage) OVERRIDE {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NOTREACHED();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return gfx::GpuMemoryBufferHandle();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyGpuMemoryBuffer(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::GpuMemoryBufferHandle& handle) OVERRIDE {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer(
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const gfx::GpuMemoryBufferHandle& handle,
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const gfx::Size& size,
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      unsigned internalformat,
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      int client_id) OVERRIDE {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    switch (handle.type) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      case gfx::SHARED_MEMORY_BUFFER: {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        scoped_refptr<gfx::GLImageSharedMemory> image(
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            new gfx::GLImageSharedMemory(size, internalformat));
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        if (!image->Initialize(handle))
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          return NULL;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return image;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        NOTREACHED();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return scoped_refptr<gfx::GLImage>();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<GpuMemoryBufferFactory> GpuMemoryBufferFactory::Create() {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return make_scoped_ptr<GpuMemoryBufferFactory>(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new GpuMemoryBufferFactoryImpl);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)