VirtualBox

Changeset 47070 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Jul 10, 2013 11:39:19 AM (12 years ago)
Author:
vboxsync
Message:

wddm: fix 3D disabled case

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/common/VBoxVideoLog.h

    r44529 r47070  
    104104        BP_WARN();         \
    105105    } while (0)
     106
    106107#define ASSERT_WARN(_a, _w) do {\
    107108        if(!(_a)) { \
     
    117118        STOP_FATAL();                             \
    118119    } while (0)
     120
     121#define _DBGOP_N_TIMES(_count, _op) do {    \
     122        static int fDoWarnCount = (_count); \
     123        if (fDoWarnCount) { \
     124            --fDoWarnCount; \
     125            _op; \
     126        } \
     127    } while (0)
     128
     129#define WARN_ONCE(_a) do {    \
     130        _DBGOP_N_TIMES(1, WARN(_a)); \
     131    } while (0)
     132
    119133
    120134#define LOG(_a) _LOGMSG(VBOX_VIDEO_LOG_LOGGER, "", _a)
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/common/VBoxMPDevExt.h

    r46885 r47070  
    115115   volatile BOOLEAN fRenderToShadowDisabled;
    116116
     117   BOOLEAN f3DEnabled;
    117118   BOOLEAN fTexPresentEnabled;
    118119
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.cpp

    r47049 r47070  
    2626
    2727static uint32_t g_VBoxMpCrHostCaps = 0;
     28static uint32_t g_VBoxMpCr3DSupported = 0;
    2829
    2930uint32_t VBoxMpCrGetHostCaps()
    3031{
    3132    return g_VBoxMpCrHostCaps;
     33}
     34
     35bool VBoxMpCrCtlConIs3DSupported()
     36{
     37    return !!g_VBoxMpCr3DSupported;
    3238}
    3339
     
    863869}
    864870
    865 bool VBoxMpCrCtlConIs3DSupported()
    866 {
     871void VBoxMpCrCtlConInit()
     872{
     873    g_VBoxMpCr3DSupported = 0;
     874    g_VBoxMpCrHostCaps = 0;
     875
    867876#ifdef VBOX_WITH_CROGL
    868877    VBOXMP_CRCTLCON CrCtlCon = {0};
     
    872881    {
    873882        LOGREL(("VBoxMpCrCtlConConnect failed with rc(%d), 3D not supported!"));
    874         return false;
    875     }
     883        return;
     884    }
     885
     886    g_VBoxMpCr3DSupported = 1;
    876887
    877888    rc = vboxMpCrCtlConGetCaps(&CrCtlCon, u32ClientID, &g_VBoxMpCrHostCaps);
     
    890901    if (RT_FAILURE(rc))
    891902        WARN(("VBoxMpCrCtlConDisconnect failed rc (%d), ignoring..", rc));
    892 
    893     return true;
    894903#else
    895     return false;
    896904#endif
    897905}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPCr.h

    r46783 r47070  
    2828} VBOXMP_CRCTLCON, *PVBOXMP_CRCTLCON;
    2929
     30void VBoxMpCrCtlConInit();
     31
    3032bool VBoxMpCrCtlConIs3DSupported();
    3133
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp

    r47063 r47070  
    971971    if (!pDevExt->u32CrConDefaultClientID)
    972972    {
     973        if (!pDevExt->f3DEnabled)
     974        {
     975            WARN(("3D disabled, should not be here!"));
     976            return STATUS_UNSUCCESSFUL;
     977        }
     978
    973979        int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR, &pDevExt->u32CrConDefaultClientID);
    974980        if (!RT_SUCCESS(rc))
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r47063 r47070  
    281281            if (NT_SUCCESS(Status))
    282282            {
    283                 Status = vboxVdmaTexPresentSetAlloc(pDevExt, pAllocData);
    284                 if (NT_SUCCESS(Status))
    285                     return STATUS_SUCCESS;
    286                 else
    287                     WARN(("vboxVdmaTexPresentSetAlloc failed, Status 0x%x", Status));
     283                if (pDevExt->f3DEnabled)
     284                {
     285                    Status = vboxVdmaTexPresentSetAlloc(pDevExt, pAllocData);
     286                    if (NT_SUCCESS(Status))
     287                        return STATUS_SUCCESS;
     288                    else
     289                        WARN(("vboxVdmaTexPresentSetAlloc failed, Status 0x%x", Status));
     290                }
    288291            }
    289292            else
     
    11721175                    VBoxMpCrShgsmiTransportCreate(&pDevExt->CrHgsmiTransport, pDevExt);
    11731176
    1174                     pDevExt->fTexPresentEnabled = !!(VBoxMpCrGetHostCaps() & CR_VBOX_CAP_TEX_PRESENT);
    1175                     Assert(!pDevExt->fTexPresentEnabled);
     1177                    pDevExt->f3DEnabled = VBoxMpCrCtlConIs3DSupported();
     1178
     1179                    if (pDevExt->f3DEnabled)
     1180                    {
     1181                        pDevExt->fTexPresentEnabled = !!(VBoxMpCrGetHostCaps() & CR_VBOX_CAP_TEX_PRESENT);
     1182                        Assert(!pDevExt->fTexPresentEnabled);
     1183                    }
     1184                    else
     1185                        pDevExt->fTexPresentEnabled = FALSE;
    11761186
    11771187                    for (UINT i = 0; i < (UINT)VBoxCommonFromDeviceExt(pDevExt)->cDisplays; ++i)
     
    59715981            }
    59725982
    5973             int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR, &pContext->u32CrConClientID);
    5974             if (RT_SUCCESS(rc))
     5983            if (!VBOXWDDM_IS_DISPLAYONLY() && pDevExt->f3DEnabled)
    59755984            {
    59765985                VBoxMpCrPackerInit(&pContext->CrPacker);
    5977             }
    5978             else
    5979             {
    5980                 WARN(("VBoxMpCrCtlConConnect failed rc (%d)", rc));
    5981                 Status = STATUS_UNSUCCESSFUL;
    5982             }
     5986                int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR, &pContext->u32CrConClientID);
     5987                if (!RT_SUCCESS(rc))
     5988                    WARN(("VBoxMpCrCtlConConnect failed rc (%d), ignoring for system context", rc));
     5989            }
     5990
     5991            Status = STATUS_SUCCESS;
    59835992        }
    59845993        else
     
    60096018                                    if (pInfo->crVersionMajor || pInfo->crVersionMinor)
    60106019                                    {
    6011                                         int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon,
    6012                                             pInfo->crVersionMajor, pInfo->crVersionMinor,
    6013                                             &pContext->u32CrConClientID);
    6014                                         if (RT_SUCCESS(rc))
     6020                                        if (pDevExt->f3DEnabled)
    60156021                                        {
    6016                                             VBoxMpCrPackerInit(&pContext->CrPacker);
     6022                                            int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon,
     6023                                                pInfo->crVersionMajor, pInfo->crVersionMinor,
     6024                                                &pContext->u32CrConClientID);
     6025                                            if (RT_SUCCESS(rc))
     6026                                            {
     6027                                                VBoxMpCrPackerInit(&pContext->CrPacker);
     6028                                            }
     6029                                            else
     6030                                            {
     6031                                                WARN(("VBoxMpCrCtlConConnect failed rc (%d)", rc));
     6032                                                Status = STATUS_UNSUCCESSFUL;
     6033                                            }
    60176034                                        }
    60186035                                        else
    60196036                                        {
    6020                                             WARN(("VBoxMpCrCtlConConnect failed rc (%d)", rc));
     6037                                            LOG(("3D Not Enabled, failing 3D context creation"));
    60216038                                            Status = STATUS_UNSUCCESSFUL;
    60226039                                        }
     
    60466063                            if (pInfo->crVersionMajor || pInfo->crVersionMinor)
    60476064                            {
    6048                                 int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon,
    6049                                     pInfo->crVersionMajor, pInfo->crVersionMinor,
    6050                                     &pContext->u32CrConClientID);
    6051                                 if (!RT_SUCCESS(rc))
     6065                                if (pDevExt->f3DEnabled)
    60526066                                {
    6053                                     WARN(("VBoxMpCrCtlConConnect failed rc (%d)", rc));
     6067                                    int rc = VBoxMpCrCtlConConnect(&pDevExt->CrCtlCon,
     6068                                        pInfo->crVersionMajor, pInfo->crVersionMinor,
     6069                                        &pContext->u32CrConClientID);
     6070                                    if (!RT_SUCCESS(rc))
     6071                                    {
     6072                                        WARN(("VBoxMpCrCtlConConnect failed rc (%d)", rc));
     6073                                        Status = STATUS_UNSUCCESSFUL;
     6074                                    }
     6075                                }
     6076                                else
     6077                                {
     6078                                    LOG(("3D Not Enabled, failing 3D (hgsmi) context creation"));
    60546079                                    Status = STATUS_UNSUCCESSFUL;
    60556080                                }
     
    66196644        Status = STATUS_SUCCESS;
    66206645
     6646        VBoxMpCrCtlConInit();
     6647
    66216648        /* always need to do the check to request host caps */
    66226649        LOG(("Doing the 3D check.."));
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