blob: 36bc07b27fcdbb0d10c524fa3568376f11dfe1e8 [file] [log] [blame]
// 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)));
}