VirtualBox

Ignore:
Timestamp:
Jan 9, 2014 4:13:28 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91522
Message:

crOpenGL: crOpenGL: 1. workaround point sprite driver bugs; 2. workaround multi-string shader source driver bug; 3. proper GLhandle for OSX; 4. extended dumping; 5. misc fixes

Location:
trunk
Files:
1 deleted
20 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/VBox

  • trunk/src/VBox/HostServices/SharedOpenGL/LICENSE

  • trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk

    r46343 r50041  
    175175        $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) $(<D)
    176176
    177 $(VBOX_PATH_CROGL_GENFILES)/server_get.c: $(addprefix $(PATH_SUB_CURRENT)/crserverlib/, server_get.py server_special get_components.py) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
     177$(VBOX_PATH_CROGL_GENFILES)/server_get.c: $(addprefix $(PATH_SUB_CURRENT)/crserverlib/, server_get.py server_special) $(VBOX_CROGL_API_FILES) | $$(dir $$@)
    178178        $(call MSG_GENERATE,python,$@,$<)
    179179        $(QUIET)$(call VBOX_CROGL_PYTHON_ENV,$(VBOX_PATH_CROGL_PYTHON_INCLUDE),$@) $(VBOX_BLD_PYTHON) $< $(VBOX_PATH_CROGL_GLAPI) $(<D)
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server.h

    r49697 r50041  
    250250    *pu8Val2 = tmp;
    251251}
     252
     253#ifdef DEBUG
     254# define CR_GLERR_CHECK(_op) do { \
     255        GLenum status; \
     256        while ((status = cr_server.head_spu->dispatch_table.GetError()) != GL_NO_ERROR) {/*Assert(0);*/} \
     257        _op \
     258        while ((status = cr_server.head_spu->dispatch_table.GetError()) != GL_NO_ERROR) {Assert(0);} \
     259    } while (0)
     260#else
     261# define CR_GLERR_CHECK(_op) do { \
     262        _op \
     263    } while (0)
     264#endif
    252265
    253266#ifdef DEBUG_misha
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_get.py

    r31808 r50041  
    109109];
    110110
    111 from get_components import *;
    112 
    113111keys = apiutil.GetDispatchedFunctions(sys.argv[1]+"/APIspec.txt")
    114112for func_name in keys:
     
    143141            print '\tcrServerReturnValue( &(%s[0]), %d*sizeof(%s) );' % (local_argname, max_components[func_name], local_argtype );
    144142        else:
    145             print '\tcrServerReturnValue( &(%s[0]), lookupComponents(pname)*sizeof(%s) );' % (local_argname, local_argtype );
     143            print '\tcrServerReturnValue( &(%s[0]), crStateHlpComponentsCount(pname)*sizeof(%s) );' % (local_argname, local_argtype );
    146144        print '}\n'
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_getshaders.c

    r47075 r50041  
    9898}
    9999
    100 void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj)
    101 {
    102     GLsizei *pLocal;
    103 
    104     pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLhandleARB)+sizeof(GLsizei));
    105     if (!pLocal)
    106     {
    107         GLsizei zero=0;
    108         crServerReturnValue(&zero, sizeof(zero));
    109     }
    110     /* initial (fallback )value */
    111     *pLocal = 0;
    112     cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (GLhandleARB*)&pLocal[1]);
     100void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj)
     101{
     102    GLsizei *pLocal;
     103
     104    pLocal = (GLsizei*) crAlloc(maxCount*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
     105    if (!pLocal)
     106    {
     107        GLsizei zero=0;
     108        crServerReturnValue(&zero, sizeof(zero));
     109    }
     110    /* initial (fallback )value */
     111    *pLocal = 0;
     112    cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (VBoxGLhandleARB*)&pLocal[1]);
    113113
    114114    {
     
    120120    }
    121121
    122     crServerReturnValue(pLocal, (*pLocal)*sizeof(GLhandleARB)+sizeof(GLsizei));
     122    crServerReturnValue(pLocal, (*pLocal)*sizeof(VBoxGLhandleARB)+sizeof(GLsizei));
    123123    crFree(pLocal);
    124124}
     
    126126AssertCompile(sizeof(GLsizei) == 4);
    127127
    128 void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
     128void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog)
    129129{
    130130    GLsizei *pLocal;
     
    305305}
    306306
    307 void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterfvARB( GLhandleARB obj, GLenum pname, GLfloat * params )
     307void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterfvARB( VBoxGLhandleARB obj, GLenum pname, GLfloat * params )
    308308{
    309309    GLfloat local_params[1];
     
    324324}
    325325
    326 void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterivARB( GLhandleARB obj, GLenum pname, GLint * params )
     326void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterivARB( VBoxGLhandleARB obj, GLenum pname, GLint * params )
    327327{
    328328    GLint local_params[1];
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_glsl.c

    r48247 r50041  
    112112}
    113113
    114 void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(GLhandleARB obj)
     114void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(VBoxGLhandleARB obj)
    115115{
    116116    GLuint hwid =  crStateDeleteObjectARB(obj);
     
    130130}
    131131
    132 GLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname )
     132VBoxGLhandleARB SERVER_DISPATCH_APIENTRY crServerDispatchGetHandleARB( GLenum pname )
    133133{
    134     GLhandleARB retval;
     134    VBoxGLhandleARB retval;
    135135    retval = cr_server.head_spu->dispatch_table.GetHandleARB(pname);
    136136    if (pname==GL_PROGRAM_OBJECT_ARB)
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_lists.c

    r45910 r50041  
    308308    }
    309309
     310    crStatePrioritizeTextures(n, textures, priorities);
     311
    310312    for (i = 0; i < n; i++)
    311313    {
     
    313315    }
    314316
    315     crStatePrioritizeTextures(n, textures, priorities);
    316317    cr_server.head_spu->dispatch_table.PrioritizeTextures(n, newTextures, priorities);
    317318    crFree(newTextures);
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c

    r49591 r50041  
    332332#endif
    333333
    334 //    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
     334    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
    335335
    336336    if (cr_server.bUseMultipleContexts)
     
    396396    crStateDiffAPI( &(cr_server.head_spu->dispatch_table) );
    397397
     398#ifdef VBOX_WITH_CRSERVER_DUMPER
     399    crMemset(&cr_server.Recorder, 0, sizeof (cr_server.Recorder));
     400    crMemset(&cr_server.RecorderBlitter, 0, sizeof (cr_server.RecorderBlitter));
     401    crMemset(&cr_server.DbgPrintDumper, 0, sizeof (cr_server.DbgPrintDumper));
     402    crMemset(&cr_server.HtmlDumper, 0, sizeof (cr_server.HtmlDumper));
     403    cr_server.pDumper = NULL;
     404#endif
     405
    398406    crUnpackSetReturnPointer( &(cr_server.return_ptr) );
    399407    crUnpackSetWritebackPointer( &(cr_server.writeback_ptr) );
     
    432440#endif
    433441
    434 //    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
     442    cr_server.bUseMultipleContexts = (crGetenv( "CR_SERVER_ENABLE_MULTIPLE_CONTEXTS" ) != NULL);
    435443
    436444    if (cr_server.bUseMultipleContexts)
     
    509517    crServerInitTmpCtxDispatch();
    510518    crStateDiffAPI( &(cr_server.head_spu->dispatch_table) );
     519
     520#ifdef VBOX_WITH_CRSERVER_DUMPER
     521    crMemset(&cr_server.Recorder, 0, sizeof (cr_server.Recorder));
     522    crMemset(&cr_server.RecorderBlitter, 0, sizeof (cr_server.RecorderBlitter));
     523    crMemset(&cr_server.DbgPrintDumper, 0, sizeof (cr_server.DbgPrintDumper));
     524    crMemset(&cr_server.HtmlDumper, 0, sizeof (cr_server.HtmlDumper));
     525    cr_server.pDumper = NULL;
     526#endif
    511527
    512528    /*Check for PBO support*/
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_misc.c

    r49172 r50041  
    13981398int64_t g_CrDbgDumpPid = 0;
    13991399unsigned long g_CrDbgDumpEnabled = 0;
    1400 unsigned long g_CrDbgDumpDraw = CR_SERVER_DUMP_F_COMPILE_SHADER
     1400unsigned long g_CrDbgDumpDraw = 0
     1401#if 0
     1402        | CR_SERVER_DUMP_F_COMPILE_SHADER
    14011403        | CR_SERVER_DUMP_F_LINK_PROGRAM
     1404#endif
     1405        ;
     1406#if 0
    14021407        | CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
    14031408        | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
     
    14101415        | CR_SERVER_DUMP_F_DRAWEL
    14111416        | CR_SERVER_DUMP_F_SHADER_SOURCE
    1412         ; //CR_SERVER_DUMP_F_DRAW_BUFF_ENTER | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE;
     1417        ;
     1418#endif
    14131419unsigned long g_CrDbgDumpDrawFramesSettings = CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
    14141420        | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
     
    14221428unsigned long g_CrDbgDumpDrawFramesCount = 0;
    14231429
     1430uint32_t g_CrDbgDumpDrawCount = 0;
     1431uint32_t g_CrDbgDumpDumpOnCount = 10;
     1432uint32_t g_CrDbgDumpDumpOnCountEnabled = 0;
     1433uint32_t g_CrDbgDumpDumpOnCountPerform = 0;
     1434uint32_t g_CrDbgDumpDrawFlags = CR_SERVER_DUMP_F_COMPILE_SHADER
     1435        | CR_SERVER_DUMP_F_SHADER_SOURCE
     1436        | CR_SERVER_DUMP_F_COMPILE_SHADER
     1437        | CR_SERVER_DUMP_F_LINK_PROGRAM
     1438        | CR_SERVER_DUMP_F_DRAW_BUFF_ENTER
     1439        | CR_SERVER_DUMP_F_DRAW_BUFF_LEAVE
     1440        | CR_SERVER_DUMP_F_DRAW_TEX_ENTER
     1441        | CR_SERVER_DUMP_F_DRAW_PROGRAM_UNIFORMS_ENTER
     1442        | CR_SERVER_DUMP_F_DRAW_PROGRAM_ATTRIBS_ENTER
     1443        | CR_SERVER_DUMP_F_DRAW_PROGRAM_ENTER
     1444        | CR_SERVER_DUMP_F_DRAW_STATE_ENTER
     1445        | CR_SERVER_DUMP_F_SWAPBUFFERS_ENTER
     1446        | CR_SERVER_DUMP_F_DRAWEL
     1447        | CR_SERVER_DUMP_F_TEXPRESENT;
     1448
    14241449void crServerDumpCheckTerm()
    14251450{
     
    14371462    CRMuralInfo *pBlitterMural;
    14381463
    1439     if (CrBltIsInitialized(&cr_server.RecorderBlitter))
    1440         return VINF_SUCCESS;
    1441 
    1442     pBlitterMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.visualBits);
    1443     if (!pBlitterMural)
    1444     {
    1445         crWarning("crServerGetDummyMural failed");
    1446         return VERR_GENERAL_FAILURE;
    1447     }
    1448 
    1449     crServerVBoxBlitterWinInit(&BltWin, pBlitterMural);
    1450     crServerVBoxBlitterCtxInit(&BltCtx, &cr_server.MainContextInfo);
    1451 
    1452     rc = CrBltInit(&cr_server.RecorderBlitter, &BltCtx, true, true, NULL, &cr_server.TmpCtxDispatch);
    1453     if (!RT_SUCCESS(rc))
    1454     {
    1455         crWarning("CrBltInit failed rc %d", rc);
    1456         return rc;
    1457     }
    1458 
    1459     rc = CrBltMuralSetCurrent(&cr_server.RecorderBlitter, &BltWin);
    1460     if (!RT_SUCCESS(rc))
    1461     {
    1462         crWarning("CrBltMuralSetCurrent failed rc %d", rc);
    1463         return rc;
     1464    if (!CrBltIsInitialized(&cr_server.RecorderBlitter))
     1465    {
     1466        pBlitterMural = crServerGetDummyMural(cr_server.MainContextInfo.CreateInfo.visualBits);
     1467        if (!pBlitterMural)
     1468        {
     1469            crWarning("crServerGetDummyMural failed");
     1470            return VERR_GENERAL_FAILURE;
     1471        }
     1472
     1473        crServerVBoxBlitterWinInit(&BltWin, pBlitterMural);
     1474        crServerVBoxBlitterCtxInit(&BltCtx, &cr_server.MainContextInfo);
     1475
     1476        rc = CrBltInit(&cr_server.RecorderBlitter, &BltCtx, true, true, NULL, &cr_server.TmpCtxDispatch);
     1477        if (!RT_SUCCESS(rc))
     1478        {
     1479            crWarning("CrBltInit failed rc %d", rc);
     1480            return rc;
     1481        }
     1482
     1483        rc = CrBltMuralSetCurrent(&cr_server.RecorderBlitter, &BltWin);
     1484        if (!RT_SUCCESS(rc))
     1485        {
     1486            crWarning("CrBltMuralSetCurrent failed rc %d", rc);
     1487            return rc;
     1488        }
    14641489    }
    14651490
     
    14681493    cr_server.pDumper = &cr_server.DbgPrintDumper.Base;
    14691494#else
    1470     crDmpHtmlInit(&cr_server.HtmlDumper, "S:\\projects\\virtualbox\\3d\\dumps\\1", "index.html");
    1471     cr_server.pDumper = &cr_server.HtmlDumper.Base;
     1495    if (!crDmpHtmlIsInited(&cr_server.HtmlDumper))
     1496    {
     1497        static int cCounter = 0;
     1498//    crDmpHtmlInit(&cr_server.HtmlDumper, "S:\\projects\\virtualbox\\3d\\dumps\\1", "index.html");
     1499        crDmpHtmlInitF(&cr_server.HtmlDumper, "/Users/oracle-mac/vbox/dump/1", "index%d.html", cCounter);
     1500        cr_server.pDumper = &cr_server.HtmlDumper.Base;
     1501        ++cCounter;
     1502    }
    14721503#endif
    14731504
     
    16301661void crServerDumpFilterOpLeave(unsigned long event, CR_DUMPER *pDumper)
    16311662{
     1663    if (CR_SERVER_DUMP_F_DRAW_LEAVE_ALL & event)
     1664    {
     1665        g_CrDbgDumpDumpOnCountPerform = 0;
     1666    }
    16321667}
    16331668
    16341669bool crServerDumpFilterOpEnter(unsigned long event, CR_DUMPER *pDumper)
    16351670{
     1671    if ((CR_SERVER_DUMP_F_SWAPBUFFERS_ENTER & event)
     1672            || (CR_SERVER_DUMP_F_TEXPRESENT & event))
     1673    {
     1674        if (g_CrDbgDumpDumpOnCountEnabled == 1)
     1675            g_CrDbgDumpDumpOnCountEnabled = 2;
     1676        else if (g_CrDbgDumpDumpOnCountEnabled)
     1677        {
     1678            g_CrDbgDumpDumpOnCountEnabled = 0;
     1679            if (cr_server.pDumper == &cr_server.HtmlDumper.Base)
     1680            {
     1681                crDmpHtmlTerm(&cr_server.HtmlDumper);
     1682                cr_server.pDumper = NULL;
     1683            }
     1684        }
     1685
     1686        g_CrDbgDumpDrawCount = 0;
     1687    }
     1688    else if (CR_SERVER_DUMP_F_DRAW_ENTER_ALL & event)
     1689    {
     1690        if (g_CrDbgDumpDumpOnCountEnabled == 2)
     1691        {
     1692            if (g_CrDbgDumpDumpOnCount == g_CrDbgDumpDrawCount)
     1693            {
     1694                g_CrDbgDumpDumpOnCountPerform = 1;
     1695            }
     1696            ++g_CrDbgDumpDrawCount;
     1697        }
     1698    }
     1699    if (g_CrDbgDumpDumpOnCountPerform)
     1700    {
     1701        if (g_CrDbgDumpDrawFlags & event)
     1702            return true;
     1703    }
    16361704    return CR_SERVER_DUMP_DEFAULT_FILTER_OP(event);
    16371705}
     
    16391707bool crServerDumpFilterDmp(unsigned long event, CR_DUMPER *pDumper)
    16401708{
     1709    if (g_CrDbgDumpDumpOnCountPerform)
     1710    {
     1711        if (g_CrDbgDumpDrawFlags & event)
     1712            return true;
     1713    }
    16411714    return CR_SERVER_DUMP_DEFAULT_FILTER_DMP(event);
    16421715}
     
    16731746}
    16741747#endif
    1675 /* */
     1748
     1749GLvoid crServerSpriteCoordReplEnable(GLboolean fEnable)
     1750{
     1751    CRContext *g = crStateGetCurrent();
     1752    CRTextureState *t = &(g->texture);
     1753    GLuint curTextureUnit = t->curTextureUnit;
     1754    GLuint curTextureUnitRestore = curTextureUnit;
     1755    GLuint i;
     1756
     1757    for (i = 0; i < g->limits.maxTextureUnits; ++i)
     1758    {
     1759        if (g->point.coordReplacement[i])
     1760        {
     1761            if (i != curTextureUnit)
     1762            {
     1763                curTextureUnit = i;
     1764                cr_server.head_spu->dispatch_table.ActiveTextureARB( i + GL_TEXTURE0_ARB );
     1765            }
     1766
     1767            cr_server.head_spu->dispatch_table.TexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, (GLint)fEnable);
     1768        }
     1769    }
     1770
     1771    if (curTextureUnit != curTextureUnitRestore)
     1772    {
     1773        cr_server.head_spu->dispatch_table.ActiveTextureARB( curTextureUnitRestore + GL_TEXTURE0_ARB );
     1774    }
     1775}
     1776
     1777GLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawArrays(GLenum mode, GLint first, GLsizei count)
     1778{
     1779#ifdef DEBUG
     1780    GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
     1781    Assert(GL_FRAMEBUFFER_COMPLETE == status);
     1782#endif
     1783    if (mode == GL_POINTS)
     1784        crServerSpriteCoordReplEnable(GL_TRUE);
     1785    CR_SERVER_DUMP_DRAW_ENTER();
     1786    CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawArrays(mode, first, count););
     1787    CR_SERVER_DUMP_DRAW_LEAVE();
     1788    if (mode == GL_POINTS)
     1789        crServerSpriteCoordReplEnable(GL_FALSE);
     1790}
     1791
     1792GLvoid SERVER_DISPATCH_APIENTRY crServerDispatchDrawElements(GLenum mode,  GLsizei count,  GLenum type,  const GLvoid * indices)
     1793{
     1794#ifdef DEBUG
     1795    GLenum status = cr_server.head_spu->dispatch_table.CheckFramebufferStatusEXT(GL_DRAW_FRAMEBUFFER_EXT);
     1796    Assert(GL_FRAMEBUFFER_COMPLETE == status);
     1797#endif
     1798    if (mode == GL_POINTS)
     1799        crServerSpriteCoordReplEnable(GL_TRUE);
     1800    CR_SERVER_DUMP_DRAW_ENTER();
     1801    CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.DrawElements(mode, count, type, indices););
     1802    CR_SERVER_DUMP_DRAW_LEAVE();
     1803    if (mode == GL_POINTS)
     1804        crServerSpriteCoordReplEnable(GL_FALSE);
     1805}
     1806
     1807void SERVER_DISPATCH_APIENTRY crServerDispatchEnd( void )
     1808{
     1809    CRContext *g = crStateGetCurrent();
     1810    GLenum mode = g->current.mode;
     1811
     1812    crStateEnd();
     1813    cr_server.head_spu->dispatch_table.End();
     1814
     1815    CR_SERVER_DUMP_DRAW_LEAVE();
     1816
     1817    if (mode == GL_POINTS)
     1818        crServerSpriteCoordReplEnable(GL_FALSE);
     1819}
     1820
     1821#ifdef DEBUG
     1822extern GLuint g_VBoxTstNumVa;
     1823#endif
     1824
     1825void SERVER_DISPATCH_APIENTRY crServerDispatchBegin(GLenum mode)
     1826{
     1827#ifdef DEBUG
     1828    CRContext *ctx = crStateGetCurrent();
     1829    SPUDispatchTable *gl = &cr_server.head_spu->dispatch_table;
     1830
     1831    g_VBoxTstNumVa = 0;
     1832
     1833    if (ctx->program.vpProgramBinding)
     1834    {
     1835        AssertRelease(ctx->program.currentVertexProgram);
     1836
     1837        if (ctx->program.currentVertexProgram->isARBprogram)
     1838        {
     1839            GLint pid=-1;
     1840            gl->GetProgramivARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_BINDING_ARB, &pid);
     1841
     1842            if (pid != ctx->program.currentVertexProgram->id)
     1843            {
     1844                crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
     1845            }
     1846            AssertRelease(pid == ctx->program.currentVertexProgram->id);
     1847        }
     1848        else
     1849        {
     1850            GLint pid=-1;
     1851
     1852            gl->GetIntegerv(GL_VERTEX_PROGRAM_BINDING_NV, &pid);
     1853            if (pid != ctx->program.currentVertexProgram->id)
     1854            {
     1855                crWarning("pid(%d) != ctx->program.currentVertexProgram->id(%d)", pid, ctx->program.currentVertexProgram->id);
     1856            }
     1857            AssertRelease(pid == ctx->program.currentVertexProgram->id);
     1858        }
     1859    }
     1860    else if (ctx->glsl.activeProgram)
     1861    {
     1862        GLint pid=-1;
     1863
     1864        gl->GetIntegerv(GL_CURRENT_PROGRAM, &pid);
     1865        crDebug("pid %i, state: id %i, hwid %i", pid, ctx->glsl.activeProgram->id, ctx->glsl.activeProgram->hwid);
     1866        if (pid != ctx->glsl.activeProgram->hwid)
     1867        {
     1868            crWarning("pid(%d) != ctx->glsl.activeProgram->hwid(%d)", pid, ctx->glsl.activeProgram->hwid);
     1869        }
     1870        AssertRelease(pid == ctx->glsl.activeProgram->hwid);
     1871    }
     1872#endif
     1873
     1874    if (mode == GL_POINTS)
     1875        crServerSpriteCoordReplEnable(GL_TRUE);
     1876
     1877    CR_SERVER_DUMP_DRAW_ENTER();
     1878
     1879    crStateBegin(mode);
     1880    cr_server.head_spu->dispatch_table.Begin(mode);
     1881}
     1882
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_special

    r48247 r50041  
    254254GetProgramiv
    255255GetShaderiv
     256Begin
     257DrawArrays
     258DrawElements
     259End
     260TexEnvf
     261TexEnvfv
     262TexEnvi
     263TexEnviv
     264GetTexEnvfv
     265GetTexEnviv
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_texture.c

    r29857 r50041  
    137137    (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels),
    138138    (target, level, internalFormat, width, height, depth, border, format, type, realptr), pixels)
     139
     140
     141void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvf( GLenum target, GLenum pname, GLfloat param )
     142{
     143    crStateTexEnvf( target, pname, param );
     144    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     145        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvf( target, pname, param ););
     146}
     147
     148void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvfv( GLenum target, GLenum pname, const GLfloat * params )
     149{
     150    crStateTexEnvfv( target, pname, params );
     151    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     152        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvfv( target, pname, params ););
     153}
     154
     155void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnvi( GLenum target, GLenum pname, GLint param )
     156{
     157    crStateTexEnvi( target, pname, param );
     158    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     159        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnvi( target, pname, param ););
     160}
     161
     162void SERVER_DISPATCH_APIENTRY crServerDispatchTexEnviv( GLenum target, GLenum pname, const GLint * params )
     163{
     164    crStateTexEnviv( target, pname, params );
     165    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     166        CR_GLERR_CHECK(cr_server.head_spu->dispatch_table.TexEnviv( target, pname, params ););
     167}
     168
     169void SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnvfv( GLenum target, GLenum pname, GLfloat * params )
     170{
     171    GLfloat local_params[4];
     172    (void) params;
     173    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     174        cr_server.head_spu->dispatch_table.GetTexEnvfv( target, pname, local_params );
     175    else
     176        crStateGetTexEnvfv( target, pname, local_params );
     177
     178    crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLfloat) );
     179}
     180
     181void SERVER_DISPATCH_APIENTRY crServerDispatchGetTexEnviv( GLenum target, GLenum pname, GLint * params )
     182{
     183    GLint local_params[4];
     184    (void) params;
     185    if (GL_POINT_SPRITE != target && pname != GL_COORD_REPLACE)
     186        cr_server.head_spu->dispatch_table.GetTexEnviv( target, pname, local_params );
     187    else
     188        crStateGetTexEnviv( target, pname, local_params );
     189
     190    crServerReturnValue( &(local_params[0]), crStateHlpComponentsCount(pname)*sizeof (GLint) );
     191}
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.c

    r48726 r50041  
    18161816    FILLIN( "GetString", renderspuGetString );
    18171817    FILLIN( "VBoxPresentComposition", renderspuVBoxPresentComposition );
    1818 
    18191818    return i;
    18201819}
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h

    r48291 r50041  
    210210#endif
    211211
     212#ifdef RT_OS_DARWIN
     213typedef void (*PFNDELETE_OBJECT)(GLhandleARB obj);
     214typedef void (*PFNGET_ATTACHED_OBJECTS)( GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj );
     215typedef GLhandleARB (*PFNGET_HANDLE)(GLenum pname);
     216typedef void (*PFNGET_INFO_LOG)( GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog );
     217typedef void (*PFNGET_OBJECT_PARAMETERFV)( GLhandleARB obj, GLenum pname, GLfloat * params );
     218typedef void (*PFNGET_OBJECT_PARAMETERIV)( GLhandleARB obj, GLenum pname, GLint * params );
     219#endif
     220
    212221/**
    213222 * Renderspu state info
     
    311320#ifdef RT_OS_DARWIN
    312321# ifdef VBOX_WITH_COCOA_QT
     322    PFNDELETE_OBJECT pfnDeleteObject;
     323    PFNGET_ATTACHED_OBJECTS pfnGetAttachedObjects;
     324    PFNGET_HANDLE pfnGetHandle;
     325    PFNGET_INFO_LOG pfnGetInfoLog;
     326    PFNGET_OBJECT_PARAMETERFV pfnGetObjectParameterfv;
     327    PFNGET_OBJECT_PARAMETERIV pfnGetObjectParameteriv;
     328
    313329    CR_GLSL_CACHE GlobalShaders;
    314330# else
     
    391407extern void renderspu_SystemReparentWindow(WindowInfo *window);
    392408extern void renderspu_SystemVBoxPresentComposition( WindowInfo *window, struct VBOXVR_SCR_COMPOSITOR_ENTRY *pChangedEntry );
     409uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable);
    393410extern void renderspu_GCWindow(void);
    394411extern int renderspuCreateFunctions( SPUNamedFunctionTable table[] );
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_cocoa.c

    r48291 r50041  
    2222#include <iprt/path.h>
    2323
     24#include <cr_string.h>
     25#include <cr_mem.h>
     26
    2427GLboolean renderspu_SystemInitVisual(VisualInfo *pVisInfo)
    2528{
     
    197200    CrGlslTerm(&render_spu.GlobalShaders);
    198201    return VINF_SUCCESS;
     202}
     203
     204static SPUNamedFunctionTable * renderspuFindEntry(SPUNamedFunctionTable *aFunctions, const char *pcszName)
     205{
     206    SPUNamedFunctionTable *pCur;
     207
     208    for (pCur = aFunctions ; pCur->name != NULL ; pCur++)
     209    {
     210        if (!crStrcmp( pcszName, pCur->name ) )
     211        {
     212            return pCur;
     213        }
     214    }
     215
     216    AssertFailed();
     217
     218    return NULL;
    199219}
    200220
     
    290310    }
    291311}
     312
     313AssertCompile(sizeof (GLhandleARB) == sizeof (void*));
     314
     315static VBoxGLhandleARB crHndlSearchVBox(GLhandleARB hNative)
     316{
     317    CRASSERT(!(((uintptr_t)hNative) >> 32));
     318    return (VBoxGLhandleARB)((uintptr_t)hNative);
     319}
     320
     321static GLhandleARB crHndlSearchNative(VBoxGLhandleARB hVBox)
     322{
     323    return (GLhandleARB)((uintptr_t)hVBox);
     324}
     325
     326static VBoxGLhandleARB crHndlAcquireVBox(GLhandleARB hNative)
     327{
     328    CRASSERT(!(((uintptr_t)hNative) >> 32));
     329    return (VBoxGLhandleARB)((uintptr_t)hNative);
     330}
     331
     332static GLhandleARB crHndlReleaseVBox(VBoxGLhandleARB hVBox)
     333{
     334    return (GLhandleARB)((uintptr_t)hVBox);
     335}
     336
     337static void SPU_APIENTRY renderspu_SystemDeleteObjectARB(VBoxGLhandleARB obj)
     338{
     339    GLhandleARB hNative = crHndlReleaseVBox(obj);
     340    if (!hNative)
     341    {
     342        crWarning("no native for %d", obj);
     343        return;
     344    }
     345
     346    render_spu.pfnDeleteObject(hNative);
     347}
     348
     349static void SPU_APIENTRY renderspu_SystemGetAttachedObjectsARB( VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * pCount, VBoxGLhandleARB * obj )
     350{
     351    GLhandleARB *paAttachments;
     352    GLhandleARB hNative = crHndlSearchNative(containerObj);
     353    GLsizei count, i;
     354
     355    if (pCount)
     356        *pCount = 0;
     357
     358    if (!hNative)
     359    {
     360        crWarning("no native for %d", obj);
     361        return;
     362    }
     363
     364    paAttachments = crCalloc(maxCount * sizeof (*paAttachments));
     365    if (!paAttachments)
     366    {
     367        crWarning("crCalloc failed");
     368        return;
     369    }
     370
     371    render_spu.pfnGetAttachedObjects(hNative, maxCount, &count, paAttachments);
     372    if (pCount)
     373        *pCount = count;
     374    if (count > maxCount)
     375    {
     376        crWarning("count too big");
     377        count = maxCount;
     378    }
     379
     380    for (i = 0; i < count; ++i)
     381    {
     382        obj[i] = crHndlSearchVBox(paAttachments[i]);
     383        CRASSERT(obj[i]);
     384    }
     385
     386    crFree(paAttachments);
     387}
     388
     389static VBoxGLhandleARB SPU_APIENTRY renderspu_SystemGetHandleARB(GLenum pname)
     390{
     391    GLhandleARB hNative = render_spu.pfnGetHandle(pname);
     392    VBoxGLhandleARB hVBox;
     393    if (!hNative)
     394    {
     395        crWarning("pfnGetHandle failed");
     396        return 0;
     397    }
     398    hVBox = crHndlAcquireVBox(hNative);
     399    CRASSERT(hVBox);
     400    return hVBox;
     401}
     402
     403static void SPU_APIENTRY renderspu_SystemGetInfoLogARB( VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog )
     404{
     405    GLhandleARB hNative = crHndlSearchNative(obj);
     406    if (!hNative)
     407    {
     408        crWarning("invalid handle!");
     409        return;
     410    }
     411
     412    render_spu.pfnGetInfoLog(hNative, maxLength, length, infoLog);
     413}
     414
     415static void SPU_APIENTRY renderspu_SystemGetObjectParameterfvARB( VBoxGLhandleARB obj, GLenum pname, GLfloat * params )
     416{
     417    GLhandleARB hNative = crHndlSearchNative(obj);
     418    if (!hNative)
     419    {
     420        crWarning("invalid handle!");
     421        return;
     422    }
     423
     424    render_spu.pfnGetObjectParameterfv(hNative, pname, params);
     425}
     426
     427static void SPU_APIENTRY renderspu_SystemGetObjectParameterivARB( VBoxGLhandleARB obj, GLenum pname, GLint * params )
     428{
     429    GLhandleARB hNative = crHndlSearchNative(obj);
     430    if (!hNative)
     431    {
     432        crWarning("invalid handle!");
     433        return;
     434    }
     435
     436    render_spu.pfnGetObjectParameteriv(hNative, pname, params);
     437}
     438
     439uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
     440{
     441    SPUNamedFunctionTable * pEntry;
     442
     443    pEntry = renderspuFindEntry(aFunctions, "DeleteObjectARB");
     444    if (pEntry)
     445    {
     446        render_spu.pfnDeleteObject = (PFNDELETE_OBJECT)pEntry->fn;
     447        pEntry->fn = (SPUGenericFunction)renderspu_SystemDeleteObjectARB;
     448    }
     449
     450    pEntry = renderspuFindEntry(aFunctions, "GetAttachedObjectsARB");
     451    if (pEntry)
     452    {
     453        render_spu.pfnGetAttachedObjects = (PFNGET_ATTACHED_OBJECTS)pEntry->fn;
     454        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetAttachedObjectsARB;
     455    }
     456
     457    pEntry = renderspuFindEntry(aFunctions, "GetHandleARB");
     458    if (pEntry)
     459    {
     460        render_spu.pfnGetHandle = (PFNGET_HANDLE)pEntry->fn;
     461        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetHandleARB;
     462    }
     463
     464    pEntry = renderspuFindEntry(aFunctions, "GetInfoLogARB");
     465    if (pEntry)
     466    {
     467        render_spu.pfnGetInfoLog = (PFNGET_INFO_LOG)pEntry->fn;
     468        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetInfoLogARB;
     469    }
     470
     471    pEntry = renderspuFindEntry(aFunctions, "GetObjectParameterfvARB");
     472    if (pEntry)
     473    {
     474        render_spu.pfnGetObjectParameterfv = (PFNGET_OBJECT_PARAMETERFV)pEntry->fn;
     475        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetObjectParameterfvARB;
     476    }
     477
     478    pEntry = renderspuFindEntry(aFunctions, "GetObjectParameterivARB");
     479    if (pEntry)
     480    {
     481        render_spu.pfnGetObjectParameteriv = (PFNGET_OBJECT_PARAMETERIV)pEntry->fn;
     482        pEntry->fn = (SPUGenericFunction)renderspu_SystemGetObjectParameterivARB;
     483    }
     484
     485    return cFunctions;
     486}
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_glx.c

    r48487 r50041  
    20802080
    20812081}
     2082
     2083uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
     2084{
     2085    return cFunctions;
     2086}
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_init.c

    r48291 r50041  
    374374    render_spu.gather_conns = NULL;
    375375
     376    numFuncs = renderspu_SystemPostprocessFunctions(_cr_render_table, numFuncs, RT_ELEMENTS(_cr_render_table));
     377
    376378    crDebug("Render SPU: ---------- End of Init -------------");
    377379
  • trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu_wgl.c

    r49011 r50041  
    16881688
    16891689}
     1690
     1691uint32_t renderspu_SystemPostprocessFunctions(SPUNamedFunctionTable *aFunctions, uint32_t cFunctions, uint32_t cTable)
     1692{
     1693    return cFunctions;
     1694}
  • trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_shaders.c

    r44529 r50041  
    4040    GLint hasNonLocalLen = READ_DATA(16, GLsizei);
    4141    GLint *pLocalLength = DATA_POINTER(20, GLint);
    42     const char **ppStrings = NULL;
    43     GLsizei i;
     42    char **ppStrings = NULL;
     43    GLsizei i, j, jUpTo;
    4444    int pos=20+count*sizeof(*pLocalLength);
    4545
     
    6161            pLocalLength[i] -= 1;
    6262        }
     63
     64        Assert(pLocalLength[i] > 0);
     65        jUpTo = i == count -1 ? pLocalLength[i] - 1 : pLocalLength[i];
     66        for (j = 0; j < jUpTo; ++j)
     67        {
     68            char *pString = ppStrings[i];
     69
     70            if (pString[j] == '\0')
     71            {
     72                Assert(j == jUpTo - 1);
     73                pString[j] = '\n';
     74            }
     75        }
    6376    }
    6477
    65     cr_unpackDispatch.ShaderSource(shader, count, ppStrings, length ? length : pLocalLength);
     78//    cr_unpackDispatch.ShaderSource(shader, count, ppStrings, length ? length : pLocalLength);
     79    cr_unpackDispatch.ShaderSource(shader, 1, ppStrings, 0);
     80
    6681    crFree(ppStrings);
    6782}
     
    250265void crUnpackExtendGetAttachedObjectsARB(void)
    251266{
    252         GLhandleARB containerObj = READ_DATA(8, GLhandleARB);
     267        VBoxGLhandleARB containerObj = READ_DATA(8, VBoxGLhandleARB);
    253268        GLsizei maxCount = READ_DATA(12, GLsizei);
    254269        SET_RETURN_PTR(16);
     
    259274void crUnpackExtendGetInfoLogARB(void)
    260275{
    261         GLhandleARB obj = READ_DATA(8, GLhandleARB);
     276        VBoxGLhandleARB obj = READ_DATA(8, VBoxGLhandleARB);
    262277        GLsizei maxLength = READ_DATA(12, GLsizei);
    263278        SET_RETURN_PTR(16);
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