| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "magma_system_buffer.h" |
| #include "magma_util/macros.h" |
| |
| MagmaSystemBuffer::MagmaSystemBuffer(std::unique_ptr<magma::PlatformBuffer> platform_buf, |
| msd_buffer_unique_ptr_t msd_buf) |
| : platform_buf_(std::move(platform_buf)), msd_buf_(std::move(msd_buf)) |
| { |
| } |
| |
| std::unique_ptr<MagmaSystemBuffer> |
| MagmaSystemBuffer::Create(std::unique_ptr<magma::PlatformBuffer> platform_buffer) |
| { |
| if (!platform_buffer) |
| return DRETP(nullptr, "Failed to create PlatformBuffer"); |
| |
| uint32_t duplicate_handle; |
| if (!platform_buffer->duplicate_handle(&duplicate_handle)) |
| return DRETP(nullptr, "failed to get duplicate_handle"); |
| |
| msd_buffer_unique_ptr_t msd_buf = MsdBufferUniquePtr(msd_buffer_import(duplicate_handle)); |
| if (!msd_buf) |
| return DRETP(nullptr, |
| "Failed to import newly allocated buffer into the MSD Implementation"); |
| |
| return std::unique_ptr<MagmaSystemBuffer>( |
| new MagmaSystemBuffer(std::move(platform_buffer), std::move(msd_buf))); |
| } |