VirtualBox

Changeset 22883 in vbox


Ignore:
Timestamp:
Sep 9, 2009 9:26:01 PM (15 years ago)
Author:
vboxsync
Message:

fideo hw accel: fix for ATI + small optimizations

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
1 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/VirtualBoxShaders.qrc

    r22776 r22883  
    99    <file alias="ckeyDst_void.c">shaders/ckeyDst_void.c</file>
    1010    <file alias="ckeyDst.c">shaders/ckeyDst.c</file>
     11    <file alias="ckeyDst2.c">shaders/ckeyDst2.c</file>
    1112    <file alias="mainOverlay.c">shaders/mainOverlay.c</file>
    1213    <file alias="mainOverlayNoCKey.c">shaders/mainOverlayNoCKey.c</file>
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV.c

    r22776 r22883  
    22uniform sampler2DRect uSrcTex;
    33void vboxCConvApplyAYUV(vec4 color);
    4 void vboxCConv(int srcI)
     4void vboxCConv()
    55{
    6     vec2 srcCoord = vec2(gl_TexCoord[srcI]);
     6    vec2 srcCoord = vec2(gl_TexCoord[0]);
    77    vec4 color = texture2DRect(uSrcTex, srcCoord);
    88    vboxCConvApplyAYUV(color);
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvAYUV_void.c

    r22776 r22883  
    1 void vboxCConv(int srcI)
     1void vboxCConv()
    22{}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR.c

    r22776 r22883  
    11#extension GL_ARB_texture_rectangle : enable
    22uniform sampler2DRect uSrcTex;
    3 void vboxCConv(int srcI)
     3void vboxCConv()
    44{
    5     vec2 srcCoord = vec2(gl_TexCoord[srcI]);
    6     gl_FragColor = texture2DRect(uSrcTex, vec2(srcCoord.x, srcCoord.y));
     5    vec2 srcCoord = vec2(gl_TexCoord[0]);
     6    gl_FragColor = texture2DRect(uSrcTex, srcCoord);
    77}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvBGR_void.c

    r22776 r22883  
    1 void vboxCConv(int srcI)
     1void vboxCConv()
    22{}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY.c

    r22825 r22883  
    22uniform sampler2DRect uSrcTex;
    33void vboxCConvApplyAYUV(vec4 color);
    4 void vboxCConv(int srcI)
     4void vboxCConv()
    55{
    6     vec2 srcCoord = vec2(gl_TexCoord[srcI]);
     6    vec2 srcCoord = vec2(gl_TexCoord[0]);
    77    float x = srcCoord.x;
    8     vec4 srcClr = texture2DRect(uSrcTex, vec2(x, srcCoord.y));
     8    vec4 srcClr = texture2DRect(uSrcTex, srcCoord);
    99    float u = srcClr.b;
    1010    float v = srcClr.r;
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvUYVY_void.c

    r22776 r22883  
    1 void vboxCConv(int srcI)
     1void vboxCConv()
    22{}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2.c

    r22776 r22883  
    22uniform sampler2DRect uSrcTex;
    33void vboxCConvApplyAYUV(vec4 color);
    4 void vboxCConv(int srcI)
     4void vboxCConv()
    55{
    6     vec2 srcCoord = vec2(gl_TexCoord[srcI]);
     6    vec2 srcCoord = vec2(gl_TexCoord[0]);
    77    float x = srcCoord.x;
    88    vec4 srcClr = texture2DRect(uSrcTex, vec2(x, srcCoord.y));
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYUY2_void.c

    r22776 r22883  
    1 void vboxCConv(int srcI)
     1void vboxCConv()
    22{}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12.c

    r22776 r22883  
    55float vboxSplitBGRA(vec4 color, float coord);
    66void vboxCConvApplyAYUV(vec4 color);
    7 void vboxCConv(int srcI)
     7void vboxCConv()
    88{
    9     vec2 coordY = vec2(gl_TexCoord[srcI]);
    10     vec2 coordV = vec2(gl_TexCoord[srcI+1]);
    11     vec2 coordU = vec2(gl_TexCoord[srcI+2]);
     9    vec2 coordY = vec2(gl_TexCoord[0]);
     10    vec2 coordV = vec2(gl_TexCoord[1]);
    1211    vec4 clrY = texture2DRect(uSrcTex, vec2(coordY));
    1312    vec4 clrV = texture2DRect(uVTex, vec2(coordV));
    14     vec4 clrU = texture2DRect(uUTex, vec2(coordU));
     13    vec4 clrU = texture2DRect(uUTex, vec2(coordV));
    1514    float y = vboxSplitBGRA(clrY, coordY.x);
    1615    float v = vboxSplitBGRA(clrV, coordV.x);
    17     float u = vboxSplitBGRA(clrU, coordU.x);
     16    float u = vboxSplitBGRA(clrU, coordV.x);
    1817    vboxCConvApplyAYUV(vec4(u, y, 0.0, v));
    1918}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/cconvYV12_void.c

    r22776 r22883  
    1 void vboxCConv(int srcI)
     1void vboxCConv()
    22{}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst.c

    r22776 r22883  
    22uniform sampler2DRect uDstTex;
    33uniform vec4 uDstClr;
    4 int vboxCKeyDst(void)
     4void vboxCKeyDst(void)
    55{
    6     vec4 dstClr = texture2DRect(uDstTex, vec2(gl_TexCoord[0]));
     6    vec4 dstClr = texture2DRect(uDstTex, vec2(gl_TexCoord[1]));
    77    vec3 difClr = dstClr.rgb - uDstClr.rgb;
    88    if(any(greaterThan(difClr, vec3(0.01, 0.01, 0.01)))
    99        || any(lessThan(difClr, vec3(-0.01, -0.01, -0.01))))
    1010            discard;
    11     return 1;
    1211}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/ckeyDst_void.c

    r22776 r22883  
    1 int vboxCKeyDst(void)
     1void vboxCKeyDst(void)
    22{
    3     return 0;
    43}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/mainOverlay.c

    r22776 r22883  
    1 int vboxCKeyDst(void);
    2 void vboxCConv(int srcI);
     1void vboxCKeyDst(void);
     2void vboxCConv();
    33void main(void)
    44{
    5         int srci = vboxCKeyDst();
    6         vboxCConv(srci);
     5    vboxCKeyDst();
     6    vboxCConv();
    77}
  • trunk/src/VBox/Frontends/VirtualBox/shaders/mainOverlayNoCKey.c

    r22787 r22883  
    1 void vboxCConv(int srcI);
     1void vboxCConv();
    22void main(void)
    33{
    4     vboxCConv(0);
     4    vboxCConv();
    55}
  • trunk/src/VBox/Frontends/VirtualBox/src/VBoxFBOverlay.cpp

    r22852 r22883  
    12661266    do
    12671267    {
     1268        GLint tex = 0;
    12681269        mUniSrcTex = vboxglGetUniformLocation(program(), "uSrcTex");
    12691270        Assert(mUniSrcTex != -1);
    12701271        if(mUniSrcTex == -1)
    12711272            break;
    1272         if(type() & VBOXVHWA_PROGRAM_DSTCOLORKEY)
    1273         {
    1274             VBOXQGL_CHECKERR(
    1275                     vboxglUniform1i(mUniSrcTex, 1);
    1276                     );
    1277             mSrcTex = 1;
    1278 
    1279             mUniDstTex = vboxglGetUniformLocation(program(), "uDstTex");
    1280             Assert(mUniDstTex != -1);
    1281             if(mUniDstTex == -1)
    1282                 break;
    1283             VBOXQGL_CHECKERR(
    1284                     vboxglUniform1i(mUniDstTex, 0);
    1285                     );
    1286             mDstTex = 0;
    1287             mUniDstLowerColor = vboxglGetUniformLocation(program(), "uDstClr");
    1288             Assert(mUniDstLowerColor != -1);
    1289             if(mUniDstLowerColor == -1)
    1290                 break;
    1291 
    1292             mDstLowerR = 0.0; mDstLowerG = 0.0; mDstLowerB = 0.0;
    1293 
    1294             VBOXQGL_CHECKERR(
    1295                     vboxglUniform4f(mUniDstLowerColor, 0.0, 0.0, 0.0, 0.0);
    1296                     );
    1297         }
    1298         else
    1299         {
    1300             VBOXQGL_CHECKERR(
    1301                     vboxglUniform1i(mUniSrcTex, 1);
    1302                     );
    1303             mSrcTex = 0;
    1304         }
     1273
     1274        VBOXQGL_CHECKERR(
     1275                vboxglUniform1i(mUniSrcTex, tex);
     1276                );
     1277        mSrcTex = tex;
     1278        ++tex;
    13051279
    13061280        if(type() & VBOXVHWA_PROGRAM_SRCCOLORKEY)
     
    13231297                case FOURCC_YV12:
    13241298                {
    1325                     GLint tex = mSrcTex + 1;
    1326 
    13271299                    mUniVTex = vboxglGetUniformLocation(program(), "uVTex");
    1328 
    13291300                    Assert(mUniVTex != -1);
    13301301                    if(mUniVTex == -1)
     
    13351306                            );
    13361307                    mVTex = tex;
    1337 
    1338                     tex++;
     1308                    ++tex;
    13391309
    13401310                    mUniUTex = vboxglGetUniformLocation(program(), "uUTex");
     
    13421312                    if(mUniUTex == -1)
    13431313                        break;
    1344 
    13451314                    VBOXQGL_CHECKERR(
    13461315                            vboxglUniform1i(mUniUTex, tex);
    13471316                            );
    13481317                    mUTex = tex;
     1318                    ++tex;
    13491319
    13501320                    break;
     
    13581328                    break;
    13591329            }
     1330        }
     1331
     1332        if(type() & VBOXVHWA_PROGRAM_DSTCOLORKEY)
     1333        {
     1334
     1335            mUniDstTex = vboxglGetUniformLocation(program(), "uDstTex");
     1336            Assert(mUniDstTex != -1);
     1337            if(mUniDstTex == -1)
     1338                break;
     1339            VBOXQGL_CHECKERR(
     1340                    vboxglUniform1i(mUniDstTex, tex);
     1341                    );
     1342            mDstTex = tex;
     1343            ++tex;
     1344
     1345            mUniDstLowerColor = vboxglGetUniformLocation(program(), "uDstClr");
     1346            Assert(mUniDstLowerColor != -1);
     1347            if(mUniDstLowerColor == -1)
     1348                break;
     1349
     1350            mDstLowerR = 0.0; mDstLowerG = 0.0; mDstLowerB = 0.0;
     1351
     1352            VBOXQGL_CHECKERR(
     1353                    vboxglUniform4f(mUniDstLowerColor, 0.0, 0.0, 0.0, 0.0);
     1354                    );
    13601355        }
    13611356
     
    14531448        mShaderSplitBGRA(":/splitBGRA.c", GL_FRAGMENT_SHADER),
    14541449        mShaderCKeyDst(":/ckeyDst.c", GL_FRAGMENT_SHADER),
     1450        mShaderCKeyDst2(":/ckeyDst2.c", GL_FRAGMENT_SHADER),
    14551451//        mShaderCKeyDstVoid(":/ckeyDst_void.c", GL_FRAGMENT_SHADER),
    14561452    //  mShaderCKeySrc;
     
    14941490    VBoxVHWAGlShader mShaderSplitBGRA;
    14951491
     1492    /* expected the dst surface texture to be bound to the 1-st tex unit */
    14961493    VBoxVHWAGlShader mShaderCKeyDst;
     1494    /* expected the dst surface texture to be bound to the 2-nd tex unit */
     1495    VBoxVHWAGlShader mShaderCKeyDst2;
    14971496//    VBoxVHWAGlShader mShaderCKeyDstVoid;
    14981497//    VBoxVHWAGlShader mShaderCKeySrc;
     
    15171516    if(type &  VBOXVHWA_PROGRAM_DSTCOLORKEY)
    15181517    {
    1519         apShaders[cShaders++] = &mShaderCKeyDst;
     1518        if(fourcc == FOURCC_YV12)
     1519        {
     1520            apShaders[cShaders++] = &mShaderCKeyDst2;
     1521        }
     1522        else
     1523        {
     1524            apShaders[cShaders++] = &mShaderCKeyDst;
     1525        }
    15201526    }
    15211527// ensure we don't have empty functions /* paranoya for for ATI on linux */
     
    25732579//    VBOXQGL_CHECKERR(
    25742580            glBegin(GL_QUADS);
    2575             pDstTex->multiTexCoord(GL_TEXTURE0, bx1, by1);
     2581
    25762582            for(int i = 0; i < cSrcTex; i++)
    25772583            {
    2578 //                vboxglMultiTexCoord2d(GL_TEXTURE1 + i, ((double)tx1)/mpTex[i]->texRect().width()/(width()/mpTex[i]->rect().width()),
    2579 //                        ((double)ty1)/mpTex[i]->texRect().height()/(height()/mpTex[i]->rect().height()));
    2580                 mpTex[i]->multiTexCoord(GL_TEXTURE1 + i, tx1/(t0width/mpTex[i]->rect().width()), ty1/(t0height/mpTex[i]->rect().height()));
    2581 
     2584                mpTex[i]->multiTexCoord(GL_TEXTURE0 + i, tx1/(t0width/mpTex[i]->rect().width()), ty1/(t0height/mpTex[i]->rect().height()));
    25822585            }
     2586            pDstTex->multiTexCoord(GL_TEXTURE0 + cSrcTex, bx1, by1);
    25832587            glVertex2i(bx1, by1);
    2584             pDstTex->multiTexCoord(GL_TEXTURE0, bx1, by2);
     2588
    25852589            for(int i = 0; i < cSrcTex; i++)
    25862590            {
    2587 //                vboxglMultiTexCoord2d(GL_TEXTURE1 + i, ((double)tx1)/mpTex[i]->texRect().width()/(width()/mpTex[i]->rect().width()),
    2588 //                        ((double)ty2)/mpTex[i]->texRect().height()/(height()/mpTex[i]->rect().height()));
    2589                 mpTex[i]->multiTexCoord(GL_TEXTURE1 + i, tx1/(t0width/mpTex[i]->rect().width()), ty2/(t0height/mpTex[i]->rect().height()));
    2590 
     2591                mpTex[i]->multiTexCoord(GL_TEXTURE0 + i, tx1/(t0width/mpTex[i]->rect().width()), ty2/(t0height/mpTex[i]->rect().height()));
    25912592            }
     2593            pDstTex->multiTexCoord(GL_TEXTURE0 + cSrcTex, bx1, by2);
    25922594            glVertex2i(bx1, by2);
    2593             pDstTex->multiTexCoord(GL_TEXTURE0, bx2, by2);
     2595
    25942596            for(int i = 0; i < cSrcTex; i++)
    25952597            {
    2596 //                vboxglMultiTexCoord2d(GL_TEXTURE1 + i, ((double)tx2)/mpTex[i]->texRect().width()/(width()/mpTex[i]->rect().width()),
    2597 //                        ((double)ty2)/mpTex[i]->texRect().height()/(height()/mpTex[i]->rect().height()));
    2598                 mpTex[i]->multiTexCoord(GL_TEXTURE1 + i, tx2/(t0width/mpTex[i]->rect().width()), ty2/(t0height/mpTex[i]->rect().height()));
    2599 
     2598                mpTex[i]->multiTexCoord(GL_TEXTURE0 + i, tx2/(t0width/mpTex[i]->rect().width()), ty2/(t0height/mpTex[i]->rect().height()));
    26002599            }
     2600            pDstTex->multiTexCoord(GL_TEXTURE0 + cSrcTex, bx2, by2);
    26012601            glVertex2i(bx2, by2);
    2602             pDstTex->multiTexCoord(GL_TEXTURE0, bx2, by1);
     2602
    26032603            for(int i = 0; i < cSrcTex; i++)
    26042604            {
    2605 //                vboxglMultiTexCoord2d(GL_TEXTURE1 + i, ((double)tx2)/mpTex[i]->texRect().width()/(width()/mpTex[i]->rect().width()),
    2606 //                        ((double)ty1)/mpTex[i]->texRect().height()/(height()/mpTex[i]->rect().height()));
    2607                 mpTex[i]->multiTexCoord(GL_TEXTURE1 + i, tx2/(t0width/mpTex[i]->rect().width()), ty1/(t0height/mpTex[i]->rect().height()));
    2608 
     2605                mpTex[i]->multiTexCoord(GL_TEXTURE0 + i, tx2/(t0width/mpTex[i]->rect().width()), ty1/(t0height/mpTex[i]->rect().height()));
    26092606            }
     2607            pDstTex->multiTexCoord(GL_TEXTURE0 + cSrcTex, bx2, by1);
    26102608            glVertex2i(bx2, by1);
     2609
    26112610            glEnd();
    26122611//            );
     
    27472746        if(bBindDst)
    27482747        {
    2749             vboxglActiveTexture(GL_TEXTURE1);
    2750             mpTex[0]->bind();
    2751             if(fourcc() == FOURCC_YV12)
    2752             {
    2753                 vboxglActiveTexture(GL_TEXTURE1+1);
    2754                 mpTex[1]->bind();
    2755                 vboxglActiveTexture(GL_TEXTURE1 + 2);
    2756                 mpTex[2]->bind();
    2757             }
    2758             vboxglActiveTexture(GL_TEXTURE0);
    2759             pPrimary->mpTex[0]->bind();
    2760             bInvokeMultiTex2 = true;
    2761         }
    2762         else
    2763         {
    27642748            if(fourcc() == FOURCC_YV12)
    27652749            {
    27662750                vboxglActiveTexture(GL_TEXTURE1);
    27672751                mpTex[1]->bind();
    2768                 vboxglActiveTexture(GL_TEXTURE1 + 1);
     2752                vboxglActiveTexture(GL_TEXTURE1+1);
    27692753                mpTex[2]->bind();
     2754
     2755                vboxglActiveTexture(GL_TEXTURE1+2);
     2756            }
     2757            else
     2758            {
     2759                vboxglActiveTexture(GL_TEXTURE1);
     2760            }
     2761            pPrimary->mpTex[0]->bind();
     2762
     2763            vboxglActiveTexture(GL_TEXTURE0);
     2764            mpTex[0]->bind();
     2765            bInvokeMultiTex2 = true;
     2766        }
     2767        else
     2768        {
     2769            if(fourcc() == FOURCC_YV12)
     2770            {
     2771                vboxglActiveTexture(GL_TEXTURE1);
     2772                mpTex[1]->bind();
    27702773                vboxglActiveTexture(GL_TEXTURE0);
    27712774            }
     
    27832786    {
    27842787        doMultiTex2FB(&mVisibleTargRect, pPrimary->mpTex[0], &mVisibleSrcRect,
    2785                 (fourcc() == FOURCC_YV12) ? 3 : 1);
     2788                (fourcc() == FOURCC_YV12) ? 2 : 1);
    27862789    }
    27872790    else
     
    27892792        if(fourcc() == FOURCC_YV12)
    27902793        {
    2791             doMultiTex2FB(&mVisibleTargRect, &mVisibleSrcRect, 3 );
     2794            doMultiTex2FB(&mVisibleTargRect, &mVisibleSrcRect, 2);
    27922795        }
    27932796        else
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