#include Result nvgpuCreate(NvGpu* g) { Result rc; if (R_FAILED(nvinfoInit())) return MAKERESULT(Module_Libnx, LibnxError_NvinfoFailedToInitialize); if (R_FAILED(nvbufInit())) return MAKERESULT(Module_Libnx, LibnxError_NvbufFailedToInitialize); rc = nvchannelCreate(&g->gpu_channel, "/dev/nvhost-gpu"); if (R_SUCCEEDED(rc)) rc = nvasCreate(&g->addr_space); if (R_SUCCEEDED(rc)) rc = nvasReserveFull(&g->addr_space); if (R_SUCCEEDED(rc)) rc = nvasBindToChannel(&g->addr_space, &g->gpu_channel); if (R_SUCCEEDED(rc)) rc = nvfifoCreate(&g->gpfifo, &g->gpu_channel); if (R_SUCCEEDED(rc)) rc = nvzcullCreate(&g->zcull_ctx, g); if (R_FAILED(rc)) nvgpuClose(g); return rc; } void nvgpuClose(NvGpu* g) { nvbufExit(); nvinfoExit(); nvfifoClose(&g->gpfifo); nvasClose(&g->addr_space); nvchannelClose(&g->gpu_channel); }