Пример #1
0
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;
}