VirtualBox

Ignore:
Timestamp:
Nov 26, 2018 8:05:57 PM (6 years ago)
Author:
vboxsync
Message:

DevVGA-SVGA3d-ogl.cpp: format fixes; restored support for Z_DF16; support for compressed textures in vmsvga3dBackSurfaceDMACopyBox.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp

    r75715 r75752  
    667667    GLGETPROC_(PFNGLCOMPRESSEDTEXIMAGE2DPROC             , glCompressedTexImage2D, "");
    668668    GLGETPROC_(PFNGLCOMPRESSEDTEXIMAGE3DPROC             , glCompressedTexImage3D, "");
     669    GLGETPROC_(PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC          , glCompressedTexSubImage2D, "");
    669670    GLGETPROC_(PFNGLPOINTPARAMETERFPROC                  , glPointParameterf, "");
    670671    GLGETPROC_(PFNGLBLENDEQUATIONSEPARATEPROC            , glBlendEquationSeparate, "");
     
    12261227    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
    12271228    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
    1228     // case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
     1229    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
    12291230    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
    12301231    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
     
    15721573void vmsvga3dSurfaceFormat2OGL(PVMSVGA3DSURFACE pSurface, SVGA3dSurfaceFormat format)
    15731574{
     1575#if 0
     1576#define AssertTestFmt(f) AssertMsgFailed(("Test me - " #f "\n"))
     1577#else
     1578#define AssertTestFmt(f) do {} while(0)
     1579#endif
    15741580    switch (format)
    15751581    {
     
    15881594        pSurface->formatGL = GL_RGB;
    15891595        pSurface->typeGL = GL_UNSIGNED_SHORT_5_6_5;
    1590         AssertMsgFailed(("Test me - SVGA3D_R5G6B5\n"));
     1596        AssertTestFmt(SVGA3D_R5G6B5);
    15911597        break;
    15921598    case SVGA3D_X1R5G5B5:               /* D3DFMT_X1R5G5B5 - WINED3DFMT_B5G5R5X1_UNORM */
     
    15941600        pSurface->formatGL = GL_BGRA;
    15951601        pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
    1596         AssertMsgFailed(("Test me - SVGA3D_X1R5G5B5\n"));
     1602        AssertTestFmt(SVGA3D_X1R5G5B5);
    15971603        break;
    15981604    case SVGA3D_A1R5G5B5:               /* D3DFMT_A1R5G5B5 - WINED3DFMT_B5G5R5A1_UNORM */
     
    16001606        pSurface->formatGL = GL_BGRA;
    16011607        pSurface->typeGL = GL_UNSIGNED_SHORT_1_5_5_5_REV;
    1602         AssertMsgFailed(("Test me - SVGA3D_A1R5G5B5\n"));
     1608        AssertTestFmt(SVGA3D_A1R5G5B5);
    16031609        break;
    16041610    case SVGA3D_A4R4G4B4:               /* D3DFMT_A4R4G4B4 - WINED3DFMT_B4G4R4A4_UNORM */
     
    16061612        pSurface->formatGL = GL_BGRA;
    16071613        pSurface->typeGL = GL_UNSIGNED_SHORT_4_4_4_4_REV;
    1608         AssertMsgFailed(("Test me - SVGA3D_A4R4G4B4\n"));
     1614        AssertTestFmt(SVGA3D_A4R4G4B4);
    16091615        break;
    16101616
     
    16241630        pSurface->formatGL = GL_DEPTH_COMPONENT;
    16251631        pSurface->typeGL = GL_UNSIGNED_SHORT;
    1626         //AssertMsgFailed(("Test me - SVGA3D_Z_D16\n"));
     1632        AssertTestFmt(SVGA3D_Z_D16);
    16271633        break;
    16281634    case SVGA3D_Z_D24S8:                /* D3DFMT_D24S8 - WINED3DFMT_D24_UNORM_S8_UINT */
    16291635        pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
    16301636        pSurface->formatGL = GL_DEPTH_STENCIL;
    1631         pSurface->typeGL = GL_UNSIGNED_INT;
     1637        pSurface->typeGL = GL_UNSIGNED_INT_24_8;
    16321638        break;
    16331639    case SVGA3D_Z_D15S1:                /* D3DFMT_D15S1 - WINED3DFMT_S1_UINT_D15_UNORM */
     
    16361642        pSurface->typeGL = GL_UNSIGNED_SHORT;
    16371643        /** @todo Wine sources hints at no hw support for this, so test this one! */
    1638         AssertMsgFailed(("Test me - SVGA3D_Z_D15S1\n"));
     1644        AssertTestFmt(SVGA3D_Z_D15S1);
    16391645        break;
    16401646    case SVGA3D_Z_D24X8:                /* D3DFMT_D24X8 - WINED3DFMT_X8D24_UNORM */
     
    16421648        pSurface->formatGL = GL_DEPTH_COMPONENT;
    16431649        pSurface->typeGL = GL_UNSIGNED_INT;
     1650        AssertTestFmt(SVGA3D_Z_D24X8);
    16441651        break;
    16451652
     
    16481655        pSurface->internalFormatGL = GL_DEPTH_COMPONENT16;
    16491656        pSurface->formatGL = GL_DEPTH_COMPONENT;
    1650         pSurface->typeGL = GL_FLOAT;
     1657        pSurface->typeGL = GL_HALF_FLOAT;
    16511658        break;
    16521659
     
    16571664        break;
    16581665
    1659     case SVGA3D_Z_D24S8_INT:            /* D3DFMT_??? - not supported */
     1666    case SVGA3D_Z_D24S8_INT:            /* D3DFMT_D24S8 */
    16601667        pSurface->internalFormatGL = GL_DEPTH24_STENCIL8;
    16611668        pSurface->formatGL = GL_DEPTH_STENCIL;
    1662         pSurface->typeGL = GL_INT;        /* ??? */
     1669        pSurface->typeGL = GL_UNSIGNED_INT_24_8;
    16631670        break;
    16641671
     
    17501757#else
    17511758        pSurface->typeGL = GL_HALF_FLOAT;
    1752         AssertMsgFailed(("Test me - SVGA3D_ARGB_S10E5\n"));
     1759        AssertTestFmt(SVGA3D_ARGB_S10E5);
    17531760#endif
    17541761        break;
     
    17681775#endif
    17691776        pSurface->typeGL = GL_UNSIGNED_INT;
    1770         AssertMsgFailed(("Test me - SVGA3D_A2R10G10B10\n"));
     1777        AssertTestFmt(SVGA3D_A2R10G10B10);
    17711778        break;
    17721779
     
    17801787#else
    17811788        pSurface->typeGL = GL_HALF_FLOAT;
    1782         AssertMsgFailed(("Test me - SVGA3D_R_S10E5\n"));
     1789        AssertTestFmt(SVGA3D_R_S10E5);
    17831790#endif
    17841791        break;
     
    17951802#else
    17961803        pSurface->typeGL = GL_HALF_FLOAT;
    1797         AssertMsgFailed(("Test me - SVGA3D_RG_S10E5\n"));
     1804        AssertTestFmt(SVGA3D_RG_S10E5);
    17981805#endif
    17991806        break;
     
    18291836#else
    18301837        pSurface->typeGL = GL_UNSIGNED_SHORT;
    1831         AssertMsgFailed(("test me - SVGA3D_G16R16\n"));
     1838        AssertTestFmt(SVGA3D_G16R16);
    18321839#endif
    18331840        break;
     
    18401847#else
    18411848        pSurface->typeGL = GL_UNSIGNED_SHORT;
    1842         AssertMsgFailed(("Test me - SVGA3D_A16B16G16R16\n"));
     1849        AssertTestFmt(SVGA3D_A16B16G16R16);
    18431850#endif
    18441851        break;
     
    18481855        pSurface->formatGL = GL_BGRA;
    18491856        pSurface->typeGL = GL_UNSIGNED_INT_8_8_8_8_REV;
    1850         AssertMsgFailed(("test me - SVGA3D_R8G8B8A8_SNORM\n"));
     1857        AssertTestFmt(SVGA3D_R8G8B8A8_SNORM);
    18511858        break;
    18521859    case SVGA3D_R16G16_UNORM:
     
    18541861        pSurface->formatGL = GL_RG;
    18551862        pSurface->typeGL = GL_UNSIGNED_SHORT;
    1856         AssertMsgFailed(("test me - SVGA3D_R16G16_UNORM\n"));
     1863        AssertTestFmt(SVGA3D_R16G16_UNORM);
    18571864        break;
    18581865
     
    18811888        break;
    18821889    }
     1890#undef AssertTestFmt
    18831891}
    18841892
     
    26442652            vmsvga3dOglSetUnpackParams(pState, pContext, pSurface, &SavedParams); /** @todo do we need to set ROW_LENGTH to w here? */
    26452653
    2646             glTexSubImage2D(texImageTarget,
    2647                             uHostMipmap,
    2648                             u32HostBlockX,
    2649                             u32HostBlockY,
    2650                             cBlocksX,
    2651                             cBlocksY,
    2652                             pSurface->formatGL,
    2653                             pSurface->typeGL,
    2654                             pDoubleBuffer);
     2654            if (   pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
     2655                || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
     2656                || pSurface->internalFormatGL == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)
     2657            {
     2658                pState->ext.glCompressedTexSubImage2D(texImageTarget,
     2659                                                      uHostMipmap,
     2660                                                      pBox->x,
     2661                                                      pBox->y,
     2662                                                      pBox->w,
     2663                                                      pBox->h,
     2664                                                      pSurface->internalFormatGL,
     2665                                                      cbSurfacePitch * cBlocksY,
     2666                                                      pDoubleBuffer);
     2667            }
     2668            else
     2669            {
     2670                glTexSubImage2D(texImageTarget,
     2671                                uHostMipmap,
     2672                                u32HostBlockX,
     2673                                u32HostBlockY,
     2674                                cBlocksX,
     2675                                cBlocksY,
     2676                                pSurface->formatGL,
     2677                                pSurface->typeGL,
     2678                                pDoubleBuffer);
     2679            }
    26552680            VMSVGA3D_CHECK_LAST_ERROR_WARN(pState, pContext);
    26562681
     
    48214846                 currentStage, sid, pContext->aSidActiveTextures[currentStage]));
    48224847
    4823             /* Only is texture actually changed. */ /// @todo needs testing.
     4848            /* Only if texture actually changed. */ /// @todo needs testing.
    48244849            if (pContext->aSidActiveTextures[currentStage] != sid)
    48254850            {
     
    48304855                    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    48314856
    4832                     /* Necessary for the fixed pipeline. */
    4833                     glDisable(pCurrentTextureSurface->targetGL);
    4834                     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4857                    if (currentStage < 8)
     4858                    {
     4859                        /* Necessary for the fixed pipeline. */
     4860                        glDisable(pCurrentTextureSurface->targetGL);
     4861                        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4862                    }
    48354863
    48364864                    pCurrentTextureSurface = NULL;
     
    48624890                    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    48634891
    4864                     /* Necessary for the fixed pipeline. */
    4865                     glEnable(pSurface->targetGL);
    4866                     VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4892                    if (currentStage < 8)
     4893                    {
     4894                        /* Necessary for the fixed pipeline. */
     4895                        glEnable(pSurface->targetGL);
     4896                        VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
     4897                    }
    48674898
    48684899                    /* Remember the currently active texture. */
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