VirtualBox

Ignore:
Timestamp:
Aug 8, 2014 6:34:02 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95454
Message:

wddm/crOpenGL: prevent shared objects from being deleted till they can be used

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/VBox

  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/Makefile.kmk

    r52136 r52329  
    132132        $(PATH_ROOT)/src/VBox/GuestHost/OpenGL/packer/pack_misc.c \
    133133        $(VBOX_PATH_CROGL_GENFILES)/pack_bounds_swap.c \
     134        $(VBOX_PATH_CROGL_GENFILES)/packer.c \
    134135        wddm/VBoxMPCrUtil.cpp
    135136   VBoxVideoWddm_DEFS      += VBOX_WITH_CROGL
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp

    r51770 r52329  
    2828# include <packer.h>
    2929#endif
     30
     31static NTSTATUS vboxVdmaCrCtlGetDefaultClientId(PVBOXMP_DEVEXT pDevExt, uint32_t *pu32ClienID);
    3032
    3133NTSTATUS vboxVdmaPipeConstruct(PVBOXVDMAPIPE pPipe)
     
    11141116}
    11151117
     1118static NTSTATUS vboxVdmaChromiumParameteriCRSubmit(PVBOXMP_DEVEXT pDevExt,
     1119        VBOXMP_CRPACKER *pCrPacker,
     1120        uint32_t u32CrConClientID,
     1121        uint32_t target, uint32_t value)
     1122{
     1123    Assert(pDevExt->fTexPresentEnabled);
     1124
     1125    uint32_t cbCommandBuffer = VBOXMP_CRCMD_HEADER_SIZE + VBOXMP_CRCMD_SIZE_CHROMIUMPARAMETERICR;
     1126    uint32_t cCommands = 1;
     1127    void *pvCommandBuffer = VBoxMpCrShgsmiTransportBufAlloc(&pDevExt->CrHgsmiTransport, cbCommandBuffer);
     1128    if (!pvCommandBuffer)
     1129    {
     1130        WARN(("VBoxMpCrShgsmiTransportBufAlloc failed!"));
     1131        return VERR_OUT_OF_RESOURCES;
     1132    }
     1133
     1134    VBoxMpCrPackerTxBufferInit(pCrPacker, pvCommandBuffer, cbCommandBuffer, cCommands);
     1135
     1136    crPackChromiumParameteriCR(&pCrPacker->CrPacker, target, value);
     1137
     1138    NTSTATUS Status = vboxVdmaCrSubmitWriteAsync(pDevExt, pCrPacker, u32CrConClientID);
     1139    if (!NT_SUCCESS(Status))
     1140    {
     1141        WARN(("vboxVdmaCrSubmitWriteAsync failed Status 0x%x", Status));
     1142        VBoxMpCrShgsmiTransportBufFree(&pDevExt->CrHgsmiTransport, pvCommandBuffer);
     1143    }
     1144
     1145    return Status;
     1146}
     1147
     1148NTSTATUS VBoxVdmaChromiumParameteriCRSubmit(PVBOXMP_DEVEXT pDevExt, uint32_t target, uint32_t value)
     1149{
     1150    uint32_t u32CrConClientID;
     1151    NTSTATUS Status = vboxVdmaCrCtlGetDefaultClientId(pDevExt, &u32CrConClientID);
     1152    if (!NT_SUCCESS(Status))
     1153    {
     1154        WARN(("vboxVdmaCrCtlGetDefaultClientId failed Status 0x%x", Status));
     1155        return Status;
     1156    }
     1157
     1158    VBOXMP_CRPACKER *pCrPacker = (VBOXMP_CRPACKER *)RTMemTmpAlloc(sizeof(*pCrPacker));
     1159    if (!pCrPacker)
     1160        return STATUS_NO_MEMORY;
     1161    VBoxMpCrPackerInit(pCrPacker);
     1162
     1163    Status = vboxVdmaChromiumParameteriCRSubmit(pDevExt, pCrPacker, u32CrConClientID, target, value);
     1164    if (!NT_SUCCESS(Status))
     1165        WARN(("vboxVdmaChromiumParameteriCRSubmit failed Status 0x%x", Status));
     1166
     1167    RTMemTmpFree(pCrPacker);
     1168    return Status;
     1169}
     1170
    11161171static NTSTATUS vboxVdmaCrCtlGetDefaultClientId(PVBOXMP_DEVEXT pDevExt, uint32_t *pu32ClienID)
    11171172{
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.h

    r51260 r52329  
    317317#ifdef VBOX_WITH_CROGL
    318318NTSTATUS vboxVdmaTexPresentSetAlloc(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData);
     319NTSTATUS VBoxVdmaChromiumParameteriCRSubmit(PVBOXMP_DEVEXT pDevExt, uint32_t target, uint32_t value);
    319320#endif
    320321
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r52226 r52329  
    27712771        /* wait for all current allocation-related ops are completed */
    27722772        vboxWddmAllocationCleanup(pDevExt, pAlloc);
     2773        if (pAlloc->hSharedHandle && pAlloc->AllocData.hostID)
     2774            VBoxVdmaChromiumParameteriCRSubmit(pDevExt, GL_PIN_TEXTURE_CLEAR_CR, pAlloc->AllocData.hostID);
    27732775        vboxWddmAllocationDestroy(pAlloc);
    27742776    }
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