Changeset 94989 in vbox
- Timestamp:
- May 12, 2022 11:40:51 AM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 151414
- Location:
- trunk/src/VBox/Devices/Graphics
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-cmd.cpp
r94928 r94989 1384 1384 static int vmsvga3dBmpWrite(const char *pszFilename, VMSVGA3D_MAPPED_SURFACE const *pMap) 1385 1385 { 1386 if (pMap->cbBlock != 4 && pMap-> format != SVGA3D_R16G16B16A16_FLOAT)1386 if (pMap->cbBlock != 4 && pMap->cbBlock != 1 && pMap->format != SVGA3D_R16G16B16A16_FLOAT) 1387 1387 return VERR_NOT_SUPPORTED; 1388 1388 … … 1422 1422 { 1423 1423 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 } 1424 1438 1425 1439 s += pMap->cbRowPitch; … … 2519 2533 { 2520 2534 #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); 2525 2538 #else 2526 2539 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); … … 3379 3392 3380 3393 /* 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); 3394 static 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; 3388 3408 #else 3389 3409 RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd); … … 5603 5623 SVGA3dCmdDXMobFence64 *pCmd = (SVGA3dCmdDXMobFence64 *)pvCmd; 5604 5624 VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd)); 5605 rcParse = vmsvga3dCmdDXMobFence64(pThisCC, idDXContext,pCmd, cbCmd);5625 rcParse = vmsvga3dCmdDXMobFence64(pThisCC, pCmd, cbCmd); 5606 5626 break; 5607 5627 } -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.cpp
r94929 r94989 2027 2027 pSignatureEntry->semanticName = SVGADX_SIGNATURE_SEMANTIC_NAME_UNDEFINED; 2028 2028 } 2029 else if (opcode.aValOperand[0].operandType <= VGPU10_OPERAND_TYPE_SM50_MAX) 2030 { 2031 pSignatureEntry->registerIndex = 0; 2032 pSignatureEntry->semanticName = opcode.semanticName; 2033 } 2029 2034 else 2030 2035 ASSERT_GUEST_FAILED_STMT_BREAK(rc = VERR_NOT_SUPPORTED); … … 2437 2442 } 2438 2443 2439 int DXShaderUpdateResourceTypes(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceType, uint32_t cResourceType) 2440 { 2441 if (pInfo->fGuestSignatures) 2442 return VINF_SUCCESS; 2443 2444 VGPU10_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 2529 int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension, 2530 VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources) 2531 { 2444 2532 for (uint32_t i = 0; i < pInfo->cDclResource; ++i) 2445 2533 { 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); 2448 2539 2449 2540 uint32_t const offToken = pInfo->aOffDclResource[i]; … … 2452 2543 2453 2544 VGPU10OpcodeToken0 *pOpcode = (VGPU10OpcodeToken0 *)&paToken[0]; 2454 pOpcode->resourceDimension = resource Type;2545 pOpcode->resourceDimension = resourceDimension; 2455 2546 // paToken[1] unmodified 2456 2547 // 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; 2458 2553 } 2459 2554 -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx-shader.h
r94741 r94989 53 53 int DXShaderParse(void const *pvCode, uint32_t cbCode, DXShaderInfo *pInfo); 54 54 void DXShaderFree(DXShaderInfo *pInfo); 55 int DXShaderUpdateResourceTypes(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceType, uint32_t cResourceType); 55 int DXShaderUpdateResources(DXShaderInfo const *pInfo, VGPU10_RESOURCE_DIMENSION *paResourceDimension, 56 VGPU10_RESOURCE_RETURN_TYPE *paResourceReturnType, uint32_t cResources); 57 VGPU10_RESOURCE_RETURN_TYPE DXShaderResourceReturnTypeFromFormat(SVGA3dSurfaceFormat format); 56 58 int DXShaderCreateDXBC(DXShaderInfo const *pInfo, void **ppvDXBC, uint32_t *pcbDXBC); 57 59 char const *DXShaderGetOutputSemanticName(DXShaderInfo const *pInfo, uint32_t idxRegister, SVGA3dDXSignatureSemanticName *pSemanticName); -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp
r94928 r94989 1206 1206 1207 1207 1208 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext )1208 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd) 1209 1209 { 1210 1210 int rc; … … 1218 1218 AssertRCReturn(rc, rc); 1219 1219 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); 1221 1227 return rc; 1222 1228 } … … 2452 2458 2453 2459 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 2471 2460 int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext) 2472 2461 { -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp
r94833 r94989 177 177 AVLU32TREE SharedTextureTree; 178 178 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 */ 187 181 188 182 } VMSVGA3DBACKENDSURFACE; … … 237 231 typedef struct DXQUERY 238 232 { 239 ID3D11Query *pQuery; 233 union 234 { 235 ID3D11Query *pQuery; 236 ID3D11Predicate *pPredicate; 237 }; 240 238 } DXQUERY; 241 239 … … 971 969 AssertRCReturnVoid(rc); 972 970 973 RTListAppend(&pSurface->pBackendSurface-> u2.Texture.listView, &pDXView->nodeSurfaceView);971 RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView); 974 972 } 975 973 … … 1010 1008 pDXView->enmViewType = enmViewType; 1011 1009 pDXView->u.pView = pView; 1012 RTListAppend(&pSurface->pBackendSurface-> u2.Texture.listView, &pDXView->nodeSurfaceView);1010 RTListAppend(&pSurface->pBackendSurface->listView, &pDXView->nodeSurfaceView); 1013 1011 1014 1012 LogFunc(("cid = %u, sid = %u, viewId = %u, type = %u\n", … … 1016 1014 1017 1015 DXVIEW *pIter, *pNext; 1018 RTListForEachSafe(&pSurface->pBackendSurface-> u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)1016 RTListForEachSafe(&pSurface->pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView) 1019 1017 { 1020 1018 AssertPtr(pNext); … … 1838 1836 AssertPtrReturn(pBackendSurface, VERR_NO_MEMORY); 1839 1837 pBackendSurface->cidDrawing = SVGA_ID_INVALID; 1840 RTListInit(&pBackendSurface-> u2.Texture.listView);1838 RTListInit(&pBackendSurface->listView); 1841 1839 *ppBackendSurface = pBackendSurface; 1842 1840 return VINF_SUCCESS; … … 4458 4456 /* If any views have been created for this resource, then also release them. */ 4459 4457 DXVIEW *pIter, *pNext; 4460 RTListForEachSafe(&pBackendSurface-> u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)4458 RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView) 4461 4459 { 4462 4460 LogFunc(("pIter=%p, pNext=%p\n", pIter, pNext)); … … 4515 4513 ASSERT_GUEST_FAILED(); 4516 4514 DXVIEW *pIter, *pNext; 4517 RTListForEachSafe(&pBackendSurface-> u2.Texture.listView, pIter, pNext, DXVIEW, nodeSurfaceView)4515 RTListForEachSafe(&pBackendSurface->listView, pIter, pNext, DXVIEW, nodeSurfaceView) 4518 4516 { 4519 4517 dxViewDestroy(pIter); … … 5270 5268 if (shaderType == SVGA3D_SHADERTYPE_PS) 5271 5269 { 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; 5275 5275 5276 5276 for (uint32_t idxSR = 0; idxSR < SVGA3D_DX_MAX_SRVIEWS; ++idxSR) … … 5286 5286 AssertRCReturnVoid(rc); 5287 5287 5288 aResourceReturnType[idxSR] = DXShaderResourceReturnTypeFromFormat(pSRViewEntry->format); 5289 5288 5290 switch (pSRViewEntry->resourceDimension) 5289 5291 { 5290 5292 case SVGA3D_RESOURCE_BUFFEREX: 5291 5293 case SVGA3D_RESOURCE_BUFFER: 5292 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_BUFFER;5294 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_BUFFER; 5293 5295 break; 5294 5296 case SVGA3D_RESOURCE_TEXTURE1D: 5295 5297 if (pSurface->surfaceDesc.numArrayElements <= 1) 5296 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1D;5298 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1D; 5297 5299 else 5298 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY;5300 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE1DARRAY; 5299 5301 break; 5300 5302 case SVGA3D_RESOURCE_TEXTURE2D: 5301 5303 if (pSurface->surfaceDesc.numArrayElements <= 1) 5302 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;5304 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D; 5303 5305 else 5304 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY;5306 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2DARRAY; 5305 5307 break; 5306 5308 case SVGA3D_RESOURCE_TEXTURE3D: 5307 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE3D;5309 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE3D; 5308 5310 break; 5309 5311 case SVGA3D_RESOURCE_TEXTURECUBE: 5310 5312 if (pSurface->surfaceDesc.numArrayElements <= 6) 5311 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBE;5313 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBE; 5312 5314 else 5313 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY;5315 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURECUBEARRAY; 5314 5316 break; 5315 5317 default: 5316 5318 ASSERT_GUEST_FAILED(); 5317 aResource Type[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D;5319 aResourceDimension[idxSR] = VGPU10_RESOURCE_DIMENSION_TEXTURE2D; 5318 5320 } 5319 5321 5320 cResource Type= idxSR + 1;5322 cResources = idxSR + 1; 5321 5323 } 5322 5324 } 5323 5325 5324 rc = DXShaderUpdateResource Types(&pDXShader->shaderInfo, aResourceType, cResourceType);5326 rc = DXShaderUpdateResources(&pDXShader->shaderInfo, aResourceDimension, aResourceReturnType, cResources); 5325 5327 AssertRC(rc); /* Ignore rc because the shader will most likely work anyway. */ 5326 5328 } … … 6249 6251 6250 6252 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; 6253 static 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; 6258 6288 } 6259 6289 … … 6407 6437 { 6408 6438 /* 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); 6410 6443 AssertRCReturn(rc, rc); 6411 6444 } … … 6414 6447 { 6415 6448 /* 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); 6417 6453 AssertRCReturn(rc, rc); 6418 6454 } … … 7327 7363 7328 7364 static 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)7339 7365 { 7340 7366 PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend; … … 8017 8043 p->pfnDXSurfaceCopyAndReadback = vmsvga3dBackDXSurfaceCopyAndReadback; 8018 8044 p->pfnDXMoveQuery = vmsvga3dBackDXMoveQuery; 8019 p->pfnDXMobFence64 = vmsvga3dBackDXMobFence64;8020 8045 p->pfnDXBindAllShader = vmsvga3dBackDXBindAllShader; 8021 8046 p->pfnDXHint = vmsvga3dBackDXHint; -
trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h
r94449 r94989 449 449 DECLCALLBACKMEMBER(int, pfnDXBeginQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dQueryId queryId)); 450 450 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)); 452 452 DECLCALLBACKMEMBER(int, pfnDXSetSOTargets, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget)); 453 453 DECLCALLBACKMEMBER(int, pfnDXSetViewports, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport)); … … 485 485 DECLCALLBACKMEMBER(int, pfnDXSurfaceCopyAndReadback, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 486 486 DECLCALLBACKMEMBER(int, pfnDXMoveQuery, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 487 DECLCALLBACKMEMBER(int, pfnDXMobFence64, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));488 487 DECLCALLBACKMEMBER(int, pfnDXBindAllShader, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); 489 488 DECLCALLBACKMEMBER(int, pfnDXHint, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)); … … 577 576 int vmsvga3dDXEndQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXEndQuery const *pCmd); 578 577 int vmsvga3dDXReadbackQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackQuery const *pCmd); 579 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext );578 int vmsvga3dDXSetPredication(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetPredication const *pCmd); 580 579 int vmsvga3dDXSetSOTargets(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cSoTarget, SVGA3dSoTarget const *paSoTarget); 581 580 int vmsvga3dDXSetViewports(PVGASTATECC pThisCC, uint32_t idDXContext, uint32_t cViewport, SVGA3dViewport const *paViewport); … … 616 615 int vmsvga3dDXBindAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindAllQuery const *pCmd); 617 616 int vmsvga3dDXReadbackAllQuery(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXReadbackAllQuery const *pCmd); 618 int vmsvga3dDXMobFence64(PVGASTATECC pThisCC, uint32_t idDXContext);619 617 int vmsvga3dDXBindAllShader(PVGASTATECC pThisCC, uint32_t idDXContext); 620 618 int vmsvga3dDXHint(PVGASTATECC pThisCC, uint32_t idDXContext);
Note:
See TracChangeset
for help on using the changeset viewer.