VirtualBox

Changeset 94989 in vbox


Ignore:
Timestamp:
May 12, 2022 11:40:51 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
151414
Message:

Devices/Graphics: patch shader resource types; new commands: bugref:9830

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp

    r94928 r94989  
    13841384static int vmsvga3dBmpWrite(const char *pszFilename, VMSVGA3D_MAPPED_SURFACE const *pMap)
    13851385{
    1386     if (pMap->cbBlock != 4 && pMap->format != SVGA3D_R16G16B16A16_FLOAT)
     1386    if (pMap->cbBlock != 4 && pMap->cbBlock != 1 && pMap->format != SVGA3D_R16G16B16A16_FLOAT)
    13871387        return VERR_NOT_SUPPORTED;
    13881388
     
    14221422        {
    14231423            fwrite(s, 1, pMap->cbRow, f);
     1424
     1425            s += pMap->cbRowPitch;
     1426        }
     1427    }
     1428    else if (pMap->cbBlock == 1)
     1429    {
     1430        const uint8_t *s = (uint8_t *)pMap->pvData;
     1431        for (uint32_t iRow = 0; iRow < pMap->cRows; ++iRow)
     1432        {
     1433            for (int32_t x = 0; x < w; ++x)
     1434            {
     1435                uint32_t u32Pixel = s[x];
     1436                fwrite(&u32Pixel, 1, 4, f);
     1437            }
    14241438
    14251439            s += pMap->cbRowPitch;
     
    25192533{
    25202534#ifdef VMSVGA3D_DX
    2521     DEBUG_BREAKPOINT_TEST();
    2522     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    2523     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    2524     return vmsvga3dDXSetPredication(pThisCC, idDXContext);
     2535    //DEBUG_BREAKPOINT_TEST();
     2536    RT_NOREF(cbCmd);
     2537    return vmsvga3dDXSetPredication(pThisCC, idDXContext, pCmd);
    25252538#else
    25262539    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    33793392
    33803393/* SVGA_3D_CMD_DX_MOB_FENCE_64 1216 */
    3381 static int vmsvga3dCmdDXMobFence64(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXMobFence64 const *pCmd, uint32_t cbCmd)
    3382 {
    3383 #ifdef VMSVGA3D_DX
    3384     DEBUG_BREAKPOINT_TEST();
    3385     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3386     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3387     return vmsvga3dDXMobFence64(pThisCC, idDXContext);
     3394static int vmsvga3dCmdDXMobFence64(PVGASTATECC pThisCC, SVGA3dCmdDXMobFence64 const *pCmd, uint32_t cbCmd)
     3395{
     3396#ifdef VMSVGA3D_DX
     3397    //DEBUG_BREAKPOINT_TEST();
     3398    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
     3399    RT_NOREF(cbCmd);
     3400
     3401    PVMSVGAMOB pMob = vmsvgaR3MobGet(pSvgaR3State, pCmd->mobId);
     3402    ASSERT_GUEST_RETURN(pMob, VERR_INVALID_PARAMETER);
     3403
     3404    int rc = vmsvgaR3MobWrite(pSvgaR3State, pMob, pCmd->mobOffset, &pCmd->value, sizeof(pCmd->value));
     3405    ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
     3406
     3407    return VINF_SUCCESS;
    33883408#else
    33893409    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    56035623        SVGA3dCmdDXMobFence64 *pCmd = (SVGA3dCmdDXMobFence64 *)pvCmd;
    56045624        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    5605         rcParse = vmsvga3dCmdDXMobFence64(pThisCC, idDXContext, pCmd, cbCmd);
     5625        rcParse = vmsvga3dCmdDXMobFence64(pThisCC, pCmd, cbCmd);
    56065626        break;
    56075627    }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp

    r94929 r94989  
    20272027                        pSignatureEntry->semanticName  = SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED;
    20282028                    }
     2029                    else if (opcode.aValOperand[0].operandType <= VGPU10_OPERAND_TYPE_SM50_MAX)
     2030                    {
     2031                        pSignatureEntry->registerIndex = 0;
     2032                        pSignatureEntry->semanticName  = opcode.semanticName;
     2033                    }
    20292034                    else
    20302035                        ASSERT_GUEST_FAILED_STMT_BREAK(rc = VERR_NOT_SUPPORTED);
     
    24372442}
    24382443
    2439 int DXShaderUpdateResourceTypes(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceType, uint32_t cResourceType)
    2440 {
    2441     if (pInfo->fGuestSignatures)
    2442         return VINF_SUCCESS;
    2443 
     2444VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format)
     2445{
     2446    /** @todo This is auto-generated from format names and needs a review. */
     2447    switch (format)
     2448    {
     2449        case SVGA3D_R32G32B32A32_UINT:             return VGPU10_RETURN_TYPE_UINT;
     2450        case SVGA3D_R32G32B32A32_SINT:             return VGPU10_RETURN_TYPE_SINT;
     2451        case SVGA3D_R32G32B32_FLOAT:               return VGPU10_RETURN_TYPE_FLOAT;
     2452        case SVGA3D_R32G32B32_UINT:                return VGPU10_RETURN_TYPE_UINT;
     2453        case SVGA3D_R32G32B32_SINT:                return VGPU10_RETURN_TYPE_SINT;
     2454        case SVGA3D_R16G16B16A16_UINT:             return VGPU10_RETURN_TYPE_UINT;
     2455        case SVGA3D_R16G16B16A16_SNORM:            return VGPU10_RETURN_TYPE_SNORM;
     2456        case SVGA3D_R16G16B16A16_SINT:             return VGPU10_RETURN_TYPE_SINT;
     2457        case SVGA3D_R32G32_UINT:                   return VGPU10_RETURN_TYPE_UINT;
     2458        case SVGA3D_R32G32_SINT:                   return VGPU10_RETURN_TYPE_SINT;
     2459        case SVGA3D_D32_FLOAT_S8X24_UINT:          return VGPU10_RETURN_TYPE_UINT;
     2460        case SVGA3D_R32_FLOAT_X8X24:               return VGPU10_RETURN_TYPE_FLOAT;
     2461        case SVGA3D_X32_G8X24_UINT:                return VGPU10_RETURN_TYPE_UINT;
     2462        case SVGA3D_R10G10B10A2_UINT:              return VGPU10_RETURN_TYPE_UINT;
     2463        case SVGA3D_R11G11B10_FLOAT:               return VGPU10_RETURN_TYPE_FLOAT;
     2464        case SVGA3D_R8G8B8A8_UNORM:                return VGPU10_RETURN_TYPE_UNORM;
     2465        case SVGA3D_R8G8B8A8_UNORM_SRGB:           return VGPU10_RETURN_TYPE_UNORM;
     2466        case SVGA3D_R8G8B8A8_UINT:                 return VGPU10_RETURN_TYPE_UINT;
     2467        case SVGA3D_R8G8B8A8_SINT:                 return VGPU10_RETURN_TYPE_SINT;
     2468        case SVGA3D_R16G16_UINT:                   return VGPU10_RETURN_TYPE_UINT;
     2469        case SVGA3D_R16G16_SINT:                   return VGPU10_RETURN_TYPE_SINT;
     2470        case SVGA3D_D32_FLOAT:                     return VGPU10_RETURN_TYPE_FLOAT;
     2471        case SVGA3D_R32_UINT:                      return VGPU10_RETURN_TYPE_UINT;
     2472        case SVGA3D_R32_SINT:                      return VGPU10_RETURN_TYPE_SINT;
     2473        case SVGA3D_D24_UNORM_S8_UINT:             return VGPU10_RETURN_TYPE_UNORM;
     2474        case SVGA3D_R24_UNORM_X8:                  return VGPU10_RETURN_TYPE_UNORM;
     2475        case SVGA3D_X24_G8_UINT:                   return VGPU10_RETURN_TYPE_UINT;
     2476        case SVGA3D_R8G8_UNORM:                    return VGPU10_RETURN_TYPE_UNORM;
     2477        case SVGA3D_R8G8_UINT:                     return VGPU10_RETURN_TYPE_UINT;
     2478        case SVGA3D_R8G8_SINT:                     return VGPU10_RETURN_TYPE_SINT;
     2479        case SVGA3D_R16_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2480        case SVGA3D_R16_UINT:                      return VGPU10_RETURN_TYPE_UINT;
     2481        case SVGA3D_R16_SNORM:                     return VGPU10_RETURN_TYPE_SNORM;
     2482        case SVGA3D_R16_SINT:                      return VGPU10_RETURN_TYPE_SINT;
     2483        case SVGA3D_R8_UNORM:                      return VGPU10_RETURN_TYPE_UNORM;
     2484        case SVGA3D_R8_UINT:                       return VGPU10_RETURN_TYPE_UINT;
     2485        case SVGA3D_R8_SNORM:                      return VGPU10_RETURN_TYPE_SNORM;
     2486        case SVGA3D_R8_SINT:                       return VGPU10_RETURN_TYPE_SINT;
     2487        case SVGA3D_R8G8_B8G8_UNORM:               return VGPU10_RETURN_TYPE_UNORM;
     2488        case SVGA3D_G8R8_G8B8_UNORM:               return VGPU10_RETURN_TYPE_UNORM;
     2489        case SVGA3D_BC1_UNORM_SRGB:                return VGPU10_RETURN_TYPE_UNORM;
     2490        case SVGA3D_BC2_UNORM_SRGB:                return VGPU10_RETURN_TYPE_UNORM;
     2491        case SVGA3D_BC3_UNORM_SRGB:                return VGPU10_RETURN_TYPE_UNORM;
     2492        case SVGA3D_BC4_SNORM:                     return VGPU10_RETURN_TYPE_SNORM;
     2493        case SVGA3D_BC5_SNORM:                     return VGPU10_RETURN_TYPE_SNORM;
     2494        case SVGA3D_R10G10B10_XR_BIAS_A2_UNORM:    return VGPU10_RETURN_TYPE_UNORM;
     2495        case SVGA3D_B8G8R8A8_UNORM_SRGB:           return VGPU10_RETURN_TYPE_UNORM;
     2496        case SVGA3D_B8G8R8X8_UNORM_SRGB:           return VGPU10_RETURN_TYPE_UNORM;
     2497        case SVGA3D_R32G32B32A32_FLOAT:            return VGPU10_RETURN_TYPE_FLOAT;
     2498        case SVGA3D_R16G16B16A16_FLOAT:            return VGPU10_RETURN_TYPE_FLOAT;
     2499        case SVGA3D_R16G16B16A16_UNORM:            return VGPU10_RETURN_TYPE_UNORM;
     2500        case SVGA3D_R32G32_FLOAT:                  return VGPU10_RETURN_TYPE_FLOAT;
     2501        case SVGA3D_R10G10B10A2_UNORM:             return VGPU10_RETURN_TYPE_UNORM;
     2502        case SVGA3D_R8G8B8A8_SNORM:                return VGPU10_RETURN_TYPE_SNORM;
     2503        case SVGA3D_R16G16_FLOAT:                  return VGPU10_RETURN_TYPE_FLOAT;
     2504        case SVGA3D_R16G16_UNORM:                  return VGPU10_RETURN_TYPE_UNORM;
     2505        case SVGA3D_R16G16_SNORM:                  return VGPU10_RETURN_TYPE_SNORM;
     2506        case SVGA3D_R32_FLOAT:                     return VGPU10_RETURN_TYPE_FLOAT;
     2507        case SVGA3D_R8G8_SNORM:                    return VGPU10_RETURN_TYPE_SNORM;
     2508        case SVGA3D_R16_FLOAT:                     return VGPU10_RETURN_TYPE_FLOAT;
     2509        case SVGA3D_D16_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2510        case SVGA3D_A8_UNORM:                      return VGPU10_RETURN_TYPE_UNORM;
     2511        case SVGA3D_BC1_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2512        case SVGA3D_BC2_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2513        case SVGA3D_BC3_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2514        case SVGA3D_B5G6R5_UNORM:                  return VGPU10_RETURN_TYPE_UNORM;
     2515        case SVGA3D_B5G5R5A1_UNORM:                return VGPU10_RETURN_TYPE_UNORM;
     2516        case SVGA3D_B8G8R8A8_UNORM:                return VGPU10_RETURN_TYPE_UNORM;
     2517        case SVGA3D_B8G8R8X8_UNORM:                return VGPU10_RETURN_TYPE_UNORM;
     2518        case SVGA3D_BC4_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2519        case SVGA3D_BC5_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2520        case SVGA3D_B4G4R4A4_UNORM:                return VGPU10_RETURN_TYPE_UNORM;
     2521        case SVGA3D_BC7_UNORM:                     return VGPU10_RETURN_TYPE_UNORM;
     2522        case SVGA3D_BC7_UNORM_SRGB:                return VGPU10_RETURN_TYPE_UNORM;
     2523        default:
     2524            break;
     2525    }
     2526    return VGPU10_RETURN_TYPE_UNORM;
     2527}
     2528
     2529int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension,
     2530                            VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources)
     2531{
    24442532    for (uint32_t i = 0; i < pInfo->cDclResource; ++i)
    24452533    {
    2446         VGPU10_RESOURCE_DIMENSION const resourceType = i < cResourceType ? paResourceType[i] : VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
    2447         AssertContinue(resourceType <= VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY);
     2534        VGPU10_RESOURCE_DIMENSION const resourceDimension = i < cResources ? paResourceDimension[i] : VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
     2535        AssertContinue(resourceDimension <= VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY);
     2536
     2537        VGPU10_RESOURCE_RETURN_TYPE const resourceReturnType = i < cResources ? paResourceReturnType[i] : VGPU10_RETURN_TYPE_FLOAT;
     2538        AssertContinue(resourceReturnType <= VGPU10_RETURN_TYPE_MIXED);
    24482539
    24492540        uint32_t const offToken = pInfo->aOffDclResource[i];
     
    24522543
    24532544        VGPU10OpcodeToken0 *pOpcode = (VGPU10OpcodeToken0 *)&paToken[0];
    2454         pOpcode->resourceDimension = resourceType;
     2545        pOpcode->resourceDimension = resourceDimension;
    24552546        // paToken[1] unmodified
    24562547        // paToken[2] unmodified
    2457         paToken[3] = 0x5555; /** @todo VGPU10ResourceReturnTypeToken float */
     2548        VGPU10ResourceReturnTypeToken *pReturnTypeToken = (VGPU10ResourceReturnTypeToken *)&paToken[3];
     2549        pReturnTypeToken->component0 = (uint8_t)resourceReturnType;
     2550        pReturnTypeToken->component1 = (uint8_t)resourceReturnType;
     2551        pReturnTypeToken->component2 = (uint8_t)resourceReturnType;
     2552        pReturnTypeToken->component3 = (uint8_t)resourceReturnType;
    24582553    }
    24592554
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h

    r94741 r94989  
    5353int DXShaderParse(void const *pvCode, uint32_t cbCode, DXShaderInfo *pInfo);
    5454void DXShaderFree(DXShaderInfo *pInfo);
    55 int DXShaderUpdateResourceTypes(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceType, uint32_t cResourceType);
     55int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension,
     56                            VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources);
     57VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format);
    5658int DXShaderCreateDXBC(DXShaderInfo const *pInfo, void **ppvDXBC, uint32_t *pcbDXBC);
    5759char const *DXShaderGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, SVGA3dDXSignatureSemanticName *pSemanticName);
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp

    r94928 r94989  
    12061206
    12071207
    1208 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext)
     1208int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd)
    12091209{
    12101210    int rc;
     
    12181218    AssertRCReturn(rc, rc);
    12191219
    1220     rc = pSvgaR3State->pFuncsDX->pfnDXSetPredication(pThisCC, pDXContext);
     1220    SVGA3dQueryId const queryId = pCmd->queryId;
     1221
     1222    ASSERT_GUEST_RETURN(   queryId == SVGA3D_INVALID_ID
     1223                        || queryId < pDXContext->cot.cQuery, VERR_INVALID_PARAMETER);
     1224    RT_UNTRUSTED_VALIDATED_FENCE();
     1225
     1226    rc = pSvgaR3State->pFuncsDX->pfnDXSetPredication(pThisCC, pDXContext, queryId, pCmd->predicateValue);
    12211227    return rc;
    12221228}
     
    24522458
    24532459
    2454 int vmsvga3dDXMobFence64(PVGASTATECC pThisCC, uint32_t idDXContext)
    2455 {
    2456     int rc;
    2457     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    2458     AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXMobFence64, VERR_INVALID_STATE);
    2459     PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
    2460     AssertReturn(p3dState, VERR_INVALID_STATE);
    2461 
    2462     PVMSVGA3DDXCONTEXT pDXContext;
    2463     rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
    2464     AssertRCReturn(rc, rc);
    2465 
    2466     rc = pSvgaR3State->pFuncsDX->pfnDXMobFence64(pThisCC, pDXContext);
    2467     return rc;
    2468 }
    2469 
    2470 
    24712460int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext)
    24722461{
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r94833 r94989  
    177177    AVLU32TREE SharedTextureTree;
    178178
    179     union
    180     {
    181        struct
    182        {
    183            /* Render target views, depth stencil views and shader resource views created for this texture. */
    184            RTLISTANCHOR listView;                 /* DXVIEW */
    185        } Texture;
    186     } u2;
     179    /* Render target views, depth stencil views and shader resource views created for this texture or buffer. */
     180    RTLISTANCHOR listView;                        /* DXVIEW */
    187181
    188182} VMSVGA3DBACKENDSURFACE;
     
    237231typedef struct DXQUERY
    238232{
    239     ID3D11Query                *pQuery;
     233    union
     234    {
     235        ID3D11Query            *pQuery;
     236        ID3D11Predicate        *pPredicate;
     237    };
    240238} DXQUERY;
    241239
     
    971969    AssertRCReturnVoid(rc);
    972970
    973     RTListAppend(&pSurface->pBackendSurface->u2.Texture.listView, &pDXView->nodeSurfaceView);
     971    RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView);
    974972}
    975973
     
    10101008    pDXView->enmViewType = enmViewType;
    10111009    pDXView->u.pView     = pView;
    1012     RTListAppend(&pSurface->pBackendSurface->u2.Texture.listView, &pDXView->nodeSurfaceView);
     1010    RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView);
    10131011
    10141012    LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n",
     
    10161014
    10171015DXVIEW *pIter, *pNext;
    1018 RTListForEachSafe(&pSurface->pBackendSurface->u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)
     1016RTListForEachSafe(&pSurface->pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
    10191017{
    10201018    AssertPtr(pNext);
     
    18381836    AssertPtrReturn(pBackendSurface, VERR_NO_MEMORY);
    18391837    pBackendSurface->cidDrawing = SVGA_ID_INVALID;
    1840     RTListInit(&pBackendSurface->u2.Texture.listView);
     1838    RTListInit(&pBackendSurface->listView);
    18411839    *ppBackendSurface = pBackendSurface;
    18421840    return VINF_SUCCESS;
     
    44584456    /* If any views have been created for this resource, then also release them. */
    44594457    DXVIEW *pIter, *pNext;
    4460     RTListForEachSafe(&pBackendSurface->u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)
     4458    RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
    44614459    {
    44624460        LogFunc(("pIter=%p, pNext=%p\n", pIter, pNext));
     
    45154513        ASSERT_GUEST_FAILED();
    45164514        DXVIEW *pIter, *pNext;
    4517         RTListForEachSafe(&pBackendSurface->u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)
     4515        RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView)
    45184516        {
    45194517            dxViewDestroy(pIter);
     
    52705268                if (shaderType == SVGA3D_SHADERTYPE_PS)
    52715269                {
    5272                     VGPU10_RESOURCE_DIMENSION aResourceType[SVGA3D_DX_MAX_SRVIEWS];
    5273                     RT_ZERO(aResourceType);
    5274                     uint32_t cResourceType = 0;
     5270                    VGPU10_RESOURCE_DIMENSION aResourceDimension[SVGA3D_DX_MAX_SRVIEWS];
     5271                    RT_ZERO(aResourceDimension);
     5272                    VGPU10_RESOURCE_RETURN_TYPE aResourceReturnType[SVGA3D_DX_MAX_SRVIEWS];
     5273                    RT_ZERO(aResourceReturnType);
     5274                    uint32_t cResources = 0;
    52755275
    52765276                    for (uint32_t idxSR = 0; idxSR < SVGA3D_DX_MAX_SRVIEWS; ++idxSR)
     
    52865286                            AssertRCReturnVoid(rc);
    52875287
     5288                            aResourceReturnType[idxSR] = DXShaderResourceReturnTypeFromFormat(pSRViewEntry->format);
     5289
    52885290                            switch (pSRViewEntry->resourceDimension)
    52895291                            {
    52905292                                case SVGA3D_RESOURCE_BUFFEREX:
    52915293                                case SVGA3D_RESOURCE_BUFFER:
    5292                                     aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_BUFFER;
     5294                                    aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_BUFFER;
    52935295                                    break;
    52945296                                case SVGA3D_RESOURCE_TEXTURE1D:
    52955297                                    if (pSurface->surfaceDesc.numArrayElements <= 1)
    5296                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1D;
     5298                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1D;
    52975299                                    else
    5298                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY;
     5300                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY;
    52995301                                    break;
    53005302                                case SVGA3D_RESOURCE_TEXTURE2D:
    53015303                                    if (pSurface->surfaceDesc.numArrayElements <= 1)
    5302                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
     5304                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
    53035305                                    else
    5304                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY;
     5306                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY;
    53055307                                    break;
    53065308                                case SVGA3D_RESOURCE_TEXTURE3D:
    5307                                     aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE3D;
     5309                                    aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE3D;
    53085310                                    break;
    53095311                                case SVGA3D_RESOURCE_TEXTURECUBE:
    53105312                                    if (pSurface->surfaceDesc.numArrayElements <= 6)
    5311                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBE;
     5313                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBE;
    53125314                                    else
    5313                                         aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY;
     5315                                        aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY;
    53145316                                    break;
    53155317                                default:
    53165318                                    ASSERT_GUEST_FAILED();
    5317                                     aResourceType[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
     5319                                    aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;
    53185320                            }
    53195321
    5320                             cResourceType = idxSR + 1;
     5322                            cResources = idxSR + 1;
    53215323                        }
    53225324                    }
    53235325
    5324                     rc = DXShaderUpdateResourceTypes(&pDXShader->shaderInfo, aResourceType, cResourceType);
     5326                    rc = DXShaderUpdateResources(&pDXShader->shaderInfo, aResourceDimension, aResourceReturnType, cResources);
    53255327                    AssertRC(rc); /* Ignore rc because the shader will most likely work anyway. */
    53265328                }
     
    62496251
    62506252
    6251 static DECLCALLBACK(int) vmsvga3dBackDXSetPredication(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    6252 {
    6253     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    6254 
    6255     RT_NOREF(pBackend, pDXContext);
    6256     AssertFailed(); /** @todo Implement */
    6257     return VERR_NOT_IMPLEMENTED;
     6253static DECLCALLBACK(int) vmsvga3dBackDXSetPredication(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, uint32_t predicateValue)
     6254{
     6255    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     6256    RT_NOREF(pBackend);
     6257
     6258    DXDEVICE *pDXDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     6259    AssertReturn(pDXDevice->pDevice, VERR_INVALID_STATE);
     6260
     6261    if (queryId != SVGA3D_INVALID_ID)
     6262    {
     6263        DEBUG_BREAKPOINT_TEST();
     6264        DXQUERY *pDXQuery = &pDXContext->pBackendDXContext->paQuery[queryId];
     6265        SVGACOTableDXQueryEntry *pEntry = &pDXContext->cot.paQuery[queryId];
     6266
     6267        VGPU10QUERYINFO const *pQueryInfo = dxQueryInfo((SVGA3dQueryType)pEntry->type);
     6268        if (!pQueryInfo)
     6269            return VERR_INVALID_PARAMETER;
     6270
     6271        D3D_RELEASE(pDXQuery->pQuery);
     6272
     6273        D3D11_QUERY_DESC desc;
     6274        desc.Query     = pQueryInfo->dxQueryType;
     6275        desc.MiscFlags = 0;
     6276        if (pEntry->flags & SVGA3D_DXQUERY_FLAG_PREDICATEHINT)
     6277            desc.MiscFlags |= (UINT)D3D11_QUERY_MISC_PREDICATEHINT;
     6278
     6279        HRESULT hr = pDXDevice->pDevice->CreatePredicate(&desc, &pDXQuery->pPredicate);
     6280        AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
     6281
     6282        pDXDevice->pImmediateContext->SetPredication(pDXQuery->pPredicate, RT_BOOL(predicateValue));
     6283    }
     6284    else
     6285        pDXDevice->pImmediateContext->SetPredication(NULL, FALSE);
     6286
     6287    return VINF_SUCCESS;
    62586288}
    62596289
     
    64076437    {
    64086438        /* Create the resource. */
    6409         rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSrcSurface);
     6439        if (pSrcSurface->format != SVGA3D_BUFFER)
     6440            rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSrcSurface);
     6441        else
     6442            rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSrcSurface);
    64106443        AssertRCReturn(rc, rc);
    64116444    }
     
    64146447    {
    64156448        /* Create the resource. */
    6416         rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pDstSurface);
     6449        if (pSrcSurface->format != SVGA3D_BUFFER)
     6450            rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pDstSurface);
     6451        else
     6452            rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pDstSurface);
    64176453        AssertRCReturn(rc, rc);
    64186454    }
     
    73277363
    73287364static DECLCALLBACK(int) vmsvga3dBackDXMoveQuery(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7329 {
    7330     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7331 
    7332     RT_NOREF(pBackend, pDXContext);
    7333     AssertFailed(); /** @todo Implement */
    7334     return VERR_NOT_IMPLEMENTED;
    7335 }
    7336 
    7337 
    7338 static DECLCALLBACK(int) vmsvga3dBackDXMobFence64(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    73397365{
    73407366    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    80178043                p->pfnDXSurfaceCopyAndReadback    = vmsvga3dBackDXSurfaceCopyAndReadback;
    80188044                p->pfnDXMoveQuery                 = vmsvga3dBackDXMoveQuery;
    8019                 p->pfnDXMobFence64                = vmsvga3dBackDXMobFence64;
    80208045                p->pfnDXBindAllShader             = vmsvga3dBackDXBindAllShader;
    80218046                p->pfnDXHint                      = vmsvga3dBackDXHint;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h

    r94449 r94989  
    449449    DECLCALLBACKMEMBER(int, pfnDXBeginQuery,                (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId));
    450450    DECLCALLBACKMEMBER(int, pfnDXEndQuery,                  (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, SVGADXQueryResultUnion *pQueryResult, uint32_t *pcbOut));
    451     DECLCALLBACKMEMBER(int, pfnDXSetPredication,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     451    DECLCALLBACKMEMBER(int, pfnDXSetPredication,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId, uint32_t predicateValue));
    452452    DECLCALLBACKMEMBER(int, pfnDXSetSOTargets,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget));
    453453    DECLCALLBACKMEMBER(int, pfnDXSetViewports,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport));
     
    485485    DECLCALLBACKMEMBER(int, pfnDXSurfaceCopyAndReadback,    (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    486486    DECLCALLBACKMEMBER(int, pfnDXMoveQuery,                 (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    487     DECLCALLBACKMEMBER(int, pfnDXMobFence64,                (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    488487    DECLCALLBACKMEMBER(int, pfnDXBindAllShader,             (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    489488    DECLCALLBACKMEMBER(int, pfnDXHint,                      (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     
    577576int vmsvga3dDXEndQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXEndQuery const *pCmd);
    578577int vmsvga3dDXReadbackQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackQuery const *pCmd);
    579 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext);
     578int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd);
    580579int vmsvga3dDXSetSOTargets(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget);
    581580int vmsvga3dDXSetViewports(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport);
     
    616615int vmsvga3dDXBindAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllQuery const *pCmd);
    617616int vmsvga3dDXReadbackAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackAllQuery const *pCmd);
    618 int vmsvga3dDXMobFence64(PVGASTATECC pThisCC, uint32_t idDXContext);
    619617int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext);
    620618int vmsvga3dDXHint(PVGASTATECC pThisCC, uint32_t idDXContext);
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