// 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();
#if defined(PVRSRV_ENABLE_PROCESS_STATS)
		PVRSRVStatsDestroy();
#endif
		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;
}
