Changeset 69904 in vbox
- Timestamp:
- Dec 1, 2017 8:29:24 PM (7 years ago)
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 6 edited
-
DevVGA-SVGA.cpp (modified) (8 diffs)
-
DevVGA-SVGA.h (modified) (1 diff)
-
DevVGA-SVGA3d-ogl.cpp (modified) (3 diffs)
-
DevVGA-SVGA3d-savedstate.cpp (modified) (5 diffs)
-
DevVGA-SVGA3d-win.cpp (modified) (2 diffs)
-
DevVGASavedState.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp
r69624 r69904 487 487 SSMFIELD_ENTRY( VMSVGAState, uBpp), 488 488 SSMFIELD_ENTRY( VMSVGAState, cbScanline), 489 SSMFIELD_ENTRY_VER( VMSVGAState, uScreenOffset, VGA_SAVEDSTATE_VERSION_VMSVGA), 490 SSMFIELD_ENTRY_IGNORE( VMSVGAState, uLastScreenOffset), /* VGA_SAVEDSTATE_VERSION_VMSVGA */ 489 491 SSMFIELD_ENTRY( VMSVGAState, u32MaxWidth), 490 492 SSMFIELD_ENTRY( VMSVGAState, u32MaxHeight), … … 1233 1235 && pThis->last_width == (unsigned)pThis->svga.uWidth 1234 1236 && pThis->last_height == (unsigned)pThis->svga.uHeight 1237 && pThis->svga.uLastScreenOffset == pThis->svga.uScreenOffset 1235 1238 ) 1236 1239 { … … 1240 1243 } 1241 1244 1242 Log (("vmsvgaChangeMode: sEnable LFB mode and resize to (%d,%d) bpp=%d\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp));1245 LogFunc(("Enable LFB mode and resize to (%d,%d) bpp=%d uScreenOffset 0x%x\n", pThis->svga.uWidth, pThis->svga.uHeight, pThis->svga.uBpp, pThis->svga.uScreenOffset)); 1243 1246 pThis->svga.cbScanline = ((pThis->svga.uWidth * pThis->svga.uBpp + 7) & ~7) / 8; 1244 1247 1245 1248 pThis->pDrv->pfnLFBModeChange(pThis->pDrv, true); 1246 rc = pThis->pDrv->pfnResize(pThis->pDrv, pThis->svga.uBpp, pThis->CTX_SUFF(vram_ptr), pThis->svga.cbScanline, pThis->svga.uWidth, pThis->svga.uHeight); 1249 1250 VBVAINFOVIEW view; 1251 view.u32ViewIndex = 0; 1252 view.u32ViewOffset = 0; 1253 view.u32ViewSize = pThis->vram_size; 1254 view.u32MaxScreenSize = pThis->vram_size; 1255 1256 VBVAINFOSCREEN screen; 1257 screen.u32ViewIndex = 0; 1258 screen.i32OriginX = 0; 1259 screen.i32OriginY = 0; 1260 screen.u32StartOffset = pThis->svga.uScreenOffset; 1261 screen.u32LineSize = pThis->svga.cbScanline; 1262 screen.u32Width = pThis->svga.uWidth; 1263 screen.u32Height = pThis->svga.uHeight; 1264 screen.u16BitsPerPixel = pThis->svga.uBpp; 1265 screen.u16Flags = VBVA_SCREEN_F_ACTIVE; 1266 1267 rc = pThis->pDrv->pfnVBVAResize(pThis->pDrv, &view, &screen, pThis->CTX_SUFF(vram_ptr), /*fResetInputMapping=*/ true); 1247 1268 AssertRC(rc); 1248 1269 AssertReturn(rc == VINF_SUCCESS || rc == VINF_VGA_RESIZE_IN_PROGRESS, rc); … … 1254 1275 pThis->last_width = pThis->svga.uWidth; 1255 1276 pThis->last_height = pThis->svga.uHeight; 1277 pThis->svga.uLastScreenOffset = pThis->svga.uScreenOffset; 1256 1278 1257 1279 ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE); … … 3609 3631 SVGAFifoCmdDefineScreen *pCmd; 3610 3632 VMSVGAFIFO_GET_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineScreen, sizeof(pCmd->screen.structSize)); 3611 RT_BZERO(&pCmd->screen.id, sizeof(*pCmd) - RT_OFFSETOF(SVGAFifoCmdDefineScreen, screen. structSize));3633 RT_BZERO(&pCmd->screen.id, sizeof(*pCmd) - RT_OFFSETOF(SVGAFifoCmdDefineScreen, screen.id)); 3612 3634 VMSVGAFIFO_GET_MORE_CMD_BUFFER_BREAK(pCmd, SVGAFifoCmdDefineScreen, RT_MAX(sizeof(pCmd->screen.structSize), pCmd->screen.structSize)); 3613 3635 STAM_REL_COUNTER_INC(&pSVGAState->StatR3CmdDefineScreen); … … 3625 3647 Log(("vmsvgaFIFOLoop: SVGA_CMD_DEFINE_SCREEN flags SVGA_SCREEN_BLANKING\n")); 3626 3648 3649 const uint32_t uWidth = pCmd->screen.size.width; 3650 AssertBreak(0 < uWidth && uWidth <= pThis->svga.u32MaxWidth); 3651 3652 const uint32_t uHeight = pCmd->screen.size.height; 3653 AssertBreak(0 < uHeight && uHeight <= pThis->svga.u32MaxHeight); 3654 3655 const uint32_t cbWidth = uWidth * ((pThis->svga.uBpp + 7) / 8); 3656 const uint32_t cbPitch = pCmd->screen.backingStore.pitch ? pCmd->screen.backingStore.pitch : cbWidth; 3657 AssertBreak(0 < cbWidth && cbWidth <= cbPitch); 3658 3659 const uint32_t uScreenOffset = pCmd->screen.backingStore.ptr.offset; 3660 AssertBreak(uScreenOffset < pThis->vram_size); 3661 3662 const uint32_t cbVram = pThis->vram_size - uScreenOffset; 3663 AssertBreak(uHeight <= cbVram / cbPitch); 3664 3627 3665 /** @todo multi monitor support and screen object capabilities. */ 3628 pThis->svga.uWidth = pCmd->screen.size.width; 3629 pThis->svga.uHeight = pCmd->screen.size.height; 3666 pThis->svga.uWidth = uWidth; 3667 pThis->svga.uHeight = uHeight; 3668 pThis->svga.uScreenOffset = uScreenOffset; 3630 3669 vmsvgaChangeMode(pThis); 3631 3670 break; … … 3694 3733 AssertBreak(pSVGAState->GMRFB.format.s.bitsPerPixel != 0); 3695 3734 3696 const uint32_t cScanlines = pThis->vram_size / pSVGAState->GMRFB.bytesPerLine; 3735 AssertBreak(pThis->svga.uScreenOffset < pThis->vram_size); /* Paranoia. Ensured by SVGA_CMD_DEFINE_SCREEN. */ 3736 const uint32_t cbVram = pThis->vram_size - pThis->svga.uScreenOffset; 3737 3738 const uint32_t cScanlines = cbVram / pSVGAState->GMRFB.bytesPerLine; 3697 3739 AssertBreak(pCmd->srcOrigin.y < (int32_t)cScanlines); 3698 3740 … … 3703 3745 unsigned cbCopyWidth = (width * RT_ALIGN(pThis->svga.uBpp, 8)) / 8; 3704 3746 3705 AssertBreak(offsetDest < pThis->vram_size); 3747 AssertBreak(offsetDest < cbVram); 3748 offsetDest += pThis->svga.uScreenOffset; 3706 3749 3707 3750 rc = vmsvgaGMRTransfer(pThis, SVGA3D_WRITE_HOST_VRAM, pThis->CTX_SUFF(vram_ptr) + offsetDest, pThis->svga.cbScanline, pSVGAState->GMRFB.ptr, offsetSource, pSVGAState->GMRFB.bytesPerLine, cbCopyWidth, height); -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.h
r69500 r69904 210 210 uint32_t uBpp; 211 211 uint32_t cbScanline; 212 uint32_t uScreenOffset; 213 uint32_t uLastScreenOffset; 212 214 /** Maximum width supported. */ 213 215 uint32_t u32MaxWidth; -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
r69859 r69904 1363 1363 case SVGA3D_DEVCAP_MAX_VOLUME_EXTENT: 1364 1364 //*pu32Val = pCaps->MaxVolumeExtent; 1365 *pu32Val = 256; 1365 1366 break; 1366 1367 … … 2597 2598 2598 2599 dst.ptr.gmrId = SVGA_GMR_FRAMEBUFFER; 2599 dst.ptr.offset = 0;2600 dst.ptr.offset = pThis->svga.uScreenOffset; 2600 2601 dst.pitch = pThis->svga.cbScanline; 2601 2602 … … 2616 2617 2617 2618 dst.ptr.gmrId = SVGA_GMR_FRAMEBUFFER; 2618 dst.ptr.offset = 0;2619 dst.ptr.offset = pThis->svga.uScreenOffset; 2619 2620 dst.pitch = pThis->svga.cbScanline; 2620 2621 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp
r69415 r69904 345 345 } 346 346 347 #if 0 /** @todo */ 348 if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES) /** @todo VGA_SAVEDSTATE_VERSION_VMSVGA_3D */ 347 if (uVersion >= VGA_SAVEDSTATE_VERSION_VMSVGA) 349 348 { 350 349 VMSVGA3DQUERY query; … … 384 383 } 385 384 } 386 #endif387 385 } 388 386 } … … 504 502 static int vmsvga3dSaveContext(PVGASTATE pThis, PSSMHANDLE pSSM, PVMSVGA3DCONTEXT pContext) 505 503 { 506 RT_NOREF(pThis);504 PVMSVGA3DSTATE pState = pThis->svga.p3dState; 507 505 uint32_t cid = pContext->id; 508 506 … … 601 599 } 602 600 603 #if 0 /** @todo Enable later. */604 PVMSVGA3DSTATE pState = pThis->svga.p3dState;605 601 /* Occlusion query. */ 606 602 if (!VMSVGA3DQUERY_EXISTS(&pContext->occlusion)) … … 635 631 rc = SSMR3PutStructEx(pSSM, &pContext->occlusion, sizeof(pContext->occlusion), 0, g_aVMSVGA3DQUERYFields, NULL); 636 632 AssertRCReturn(rc, rc); 637 #endif638 633 } 639 634 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp
r69869 r69904 2397 2397 2398 2398 dest.ptr.gmrId = SVGA_GMR_FRAMEBUFFER; 2399 dest.ptr.offset = 0;2399 dest.ptr.offset = pThis->svga.uScreenOffset; 2400 2400 dest.pitch = pThis->svga.cbScanline; 2401 2401 … … 2416 2416 2417 2417 dest.ptr.gmrId = SVGA_GMR_FRAMEBUFFER; 2418 dest.ptr.offset = 0;2418 dest.ptr.offset = pThis->svga.uScreenOffset; 2419 2419 dest.pitch = pThis->svga.cbScanline; 2420 2420 -
trunk/src/VBox/Devices/Graphics/DevVGASavedState.h
r69500 r69904 45 45 } while (0) 46 46 47 #define VGA_SAVEDSTATE_VERSION 19 47 #define VGA_SAVEDSTATE_VERSION 20 48 #define VGA_SAVEDSTATE_VERSION_VMSVGA 20 /* Multiple updates and fixes for VMSVGA saved state. */ 48 49 #define VGA_SAVEDSTATE_VERSION_VMSVGA_TEX_STAGES 19 49 50 #define VGA_SAVEDSTATE_VERSION_VMSVGA_GMR_COUNT 18
Note:
See TracChangeset
for help on using the changeset viewer.

