VirtualBox

Ignore:
Timestamp:
Nov 5, 2019 8:06:17 PM (5 years ago)
Author:
vboxsync
Message:

WDDM: process HGSMI interrupts for VBoxSVGA adapter, this makes VHWA functional again; updated a todo

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/VBoxMPLegacy.cpp

    r81650 r81686  
    17161716    AssertNtStatusSuccess(Status); NOREF(Status);
    17171717
    1718 //    if (context.data.bNotifyDpc)
    1719     pDevExt->u.primary.DxgkInterface.DxgkCbNotifyDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle);
    1720 
    17211718    if (!vboxVtListIsEmpty(&context.data.CtlList))
    17221719    {
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r81651 r81686  
    10331033                        //  Must be removed eventually.
    10341034                        pDevExt->fCmdVbvaEnabled = TRUE;
    1035                         pDevExt->fComplexTopologiesEnabled = FALSE; /** @todo Enable after implementing multimonitor support. */
     1035                        pDevExt->fComplexTopologiesEnabled = TRUE; /** @todo Implement clones support. */
    10361036                    }
    10371037                }
     
    46114611}
    46124612
    4613 static NTSTATUS vboxWddmInitDisplayOnlyDriver(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath, VBOXVIDEO_HWTYPE enmHwType)
     4613static BOOLEAN DxgkDdiInterruptRoutine(const PVOID MiniportDeviceContext,
     4614                                       ULONG MessageNumber)
     4615{
     4616    BOOLEAN const fVMSVGA = GaDxgkDdiInterruptRoutine(MiniportDeviceContext, MessageNumber);
     4617    BOOLEAN const fHGSMI = DxgkDdiInterruptRoutineLegacy(MiniportDeviceContext, MessageNumber);
     4618    return fVMSVGA || fHGSMI;
     4619}
     4620
     4621static VOID DxgkDdiDpcRoutine(const PVOID MiniportDeviceContext)
     4622{
     4623    PVBOXMP_DEVEXT pDevExt = (PVBOXMP_DEVEXT)MiniportDeviceContext;
     4624
     4625    GaDxgkDdiDpcRoutine(MiniportDeviceContext);
     4626    DxgkDdiDpcRoutineLegacy(MiniportDeviceContext);
     4627
     4628    pDevExt->u.primary.DxgkInterface.DxgkCbNotifyDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle);
     4629}
     4630
     4631static NTSTATUS vboxWddmInitDisplayOnlyDriver(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
    46144632{
    46154633    KMDDOD_INITIALIZATION_DATA DriverInitializationData = {'\0'};
     
    46224640    DriverInitializationData.DxgkDdiRemoveDevice = DxgkDdiRemoveDevice;
    46234641    DriverInitializationData.DxgkDdiDispatchIoRequest = DxgkDdiDispatchIoRequest;
    4624 #ifdef VBOX_WITH_MESA3D
    4625     if (enmHwType == VBOXVIDEO_HWTYPE_VMSVGA)
    4626     {
    4627         DriverInitializationData.DxgkDdiInterruptRoutine = GaDxgkDdiInterruptRoutine;
    4628         DriverInitializationData.DxgkDdiDpcRoutine = GaDxgkDdiDpcRoutine;
    4629     }
    4630     else
    4631 #endif
    4632     {
    4633         DriverInitializationData.DxgkDdiInterruptRoutine = DxgkDdiInterruptRoutineLegacy;
    4634         DriverInitializationData.DxgkDdiDpcRoutine = DxgkDdiDpcRoutineLegacy;
    4635     }
     4642    DriverInitializationData.DxgkDdiInterruptRoutine = DxgkDdiInterruptRoutine;
     4643    DriverInitializationData.DxgkDdiDpcRoutine = DxgkDdiDpcRoutine;
    46364644    DriverInitializationData.DxgkDdiQueryChildRelations = DxgkDdiQueryChildRelations;
    46374645    DriverInitializationData.DxgkDdiQueryChildStatus = DxgkDdiQueryChildStatus;
     
    46984706    DriverInitializationData.DxgkDdiRemoveDevice = DxgkDdiRemoveDevice;
    46994707    DriverInitializationData.DxgkDdiDispatchIoRequest = DxgkDdiDispatchIoRequest;
     4708    DriverInitializationData.DxgkDdiInterruptRoutine  = DxgkDdiInterruptRoutine;
     4709    DriverInitializationData.DxgkDdiDpcRoutine        = DxgkDdiDpcRoutine;
    47004710
    47014711#ifdef VBOX_WITH_MESA3D
    47024712    if (enmHwType == VBOXVIDEO_HWTYPE_VMSVGA)
    47034713    {
    4704         DriverInitializationData.DxgkDdiInterruptRoutine  = GaDxgkDdiInterruptRoutine;
    4705         DriverInitializationData.DxgkDdiDpcRoutine        = GaDxgkDdiDpcRoutine;
    47064714        DriverInitializationData.DxgkDdiPatch             = GaDxgkDdiPatch;
    47074715        DriverInitializationData.DxgkDdiSubmitCommand     = GaDxgkDdiSubmitCommand;
     
    47154723#endif
    47164724    {
    4717         DriverInitializationData.DxgkDdiInterruptRoutine  = DxgkDdiInterruptRoutineLegacy;
    4718         DriverInitializationData.DxgkDdiDpcRoutine        = DxgkDdiDpcRoutineLegacy;
    47194725        DriverInitializationData.DxgkDdiPatch             = DxgkDdiPatchLegacy;
    47204726        DriverInitializationData.DxgkDdiSubmitCommand     = DxgkDdiSubmitCommandLegacy;
     
    49484954            if (g_VBoxDisplayOnly)
    49494955            {
    4950                 Status = vboxWddmInitDisplayOnlyDriver(DriverObject, RegistryPath, enmHwType);
     4956                Status = vboxWddmInitDisplayOnlyDriver(DriverObject, RegistryPath);
    49514957            }
    49524958            else
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/gallium/VBoxMPGaWddm.cpp

    r81594 r81686  
    14681468    }
    14691469
    1470     pDevExt->u.primary.DxgkInterface.DxgkCbNotifyDpc(pDevExt->u.primary.DxgkInterface.DeviceHandle);
    1471 
    14721470    /* Scan fence objects and mark all with u32FenceId < u32LastCompletedFenceId as SIGNALED */
    14731471    const uint32_t u32LastCompletedFenceId = ASMAtomicReadU32(&pGaDevExt->u32LastCompletedFenceId);
Note: See TracChangeset for help on using the changeset viewer.

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