void VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX *pVHWABlt, DDBLTFX *pDdBlt) { pVHWABlt->fillColor = pDdBlt->dwFillColor; VBoxDispVHWAFromDDCOLORKEY(&pVHWABlt->DstCK, &pDdBlt->ddckDestColorkey); VBoxDispVHWAFromDDCOLORKEY(&pVHWABlt->SrcCK, &pDdBlt->ddckSrcColorkey); }
DWORD APIENTRY VBoxDispDDSetColorKey(PDD_SETCOLORKEYDATA lpSetColorKey) { PVBOXDISPDEV pDev = (PVBOXDISPDEV) lpSetColorKey->lpDD->dhpdev; LOGF_ENTER(); DD_SURFACE_LOCAL *pSurf = lpSetColorKey->lpDDSurface; PVBOXVHWASURFDESC pDesc = (PVBOXVHWASURFDESC)pSurf->lpGbl->dwReserved1; VBOXVHWACMD* pCmd; lpSetColorKey->ddRVal = DD_OK; if (pDesc) { pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_COLORKEY_SET, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET)); if (pCmd) { VBOXVHWACMD_SURF_COLORKEY_SET *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_COLORKEY_SET); memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET)); pBody->u.in.offSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSurf->lpGbl->fpVidMem); pBody->u.in.hSurf = pDesc->hHostHandle; pBody->u.in.flags = VBoxDispVHWAFromDDCKEYs(lpSetColorKey->dwFlags); VBoxDispVHWAFromDDCOLORKEY(&pBody->u.in.CKey, &lpSetColorKey->ckNew); VBoxDispVHWACommandSubmitAsynchAndComplete(pDev, pCmd); } else { WARN(("VBoxDispVHWACommandCreate failed!")); lpSetColorKey->ddRVal = DDERR_GENERIC; } } else { WARN(("!pDesc")); lpSetColorKey->ddRVal = DDERR_GENERIC; } LOGF_LEAVE(); return DDHAL_DRIVER_HANDLED; }
int VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC *pVHWADesc, DDSURFACEDESC *pDdDesc) { uint32_t unsupds = VBoxDispVHWAUnsupportedDSS(pDdDesc->dwFlags); Assert(!unsupds); if(unsupds) return VERR_GENERAL_FAILURE; pVHWADesc->flags = 0; if(pDdDesc->dwFlags & DDSD_BACKBUFFERCOUNT) { pVHWADesc->flags |= VBOXVHWA_SD_BACKBUFFERCOUNT; pVHWADesc->cBackBuffers = pDdDesc->dwBackBufferCount; } if(pDdDesc->dwFlags & DDSD_CAPS) { uint32_t unsup = VBoxDispVHWAUnsupportedDDSCAPS(pDdDesc->ddsCaps.dwCaps); Assert(!unsup); if(unsup) return VERR_GENERAL_FAILURE; pVHWADesc->flags |= VBOXVHWA_SD_CAPS; pVHWADesc->surfCaps = VBoxDispVHWAFromDDSCAPS(pDdDesc->ddsCaps.dwCaps); } if(pDdDesc->dwFlags & DDSD_CKDESTBLT) { pVHWADesc->flags |= VBOXVHWA_SD_CKDESTBLT; VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->DstBltCK, &pDdDesc->ddckCKDestBlt); } if(pDdDesc->dwFlags & DDSD_CKDESTOVERLAY) { pVHWADesc->flags |= VBOXVHWA_SD_CKDESTOVERLAY; VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->DstOverlayCK, &pDdDesc->ddckCKDestOverlay); } if(pDdDesc->dwFlags & DDSD_CKSRCBLT) { pVHWADesc->flags |= VBOXVHWA_SD_CKSRCBLT; VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->SrcBltCK, &pDdDesc->ddckCKSrcBlt); } if(pDdDesc->dwFlags & DDSD_CKSRCOVERLAY) { pVHWADesc->flags |= VBOXVHWA_SD_CKSRCOVERLAY; VBoxDispVHWAFromDDCOLORKEY(&pVHWADesc->SrcOverlayCK, &pDdDesc->ddckCKSrcOverlay); } if(pDdDesc->dwFlags & DDSD_HEIGHT) { pVHWADesc->flags |= VBOXVHWA_SD_HEIGHT; pVHWADesc->height = pDdDesc->dwHeight; } if(pDdDesc->dwFlags & DDSD_WIDTH) { pVHWADesc->flags |= VBOXVHWA_SD_WIDTH; pVHWADesc->width = pDdDesc->dwWidth; } if(pDdDesc->dwFlags & DDSD_PITCH) { pVHWADesc->flags |= VBOXVHWA_SD_PITCH; pVHWADesc->pitch = pDdDesc->lPitch; } if(pDdDesc->dwFlags & DDSD_PIXELFORMAT) { int rc = VBoxDispVHWAFromDDPIXELFORMAT(&pVHWADesc->PixelFormat, &pDdDesc->ddpfPixelFormat); if(RT_FAILURE(rc)) return rc; pVHWADesc->flags |= VBOXVHWA_SD_PIXELFORMAT; } return VINF_SUCCESS; }
void VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX *pVHWAOverlay, DDOVERLAYFX *pDdOverlay) { //TODO: fxFlags VBoxDispVHWAFromDDCOLORKEY(&pVHWAOverlay->DstCK, &pDdOverlay->dckDestColorkey); VBoxDispVHWAFromDDCOLORKEY(&pVHWAOverlay->SrcCK, &pDdOverlay->dckSrcColorkey); }