VirtualBox

Ignore:
Timestamp:
Oct 4, 2007 4:09:56 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
25054
Message:

DdMapMemory must map the offscreen heap as well. Report DdLock updates only for the primary surface.

Location:
trunk/src/VBox/Additions/WINNT/Graphics
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/dd.c

    r5144 r5159  
    649649
    650650        ShareMemory.ViewOffset = 0;
    651         ShareMemory.ViewSize   = pDev->cyScreen * pDev->lDeltaScreen;
     651
     652        // We map down to the end of the frame buffer, including the offscreen heap.
     653        ShareMemory.ViewSize   = pDev->layout.offVBVABuffer;
    652654
    653655        DISPDBG((0, "ViewSize = %x\n", ShareMemory.ViewSize));
     
    661663                       &ReturnedDataLength))
    662664        {
    663             DISPDBG((0, "Failed IOCTL_VIDEO_SHARE_MEMORY"));
     665            DISPDBG((0, "Failed IOCTL_VIDEO_SHARE_MEMORY\n"));
    664666
    665667            lpMapMemory->ddRVal = DDERR_GENERIC;
     
    717719{
    718720    PPDEV pDev = (PPDEV)lpLock->lpDD->dhpdev;
    719 
    720     DISPDBG((0, "%s: %p bHasRect = %d\n", __FUNCTION__, pDev, lpLock->bHasRect));
    721721   
    722     pDev->ddLock.bLocked = TRUE;
    723    
    724     if (lpLock->bHasRect)
    725     {
    726         DISPDBG((0, "%d,%d %dx%d\n", lpLock->rArea.left, lpLock->rArea.top, lpLock->rArea.right - lpLock->rArea.left, lpLock->rArea.bottom - lpLock->rArea.top));
    727         pDev->ddLock.rArea = lpLock->rArea;
    728     }
    729     else
    730     {
    731         pDev->ddLock.rArea.left   = 0;
    732         pDev->ddLock.rArea.top    = 0;
    733         pDev->ddLock.rArea.right  = pDev->cxScreen;
    734         pDev->ddLock.rArea.bottom = pDev->cyScreen;
     722    PDD_SURFACE_LOCAL lpSurfaceLocal = lpLock->lpDDSurface;
     723
     724    DISPDBG((0, "%s: %p bHasRect = %d fpProcess = %p\n", __FUNCTION__, pDev, lpLock->bHasRect, lpLock->fpProcess));
     725
     726    if (lpSurfaceLocal->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
     727    {
     728        /* The updated rectangle must be reported only for the primary surface. */
     729        pDev->ddLock.bLocked = TRUE;
     730
     731        if (lpLock->bHasRect)
     732        {
     733            DISPDBG((0, "%d,%d %dx%d\n", lpLock->rArea.left, lpLock->rArea.top, lpLock->rArea.right - lpLock->rArea.left, lpLock->rArea.bottom - lpLock->rArea.top));
     734            pDev->ddLock.rArea = lpLock->rArea;
     735        }
     736        else
     737        {
     738            pDev->ddLock.rArea.left   = 0;
     739            pDev->ddLock.rArea.top    = 0;
     740            pDev->ddLock.rArea.right  = pDev->cxScreen;
     741            pDev->ddLock.rArea.bottom = pDev->cyScreen;
     742        }
     743    }
     744    else
     745    {
     746        DISPDBG((0, "%s: secondary surface.\n", __FUNCTION__));
    735747    }
    736748
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/driver.h

    r5144 r5159  
    5252
    5353/* VRAM
    54  *  |           |           |          |           |
    55  * 0+framebuffer+VBVA buffer+ddraw heap+displayinfo=cScreenSize
     54 *  |           |          |           |           |
     55 * 0+framebuffer+ddraw heap+VBVA buffer+displayinfo=cScreenSize
    5656 */
    5757typedef struct _VRAMLAYOUT
     
    6262    ULONG cbFrameBuffer;
    6363   
     64    ULONG offDDRAWHeap; //@todo
     65    ULONG cbDDRAWHeap;
     66   
    6467    ULONG offVBVABuffer;
    6568    ULONG cbVBVABuffer;
    66    
    67     ULONG offDDRAWHeap;
    68     ULONG cbDDRAWHeap;
    6969   
    7070    ULONG offDisplayInformation;
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/screen.c

    r4122 r5159  
    9494            else
    9595            {
    96                 ppdev->layout.offVBVABuffer = ppdev->layout.offFrameBuffer + ppdev->layout.cbFrameBuffer;
     96                /* Now the offscreen heap followed by the VBVA buffer. */
     97                ppdev->layout.offDDRAWHeap = ppdev->layout.offFrameBuffer + ppdev->layout.cbFrameBuffer;
    9798               
    9899                cbAvailable -= ppdev->layout.cbVBVABuffer;
     100                ppdev->layout.cbDDRAWHeap = cbAvailable;
    99101               
    100                 ppdev->layout.offDDRAWHeap = ppdev->layout.offVBVABuffer + ppdev->layout.cbVBVABuffer;
    101                 ppdev->layout.cbDDRAWHeap  = cbAvailable;
     102                ppdev->layout.offVBVABuffer = ppdev->layout.offDDRAWHeap + ppdev->layout.cbDDRAWHeap;
    102103            }
    103104        }
     
    114115        ppdev->layout.cbFrameBuffer  = RT_ALIGN_32(pMemoryInformation->FrameBufferLength, 0x1000);
    115116   
    116         ppdev->layout.offVBVABuffer = ppdev->layout.offFrameBuffer + ppdev->layout.cbFrameBuffer;
     117        ppdev->layout.offDDRAWHeap = ppdev->layout.offFrameBuffer + ppdev->layout.cbFrameBuffer;
     118        ppdev->layout.cbDDRAWHeap  = ppdev->layout.cbVRAM - ppdev->layout.offDDRAWHeap;
     119   
     120        ppdev->layout.offVBVABuffer = ppdev->layout.offDDRAWHeap + ppdev->layout.cbDDRAWHeap;
    117121        ppdev->layout.cbVBVABuffer  = 0;
    118122   
    119         ppdev->layout.offDDRAWHeap = ppdev->layout.offVBVABuffer + ppdev->layout.cbVBVABuffer;
    120         ppdev->layout.cbDDRAWHeap  = ppdev->layout.cbVRAM - ppdev->layout.offDDRAWHeap;
    121    
    122         ppdev->layout.offDisplayInformation = ppdev->layout.offDDRAWHeap + ppdev->layout.cbDDRAWHeap;
     123        ppdev->layout.offDisplayInformation = ppdev->layout.offVBVABuffer + ppdev->layout.cbVBVABuffer;
    123124        ppdev->layout.cbDisplayInformation  = 0;
    124125    }
     
    128129                "    offFrameBuffer = 0x%X\n"
    129130                "    cbFrameBuffer = 0x%X\n"
     131                "    offDDRAWHeap = 0x%X\n"
     132                "    cbDDRAWHeap = 0x%X\n"
    130133                "    offVBVABuffer = 0x%X\n"
    131134                "    cbVBVABuffer = 0x%X\n"
    132                 "    offDDRAWHeap = 0x%X\n"
    133                 "    cbDDRAWHeap = 0x%X\n"
    134135                "    offDisplayInformation = 0x%X\n"
    135136                "    cbDisplayInformation = 0x%X\n",
     
    137138                ppdev->layout.offFrameBuffer,
    138139                ppdev->layout.cbFrameBuffer,
     140                ppdev->layout.offDDRAWHeap,
     141                ppdev->layout.cbDDRAWHeap,
    139142                ppdev->layout.offVBVABuffer,
    140143                ppdev->layout.cbVBVABuffer,
    141                 ppdev->layout.offDDRAWHeap,
    142                 ppdev->layout.cbDDRAWHeap,
    143144                ppdev->layout.offDisplayInformation,
    144145                ppdev->layout.cbDisplayInformation
  • trunk/src/VBox/Additions/WINNT/Graphics/Miniport/VBoxVideo.cpp

    r4950 r5159  
    12991299            pShareMemory = (PVIDEO_SHARE_MEMORY)RequestPacket->InputBuffer;
    13001300
    1301             if (    (pShareMemory->ViewOffset > pDevExt->ulFrameBufferSize)
    1302                 ||  ((pShareMemory->ViewOffset + pShareMemory->ViewSize) > pDevExt->ulFrameBufferSize) ) {
    1303 
    1304                 dprintf(("IOCTL_VIDEO_SHARE_VIDEO_MEMORY - ERROR_INVALID_PARAMETER %x:%x size %x\n", pShareMemory->ViewOffset, pShareMemory->ViewSize, pDevExt->ulFrameBufferSize));
     1301            if (    (pShareMemory->ViewOffset > pDevExt->pPrimary->u.primary.ulMaxFrameBufferSize)
     1302                ||  ((pShareMemory->ViewOffset + pShareMemory->ViewSize) > pDevExt->pPrimary->u.primary.ulMaxFrameBufferSize) ) {
     1303
     1304                dprintf(("IOCTL_VIDEO_SHARE_VIDEO_MEMORY - ERROR_INVALID_PARAMETER %x:%x size %x\n", pShareMemory->ViewOffset, pShareMemory->ViewSize, pDevExt->pPrimary->u.primary.ulMaxFrameBufferSize));
    13051305                RequestPacket->StatusBlock->Status = ERROR_INVALID_PARAMETER;
    13061306                Result = FALSE;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette