gspgpu: Add gspHasGpuRight
This commit is contained in:
parent
5ac710a0a2
commit
bf55423903
@ -89,6 +89,9 @@ Result gspInit(void);
|
|||||||
/// Exits GSPGPU.
|
/// Exits GSPGPU.
|
||||||
void gspExit(void);
|
void gspExit(void);
|
||||||
|
|
||||||
|
/// Returns true if the application currently has GPU rights.
|
||||||
|
bool gspHasGpuRight(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Presents a buffer to the specified screen.
|
* @brief Presents a buffer to the specified screen.
|
||||||
* @param screen Screen ID (see \ref GSP_SCREEN_TOP and \ref GSP_SCREEN_BOTTOM)
|
* @param screen Screen ID (see \ref GSP_SCREEN_TOP and \ref GSP_SCREEN_BOTTOM)
|
||||||
|
@ -19,6 +19,8 @@ static Handle gspSharedMemHandle;
|
|||||||
static void* gspSharedMem;
|
static void* gspSharedMem;
|
||||||
static u8 gspThreadId;
|
static u8 gspThreadId;
|
||||||
|
|
||||||
|
static bool gspGpuRight;
|
||||||
|
|
||||||
static Handle gspEvent;
|
static Handle gspEvent;
|
||||||
static Thread gspEventThread;
|
static Thread gspEventThread;
|
||||||
static volatile bool gspRunEvents;
|
static volatile bool gspRunEvents;
|
||||||
@ -219,6 +221,11 @@ void gspExit(void)
|
|||||||
svcCloseHandle(gspGpuHandle);
|
svcCloseHandle(gspGpuHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool gspHasGpuRight(void)
|
||||||
|
{
|
||||||
|
return gspGpuRight;
|
||||||
|
}
|
||||||
|
|
||||||
void gspPresentBuffer(unsigned screen, unsigned swap, const void* fb_a, const void* fb_b, u32 stride, u32 mode)
|
void gspPresentBuffer(unsigned screen, unsigned swap, const void* fb_a, const void* fb_b, u32 stride, u32 mode)
|
||||||
{
|
{
|
||||||
GSPGPU_FramebufferInfo info;
|
GSPGPU_FramebufferInfo info;
|
||||||
@ -554,6 +561,8 @@ Result GSPGPU_UnregisterInterruptRelayQueue(void)
|
|||||||
|
|
||||||
Result GSPGPU_AcquireRight(u8 flags)
|
Result GSPGPU_AcquireRight(u8 flags)
|
||||||
{
|
{
|
||||||
|
if(gspGpuRight) return 0;
|
||||||
|
|
||||||
u32* cmdbuf=getThreadCommandBuffer();
|
u32* cmdbuf=getThreadCommandBuffer();
|
||||||
cmdbuf[0]=IPC_MakeHeader(0x16,1,2); // 0x160042
|
cmdbuf[0]=IPC_MakeHeader(0x16,1,2); // 0x160042
|
||||||
cmdbuf[1]=flags;
|
cmdbuf[1]=flags;
|
||||||
@ -562,17 +571,21 @@ Result GSPGPU_AcquireRight(u8 flags)
|
|||||||
|
|
||||||
Result ret=0;
|
Result ret=0;
|
||||||
if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;
|
if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;
|
||||||
|
if(R_SUCCEEDED(cmdbuf[1])) gspGpuRight=true;
|
||||||
|
|
||||||
return cmdbuf[1];
|
return cmdbuf[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
Result GSPGPU_ReleaseRight(void)
|
Result GSPGPU_ReleaseRight(void)
|
||||||
{
|
{
|
||||||
|
if(!gspGpuRight) return 0;
|
||||||
|
|
||||||
u32* cmdbuf=getThreadCommandBuffer();
|
u32* cmdbuf=getThreadCommandBuffer();
|
||||||
cmdbuf[0]=IPC_MakeHeader(0x17,0,0); // 0x170000
|
cmdbuf[0]=IPC_MakeHeader(0x17,0,0); // 0x170000
|
||||||
|
|
||||||
Result ret=0;
|
Result ret=0;
|
||||||
if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;
|
if(R_FAILED(ret=svcSendSyncRequest(gspGpuHandle)))return ret;
|
||||||
|
if(R_SUCCEEDED(cmdbuf[1])) gspGpuRight=false;
|
||||||
|
|
||||||
return cmdbuf[1];
|
return cmdbuf[1];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user