VirtualBox

Changeset 46453 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Jun 7, 2013 9:27:03 PM (11 years ago)
Author:
vboxsync
Message:

crOpenGL: more dump/debug stuff

Location:
trunk/src/VBox/GuestHost/OpenGL
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_dump.h

    r46395 r46453  
    8585}
    8686
    87 VBOXDUMPDECL(size_t) crDmpFormatArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cVal);
    88 VBOXDUMPDECL(size_t) crDmpFormatRawArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cVal);
    89 VBOXDUMPDECL(size_t) crDmpFormatMatrixArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cX, uint32_t cY);
     87VBOXDUMPDECL(size_t) crDmpFormatArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cVal);
     88VBOXDUMPDECL(size_t) crDmpFormatRawArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cVal);
     89VBOXDUMPDECL(size_t) crDmpFormatMatrixArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pVal, uint32_t cX, uint32_t cY);
    9090
    9191typedef struct CR_DBGPRINT_DUMPER
     
    134134VBOXDUMPDECL(void) crRecDumpGlGetState(CR_RECORDER *pRec, CRContext *ctx);
    135135VBOXDUMPDECL(void) crRecDumpGlEnableState(CR_RECORDER *pRec, CRContext *ctx);
     136VBOXDUMPDECL(void) crRecDumpVertAttrv(CR_RECORDER *pRec, CRContext *ctx, GLuint idx, const char*pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal);
     137VBOXDUMPDECL(void) crRecDumpVertAttrF(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, ...);
     138VBOXDUMPDECL(void) crRecDumpVertAttrV(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, va_list pArgList);
    136139
    137140typedef DECLCALLBACKPTR(GLuint, PFNCRDUMPGETHWID)(void *pvObj);
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump.cpp

    r46402 r46453  
    165165}
    166166
    167 VBOXDUMPDECL(size_t) crDmpFormatRawArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cVal)
     167DECLINLINE(size_t) crDmpFormatVal(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbVal, const void *pvVal)
     168{
     169    if (pszElFormat[0] != '%' || pszElFormat[1] == '\0')
     170    {
     171        crWarning("invalid format %s", pszElFormat);
     172        return 0;
     173    }
     174    switch (cbVal)
     175    {
     176        case 8:
     177            return sprintf_s(pString, cbString, pszElFormat, *((double*)pvVal));
     178        case 4:
     179        {
     180            /* we do not care only about type specifiers, all the rest is not accepted */
     181            switch (pszElFormat[1])
     182            {
     183                case 'f':
     184                    /* float would be promoted to double */
     185                    return sprintf_s(pString, cbString, pszElFormat, *((float*)pvVal));
     186                default:
     187                    return sprintf_s(pString, cbString, pszElFormat, *((uint32_t*)pvVal));
     188            }
     189        }
     190        case 2:
     191            return sprintf_s(pString, cbString, pszElFormat, *((uint16_t*)pvVal));
     192        case 1:
     193            return sprintf_s(pString, cbString, pszElFormat, *((uint8_t*)pvVal));
     194        default:
     195            crWarning("unsupported size %d", cbVal);
     196            return 0;
     197    }
     198}
     199
     200VBOXDUMPDECL(size_t) crDmpFormatRawArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal)
    168201{
    169202    if (cbString < 2)
     
    177210    --cbString;
    178211    size_t cbWritten;
     212    const uint8_t *pu8Val = (const uint8_t *)pvVal;
    179213    for (uint32_t i = 0; i < cVal; ++i)
    180214    {
    181         cbWritten = sprintf_s(pString, cbString,
    182                 (i != cVal - 1) ? "%f, " : "%f", *pVal);
     215        cbWritten = crDmpFormatVal(pString, cbString, pszElFormat, cbEl, (const void *)pu8Val);
     216        pu8Val += cbEl;
    183217        Assert(cbString >= cbWritten);
    184218        pString += cbWritten;
    185219        cbString -= cbWritten;
     220        if (i != cVal - 1)
     221        {
     222            cbWritten = sprintf_s(pString, cbString, ", ");
     223            Assert(cbString >= cbWritten);
     224            pString += cbWritten;
     225            cbString -= cbWritten;
     226        }
    186227    }
    187228
     
    204245}
    205246
    206 VBOXDUMPDECL(size_t) crDmpFormatMatrixArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cX, uint32_t cY)
     247VBOXDUMPDECL(size_t) crDmpFormatMatrixArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cX, uint32_t cY)
    207248{
    208249    if (cbString < 2)
     
    216257    --cbString;
    217258    size_t cbWritten;
     259    const uint8_t *pu8Val = (const uint8_t *)pvVal;
    218260    for (uint32_t i = 0; i < cY; ++i)
    219261    {
    220         cbWritten = crDmpFormatRawArrayf(pString, cbString, pVal, cX);
     262        cbWritten = crDmpFormatRawArray(pString, cbString, pszElFormat, cbEl, (const void *)pu8Val, cX);
     263        pu8Val += (cbEl * cX);
    221264        Assert(cbString >= cbWritten);
    222265        pString += cbWritten;
     
    253296}
    254297
    255 VBOXDUMPDECL(size_t) crDmpFormatArrayf(char *pString, size_t cbString, const float *pVal, uint32_t cVal)
     298VBOXDUMPDECL(size_t) crDmpFormatArray(char *pString, size_t cbString, const char *pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal)
    256299{
    257300    switch(cVal)
    258301    {
    259302        case 1:
    260             return sprintf_s(pString, cbString, "%f", *pVal);
     303            return crDmpFormatVal(pString, cbString, pszElFormat, cbEl, pvVal);
    261304        case 16:
    262             return crDmpFormatMatrixArrayf(pString, cbString, pVal, 4, 4);
     305            return crDmpFormatMatrixArray(pString, cbString, pszElFormat, cbEl, pvVal, 4, 4);
    263306        case 9:
    264             return crDmpFormatMatrixArrayf(pString, cbString, pVal, 3, 3);
     307            return crDmpFormatMatrixArray(pString, cbString, pszElFormat, cbEl, pvVal, 3, 3);
    265308        case 0:
    266309            crWarning("value array is empty");
    267310            return 0;
    268311        default:
    269             return crDmpFormatRawArrayf(pString, cbString, pVal, cVal);
    270     }
     312            return crDmpFormatRawArray(pString, cbString, pszElFormat, cbEl, pvVal, cVal);
     313    }
     314}
     315
     316VBOXDUMPDECL(void) crRecDumpVertAttrv(CR_RECORDER *pRec, CRContext *ctx, GLuint idx, const char*pszElFormat, uint32_t cbEl, const void *pvVal, uint32_t cVal)
     317{
     318    char aBuf[1024];
     319    crDmpFormatRawArray(aBuf, sizeof (aBuf), pszElFormat, cbEl, pvVal, cVal);
     320    crDmpStrF(pRec->pDumper, "(%u, %s)", idx, aBuf);
     321}
     322
     323VBOXDUMPDECL(void) crRecDumpVertAttrV(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, va_list pArgList)
     324{
     325    crDmpStrV(pRec->pDumper, pszFormat, pArgList);
     326}
     327
     328VBOXDUMPDECL(void) crRecDumpVertAttrF(CR_RECORDER *pRec, CRContext *ctx, const char*pszFormat, ...)
     329{
     330    va_list pArgList;
     331    va_start(pArgList, pszFormat);
     332    crRecDumpVertAttrV(pRec, ctx, pszFormat, pArgList);
     333    va_end(pArgList);
    271334}
    272335
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/dump_gen.py

    r46401 r46453  
    7373{
    7474    char aBuf[4096];
    75     crDmpFormatArrayf(aBuf, sizeof (aBuf), pfData, pDesc->num_values);
     75    crDmpFormatArray(aBuf, sizeof (aBuf), "%f", sizeof (float), pfData, pDesc->num_values);
    7676    crDmpStrF(pDumper, "%s = %s;", pDesc->pszName, aBuf);
    7777}
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