VBOXVHWACMD* vboxVhwaCommandCreate(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd) { vboxVhwaCommandCheckCompletion(pDevExt); #ifdef VBOXVHWA_WITH_SHGSMI VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxSHGSMICommandAlloc(&pDevExt->u.primary.hgsmiAdapterHeap, cbCmd + VBOXVHWACMD_HEADSIZE(), HGSMI_CH_VBVA, VBVA_VHWA_CMD); #else VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxHGSMIBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx, cbCmd + VBOXVHWACMD_HEADSIZE(), HGSMI_CH_VBVA, VBVA_VHWA_CMD); #endif Assert(pHdr); if (!pHdr) { LOGREL(("VBoxHGSMIBufferAlloc failed")); } else { vboxVhwaHdrInit(pHdr, srcId, enmCmd); } return pHdr; }
VBOXVHWACMD* VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd) { VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxHGSMIBufferAlloc(&pDev->hgsmi.ctx, cbCmd + VBOXVHWACMD_HEADSIZE(), HGSMI_CH_VBVA, VBVA_VHWA_CMD); if (!pHdr) { WARN(("HGSMIHeapAlloc failed")); } else { memset(pHdr, 0, sizeof(VBOXVHWACMD)); pHdr->iDisplay = pDev->iDevice; pHdr->rc = VERR_GENERAL_FAILURE; pHdr->enmCmd = enmCmd; pHdr->cRefs = 1; } /* @todo: temporary hack */ VBoxDispVHWACommandCheckHostCmds(pDev); return pHdr; }