VirtualBox

Ignore:
Timestamp:
Mar 3, 2009 9:24:52 PM (16 years ago)
Author:
vboxsync
Message:

Additions/x11/vboxvideo: more DRI updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo_15.c

    r16753 r17318  
    5151 * Authors: Paulo César Pereira de Andrade <[email protected]>
    5252 */
    53 
    54 #ifdef DEBUG_michael
    55 # define DEBUG_VIDEO 1
    56 #endif
    57 
    58 #ifdef DEBUG_VIDEO
    59 
    60 #define TRACE \
    61 do { \
    62     xf86Msg(X_INFO, __PRETTY_FUNCTION__); \
    63     xf86Msg(X_INFO, ": entering\n"); \
    64 } while(0)
    65 #define TRACE2 \
    66 do { \
    67     xf86Msg(X_INFO, __PRETTY_FUNCTION__); \
    68     xf86Msg(X_INFO, ": leaving\n"); \
    69 } while(0)
    70 #define TRACE3(...) \
    71 do { \
    72     xf86Msg(X_INFO, __PRETTY_FUNCTION__); \
    73     xf86Msg(X_INFO, __VA_ARGS__); \
    74 } while(0)
    75 
    76 #else  /* DEBUG_VIDEO not defined */
    77 
    78 #define TRACE       do { } while(0)
    79 #define TRACE2      do { } while(0)
    80 #define TRACE3(...) do { } while(0)
    81 
    82 #endif  /* DEBUG_VIDEO not defined */
    83 
    84 #define BOOL_STR(a) ((a) ? "TRUE" : "FALSE")
    8553
    8654#include "xorg-server.h"
     
    237205    Bool rc = TRUE;
    238206
    239     TRACE3("width=%d, height=%d\n", width, height);
     207    TRACE_LOG("width=%d, height=%d\n", width, height);
    240208    /* We only support horizontal resolutions which are a multiple of 8.  Round down if
    241209       necessary. */
     
    278246        scrn->displayWidth = width;
    279247    }
    280     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     248    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    281249    return rc;
    282250}
     
    302270
    303271    (void) mode;
    304     TRACE3("name=%s, HDisplay=%d, VDisplay=%d\n", adjusted_mode->name,
     272    TRACE_LOG("name=%s, HDisplay=%d, VDisplay=%d\n", adjusted_mode->name,
    305273           adjusted_mode->HDisplay, adjusted_mode->VDisplay);
    306274    /* We only support horizontal resolutions which are a multiple of 8.  Round down if
     
    325293{
    326294    (void) mode;
    327     TRACE3("name=%s, HDisplay=%d, VDisplay=%d, x=%d, y=%d\n", adjusted_mode->name,
     295    TRACE_LOG("name=%s, HDisplay=%d, VDisplay=%d, x=%d, y=%d\n", adjusted_mode->name,
    328296           adjusted_mode->HDisplay, adjusted_mode->VDisplay, x, y);
    329297    VBOXSetMode(crtc->scrn, adjusted_mode);
     
    378346    ScrnInfoPtr pScrn = output->scrn;
    379347    int rc = MODE_OK;
    380     TRACE3("HDisplay=%d, VDisplay=%d\n", mode->HDisplay, mode->VDisplay);
     348    TRACE_LOG("HDisplay=%d, VDisplay=%d\n", mode->HDisplay, mode->VDisplay);
    381349    /* We always like modes specified by the user in the configuration
    382350     * file, as doing otherwise is likely to annoy people. */
     
    387355       )
    388356        rc = MODE_BAD;
    389     TRACE3("returning %s\n", MODE_OK == rc ? "MODE_OK" : "MODE_BAD");
     357    TRACE_LOG("returning %s\n", MODE_OK == rc ? "MODE_OK" : "MODE_BAD");
    390358    return rc;
    391359}
     
    413381                      Bool isPreferred, Bool isUserDef)
    414382{
    415     TRACE3("pszName=%s, x=%d, y=%d\n", pszName, x, y);
     383    TRACE_LOG("pszName=%s, x=%d, y=%d\n", pszName, x, y);
    416384    DisplayModePtr pMode = xnfcalloc(1, sizeof(DisplayModeRec));
    417385
     
    449417    VBOXPtr pVBox = VBOXGetRec(pScrn);
    450418
    451     TRACE;
     419    TRACE_ENTRY();
    452420    if (vbox_device_available(pVBox))
    453421    {
     
    474442                                 FALSE, TRUE);
    475443    }
    476     TRACE2;
     444    TRACE_EXIT();
    477445    return pModes;
    478446}
     
    550518};
    551519
     520#ifdef VBOX_DRI
     521static const char *drmSymbols[] = {
     522    "drmFreeVersion",
     523    "drmGetVersion",
     524    NULL
     525};
     526
     527static const char *driSymbols[] = {
     528    "DRICloseScreen",
     529    "DRICreateInfoRec",
     530    "DRIDestroyInfoRec",
     531    "DRIFinishScreenInit",
     532    "DRIGetSAREAPrivate",
     533    "DRILock",
     534    "DRIMoveBuffersHelper",
     535    "DRIQueryVersion",
     536    "DRIScreenInit",
     537    "DRIUnlock",
     538    "GlxSetVisualConfigs",
     539    "DRICreatePCIBusID",
     540    NULL
     541};
     542#endif
     543
    552544#ifdef XFree86LOADER
    553545/* Module loader interface */
     
    593585                          vbeSymbols,
    594586                          ramdacSymbols,
     587#ifdef VBOX_DRI
     588                          drmSymbols, driSymbols,
     589#endif
    595590                          NULL);
    596591        return (pointer)TRUE;
     
    628623    ScrnInfoPtr pScrn;
    629624
    630     TRACE;
     625    TRACE_ENTRY();
    631626    pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, VBOXPCIchipsets,
    632627                                NULL, NULL, NULL, NULL, NULL);
     
    650645    }
    651646
    652     TRACE3("returning %s\n", BOOL_STR(pScrn != NULL));
     647    TRACE_LOG("returning %s\n", BOOL_STR(pScrn != NULL));
    653648    return (pScrn != NULL);
    654649}
     
    694689                        pScrn->name          = VBOX_NAME;
    695690                        pScrn->Probe         = VBOXProbe;
    696                         pScrn->PreInit       = VBOXPreInit;
     691            pScrn->PreInit       = VBOXPreInit;
    697692                        pScrn->ScreenInit    = VBOXScreenInit;
    698693                        pScrn->SwitchMode    = VBOXSwitchMode;
     
    908903    pScrn->bitmapBitOrder = BITMAP_BIT_ORDER;
    909904
     905#ifdef VBOX_DRI
     906    /* Load the dri module. */
     907    if (xf86LoadSubModule(pScrn, "dri")) {
     908        xf86LoaderReqSymLists(driSymbols, drmSymbols, NULL);
     909    }
     910#endif
    910911    return (TRUE);
    911912}
     
    926927    VBOXPtr pVBox = VBOXGetRec(pScrn);
    927928
    928     TRACE3("enable=%s\n", enable ? "TRUE" : "FALSE");
     929    TRACE_LOG("enable=%s\n", enable ? "TRUE" : "FALSE");
    929930    pVBox->accessEnabled = enable;
    930931    pVBox->EnableDisableFBAccess(scrnIndex, enable);
    931     TRACE2;
     932    TRACE_EXIT();
    932933}
    933934
     
    984985    if (!miSetPixmapDepths())
    985986        return (FALSE);
     987
     988#ifdef VBOX_DRI
     989    pVBox->useDRI = VBOXDRIScreenInit(scrnIndex, pScreen, pVBox);
     990#endif
    986991
    987992    /* I checked in the sources, and XFree86 4.2 does seem to support
     
    10761081        /* Report the largest resolution that we support */
    10771082    }
     1083
     1084#ifdef VBOX_DRI
     1085    if (pVBox->useDRI)
     1086        pVBox->useDRI = VBOXDRIFinishScreenInit(pScreen);
     1087#endif
    10781088    return (TRUE);
    10791089}
     
    10861096    bool rc;
    10871097
    1088     TRACE;
     1098    TRACE_ENTRY();
    10891099    pVBox->vtSwitch = FALSE;
     1100#ifdef VBOX_DRI
     1101    if (pVBox->useDRI)
     1102        DRIUnlock(screenInfo.screens[scrnIndex]);
     1103#endif
    10901104    rc = xf86SetDesiredModes(pScrn);
    1091     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     1105    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    10921106    return rc;
    10931107}
     
    10991113    VBOXPtr pVBox = VBOXGetRec(pScrn);
    11001114
    1101     TRACE;
     1115    TRACE_ENTRY();
    11021116    pVBox->vtSwitch = TRUE;
    11031117    VBOXSaveRestore(pScrn, MODE_RESTORE);
     
    11081122        vboxDisableGraphicsCap(pVBox);
    11091123    }
    1110     TRACE2;
     1124#ifdef VBOX_DRI
     1125    if (pVBox->useDRI)
     1126        DRILock(screenInfo.screens[scrnIndex], 0);
     1127#endif
     1128    TRACE_EXIT();
    11111129}
    11121130
     
    11161134    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    11171135    VBOXPtr pVBox = VBOXGetRec(pScrn);
     1136
     1137#ifdef VBOX_DRI
     1138    if (pVBox->useDRI)
     1139        VBOXDRICloseScreen(pScreen, pVBox);
     1140    pVBox->useDRI = false;
     1141#endif
    11181142
    11191143    if (vbox_device_available(pVBox))
     
    11621186    float v;
    11631187
    1164     TRACE3("HDisplay=%d, VDisplay=%d, flag=%s, pass=%d\n",
     1188    TRACE_LOG("HDisplay=%d, VDisplay=%d, flag=%s, pass=%d\n",
    11651189           p->HDisplay, p->VDisplay, flag ? "TRUE" : "FALSE", pass);
    11661190    if (pass != MODECHECK_FINAL) {
     
    11961220        xf86DrvMsg(scrn, X_WARNING, "Graphics mode %s rejected by the X server\n", p->name);
    11971221    }
    1198     TRACE3("returning %d\n", ret);
     1222    TRACE_LOG("returning %d\n", ret);
    11991223    return ret;
    12001224}
     
    12071231    Bool rc;
    12081232
    1209     TRACE3("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay);
     1233    TRACE_LOG("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay);
    12101234    pScrn = xf86Screens[scrnIndex];  /* Why does X have three ways of refering to the screen? */
    12111235    pVBox = VBOXGetRec(pScrn);
     
    12171241    if (pVBox->accessEnabled)
    12181242        pVBox->EnableDisableFBAccess(scrnIndex, TRUE);
    1219     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     1243    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    12201244    return rc;
    12211245}
     
    12311255
    12321256    int bpp = pScrn->depth == 24 ? 32 : 16;
    1233     TRACE3("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay);
     1257    TRACE_LOG("HDisplay=%d, VDisplay=%d\n", pMode->HDisplay, pMode->VDisplay);
    12341258    pVBox = VBOXGetRec(pScrn);
    12351259    /* Don't fiddle with the hardware if we are switched
     
    12751299        }
    12761300    }
    1277     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     1301    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    12781302    return rc;
    12791303}
     
    12851309    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
    12861310
    1287     TRACE;
     1311    TRACE_ENTRY();
    12881312    /* Don't fiddle with the hardware if we are switched
    12891313     * to a virtual terminal. */
     
    12981322            vboxEnableVbva(pScrn);
    12991323    }
    1300     TRACE2;
     1324    TRACE_EXIT();
    13011325}
    13021326
     
    13131337    Bool rc = TRUE;
    13141338
    1315     TRACE;
     1339    TRACE_ENTRY();
    13161340    if (NULL == pVBox->base)
    13171341    {
     
    13501374        rc = pVBox->base != NULL;
    13511375    }
    1352     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     1376    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    13531377    return rc;
    13541378}
     
    13591383    VBOXPtr pVBox = VBOXGetRec(pScrn);
    13601384
    1361     TRACE;
     1385    TRACE_ENTRY();
    13621386    if (pVBox->base == NULL)
    13631387        return;
     
    13741398#endif
    13751399    pVBox->base = NULL;
    1376     TRACE2;
     1400    TRACE_EXIT();
    13771401}
    13781402
     
    13891413    } while (0)
    13901414
    1391     TRACE;
     1415    TRACE_ENTRY();
    13921416    for (i = 0; i < numColors; i++) {
    13931417           idx = indices[i];
     
    14011425           VBOXDACDelay();
    14021426    }
    1403     TRACE2;
     1427    TRACE_EXIT();
    14041428}
    14051429
     
    14751499    Bool cont = TRUE;
    14761500
    1477     TRACE;
     1501    TRACE_ENTRY();
    14781502    if (pVBox->fonts != NULL)
    14791503        cont = FALSE;
     
    15391563        WriteMiscOut(miscOut);
    15401564    }
    1541     TRACE2;
     1565    TRACE_EXIT();
    15421566}
    15431567
     
    15481572    unsigned char miscOut, attr10, gr1, gr3, gr4, gr5, gr6, gr8, seq2, seq4, scrn;
    15491573
    1550     TRACE;
     1574    TRACE_ENTRY();
    15511575    if (pVBox->fonts != NULL)
    15521576    {
     
    16101634        WriteSeq(0x04, seq4);
    16111635    }
    1612     TRACE2;
     1636    TRACE_EXIT();
    16131637}
    16141638
     
    16191643    Bool rc = TRUE;
    16201644
    1621     TRACE;
     1645    TRACE_ENTRY();
    16221646    if (MODE_QUERY < 0 || function > MODE_RESTORE)
    16231647        rc = FALSE;
     
    16721696        }
    16731697    }
    1674     TRACE3("returning %s\n", rc ? "TRUE" : "FALSE");
     1698    TRACE_LOG("returning %s\n", rc ? "TRUE" : "FALSE");
    16751699    return rc;
    16761700}
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