Changeset 71592 in vbox
- Timestamp:
- Mar 31, 2018 7:51:41 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 121581
- Location:
- trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/Graphics/VBoxVideo.h
r71590 r71592 347 347 } VBOXVHWACMD_TYPE; 348 348 349 /* the command processing was asynch, set by the host to indicate asynch command completion 350 * must not be cleared once set, the command completion is performed by issuing a host->guest completion command 351 * while keeping this flag unchanged */ 352 #define VBOXVHWACMD_FLAG_HG_ASYNCH 0x00010000 353 /* asynch completion is performed by issuing the event */ 354 #define VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT 0x00000001 355 /* issue interrupt on asynch completion */ 356 #define VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ 0x00000002 357 /* guest does not do any op on completion of this command, the host may copy the command and indicate that it does not need the command anymore 349 /** The command processing was asynch, set by the host to indicate asynch 350 * command completion. Must not be cleared once set, the command completion is 351 * performed by issuing a host->guest completion command while keeping this 352 * flag unchanged */ 353 #define VBOXVHWACMD_FLAG_HG_ASYNCH UINT32_C(0x00010000) 354 /** asynch completion is performed by issuing the event */ 355 #define VBOXVHWACMD_FLAG_GH_ASYNCH_EVENT UINT32_C(0x00000001) 356 /** issue interrupt on asynch completion */ 357 #define VBOXVHWACMD_FLAG_GH_ASYNCH_IRQ UINT32_C(0x00000002) 358 /** Guest does not do any op on completion of this command, the host may copy 359 * the command and indicate that it does not need the command anymore 358 360 * by setting the VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED flag */ 359 #define VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION 0x00000004360 /* the host has copied the VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION command and returned it to the guest */361 #define VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED 0x00020000362 /* this is the host->host cmd, i.e. a configuration command posted by the host to the framebuffer */363 #define VBOXVHWACMD_FLAG_HH_CMD 0x10000000361 #define VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION UINT32_C(0x00000004) 362 /** the host has copied the VBOXVHWACMD_FLAG_GH_ASYNCH_NOCOMPLETION command and returned it to the guest */ 363 #define VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED UINT32_C(0x00020000) 364 /** this is the host->host cmd, i.e. a configuration command posted by the host to the framebuffer */ 365 #define VBOXVHWACMD_FLAG_HH_CMD UINT32_C(0x10000000) 364 366 365 367 typedef struct VBOXVHWACMD 366 368 { 367 VBOXVHWACMD_TYPE enmCmd; /*command type */368 volatile int32_t rc; /*command result */369 int32_t iDisplay; /*display index */370 volatile int32_t Flags; /* ored VBOXVHWACMD_FLAG_xxx values */371 uint64_t GuestVBVAReserved1; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */372 uint64_t GuestVBVAReserved2; /* field internally used by the guest VBVA cmd handling, must NOT be modified by clients */369 VBOXVHWACMD_TYPE enmCmd; /**< command type */ 370 volatile int32_t rc; /**< command result */ 371 int32_t iDisplay; /**< display index */ 372 volatile int32_t Flags; /**< ORed VBOXVHWACMD_FLAG_xxx values */ 373 uint64_t GuestVBVAReserved1; /**< field internally used by the guest VBVA cmd handling, must NOT be modified by clients */ 374 uint64_t GuestVBVAReserved2; /**< field internally used by the guest VBVA cmd handling, must NOT be modified by clients */ 373 375 volatile uint32_t cRefs; 374 376 int32_t Reserved; … … 376 378 { 377 379 struct VBOXVHWACMD *pNext; 378 uint32_t 379 uint64_t Data; /*the body is 64-bit aligned */380 uint32_t offNext; 381 uint64_t Data; /**< the body is 64-bit aligned */ 380 382 } u; 381 383 char body[1]; 382 384 } VBOXVHWACMD; 383 385 384 #define VBOXVHWACMD_HEADSIZE() (RT_OFFSETOF(VBOXVHWACMD, body))385 #define VBOXVHWACMD_SIZE_FROMBODYSIZE( _s) (VBOXVHWACMD_HEADSIZE() + (_s))386 #define VBOXVHWACMD_SIZE( _tCmd) (VBOXVHWACMD_SIZE_FROMBODYSIZE(sizeof(_tCmd)))386 #define VBOXVHWACMD_HEADSIZE() (RT_OFFSETOF(VBOXVHWACMD, body)) 387 #define VBOXVHWACMD_SIZE_FROMBODYSIZE(a_cbBody) (VBOXVHWACMD_HEADSIZE() + (a_cbBody)) 388 #define VBOXVHWACMD_SIZE(a_tTypeCmd) (VBOXVHWACMD_SIZE_FROMBODYSIZE(sizeof(a_tTypeCmd))) 387 389 typedef unsigned int VBOXVHWACMD_LENGTH; 388 390 typedef uint64_t VBOXVHWA_SURFHANDLE; 389 #define VBOXVHWA_SURFHANDLE_INVALID 0ULL 390 #define VBOXVHWACMD_BODY(_p, _t) ((_t*)(_p)->body) 391 #define VBOXVHWACMD_HEAD(_pb) ((VBOXVHWACMD*)((uint8_t *)(_pb) - RT_OFFSETOF(VBOXVHWACMD, body))) 391 #define VBOXVHWA_SURFHANDLE_INVALID UINT64_C(0) 392 #define VBOXVHWACMD_BODY(a_pHdr, a_TypeBody) ( (a_TypeBody RT_UNTRUSTED_VOLATILE_HSTGST *)&(a_pHdr)->body[0] ) 393 #if !defined(IN_GUEST) && defined(IN_RING3) 394 # define VBOXVHWACMD_BODY_HOST_HEAP(a_pHdr, a_TypeBody) ( (a_TypeBody *)&(a_pHdr)->body[0] ) 395 #endif 396 #define VBOXVHWACMD_HEAD(a_pBody)\ 397 ( (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HSTGST *)((uint8_t *)(a_pBody) - RT_OFFSETOF(VBOXVHWACMD, body))) 392 398 393 399 typedef struct VBOXVHWA_RECTL … … 968 974 } u; 969 975 char body[1]; 970 }VBVAHOSTCMD; 971 972 #define VBVAHOSTCMD_SIZE(_size) (sizeof(VBVAHOSTCMD) + (_size)) 973 #define VBVAHOSTCMD_BODY(_pCmd, _tBody) ((_tBody*)(_pCmd)->body) 974 #define VBVAHOSTCMD_HDR(_pBody) ((VBVAHOSTCMD*)(((uint8_t*)_pBody) - RT_OFFSETOF(VBVAHOSTCMD, body))) 975 #define VBVAHOSTCMD_HDRSIZE (RT_OFFSETOF(VBVAHOSTCMD, body)) 976 } VBVAHOSTCMD; 977 978 #define VBVAHOSTCMD_SIZE(a_cb) (sizeof(VBVAHOSTCMD) + (a_cb)) 979 #define VBVAHOSTCMD_BODY(a_pCmd, a_TypeBody) ((a_TypeBody RT_UNTRUSTED_VOLATILE_HSTGST *)&(a_pCmd)->body[0]) 980 #define VBVAHOSTCMD_HDR(a_pBody) \ 981 ( (VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HSTGST *)( (uint8_t *)(a_pBody) - RT_OFFSETOF(VBVAHOSTCMD, body)) ) 982 #define VBVAHOSTCMD_HDRSIZE (RT_OFFSETOF(VBVAHOSTCMD, body)) 976 983 977 984 #pragma pack() -
trunk/src/VBox/Additions/WINNT/Graphics/Video/common/xpdm/VBoxVideoIOCTL.h
r71179 r71592 65 65 typedef void* HVBOXVIDEOHGSMI; 66 66 67 /* Complete host commands addressed to the display */68 typedef DECLCALLBACK(void) FNVBOXVIDEOHGSMICOMPLETION(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD * pCmd);67 /** Complete host commands addressed to the display */ 68 typedef DECLCALLBACK(void) FNVBOXVIDEOHGSMICOMPLETION(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST * pCmd); 69 69 typedef FNVBOXVIDEOHGSMICOMPLETION *PFNVBOXVIDEOHGSMICOMPLETION; 70 70 71 /* request the host commands addressed to the display */ 72 typedef DECLCALLBACK(int) FNVBOXVIDEOHGSMICOMMANDS(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDevice, struct VBVAHOSTCMD ** ppCmd); 71 /** request the host commands addressed to the display */ 72 typedef DECLCALLBACK(int) FNVBOXVIDEOHGSMICOMMANDS(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDevice, 73 struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST ** ppCmd); 73 74 typedef FNVBOXVIDEOHGSMICOMMANDS *PFNVBOXVIDEOHGSMICOMMANDS; 74 75 75 /* post guest command (offset) to the host */76 /** post guest command (offset) to the host */ 76 77 typedef DECLCALLBACK(void) FNVBOXVIDEOHGSMIPOSTCOMMAND(HVBOXVIDEOHGSMI hHGSMI, HGSMIOFFSET offCmd); 77 78 typedef FNVBOXVIDEOHGSMIPOSTCOMMAND *PFNVBOXVIDEOHGSMIPOSTCOMMAND; … … 105 106 } HGSMIQUERYCPORTPROCS; 106 107 107 /* Data returned by IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS. */108 /** Data returned by IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS. */ 108 109 typedef struct _HGSMIQUERYCALLBACKS 109 110 { -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDDraw.cpp
r69500 r71592 32 32 if(pDev->vhwa.bEnabled) 33 33 { 34 VBOXVHWACMD* pCmd;35 36 34 uint32_t unsupportedSCaps = VBoxDispVHWAUnsupportedDDSCAPS(lpDDS->ddsCaps.dwCaps); 37 35 if(unsupportedSCaps) … … 50 48 } 51 49 52 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_CANCREATE, sizeof(VBOXVHWACMD_SURF_CANCREATE)); 53 if(pCmd) 50 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * pCmd 51 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_CANCREATE, sizeof(VBOXVHWACMD_SURF_CANCREATE)); 52 if (pCmd) 54 53 { 55 54 int rc; 56 VBOXVHWACMD_SURF_CANCREATE *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CANCREATE); 57 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_CANCREATE)); 55 VBOXVHWACMD_SURF_CANCREATE RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CANCREATE); 58 56 59 57 rc = VBoxDispVHWAFromDDSURFACEDESC(&pBody->SurfInfo, lpDDS); … … 140 138 if(pDev->vhwa.bEnabled) 141 139 { 142 VBOXVHWACMD* pCmd; 143 144 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_CREATE, sizeof(VBOXVHWACMD_SURF_CREATE)); 140 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 141 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_CREATE, sizeof(VBOXVHWACMD_SURF_CREATE)); 145 142 if (pCmd) 146 143 { 147 VBOXVHWACMD_SURF_CREATE *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CREATE);144 VBOXVHWACMD_SURF_CREATE RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CREATE); 148 145 PVBOXVHWASURFDESC pDesc; 149 146 int rc; 150 147 151 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_CREATE));152 148 rc = VBoxDispVHWAFromDDSURFACEDESC(&pBody->SurfInfo, lpCreateSurface->lpDDSurfaceDesc); 153 149 VBOX_WARNRC(rc); … … 259 255 if (pDev->vhwa.bEnabled) 260 256 { 261 VBOXVHWACMD* pCmd; 262 263 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_DESTROY, sizeof(VBOXVHWACMD_SURF_DESTROY)); 257 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 258 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_DESTROY, sizeof(VBOXVHWACMD_SURF_DESTROY)); 264 259 if (pCmd) 265 260 { 266 VBOXVHWACMD_SURF_DESTROY *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_DESTROY);267 261 PVBOXVHWASURFDESC pDesc = (PVBOXVHWASURFDESC)lpDestroySurface->lpDDSurface->lpGbl->dwReserved1; 268 269 262 if (pDesc) 270 263 { 271 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_DESTROY));264 VBOXVHWACMD_SURF_DESTROY RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_DESTROY); 272 265 pBody->u.in.hSurf = pDesc->hHostHandle; 273 266 … … 403 396 else 404 397 { 405 VBOXVHWACMD *pCmd; 406 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_LOCK, sizeof(VBOXVHWACMD_SURF_LOCK)); 407 398 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 399 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_LOCK, sizeof(VBOXVHWACMD_SURF_LOCK)); 408 400 if (pCmd) 409 401 { 410 VBOXVHWACMD_SURF_LOCK *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_LOCK); 411 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_LOCK)); 402 VBOXVHWACMD_SURF_LOCK RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_LOCK); 412 403 413 404 pBody->u.in.offSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSurf->lpGbl->fpVidMem); … … 500 491 || ((pSurf->ddsCaps.dwCaps & DDSCAPS_OVERLAY) && pDesc->bVisible)) 501 492 { 502 VBOXVHWACMD *pCmd; 503 pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_SURF_UNLOCK, sizeof(VBOXVHWACMD_SURF_UNLOCK)); 504 505 if(pCmd) 506 { 507 VBOXVHWACMD_SURF_UNLOCK *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_UNLOCK); 508 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_UNLOCK)); 493 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 494 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_UNLOCK, sizeof(VBOXVHWACMD_SURF_UNLOCK)); 495 if (pCmd) 496 { 497 VBOXVHWACMD_SURF_UNLOCK RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_UNLOCK); 509 498 510 499 pBody->u.in.hSurf = pDesc->hHostHandle; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispDDrawVHWA.cpp
r69500 r71592 20 20 #include <iprt/asm.h> 21 21 22 static DECLCALLBACK(void) VBoxDispVHWASurfBltCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd, void *pvContext) 22 /** @callback_method_impl{FNVBOXVHWACMDCOMPLETION} */ 23 static DECLCALLBACK(void) 24 VBoxDispVHWASurfBltCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, void *pvContext) 23 25 { 24 26 RT_NOREF(pvContext); 25 VBOXVHWACMD_SURF_BLT *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_BLT);26 PVBOXVHWASURFDESC pSrcDesc = (PVBOXVHWASURFDESC)pBody->SrcGuestSurfInfo;27 PVBOXVHWASURFDESC pDestDesc = (PVBOXVHWASURFDESC) pBody->DstGuestSurfInfo;27 VBOXVHWACMD_SURF_BLT RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_BLT); 28 PVBOXVHWASURFDESC pSrcDesc = (PVBOXVHWASURFDESC)(uintptr_t)pBody->SrcGuestSurfInfo; 29 PVBOXVHWASURFDESC pDestDesc = (PVBOXVHWASURFDESC)(uintptr_t)pBody->DstGuestSurfInfo; 28 30 29 31 ASMAtomicDecU32(&pSrcDesc->cPendingBltsSrc); … … 33 35 } 34 36 35 static DECLCALLBACK(void) VBoxDispVHWASurfFlipCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd, void *pvContext) 37 /** @callback_method_impl{FNVBOXVHWACMDCOMPLETION} */ 38 static DECLCALLBACK(void) 39 VBoxDispVHWASurfFlipCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, void *pvContext) 36 40 { 37 41 RT_NOREF(pvContext); 38 VBOXVHWACMD_SURF_FLIP *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP);39 PVBOXVHWASURFDESC pCurrDesc = (PVBOXVHWASURFDESC) pBody->CurrGuestSurfInfo;40 PVBOXVHWASURFDESC pTargDesc = (PVBOXVHWASURFDESC) pBody->TargGuestSurfInfo;42 VBOXVHWACMD_SURF_FLIP RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); 43 PVBOXVHWASURFDESC pCurrDesc = (PVBOXVHWASURFDESC)(uintptr_t)pBody->CurrGuestSurfInfo; 44 PVBOXVHWASURFDESC pTargDesc = (PVBOXVHWASURFDESC)(uintptr_t)pBody->TargGuestSurfInfo; 41 45 42 46 ASMAtomicDecU32(&pCurrDesc->cPendingFlipsCurr); … … 164 168 DD_SURFACE_LOCAL *pSurf = lpSetColorKey->lpDDSurface; 165 169 PVBOXVHWASURFDESC pDesc = (PVBOXVHWASURFDESC)pSurf->lpGbl->dwReserved1; 166 VBOXVHWACMD* pCmd;167 170 168 171 lpSetColorKey->ddRVal = DD_OK; … … 170 173 if (pDesc) 171 174 { 172 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_COLORKEY_SET, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET));173 175 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = 176 VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_COLORKEY_SET, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET)); 174 177 if (pCmd) 175 178 { 176 VBOXVHWACMD_SURF_COLORKEY_SET *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_COLORKEY_SET); 177 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_COLORKEY_SET)); 179 VBOXVHWACMD_SURF_COLORKEY_SET RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_COLORKEY_SET); 178 180 179 181 pBody->u.in.offSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSurf->lpGbl->fpVidMem); … … 222 224 if (pSrcDesc && pDstDesc) 223 225 { 224 VBOXVHWACMD *pCmd;226 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd; 225 227 226 228 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_BLT, sizeof(VBOXVHWACMD_SURF_BLT)); 227 229 if (pCmd) 228 230 { 229 VBOXVHWACMD_SURF_BLT *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_BLT); 230 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_BLT)); 231 VBOXVHWACMD_SURF_BLT RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_BLT); 231 232 232 233 pBody->u.in.offSrcSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSrcSurf->lpGbl->fpVidMem); … … 301 302 } 302 303 303 VBOXVHWACMD *pCmd; 304 305 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_FLIP, sizeof(VBOXVHWACMD_SURF_FLIP)); 306 304 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 305 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_FLIP, sizeof(VBOXVHWACMD_SURF_FLIP)); 307 306 if (pCmd) 308 307 { 309 VBOXVHWACMD_SURF_FLIP *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); 310 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_FLIP)); 308 VBOXVHWACMD_SURF_FLIP RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); 311 309 312 310 pBody->u.in.offCurrSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pCurrSurf->lpGbl->fpVidMem); … … 457 455 } 458 456 459 VBOXVHWACMD *pCmd; 460 461 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_OVERLAY_SETPOSITION, sizeof(VBOXVHWACMD_SURF_OVERLAY_SETPOSITION)); 457 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 458 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_OVERLAY_SETPOSITION, sizeof(VBOXVHWACMD_SURF_OVERLAY_SETPOSITION)); 462 459 if (pCmd) 463 460 { 464 VBOXVHWACMD_SURF_OVERLAY_SETPOSITION *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_SETPOSITION); 465 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_SETPOSITION)); 461 VBOXVHWACMD_SURF_OVERLAY_SETPOSITION RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_SETPOSITION); 466 462 467 463 pBody->u.in.offSrcSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSrcSurf->lpGbl->fpVidMem); … … 505 501 if (pSrcDesc) 506 502 { 507 VBOXVHWACMD* pCmd; 508 509 pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 503 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd 504 = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_SURF_OVERLAY_UPDATE, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 510 505 if (pCmd) 511 506 { 512 VBOXVHWACMD_SURF_OVERLAY_UPDATE *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); 513 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 507 VBOXVHWACMD_SURF_OVERLAY_UPDATE RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); 514 508 515 509 pBody->u.in.offSrcSurface = VBoxDispVHWAVramOffsetFromPDEV(pDev, pSrcSurf->lpGbl->fpVidMem); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispInternal.h
r69500 r71592 131 131 /* VBVA related */ 132 132 int VBoxDispVBVAInit(PVBOXDISPDEV pDev); 133 void VBoxDispVBVAHostCommandComplete(PVBOXDISPDEV pDev, VBVAHOSTCMD *pCmd);133 void VBoxDispVBVAHostCommandComplete(PVBOXDISPDEV pDev, VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 134 134 135 135 void vrdpReportDirtyRect(PVBOXDISPDEV pDev, RECTL *prcl); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispVBVA.cpp
r69500 r71592 482 482 } 483 483 484 void VBoxDispVBVAHostCommandComplete(PVBOXDISPDEV pDev, VBVAHOSTCMD *pCmd)484 void VBoxDispVBVAHostCommandComplete(PVBOXDISPDEV pDev, VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 485 485 { 486 486 pDev->hgsmi.mp.pfnCompletionHandler(pDev->hgsmi.mp.hContext, pCmd); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispVHWA.cpp
r69500 r71592 21 21 #include <iprt/asm-amd64-x86.h> 22 22 23 static void VBoxDispVHWACommandFree(PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd)23 static void VBoxDispVHWACommandFree(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 24 24 { 25 25 VBoxHGSMIBufferFree(&pDev->hgsmi.ctx, pCmd); 26 26 } 27 27 28 static void VBoxDispVHWACommandRetain(VBOXVHWACMD *pCmd)28 static void VBoxDispVHWACommandRetain(VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 29 29 { 30 30 ASMAtomicIncU32(&pCmd->cRefs); 31 31 } 32 32 33 static void VBoxDispVHWACommandSubmitAsynchByEvent(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, VBOXPEVENT pEvent) 33 static void VBoxDispVHWACommandSubmitAsynchByEvent(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 34 VBOXPEVENT pEvent) 34 35 { 35 36 pCmd->GuestVBVAReserved1 = (uintptr_t)pEvent; … … 51 52 } 52 53 53 static void VBoxDispVHWAHanldeVHWACmdCompletion(PVBOXDISPDEV pDev, VBVAHOSTCMD * pHostCmd) 54 { 55 VBVAHOSTCMDVHWACMDCOMPLETE * pComplete = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE); 56 VBOXVHWACMD* pComplCmd = (VBOXVHWACMD*)HGSMIOffsetToPointer(&pDev->hgsmi.ctx.heapCtx.area, pComplete->offCmd); 57 PFNVBOXVHWACMDCOMPLETION pfnCompletion = (PFNVBOXVHWACMDCOMPLETION)pComplCmd->GuestVBVAReserved1; 58 void *pContext = (void *)pComplCmd->GuestVBVAReserved2; 54 static void VBoxDispVHWAHanldeVHWACmdCompletion(PVBOXDISPDEV pDev, VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pHostCmd) 55 { 56 VBVAHOSTCMDVHWACMDCOMPLETE RT_UNTRUSTED_VOLATILE_HOST *pComplete = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE); 57 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pComplCmd = 58 (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *)HGSMIOffsetToPointer(&pDev->hgsmi.ctx.heapCtx.area, pComplete->offCmd); 59 60 PFNVBOXVHWACMDCOMPLETION pfnCompletion = (PFNVBOXVHWACMDCOMPLETION)(uintptr_t)pComplCmd->GuestVBVAReserved1; 61 void *pContext = (void *)(uintptr_t)pComplCmd->GuestVBVAReserved2; 59 62 60 63 pfnCompletion(pDev, pComplCmd, pContext); … … 63 66 } 64 67 65 static void VBoxVHWAHostCommandHandler(PVBOXDISPDEV pDev, VBVAHOSTCMD *pCmd)66 { 67 switch (pCmd->customOpCode)68 static void VBoxVHWAHostCommandHandler(PVBOXDISPDEV pDev, VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 69 { 70 switch (pCmd->customOpCode) 68 71 { 69 72 case VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE: 70 {71 73 VBoxDispVHWAHanldeVHWACmdCompletion(pDev, pCmd); 72 74 break; 73 } 75 74 76 default: 75 {76 77 VBoxDispVBVAHostCommandComplete(pDev, pCmd); 77 }78 78 } 79 79 } … … 96 96 { 97 97 int rc = VERR_GENERAL_FAILURE; 98 VBOXVHWACMD* pCmd;99 98 100 99 if (!pDev->hgsmi.bSupported) … … 103 102 } 104 103 105 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_ENABLE, 0);104 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_ENABLE, 0); 106 105 if (!pCmd) 107 106 { … … 110 109 } 111 110 112 if(VBoxDispVHWACommandSubmit(pDev, pCmd)) 113 { 114 if(RT_SUCCESS(pCmd->rc)) 115 { 111 if (VBoxDispVHWACommandSubmit(pDev, pCmd)) 112 if (RT_SUCCESS(pCmd->rc)) 116 113 rc = VINF_SUCCESS; 117 }118 }119 114 120 115 VBoxDispVHWACommandRelease(pDev, pCmd); … … 122 117 } 123 118 124 VBOXVHWACMD * VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd)125 { 126 VBOXVHWACMD* pHdr = (VBOXVHWACMD*)VBoxHGSMIBufferAlloc(&pDev->hgsmi.ctx, 127 cbCmd + VBOXVHWACMD_HEADSIZE(),128 HGSMI_CH_VBVA,129 119 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST * 120 VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd) 121 { 122 uint32_t cbTotal = cbCmd + VBOXVHWACMD_HEADSIZE(); 123 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pHdr 124 = (VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *)VBoxHGSMIBufferAlloc(&pDev->hgsmi.ctx, cbTotal, HGSMI_CH_VBVA, VBVA_VHWA_CMD); 130 125 if (!pHdr) 131 126 { … … 134 129 else 135 130 { 136 memset( pHdr, 0, sizeof(VBOXVHWACMD));131 memset((void *)pHdr, 0, cbTotal); /* always clear the whole body so caller doesn't need to */ 137 132 pHdr->iDisplay = pDev->iDevice; 138 133 pHdr->rc = VERR_GENERAL_FAILURE; … … 147 142 } 148 143 149 void VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd)144 void VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 150 145 { 151 146 uint32_t cRefs = ASMAtomicDecU32(&pCmd->cRefs); 152 147 Assert(cRefs < UINT32_MAX / 2); 153 if(!cRefs) 154 { 148 if (!cRefs) 155 149 VBoxDispVHWACommandFree(pDev, pCmd); 156 } 157 } 158 159 BOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd) 150 } 151 152 BOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 160 153 { 161 154 VBOXPEVENT pEvent; … … 181 174 void VBoxDispVHWACommandCheckHostCmds(PVBOXDISPDEV pDev) 182 175 { 183 VBVAHOSTCMD *pCmd, *pNextCmd;176 VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd; 184 177 int rc = pDev->hgsmi.mp.pfnRequestCommandsHandler(pDev->hgsmi.mp.hContext, HGSMI_CH_VBVA, pDev->iDevice, &pCmd); 185 178 /* don't assert here, otherwise NT4 will be unhappy */ 186 if (RT_SUCCESS(rc))187 { 188 for(;pCmd; pCmd = pNextCmd)179 if (RT_SUCCESS(rc)) 180 { 181 while (pCmd) 189 182 { 190 pNextCmd = pCmd->u.pNext;183 VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pNextCmd = pCmd->u.pNext; 191 184 VBoxVHWAHostCommandHandler(pDev, pCmd); 185 pCmd = pNextCmd; 192 186 } 193 187 } … … 203 197 204 198 /* do not wait for completion */ 205 void VBoxDispVHWACommandSubmitAsynch (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext) 199 void VBoxDispVHWACommandSubmitAsynch(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 200 PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext) 206 201 { 207 202 pCmd->GuestVBVAReserved1 = (uintptr_t)pfnCompletion; … … 220 215 } 221 216 222 static DECLCALLBACK(void) VBoxDispVHWAFreeCmdCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd, void *pvContext) 217 static DECLCALLBACK(void) VBoxDispVHWAFreeCmdCompletion(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 218 void *pvContext) 223 219 { 224 220 RT_NOREF(pvContext); … … 226 222 } 227 223 228 void VBoxDispVHWACommandSubmitAsynchAndComplete (PVBOXDISPDEV pDev, VBOXVHWACMD *pCmd)224 void VBoxDispVHWACommandSubmitAsynchAndComplete (PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 229 225 { 230 226 pCmd->GuestVBVAReserved1 = (uintptr_t)VBoxDispVHWAFreeCmdCompletion; … … 236 232 VBoxHGSMIBufferSubmit(&pDev->hgsmi.ctx, pCmd); 237 233 238 if(!(pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH) 239 || pCmd->Flags & VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED) 234 uint32_t const fCmdFlags = pCmd->Flags; 235 if ( !(fCmdFlags & VBOXVHWACMD_FLAG_HG_ASYNCH) 236 || (fCmdFlags & VBOXVHWACMD_FLAG_HG_ASYNCH_RETURNED)) 240 237 { 241 238 /* the command is completed */ … … 246 243 } 247 244 248 void VBoxDispVHWAFreeHostInfo1(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO1 *pInfo)249 { 250 VBOXVHWACMD *pCmd = VBOXVHWACMD_HEAD(pInfo);251 VBoxDispVHWACommandRelease(pDev, pCmd); 252 } 253 254 void VBoxDispVHWAFreeHostInfo2(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO2 *pInfo)255 { 256 VBOXVHWACMD *pCmd = VBOXVHWACMD_HEAD(pInfo);257 VBoxDispVHWACommandRelease(pDev, pCmd); 258 } 259 260 VBOXVHWACMD_QUERYINFO1*VBoxDispVHWAQueryHostInfo1(PVBOXDISPDEV pDev)261 { 262 VBOXVHWACMD * pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_QUERY_INFO1, sizeof(VBOXVHWACMD_QUERYINFO1));263 VBOXVHWACMD_QUERYINFO1 *pInfo1;245 void VBoxDispVHWAFreeHostInfo1(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo) 246 { 247 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBOXVHWACMD_HEAD(pInfo); 248 VBoxDispVHWACommandRelease(pDev, pCmd); 249 } 250 251 void VBoxDispVHWAFreeHostInfo2(PVBOXDISPDEV pDev, VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo) 252 { 253 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBOXVHWACMD_HEAD(pInfo); 254 VBoxDispVHWACommandRelease(pDev, pCmd); 255 } 256 257 static VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *VBoxDispVHWAQueryHostInfo1(PVBOXDISPDEV pDev) 258 { 259 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_QUERY_INFO1, 260 sizeof(VBOXVHWACMD_QUERYINFO1)); 264 261 if (!pCmd) 265 262 { … … 268 265 } 269 266 270 pInfo1= VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1);267 VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo1= VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1); 271 268 pInfo1->u.in.guestVersion.maj = VBOXVHWA_VERSION_MAJ; 272 269 pInfo1->u.in.guestVersion.min = VBOXVHWA_VERSION_MIN; … … 286 283 } 287 284 288 VBOXVHWACMD_QUERYINFO2*VBoxDispVHWAQueryHostInfo2(PVBOXDISPDEV pDev, uint32_t numFourCC)289 { 290 VBOXVHWACMD * pCmd = VBoxDispVHWACommandCreate (pDev, VBOXVHWACMD_TYPE_QUERY_INFO2, VBOXVHWAINFO2_SIZE(numFourCC));291 VBOXVHWACMD_QUERYINFO2 *pInfo2;285 static VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *VBoxDispVHWAQueryHostInfo2(PVBOXDISPDEV pDev, uint32_t numFourCC) 286 { 287 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_QUERY_INFO2, 288 VBOXVHWAINFO2_SIZE(numFourCC)); 292 289 if (!pCmd) 293 290 { … … 296 293 } 297 294 298 pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2);295 VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2); 299 296 pInfo2->numFourCC = numFourCC; 300 301 if(VBoxDispVHWACommandSubmit (pDev, pCmd)) 302 { 303 if(RT_SUCCESS(pCmd->rc)) 304 { 305 if(pInfo2->numFourCC == numFourCC) 306 { 297 if (VBoxDispVHWACommandSubmit(pDev, pCmd)) 298 if (RT_SUCCESS(pCmd->rc)) 299 if (pInfo2->numFourCC == numFourCC) 307 300 return pInfo2; 308 }309 }310 }311 301 312 302 VBoxDispVHWACommandRelease(pDev, pCmd); … … 316 306 int VBoxDispVHWAInitHostInfo1(PVBOXDISPDEV pDev) 317 307 { 318 VBOXVHWACMD_QUERYINFO1* pInfo;319 308 320 309 if (!pDev->hgsmi.bSupported) 321 310 return VERR_NOT_SUPPORTED; 322 311 323 pInfo = VBoxDispVHWAQueryHostInfo1(pDev);312 VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo = VBoxDispVHWAQueryHostInfo1(pDev); 324 313 if(!pInfo) 325 314 { … … 336 325 pDev->vhwa.numFourCC = pInfo->u.out.numFourCC; 337 326 pDev->vhwa.bEnabled = (pInfo->u.out.cfgFlags & VBOXVHWA_CFG_ENABLED); 327 338 328 VBoxDispVHWAFreeHostInfo1(pDev, pInfo); 339 329 return VINF_SUCCESS; … … 342 332 int VBoxDispVHWAInitHostInfo2(PVBOXDISPDEV pDev, DWORD *pFourCC) 343 333 { 344 VBOXVHWACMD_QUERYINFO2* pInfo;345 334 int rc = VINF_SUCCESS; 346 335 … … 348 337 return VERR_NOT_SUPPORTED; 349 338 350 pInfo = VBoxDispVHWAQueryHostInfo2(pDev, pDev->vhwa.numFourCC); 351 339 VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo = VBoxDispVHWAQueryHostInfo2(pDev, pDev->vhwa.numFourCC); 352 340 Assert(pInfo); 353 341 if(!pInfo) 354 342 return VERR_OUT_OF_RESOURCES; 355 343 356 if(pDev->vhwa.numFourCC) 357 { 358 memcpy(pFourCC, pInfo->FourCC, pDev->vhwa.numFourCC * sizeof(pFourCC[0])); 359 } 344 if (pDev->vhwa.numFourCC) 345 memcpy(pFourCC, (void const *)pInfo->FourCC, pDev->vhwa.numFourCC * sizeof(pFourCC[0])); 360 346 else 361 347 { … … 372 358 { 373 359 int rc = VERR_GENERAL_FAILURE; 374 VBOXVHWACMD* pCmd;375 360 376 361 if (!pDev->hgsmi.bSupported) 377 362 return VERR_NOT_SUPPORTED; 378 363 379 pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_DISABLE, 0);364 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBoxDispVHWACommandCreate(pDev, VBOXVHWACMD_TYPE_DISABLE, 0); 380 365 if (!pCmd) 381 366 { … … 384 369 } 385 370 386 if(VBoxDispVHWACommandSubmit (pDev, pCmd)) 387 { 371 if (VBoxDispVHWACommandSubmit(pDev, pCmd)) 388 372 if(RT_SUCCESS(pCmd->rc)) 389 {390 373 rc = VINF_SUCCESS; 391 }392 }393 374 394 375 VBoxDispVHWACommandRelease(pDev, pCmd); … … 652 633 } 653 634 654 void VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY *pVHWACKey, DDCOLORKEY *pDdCKey)635 void VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY RT_UNTRUSTED_VOLATILE_HOST *pVHWACKey, DDCOLORKEY *pDdCKey) 655 636 { 656 637 pVHWACKey->low = pDdCKey->dwColorSpaceLowValue; … … 658 639 } 659 640 660 void VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX *pVHWAOverlay, DDOVERLAYFX *pDdOverlay)641 void VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX RT_UNTRUSTED_VOLATILE_HOST *pVHWAOverlay, DDOVERLAYFX *pDdOverlay) 661 642 { 662 643 /// @todo fxFlags … … 665 646 } 666 647 667 void VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX *pVHWABlt, DDBLTFX *pDdBlt)648 void VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX RT_UNTRUSTED_VOLATILE_HOST *pVHWABlt, DDBLTFX *pDdBlt) 668 649 { 669 650 pVHWABlt->fillColor = pDdBlt->dwFillColor; … … 673 654 } 674 655 675 int VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT *pVHWAFormat, DDPIXELFORMAT *pDdFormat)656 int VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT RT_UNTRUSTED_VOLATILE_HOST *pVHWAFormat, DDPIXELFORMAT *pDdFormat) 676 657 { 677 658 uint32_t unsup = VBoxDispVHWAUnsupportedDDPFS(pDdFormat->dwFlags); … … 689 670 } 690 671 691 int VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC *pVHWADesc, DDSURFACEDESC *pDdDesc)672 int VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC RT_UNTRUSTED_VOLATILE_HOST *pVHWADesc, DDSURFACEDESC *pDdDesc) 692 673 { 693 674 uint32_t unsupds = VBoxDispVHWAUnsupportedDSS(pDdDesc->dwFlags); … … 757 738 } 758 739 759 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL *pSrc) 740 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL const *pSrc) 741 { 742 pDst->left = pSrc->left; 743 pDst->top = pSrc->top; 744 pDst->right = pSrc->right; 745 pDst->bottom = pSrc->bottom; 746 } 747 748 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL RT_UNTRUSTED_VOLATILE_HOST *pDst, RECTL const *pSrc) 760 749 { 761 750 pDst->left = pSrc->left; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/xpdm/VBoxDispVHWA.h
r69500 r71592 59 59 }VBOXVHWASURFDESC, *PVBOXVHWASURFDESC; 60 60 61 typedef DECLCALLBACK(void) FNVBOXVHWACMDCOMPLETION(PVBOXDISPDEV pDev, VBOXVHWACMD * pCmd, void * pContext);61 typedef DECLCALLBACK(void) FNVBOXVHWACMDCOMPLETION(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, void *pvContext); 62 62 typedef FNVBOXVHWACMDCOMPLETION *PFNVBOXVHWACMDCOMPLETION; 63 63 64 64 void VBoxDispVHWAInit(PVBOXDISPDEV pDev); 65 int VBoxDispVHWAEnable(PVBOXDISPDEV pDev);66 int VBoxDispVHWADisable(PVBOXDISPDEV pDev);67 int VBoxDispVHWAInitHostInfo1(PVBOXDISPDEV pDev);68 int VBoxDispVHWAInitHostInfo2(PVBOXDISPDEV pDev, DWORD *pFourCC);65 int VBoxDispVHWAEnable(PVBOXDISPDEV pDev); 66 int VBoxDispVHWADisable(PVBOXDISPDEV pDev); 67 int VBoxDispVHWAInitHostInfo1(PVBOXDISPDEV pDev); 68 int VBoxDispVHWAInitHostInfo2(PVBOXDISPDEV pDev, DWORD *pFourCC); 69 69 70 VBOXVHWACMD* VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd); 71 void VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd); 72 BOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd); 73 void VBoxDispVHWACommandSubmitAsynch (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd, PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext); 74 void VBoxDispVHWACommandSubmitAsynchAndComplete (PVBOXDISPDEV pDev, VBOXVHWACMD* pCmd); 70 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *VBoxDispVHWACommandCreate(PVBOXDISPDEV pDev, VBOXVHWACMD_TYPE enmCmd, VBOXVHWACMD_LENGTH cbCmd); 71 void VBoxDispVHWACommandRelease(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 72 BOOL VBoxDispVHWACommandSubmit(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST*pCmd); 73 void VBoxDispVHWACommandSubmitAsynch(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd, 74 PFNVBOXVHWACMDCOMPLETION pfnCompletion, void * pContext); 75 void VBoxDispVHWACommandSubmitAsynchAndComplete(PVBOXDISPDEV pDev, VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 75 76 void VBoxDispVHWACommandCheckHostCmds(PVBOXDISPDEV pDev); 76 77 … … 111 112 uint32_t VBoxDispVHWAToDDCKEYs(uint32_t caps); 112 113 113 int VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC *pVHWADesc, DDSURFACEDESC *pDdDesc); 114 int VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT *pVHWAFormat, DDPIXELFORMAT *pDdFormat); 115 void VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX *pVHWAOverlay, DDOVERLAYFX *pDdOverlay); 116 void VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY *pVHWACKey, DDCOLORKEY *pDdCKey); 117 void VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX *pVHWABlt, DDBLTFX *pDdBlt); 118 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL *pSrc); 114 int VBoxDispVHWAFromDDSURFACEDESC(VBOXVHWA_SURFACEDESC RT_UNTRUSTED_VOLATILE_HOST *pVHWADesc, DDSURFACEDESC *pDdDesc); 115 int VBoxDispVHWAFromDDPIXELFORMAT(VBOXVHWA_PIXELFORMAT RT_UNTRUSTED_VOLATILE_HOST *pVHWAFormat, DDPIXELFORMAT *pDdFormat); 116 void VBoxDispVHWAFromDDOVERLAYFX(VBOXVHWA_OVERLAYFX RT_UNTRUSTED_VOLATILE_HOST *pVHWAOverlay, DDOVERLAYFX *pDdOverlay); 117 void VBoxDispVHWAFromDDCOLORKEY(VBOXVHWA_COLORKEY RT_UNTRUSTED_VOLATILE_HOST *pVHWACKey, DDCOLORKEY *pDdCKey); 118 void VBoxDispVHWAFromDDBLTFX(VBOXVHWA_BLTFX RT_UNTRUSTED_VOLATILE_HOST *pVHWABlt, DDBLTFX *pDdBlt); 119 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL *pDst, RECTL const *pSrc); 120 void VBoxDispVHWAFromRECTL(VBOXVHWA_RECTL RT_UNTRUSTED_VOLATILE_HOST *pDst, RECTL const *pSrc); 119 121 120 122 uint32_t VBoxDispVHWAUnsupportedDDCAPS(uint32_t caps); … … 127 129 uint32_t VBoxDispVHWASupportedDDCEYCAPS(uint32_t caps); 128 130 129 #endif /*VBOXDISPVHWA_H*/ 131 #endif /* !VBOXDISPVHWA_H */ 132 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVhwa.cpp
r71590 r71592 25 25 26 26 #define VBOXVHWA_PRIMARY_ALLOCATION(_pSrc) ((_pSrc)->pPrimaryAllocation) 27 28 #define VBOXVHWA_COPY_RECT(a_pDst, a_pSrc) do { \ 29 (a_pDst)->left = (a_pSrc)->left; \ 30 (a_pDst)->top = (a_pSrc)->top; \ 31 (a_pDst)->right = (a_pSrc)->right; \ 32 (a_pDst)->bottom = (a_pSrc)->bottom; \ 33 } while(0) 27 34 28 35 … … 222 229 } 223 230 224 void vboxVhwaFreeHostInfo1(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO1*pInfo)225 { 226 VBOXVHWACMD *pCmd = VBOXVHWACMD_HEAD(pInfo);231 static void vboxVhwaFreeHostInfo1(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo) 232 { 233 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBOXVHWACMD_HEAD(pInfo); 227 234 vboxVhwaCommandFree(pDevExt, pCmd); 228 235 } 229 236 230 void vboxVhwaFreeHostInfo2(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO2*pInfo)231 { 232 VBOXVHWACMD *pCmd = VBOXVHWACMD_HEAD(pInfo);237 static void vboxVhwaFreeHostInfo2(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo) 238 { 239 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = VBOXVHWACMD_HEAD(pInfo); 233 240 vboxVhwaCommandFree(pDevExt, pCmd); 234 241 } 235 242 236 VBOXVHWACMD_QUERYINFO1* vboxVhwaQueryHostInfo1(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId) 243 static VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST * 244 vboxVhwaQueryHostInfo1(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId) 237 245 { 238 246 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO1, … … 240 248 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), NULL); 241 249 242 VBOXVHWACMD_QUERYINFO1 *pInfo1 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1);250 VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo1 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO1); 243 251 pInfo1->u.in.guestVersion.maj = VBOXVHWA_VERSION_MAJ; 244 252 pInfo1->u.in.guestVersion.min = VBOXVHWA_VERSION_MIN; … … 256 264 } 257 265 258 VBOXVHWACMD_QUERYINFO2* vboxVhwaQueryHostInfo2(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, uint32_t numFourCC) 266 static VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST * 267 vboxVhwaQueryHostInfo2(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, uint32_t numFourCC) 259 268 { 260 269 VBOXVHWACMD RT_UNTRUSTED_VOLATILE_HOST *pCmd = vboxVhwaCommandCreate(pDevExt, srcId, VBOXVHWACMD_TYPE_QUERY_INFO2, … … 262 271 AssertReturnStmt(pCmd, LOGREL(("vboxVhwaCommandCreate failed")), NULL); 263 272 264 VBOXVHWACMD_QUERYINFO2 *pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2);273 VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo2 = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_QUERYINFO2); 265 274 pInfo2->numFourCC = numFourCC; 266 275 267 276 int rc = vboxVhwaCommandSubmit(pDevExt, pCmd); 268 277 AssertRC(rc); 269 if (RT_SUCCESS(rc))278 if (RT_SUCCESS(rc)) 270 279 { 271 280 AssertRC(pCmd->rc); 272 281 if(RT_SUCCESS(pCmd->rc)) 273 {274 282 if(pInfo2->numFourCC == numFourCC) 275 {276 283 return pInfo2; 277 }278 }279 284 } 280 285 … … 340 345 vboxVhwaHlpOverlayListInit(pDevExt, srcId); 341 346 342 VBOXVHWACMD_QUERYINFO1 *pInfo1 = vboxVhwaQueryHostInfo1(pDevExt, srcId);347 VBOXVHWACMD_QUERYINFO1 RT_UNTRUSTED_VOLATILE_HOST *pInfo1 = vboxVhwaQueryHostInfo1(pDevExt, srcId); 343 348 if (pInfo1) 344 349 { … … 380 385 && (pInfo1->u.out.caps & VBOXVHWA_CAPS_OVERLAYFOURCC)) 381 386 { 382 VBOXVHWACMD_QUERYINFO2* pInfo2 = vboxVhwaQueryHostInfo2(pDevExt, srcId, pInfo1->u.out.numFourCC); 387 VBOXVHWACMD_QUERYINFO2 RT_UNTRUSTED_VOLATILE_HOST *pInfo2 = 388 vboxVhwaQueryHostInfo2(pDevExt, srcId, pInfo1->u.out.numFourCC); 383 389 if (pInfo2) 384 390 { … … 415 421 } 416 422 417 int vboxVhwaHlpTranslateFormat(VBOXVHWA_PIXELFORMAT *pFormat, D3DDDIFORMAT enmFormat)423 static int vboxVhwaHlpTranslateFormat(VBOXVHWA_PIXELFORMAT RT_UNTRUSTED_VOLATILE_HOST *pFormat, D3DDDIFORMAT enmFormat) 418 424 { 419 425 pFormat->Reserved = 0; … … 490 496 if (pCmd) 491 497 { 492 VBOXVHWACMD_SURF_DESTROY *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_DESTROY);493 494 memset( pBody, 0, sizeof(VBOXVHWACMD_SURF_DESTROY));498 VBOXVHWACMD_SURF_DESTROY RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_DESTROY); 499 500 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_DESTROY)); 495 501 496 502 pBody->u.in.hSurf = pSurf->hHostHandle; … … 507 513 } 508 514 509 int vboxVhwaHlpPopulateSurInfo(VBOXVHWA_SURFACEDESC *pInfo, PVBOXWDDM_ALLOCATION pSurf,515 int vboxVhwaHlpPopulateSurInfo(VBOXVHWA_SURFACEDESC RT_UNTRUSTED_VOLATILE_HOST *pInfo, PVBOXWDDM_ALLOCATION pSurf, 510 516 uint32_t fFlags, uint32_t cBackBuffers, uint32_t fSCaps, 511 517 D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId) 512 518 { 513 519 RT_NOREF(VidPnSourceId); 514 memset( pInfo, 0, sizeof(VBOXVHWA_SURFACEDESC));520 memset((void *)pInfo, 0, sizeof(VBOXVHWA_SURFACEDESC)); 515 521 516 522 #if 0 … … 568 574 } 569 575 570 int vboxVhwaHlpCheckApplySurfInfo(PVBOXWDDM_ALLOCATION pSurf, VBOXVHWA_SURFACEDESC *pInfo,571 uint32_t fFlags, bool bApplyHostHandle)576 int vboxVhwaHlpCheckApplySurfInfo(PVBOXWDDM_ALLOCATION pSurf, VBOXVHWA_SURFACEDESC RT_UNTRUSTED_VOLATILE_HOST *pInfo, 577 uint32_t fFlags, bool bApplyHostHandle) 572 578 { 573 579 int rc = VINF_SUCCESS; … … 615 621 if (pCmd) 616 622 { 617 VBOXVHWACMD_SURF_CREATE *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CREATE);623 VBOXVHWACMD_SURF_CREATE RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_CREATE); 618 624 int rc = VINF_SUCCESS; 619 625 620 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_CREATE)); 621 622 rc = vboxVhwaHlpPopulateSurInfo(&pBody->SurfInfo, pSurf, 623 fFlags, cBackBuffers, fSCaps, 624 VidPnSourceId); 626 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_CREATE)); 627 628 rc = vboxVhwaHlpPopulateSurInfo(&pBody->SurfInfo, pSurf, fFlags, cBackBuffers, fSCaps, VidPnSourceId); 625 629 AssertRC(rc); 626 630 if (RT_SUCCESS(rc)) … … 629 633 Assert(pCmd->rc == VINF_SUCCESS); 630 634 if(pCmd->rc == VINF_SUCCESS) 631 {632 635 rc = vboxVhwaHlpCheckApplySurfInfo(pSurf, &pBody->SurfInfo, fFlags, true); 633 }634 636 else 635 637 rc = pCmd->rc; … … 650 652 if (pCmd) 651 653 { 652 VBOXVHWACMD_SURF_GETINFO *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_GETINFO);654 VBOXVHWACMD_SURF_GETINFO RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_GETINFO); 653 655 int rc = VINF_SUCCESS; 654 656 655 memset(pBody, 0, sizeof(VBOXVHWACMD_SURF_GETINFO)); 656 657 rc = vboxVhwaHlpPopulateSurInfo(&pBody->SurfInfo, pSurf, 658 0, 0, VBOXVHWA_SCAPS_OVERLAY | VBOXVHWA_SCAPS_VIDEOMEMORY | VBOXVHWA_SCAPS_LOCALVIDMEM | VBOXVHWA_SCAPS_COMPLEX, 659 VidPnSourceId); 657 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_GETINFO)); 658 659 rc = vboxVhwaHlpPopulateSurInfo(&pBody->SurfInfo, pSurf, 0, 0, 660 VBOXVHWA_SCAPS_OVERLAY | VBOXVHWA_SCAPS_VIDEOMEMORY 661 | VBOXVHWA_SCAPS_LOCALVIDMEM | VBOXVHWA_SCAPS_COMPLEX, 662 VidPnSourceId); 660 663 AssertRC(rc); 661 664 if (RT_SUCCESS(rc)) … … 664 667 Assert(pCmd->rc == VINF_SUCCESS); 665 668 if(pCmd->rc == VINF_SUCCESS) 666 {667 669 rc = vboxVhwaHlpCheckApplySurfInfo(pSurf, &pBody->SurfInfo, 0, true); 668 }669 670 else 670 671 rc = pCmd->rc; … … 824 825 if (pCmd) 825 826 { 826 VBOXVHWACMD_SURF_FLIP *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP);827 828 memset( pBody, 0, sizeof(VBOXVHWACMD_SURF_FLIP));827 VBOXVHWACMD_SURF_FLIP RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_FLIP); 828 829 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_FLIP)); 829 830 830 831 // pBody->TargGuestSurfInfo; … … 839 840 pBody->u.in.xUpdatedTargMemValid = 1; 840 841 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_RECT_VALID) 841 pBody->u.in.xUpdatedTargMemRect = *(VBOXVHWA_RECTL*)((void*)&pOurInfo->DirtyRegion.Rect);842 VBOXVHWA_COPY_RECT(&pBody->u.in.xUpdatedTargMemRect, &pOurInfo->DirtyRegion.Rect); 842 843 else 843 844 { … … 896 897 if(pCmd) 897 898 { 898 VBOXVHWACMD_SURF_COLORFILL *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_COLORFILL);899 900 memset( pBody, 0, sizeof(VBOXVHWACMD_SURF_COLORFILL));899 VBOXVHWACMD_SURF_COLORFILL RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_COLORFILL); 900 901 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_COLORFILL)); 901 902 902 903 pBody->u.in.hSurf = pAlloc->hHostHandle; 903 904 pBody->u.in.offSurface = pAlloc->AllocData.Addr.offVram; 904 905 pBody->u.in.cRects = pCF->ClrFill.Rects.cRects; 905 memcpy (pBody->u.in.aRects, pCF->ClrFill.Rects.aRects, pCF->ClrFill.Rects.cRects * sizeof (pCF->ClrFill.Rects.aRects[0])); 906 memcpy((void *)&pBody->u.in.aRects[0], pCF->ClrFill.Rects.aRects, 907 pCF->ClrFill.Rects.cRects * sizeof (pCF->ClrFill.Rects.aRects[0])); 906 908 vboxVhwaCommandSubmitAsynchAndComplete(pOverlay->pDevExt, pCmd); 907 909 … … 985 987 if (pCmd) 986 988 { 987 VBOXVHWACMD_SURF_OVERLAY_UPDATE *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE);988 989 memset( pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE));989 VBOXVHWACMD_SURF_OVERLAY_UPDATE RT_UNTRUSTED_VOLATILE_HOST *pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_SURF_OVERLAY_UPDATE); 990 991 memset((void *)pBody, 0, sizeof(VBOXVHWACMD_SURF_OVERLAY_UPDATE)); 990 992 991 993 pBody->u.in.hDstSurf = pFbSurf->hHostHandle; 992 994 pBody->u.in.offDstSurface = pFbSurf->AllocData.Addr.offVram; 993 pBody->u.in.dstRect = *(VBOXVHWA_RECTL*)((void*)&pOverlayInfo->DstRect); 995 VBOXVHWA_COPY_RECT(&pBody->u.in.dstRect, &pOverlayInfo->DstRect); 996 994 997 pBody->u.in.hSrcSurf = pAlloc->hHostHandle; 995 998 pBody->u.in.offSrcSurface = pOverlayInfo->PhysicalAddress.QuadPart; 996 999 pAlloc->AllocData.Addr.offVram = pOverlayInfo->PhysicalAddress.QuadPart; 997 pBody->u.in.srcRect = *(VBOXVHWA_RECTL*)((void*)&pOverlayInfo->SrcRect); 1000 VBOXVHWA_COPY_RECT(&pBody->u.in.srcRect, &pOverlayInfo->SrcRect); 1001 998 1002 pBody->u.in.flags |= VBOXVHWA_OVER_SHOW; 999 1003 if (pOurInfo->OverlayDesc.fFlags & VBOXWDDM_OVERLAY_F_CKEY_DST) … … 1015 1019 pBody->u.in.xFlags |= VBOXVHWACMD_SURF_OVERLAY_UPDATE_F_SRCMEMRECT; 1016 1020 if (pOurInfo->DirtyRegion.fFlags & VBOXWDDM_DIRTYREGION_F_RECT_VALID) 1017 pBody->u.in.xUpdatedSrcMemRect = *(VBOXVHWA_RECTL*)((void*)&pOurInfo->DirtyRegion.Rect);1021 VBOXVHWA_COPY_RECT(&pBody->u.in.xUpdatedSrcMemRect, &pOurInfo->DirtyRegion.Rect); 1018 1022 else 1019 1023 { … … 1027 1031 { 1028 1032 pBody->u.in.xFlags |= VBOXVHWACMD_SURF_OVERLAY_UPDATE_F_DSTMEMRECT; 1029 pBody->u.in.xUpdatedDstMemRect = *(VBOXVHWA_RECTL*)((void*)pDstUpdateRect);1033 VBOXVHWA_COPY_RECT(&pBody->u.in.xUpdatedDstMemRect, pDstUpdateRect); 1030 1034 } 1031 1035 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVhwa.h
r71590 r71592 52 52 #endif 53 53 54 void vboxVhwaFreeHostInfo1(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO1* pInfo);55 void vboxVhwaFreeHostInfo2(PVBOXMP_DEVEXT pDevExt, VBOXVHWACMD_QUERYINFO2* pInfo);56 VBOXVHWACMD_QUERYINFO1* vboxVhwaQueryHostInfo1(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId);57 VBOXVHWACMD_QUERYINFO2* vboxVhwaQueryHostInfo2(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId, uint32_t numFourCC);58 54 int vboxVhwaEnable(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId); 59 55 int vboxVhwaDisable(PVBOXMP_DEVEXT pDevExt, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPInternal.cpp
r71590 r71592 356 356 } 357 357 358 DECLCALLBACK(void) VBoxMPHGSMIHostCmdCompleteCB(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD *pCmd) 358 /** @callback_method_impl{FNVBOXVIDEOHGSMICOMPLETION} */ 359 DECLCALLBACK(void) VBoxMPHGSMIHostCmdCompleteCB(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd) 359 360 { 360 361 PHGSMIHOSTCOMMANDCONTEXT pCtx = &((PVBOXMP_COMMON)hHGSMI)->hostCtx; … … 362 363 } 363 364 365 /** @callback_method_impl{FNVBOXVIDEOHGSMICOMMANDS} */ 364 366 DECLCALLBACK(int) VBoxMPHGSMIHostCmdRequestCB(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, 365 uint32_t iDisplay, struct VBVAHOSTCMD **ppCmd)367 uint32_t iDisplay, struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST **ppCmd) 366 368 { 367 369 LOGF_ENTER(); … … 379 381 380 382 HGSMICHANNEL *pChannel = HGSMIChannelFindById(&pCtx->channels, u8Channel); 381 if (pChannel)383 if (pChannel) 382 384 { 383 385 VBVA_CHANNELCONTEXTS * pContexts = (VBVA_CHANNELCONTEXTS *)pChannel->handler.pvHandler; 384 386 VBVADISP_CHANNELCONTEXT *pDispContext = VBoxVbvaFindHandlerInfo(pContexts, iDisplay); 385 387 386 if (pDispContext)388 if (pDispContext) 387 389 { 388 390 VBVAHOSTCMD *pCmd; … … 391 393 pCmd = ASMAtomicReadPtrT(&pDispContext->pCmd, VBVAHOSTCMD *); 392 394 } while (!ASMAtomicCmpXchgPtr(&pDispContext->pCmd, NULL, pCmd)); 395 393 396 *ppCmd = VBoxVbvaReverseList(pCmd); 394 397 … … 396 399 return VINF_SUCCESS; 397 400 } 398 else 399 { 400 WARN(("!pDispContext for display %d", iDisplay)); 401 } 402 } 403 401 WARN(("!pDispContext for display %d", iDisplay)); 402 } 403 404 *ppCmd = NULL; 404 405 LOGF_LEAVE(); 405 406 return VERR_INVALID_PARAMETER; … … 510 511 break; 511 512 } 513 512 514 case VBVAHG_EVENT: 513 515 { 514 VBVAHOSTCMDEVENT *pEventCmd = VBVAHOSTCMD_BODY(pCur, VBVAHOSTCMDEVENT);516 VBVAHOSTCMDEVENT RT_UNTRUSTED_VOLATILE_HOST *pEventCmd = VBVAHOSTCMD_BODY(pCur, VBVAHOSTCMDEVENT); 515 517 VBoxMPSignalEvent(pCallbacks->pCommon, pEventCmd->pEvent); 516 518 } 519 517 520 default: 518 521 { -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/xpdm/VBoxMPInternal.h
r71179 r71592 31 31 void VBoxCreateDisplays(PVBOXMP_DEVEXT pExt, PVIDEO_PORT_CONFIG_INFO pConfigInfo); 32 32 int VBoxVbvaEnable(PVBOXMP_DEVEXT pExt, BOOLEAN bEnable, VBVAENABLERESULT *pResult); 33 DECLCALLBACK(void) VBoxMPHGSMIHostCmdCompleteCB(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD *pCmd); 34 DECLCALLBACK(int) VBoxMPHGSMIHostCmdRequestCB(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDisplay, struct VBVAHOSTCMD **ppCmd); 33 DECLCALLBACK(void) VBoxMPHGSMIHostCmdCompleteCB(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST *pCmd); 34 DECLCALLBACK(int) VBoxMPHGSMIHostCmdRequestCB(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDisplay, 35 struct VBVAHOSTCMD RT_UNTRUSTED_VOLATILE_HOST **ppCmd); 35 36 int VBoxVbvaChannelDisplayEnable(PVBOXMP_COMMON pCommon, int iDisplay, uint8_t u8Channel); 36 37 -
trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
r71590 r71592 1174 1174 } 1175 1175 1176 int vbvaVHWAConstruct 1176 int vbvaVHWAConstruct(PVGASTATE pVGAState) 1177 1177 { 1178 1178 pVGAState->pendingVhwaCommands.cPending = 0; … … 1185 1185 uint32_t iDisplay = 0; 1186 1186 int rc = VINF_SUCCESS; 1187 VBOXVHWACMD_HH_CONSTRUCT * pBody = VBOXVHWACMD_BODY(pCmd, VBOXVHWACMD_HH_CONSTRUCT);1187 VBOXVHWACMD_HH_CONSTRUCT *pBody = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_CONSTRUCT); 1188 1188 1189 1189 do … … 1199 1199 1200 1200 rc = vbvaVHWAHHCommandPost(pVGAState, pCmd); 1201 ASMCompilerBarrier(); 1202 1201 1203 AssertRC(rc); 1202 if (RT_SUCCESS(rc))1204 if (RT_SUCCESS(rc)) 1203 1205 { 1204 1206 rc = pCmd->rc; … … 1230 1232 } 1231 1233 1232 int vbvaVHWAReset 1234 int vbvaVHWAReset(PVGASTATE pVGAState) 1233 1235 { 1234 1236 vbvaVHWACommandClearAllPending(pVGAState); … … 1382 1384 pHostCmd->iDstID = pCmd->iDisplay; 1383 1385 pHostCmd->customOpCode = 0; 1384 VBVAHOSTCMDEVENT *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDEVENT);1386 VBVAHOSTCMDEVENT RT_UNTRUSTED_VOLATILE_GUEST *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDEVENT); 1385 1387 pBody->pEvent = pCmd->GuestVBVAReserved1; 1386 1388 } … … 1403 1405 pHostCmd->iDstID = pCmd->iDisplay; 1404 1406 pHostCmd->customOpCode = VBVAHG_DCUSTOM_VHWA_CMDCOMPLETE; 1405 VBVAHOSTCMDVHWACMDCOMPLETE *pBody = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE); 1407 VBVAHOSTCMDVHWACMDCOMPLETE RT_UNTRUSTED_VOLATILE_GUEST *pBody 1408 = VBVAHOSTCMD_BODY(pHostCmd, VBVAHOSTCMDVHWACMDCOMPLETE); 1406 1409 pBody->offCmd = offCmd; 1407 1410 } … … 1747 1750 { 1748 1751 vbvaVHWAHHCommandReinit(pCmd, VBOXVHWACMD_TYPE_HH_SAVESTATE_SAVEPERFORM, 0); 1749 VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM *pSave = VBOXVHWACMD_BODY (pCmd, VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM);1752 VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM *pSave = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_SAVESTATE_SAVEPERFORM); 1750 1753 pSave->pSSM = pSSM; 1751 1754 vbvaVHWAHHPost (pVGAState, pCmd, vboxVBVASaveStatePerformPreCb, NULL, &VhwaData); … … 1985 1988 VBOXVBVASAVEDSTATECBDATA VhwaData = {0}; 1986 1989 VhwaData.pSSM = pSSM; 1987 VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM *pLoad = VBOXVHWACMD_BODY (pCmd, VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM);1990 VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM *pLoad = VBOXVHWACMD_BODY_HOST_HEAP(pCmd, VBOXVHWACMD_HH_SAVESTATE_LOADPERFORM); 1988 1991 pLoad->pSSM = pSSM; 1989 1992 vbvaVHWAHHPost (pVGAState, pCmd, vboxVBVALoadStatePerformPreCb, vboxVBVALoadStatePerformPostCb, &VhwaData);
Note:
See TracChangeset
for help on using the changeset viewer.