VirtualBox

Ignore:
Timestamp:
May 2, 2012 8:37:46 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77709
Message:

crOpenGL,wined3d,wddm: second part of fixing resource leakage, basics for cr commands submission from r0 miniport driver (for r0 visible region reporting, WPF 3D rendering fixes w/o Aero, etc.)

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp

    r40897 r41109  
    2020#include "VBoxMPCr.h"
    2121
     22#include <VBox/HostServices/VBoxCrOpenGLSvc.h>
     23
    2224#include <cr_protocol.h>
    2325
    24 #include <VBox/HostServices/VBoxCrOpenGLSvc.h>
     26#if 0
     27#include <cr_pack.h>
     28
     29typedef struct PVBOXMP_SHGSMIPACKER
     30{
     31    PVBOXMP_DEVEXT pDevExt;
     32    CRPackContext CrPacker;
     33    CRPackBuffer CrBuffer;
     34} PVBOXMP_SHGSMIPACKER, *PPVBOXMP_SHGSMIPACKER;
     35
     36static void* vboxMpCrShgsmiBufferAlloc(PVBOXMP_DEVEXT pDevExt, HGSMISIZE cbData)
     37{
     38    return VBoxSHGSMIHeapBufferAlloc(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, cbData);
     39}
     40
     41static void vboxMpCrShgsmiBufferFree(PVBOXMP_DEVEXT pDevExt, void *pvBuffer)
     42{
     43    VBoxSHGSMIHeapBufferFree(&VBoxCommonFromDeviceExt(pDevExt)->guestCtx.heapCtx, pvBuffer);
     44}
     45
     46static void vboxMpCrShgsmiPackerCbFlush(void *pvFlush)
     47{
     48    PPVBOXMP_SHGSMIPACKER pPacker = (PPVBOXMP_SHGSMIPACKER)pvFlush;
     49
     50    crPackReleaseBuffer(&pPacker->CrPacker);
     51
     52    if (pPacker->CrBuffer.opcode_current != pPacker->CrBuffer.opcode_start)
     53    {
     54        CRMessageOpcodes *pHdr;
     55        unsigned int len;
     56        pHdr = vboxMpCrPackerPrependHeader(&pPacker->CrBuffer, &len, 0);
     57
     58        /*Send*/
     59    }
     60
     61
     62    crPackSetBuffer(&pPacker->CrPacker, &pPacker->CrBuffer);
     63    crPackResetPointers(&pPacker->CrPacker);
     64}
     65
     66static int vboxMpCrShgsmiPackerInit(PPVBOXMP_SHGSMIPACKER pPacker, PVBOXMP_DEVEXT pDevExt)
     67{
     68    memset(pPacker, 0, sizeof (*pPacker));
     69
     70    static const cbBuffer = 1000;
     71    void *pvBuffer = vboxMpCrShgsmiBufferAlloc(pDevExt, cbBuffer);
     72    if (!pvBuffer)
     73    {
     74        WARN(("vboxMpCrShgsmiBufferAlloc failed"));
     75        return VERR_NO_MEMORY;
     76    }
     77    crPackInitBuffer(&pPacker->CrBuffer, pvBuffer, cbBuffer, cbBuffer);
     78    crPackSetBuffer(&pPacker->CrPacker, &pPacker->CrBuffer);
     79    crPackFlushFunc(&pPacker->CrPacker, vboxMpCrShgsmiPackerCbFlush);
     80    crPackFlushArg(&pPacker->CrPacker, pPacker);
     81//    crPackSendHugeFunc( thread->packer, packspuHuge );
     82    return VINF_SUCCESS;
     83}
     84#endif
    2585
    2686static int vboxMpCrCtlAddRef(PVBOXMP_CRCTLCON pCrCtlCon)
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPShgsmi.cpp

    r40387 r41109  
    161161    KeAcquireSpinLock(&pHeap->HeapLock, &OldIrql);
    162162    HGSMIHeapFree(&pHeap->Heap, pvBuffer);
     163    KeReleaseSpinLock(&pHeap->HeapLock, OldIrql);
     164}
     165
     166void* VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData)
     167{
     168    KIRQL OldIrql;
     169    void* pvData;
     170    Assert(KeGetCurrentIrql() <= DISPATCH_LEVEL);
     171    KeAcquireSpinLock(&pHeap->HeapLock, &OldIrql);
     172    pvData = HGSMIHeapBufferAlloc(&pHeap->Heap, cbData);
     173    KeReleaseSpinLock(&pHeap->HeapLock, OldIrql);
     174    if (!pvData)
     175        WARN(("HGSMIHeapAlloc failed!"));
     176    return pvData;
     177}
     178
     179void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void *pvBuffer)
     180{
     181    KIRQL OldIrql;
     182    Assert(KeGetCurrentIrql() <= DISPATCH_LEVEL);
     183    KeAcquireSpinLock(&pHeap->HeapLock, &OldIrql);
     184    HGSMIHeapBufferFree(&pHeap->Heap, pvBuffer);
    163185    KeReleaseSpinLock(&pHeap->HeapLock, OldIrql);
    164186}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPShgsmi.h

    r40387 r41109  
    5858void* VBoxSHGSMIHeapAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo);
    5959void VBoxSHGSMIHeapFree(PVBOXSHGSMI pHeap, void *pvBuffer);
     60void* VBoxSHGSMIHeapBufferAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData);
     61void VBoxSHGSMIHeapBufferFree(PVBOXSHGSMI pHeap, void *pvBuffer);
    6062void* VBoxSHGSMICommandAlloc(PVBOXSHGSMI pHeap, HGSMISIZE cbData, uint8_t u8Channel, uint16_t u16ChannelInfo);
    6163void VBoxSHGSMICommandFree(PVBOXSHGSMI pHeap, void *pvBuffer);
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