1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "mojo/services/gles2/mojo_buffer_backing.h"
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/logging.h"
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace mojo {
10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace gles2 {
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochMojoBufferBacking::MojoBufferBacking(mojo::ScopedSharedBufferHandle handle,
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                     void* memory,
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                     size_t size)
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    : handle_(handle.Pass()), memory_(memory), size_(size) {}
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochMojoBufferBacking::~MojoBufferBacking() { mojo::UnmapBuffer(memory_); }
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// static
20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochscoped_ptr<gpu::BufferBacking> MojoBufferBacking::Create(
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    mojo::ScopedSharedBufferHandle handle,
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    size_t size) {
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void* memory = NULL;
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  MojoResult result = mojo::MapBuffer(
25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      handle.get(), 0, size, &memory, MOJO_MAP_BUFFER_FLAG_NONE);
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (result != MOJO_RESULT_OK)
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return scoped_ptr<BufferBacking>();
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  DCHECK(memory);
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return scoped_ptr<BufferBacking>(
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      new MojoBufferBacking(handle.Pass(), memory, size));
31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid* MojoBufferBacking::GetMemory() const { return memory_; }
33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochsize_t MojoBufferBacking::GetSize() const { return size_; }
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace gles2
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace mojo
37