VirtualBox

Changeset 95023 in vbox for trunk/src/VBox/Devices/Graphics


Ignore:
Timestamp:
May 16, 2022 3:17:36 PM (3 years ago)
Author:
vboxsync
Message:

Devices/Graphics: shaders; render targets; removed a wrong ClearState call: bugref:9830

Location:
trunk/src/VBox/Devices/Graphics
Files:
4 edited

Legend:

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

    r95013 r95023  
    6868#define DXBC_BLOB_TYPE_ISGN RT_MAKE_U32_FROM_U8('I', 'S', 'G', 'N')
    6969#define DXBC_BLOB_TYPE_OSGN RT_MAKE_U32_FROM_U8('O', 'S', 'G', 'N')
     70#define DXBC_BLOB_TYPE_PCSG RT_MAKE_U32_FROM_U8('P', 'C', 'S', 'G')
    7071#define DXBC_BLOB_TYPE_SHDR RT_MAKE_U32_FROM_U8('S', 'H', 'D', 'R')
    7172/** @todo More... */
     
    23812382
    23822383    /* Create a DXBC container with ISGN, OSGN and SHDR blobs. */
    2383     uint32_t const cBlob = 3;
     2384    uint32_t cBlob = 3;
     2385    if (   pInfo->enmProgramType == VGPU10_HULL_SHADER
     2386        || pInfo->enmProgramType == VGPU10_DOMAIN_SHADER)
     2387        ++cBlob;
     2388
    23842389    uint32_t const cbHdr = RT_UOFFSETOF(DXBCHeader, aBlobOffset[cBlob]); /* Header with blob offsets. */
    23852390    if (!dxbcByteWriterCanWrite(w, cbHdr))
     
    23962401    dxbcByteWriterCommit(w, cbHdr);
    23972402
     2403#ifdef LOG_ENABLED
     2404    if (pInfo->cInputSignature)
     2405    {
     2406        Log6(("Input signatures:\n"));
     2407        for (uint32_t i = 0; i < pInfo->cInputSignature; ++i)
     2408            Log6(("  [%u]: %u %u 0x%X\n", i, pInfo->aInputSignature[i].registerIndex, pInfo->aInputSignature[i].semanticName, pInfo->aInputSignature[i].mask));
     2409    }
     2410    if (pInfo->cOutputSignature)
     2411    {
     2412        Log6(("Output signatures:\n"));
     2413        for (uint32_t i = 0; i < pInfo->cOutputSignature; ++i)
     2414            Log6(("  [%u]: %u %u 0x%X\n", i, pInfo->aOutputSignature[i].registerIndex, pInfo->aOutputSignature[i].semanticName, pInfo->aOutputSignature[i].mask));
     2415    }
     2416    if (pInfo->cPatchConstantSignature)
     2417    {
     2418        Log6(("Patch constant signatures:\n"));
     2419        for (uint32_t i = 0; i < pInfo->cPatchConstantSignature; ++i)
     2420            Log6(("  [%u]: %u %u 0x%X\n", i, pInfo->aPatchConstantSignature[i].registerIndex, pInfo->aPatchConstantSignature[i].semanticName, pInfo->aPatchConstantSignature[i].mask));
     2421    }
     2422#endif
     2423
    23982424    /* Blobs. */
    23992425    uint32_t iBlob = 0;
     
    24072433    AssertRCReturn(rc, rc);
    24082434
     2435    if (   pInfo->enmProgramType == VGPU10_HULL_SHADER
     2436        || pInfo->enmProgramType == VGPU10_DOMAIN_SHADER)
     2437    {
     2438        pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
     2439        rc = dxbcCreateIOSGNBlob(pInfo, pHdr, DXBC_BLOB_TYPE_PCSG, pInfo->cPatchConstantSignature, &pInfo->aPatchConstantSignature[0], w);
     2440        AssertRCReturn(rc, rc);
     2441    }
     2442
    24092443    pHdr->aBlobOffset[iBlob++] = dxbcByteWriterSize(w);
    24102444    rc = dxbcCreateSHDRBlob(pHdr, DXBC_BLOB_TYPE_SHDR, pvShader, cbShader, w);
    24112445    AssertRCReturn(rc, rc);
     2446
     2447    Assert(iBlob == cBlob);
    24122448
    24132449    AssertCompile(RT_UOFFSETOF(DXBCHeader, u32Version) == 0x14);
     
    25382574        case SVGA3D_BC7_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
    25392575        case SVGA3D_BC7_UNORM_SRGB:                return VGPU10_RETURN_TYPE_UNORM;
     2576        case SVGA3D_R9G9B9E5_SHAREDEXP:            return VGPU10_RETURN_TYPE_FLOAT;
    25402577        default:
    25412578            break;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp

    r95017 r95023  
    182182        u32TrackedState &= ~DX_STATE_SAMPLERS;
    183183
    184         for (int i = SVGA3D_SHADERTYPE_MIN; i < SVGA3D_SHADERTYPE_DX10_MAX; ++i) /** @todo SVGA3D_SHADERTYPE_MAX */
     184        for (int i = SVGA3D_SHADERTYPE_MIN; i < SVGA3D_SHADERTYPE_MAX; ++i)
    185185        {
    186186            SVGA3dShaderType const shaderType = (SVGA3dShaderType)i;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r95022 r95023  
    947947    RT_NOREF(pBackend);
    948948
    949     if (pDevice->pImmediateContext)
    950     {
    951         dxDeviceFlush(pDevice); /* Make sure that any pending draw calls are finished. */
    952         pDevice->pImmediateContext->ClearState();
    953     }
    954 
    955949    D3D_RELEASE(pDevice->pStagingBuffer);
    956950
     
    50024996        VMSVGA3DBACKENDDXCONTEXT *pBackendDXContext = pDXContext->pBackendDXContext;
    50034997
     4998        if (pBackendDXContext->dxDevice.pImmediateContext)
     4999            dxDeviceFlush(&pBackendDXContext->dxDevice); /* Make sure that any pending draw calls are finished. */
     5000
    50045001        if (pBackendDXContext->paRenderTargetView)
    50055002        {
     
    53865383
    53875384    /* Make sure that the shader resource views exist. */
    5388     for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE_DX10 /** @todo SVGA3D_NUM_SHADERTYPE*/; ++idxShaderState)
     5385    for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE; ++idxShaderState)
    53895386    {
    53905387        for (uint32_t idxSR = 0; idxSR < SVGA3D_DX_MAX_SRVIEWS; ++idxSR)
     
    55935590     */
    55945591
    5595     for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE_DX10 /** @todo SVGA3D_NUM_SHADERTYPE*/; ++idxShaderState)
     5592    for (uint32_t idxShaderState = 0; idxShaderState < SVGA3D_NUM_SHADERTYPE; ++idxShaderState)
    55965593    {
    55975594        DXSHADER *pDXShader;
     
    56055602            {
    56065603                /* Create a new shader. */
    5607                 Log(("Shader: cid=%u shid=%u type=%d\n", pDXContext->cid, shaderId, pDXShader->enmShaderType));
     5604                Log(("Shader: cid=%u shid=%u type=%d, GuestSignatures %d\n", pDXContext->cid, shaderId, pDXShader->enmShaderType, pDXShader->shaderInfo.fGuestSignatures));
    56085605
    56095606                /* Apply resource types to a pixel shader. */
     
    62806277    }
    62816278
     6279    UINT NumRTVs = 0;
    62826280    ID3D11RenderTargetView *apRenderTargetViews[SVGA3D_MAX_RENDER_TARGETS];
    62836281    RT_ZERO(apRenderTargetViews);
     
    62896287            ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->pBackendDXContext->cRenderTargetView, VERR_INVALID_PARAMETER);
    62906288            apRenderTargetViews[i] = pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId].u.pRenderTargetView;
     6289            ++NumRTVs;
    62916290        }
    62926291    }
     
    62976296        pDepthStencilView = pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId].u.pDepthStencilView;
    62986297
    6299     pDevice->pImmediateContext->OMSetRenderTargets(pDXContext->cRenderTargets,
     6298    pDevice->pImmediateContext->OMSetRenderTargetsAndUnorderedAccessViews(NumRTVs,
    63006299                                                   apRenderTargetViews,
    6301                                                    pDepthStencilView);
    6302 //    Assert(NumUAVs == 0);
    6303     if (NumUAVs != 0)
    6304         pDevice->pImmediateContext->OMSetRenderTargetsAndUnorderedAccessViews(D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL,
    6305                                                        NULL,
    6306                                                        NULL,
    6307                                                        pDXContext->svgaDXContext.uavSpliceIndex,
    6308                                                        NumUAVs,
    6309                                                        apUnorderedAccessViews,
    6310                                                        aUAVInitialCounts);
     6300                                                   pDepthStencilView,
     6301                                                   NumRTVs /*pDXContext->svgaDXContext.uavSpliceIndex*/,
     6302                                                   NumUAVs,
     6303                                                   apUnorderedAccessViews,
     6304                                                   aUAVInitialCounts);
    63116305    return VINF_SUCCESS;
    63126306}
  • trunk/src/VBox/Devices/Graphics/svgadump/svga_dump.c

    r88838 r95023  
    231231   case SVGA3D_SHADERTYPE_GS:
    232232      return "SVGA3D_SHADERTYPE_GS";
     233   case SVGA3D_SHADERTYPE_HS:
     234      return "SVGA3D_SHADERTYPE_HS";
     235   case SVGA3D_SHADERTYPE_DS:
     236      return "SVGA3D_SHADERTYPE_DS";
     237   case SVGA3D_SHADERTYPE_CS:
     238      return "SVGA3D_SHADERTYPE_CS";
    233239   default:
    234240      return "unknown shader type!";
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