blob: 270990550c2e375b46ce2ca80b790e105fcd2945 [file] [log] [blame]
// Copyright 2019 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 "msd_img_driver.h"
extern "C" {
#include "process_stats.h"
#include "pvrsrv.h"
#include "pvrsrv_error.h"
#include "rgxdevice.h"
#include "srvcore.h"
}
static bool g_driver_initialized;
MsdImgDriver::MsdImgDriver() { magic_ = kMagic; }
MsdImgDriver::~MsdImgDriver()
{
if (g_driver_initialized)
{
PVRSRVDriverDeInit();
g_driver_initialized = false;
}
}
// static
std::unique_ptr<MsdImgDriver>
MsdImgDriver::Create()
{
DASSERT(!g_driver_initialized);
PVRSRV_ERROR pvrerr;
#if defined(PVRSRV_ENABLE_PROCESS_STATS)
pvrerr = PVRSRVStatsInitialise();
if (pvrerr != PVRSRV_OK)
{
return DRETP(nullptr, "PVRSRVStatsInitialize failed: %d\n", pvrerr);
}
#endif
pvrerr = PVRSRVDriverInit();
if (pvrerr != PVRSRV_OK)
{
return DRETP(nullptr, "PVRSRVDriverInit failed: %d\n", pvrerr);
return 0;
}
g_driver_initialized = true;
return std::unique_ptr<MsdImgDriver>(new MsdImgDriver);
}
// static
void
MsdImgDriver::Destroy(MsdImgDriver* driver)
{
delete driver;
}