gcmContextData* rsxInit(const u32 cmdSize,const u32 ioSize,const void *ioAddress) { s32 ret = -1; u32 context = 0; ret = gcmInitBody(&context,cmdSize,ioSize,ioAddress); if(ret==0) { rsxHeapInit(cmdSize,ioSize); return (gcmContextData*)((u64)context); } return NULL; }
struct sw_winsys * psl1ght_create_sw_winsys(gcmContextData *ctx) { struct psl1ght_sw_winsys *psl1ght; if (ctx == NULL) { void *host_addr = memalign (1024*1024, HOST_SIZE); if (host_addr == NULL) return NULL; ctx = rsxInit(CB_SIZE, HOST_SIZE, host_addr); if (ctx == NULL) return NULL; } if (!rsxHeapInit()) return NULL; gcmSetFlipMode (GCM_FLIP_VSYNC); // Wait for VSYNC to flip psl1ght = CALLOC_STRUCT(psl1ght_sw_winsys); if (!psl1ght) return NULL; psl1ght->ctx = ctx; psl1ght->base.destroy = psl1ght_destroy; psl1ght->base.is_displaytarget_format_supported = psl1ght_is_displaytarget_format_supported; psl1ght->base.displaytarget_create = psl1ght_displaytarget_create; psl1ght->base.displaytarget_destroy = psl1ght_displaytarget_destroy; psl1ght->base.displaytarget_map = psl1ght_displaytarget_map; psl1ght->base.displaytarget_unmap = psl1ght_displaytarget_unmap; psl1ght->base.displaytarget_display = psl1ght_displaytarget_display; return &psl1ght->base; }