Changeset 102809 in vbox
- Timestamp:
- Jan 10, 2024 8:18:11 AM (13 months ago)
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.cpp
r102639 r102809 589 589 pResource->AllocationDesc.surfaceInfo.numMipLevels, 590 590 pResource->AllocationDesc.surfaceInfo.arraySize, 591 1);591 pResource->AllocationDesc.surfaceInfo.multisampleCount); 592 592 } 593 593 … … 662 662 f |= SVGA3D_SURFACE_RESOURCE_CLAMP; 663 663 664 /** @todo SVGA3D_SURFACE_MULTISAMPLE */665 Assert(pCreateResource->SampleDesc.Count <= 1);664 if (pCreateResource->SampleDesc.Count > 1) 665 f |= SVGA3D_SURFACE_MULTISAMPLE; 666 666 667 667 return f; … … 704 704 pDesc->surfaceInfo.format = vboxDXDxgiToSvgaFormat(pCreateResource->Format); 705 705 pDesc->surfaceInfo.numMipLevels = pCreateResource->MipLevels; 706 pDesc->surfaceInfo.multisampleCount = 0; 707 pDesc->surfaceInfo.multisamplePattern = SVGA3D_MS_PATTERN_NONE; 708 pDesc->surfaceInfo.qualityLevel = SVGA3D_MS_QUALITY_NONE; 706 pDesc->surfaceInfo.multisampleCount = pCreateResource->SampleDesc.Count; 707 if (pDesc->surfaceInfo.multisampleCount > 1) 708 { 709 pDesc->surfaceInfo.multisamplePattern = SVGA3D_MS_PATTERN_STANDARD; 710 pDesc->surfaceInfo.qualityLevel = SVGA3D_MS_QUALITY_FULL; 711 } 712 else 713 { 714 pDesc->surfaceInfo.multisamplePattern = SVGA3D_MS_PATTERN_NONE; 715 pDesc->surfaceInfo.qualityLevel = SVGA3D_MS_QUALITY_NONE; 716 } 709 717 pDesc->surfaceInfo.autogenFilter = SVGA3D_TEX_FILTER_NONE; 710 718 pDesc->surfaceInfo.size.width = pCreateResource->pMipInfoList[0].TexelWidth; … … 3112 3120 3113 3121 3122 void vboxDXResourceResolveSubresource(PVBOXDX_DEVICE pDevice, PVBOXDX_RESOURCE pDstResource, UINT DstSubresource, 3123 PVBOXDX_RESOURCE pSrcResource, UINT SrcSubresource, DXGI_FORMAT ResolveFormat) 3124 { 3125 SVGA3dSurfaceFormat const copyFormat = vboxDXDxgiToSvgaFormat(ResolveFormat); 3126 vgpu10ResolveCopy(pDevice, vboxDXGetAllocation(pDstResource), DstSubresource, 3127 vboxDXGetAllocation(pSrcResource), SrcSubresource, copyFormat); 3128 } 3129 3114 3130 static void vboxDXUndefineResourceViews(PVBOXDX_DEVICE pDevice, PVBOXDX_RESOURCE pResource) 3115 3131 { … … 3648 3664 { 3649 3665 AssertReturn(Rotate == DXGI_DDI_MODE_ROTATION_IDENTITY, DXGI_ERROR_INVALID_CALL); 3650 AssertReturn(Flags.Resolve == 0, DXGI_ERROR_INVALID_CALL); 3666 AssertReturn(Flags.Resolve == 0, DXGI_ERROR_INVALID_CALL); /** @todo Multisampled resources. */ 3651 3667 3652 3668 SVGA3dBox boxSrc; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDX.h
r102631 r102809 724 724 const D3D10_DDI_BOX *pSrcBox, UINT CopyFlags); 725 725 void vboxDXResourceCopy(PVBOXDX_DEVICE pDevice, PVBOXDX_RESOURCE pDstResource, PVBOXDX_RESOURCE pSrcResource); 726 void vboxDXResourceResolveSubresource(PVBOXDX_DEVICE pDevice, PVBOXDX_RESOURCE pDstResource, UINT DstSubresource, 727 PVBOXDX_RESOURCE pSrcResource, UINT SrcSubresource, DXGI_FORMAT ResolveFormat); 726 728 void vboxDXCreateUnorderedAccessView(PVBOXDX_DEVICE pDevice, PVBOXDXUNORDEREDACCESSVIEW pUnorderedAccessView); 727 729 void vboxDXDestroyUnorderedAccessView(PVBOXDX_DEVICE pDevice, PVBOXDXUNORDEREDACCESSVIEW pUnorderedAccessView); -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.cpp
r102631 r102809 1259 1259 1260 1260 1261 int vgpu10ResolveCopy(PVBOXDX_DEVICE pDevice, 1262 D3DKMT_HANDLE hDstAllocation, 1263 uint32 dstSubResource, 1264 D3DKMT_HANDLE hSrcAllocation, 1265 uint32 srcSubResource, 1266 SVGA3dSurfaceFormat copyFormat) 1267 { 1268 void *pvCmd = vboxDXCommandBufferReserve(pDevice, SVGA_3D_CMD_DX_RESOLVE_COPY, 1269 sizeof(SVGA3dCmdDXResolveCopy), 2); 1270 if (!pvCmd) 1271 return VERR_NO_MEMORY; 1272 1273 SVGA3dCmdDXResolveCopy *cmd = (SVGA3dCmdDXResolveCopy *)pvCmd; 1274 cmd->dstSid = SVGA3D_INVALID_ID; 1275 SET_CMD_FIELD(dstSubResource); 1276 cmd->srcSid = SVGA3D_INVALID_ID; 1277 SET_CMD_FIELD(srcSubResource); 1278 SET_CMD_FIELD(copyFormat); 1279 1280 vboxDXStorePatchLocation(pDevice, &cmd->dstSid, VBOXDXALLOCATIONTYPE_SURFACE, 1281 hDstAllocation, 0, true); 1282 vboxDXStorePatchLocation(pDevice, &cmd->srcSid, VBOXDXALLOCATIONTYPE_SURFACE, 1283 hSrcAllocation, 0, false); 1284 1285 vboxDXCommandBufferCommit(pDevice); 1286 return VINF_SUCCESS; 1287 } 1288 1289 1261 1290 int vgpu10MobFence64(PVBOXDX_DEVICE pDevice, 1262 1291 uint64 value, -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXCmd.h
r102631 r102809 262 262 D3DKMT_HANDLE hDstAllocation, 263 263 D3DKMT_HANDLE hSrcAllocation); 264 int vgpu10ResolveCopy(PVBOXDX_DEVICE pDevice, 265 D3DKMT_HANDLE hDstAllocation, 266 uint32 dstSubResource, 267 D3DKMT_HANDLE hSrcAllocation, 268 uint32 srcSubResource, 269 SVGA3dSurfaceFormat copyFormat); 264 270 int vgpu10MobFence64(PVBOXDX_DEVICE pDevice, 265 271 uint64 value, -
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/dx/VBoxDXDDI.cpp
r102631 r102809 1127 1127 } 1128 1128 1129 void APIENTRY vboxDXResourceResolveSubresource(1129 static void APIENTRY ddi10ResourceResolveSubresource( 1130 1130 D3D10DDI_HDEVICE hDevice, 1131 1131 D3D10DDI_HRESOURCE hDstResource, // A handle to the destination resource to resolve to. This resource must have been created as D3D10_USAGE_DEFAULT and single sampled. … … 1136 1136 ) 1137 1137 { 1138 DEBUG_BREAKPOINT_TEST(); 1139 RT_NOREF(hDevice, hDstResource, DstSubresource, hSrcResource, SrcSubresource, ResolveFormat); 1140 LogFlowFuncEnter(); 1138 //DEBUG_BREAKPOINT_TEST(); 1139 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 1140 PVBOXDX_RESOURCE pDstResource = (PVBOXDX_RESOURCE)hDstResource.pDrvPrivate; 1141 PVBOXDX_RESOURCE pSrcResource = (PVBOXDX_RESOURCE)hSrcResource.pDrvPrivate; 1142 LogFlowFunc(("pDevice 0x%p, pDstResource 0x%p, pSrcResource 0x%p", 1143 pDevice, pDstResource, pSrcResource)); 1144 1145 vboxDXResourceResolveSubresource(pDevice, pDstResource, DstSubresource, 1146 pSrcResource, SrcSubresource, ResolveFormat); 1141 1147 } 1142 1148 … … 1840 1846 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 1841 1847 PVBOXDX_BLENDSTATE pBlendState = (PVBOXDX_BLENDSTATE)hBlendState.pDrvPrivate; 1842 LogFlowFunc(("pDevice 0x%p, pBlendState 0x%p, RT[0] BlendEnable %d ", pDevice, pBlendState, pBlendDesc->RenderTarget[0].BlendEnable));1848 LogFlowFunc(("pDevice 0x%p, pBlendState 0x%p, RT[0] BlendEnable %d\n", pDevice, pBlendState, pBlendDesc->RenderTarget[0].BlendEnable)); 1843 1849 1844 1850 /* Init the blend state and allocate blend id. */ … … 1859 1865 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 1860 1866 PVBOXDX_BLENDSTATE pBlendState = (PVBOXDX_BLENDSTATE)hBlendState.pDrvPrivate; 1861 LogFlowFunc(("pDevice 0x%p, pBlendState 0x%p, RT[0] BlendEnable %d ", pDevice, pBlendState, pBlendDesc->RenderTarget[0].BlendEnable));1867 LogFlowFunc(("pDevice 0x%p, pBlendState 0x%p, RT[0] BlendEnable %d\n", pDevice, pBlendState, pBlendDesc->RenderTarget[0].BlendEnable)); 1862 1868 1863 1869 /* Init the blend state and allocate blend id. */ … … 2771 2777 if (u32Cap & SVGA3D_DXFMT_ARRAY) 2772 2778 if (u32Cap & SVGA3D_DXFMT_VOLUME)*/ 2779 2780 if (u32Cap & SVGA3D_DXFMT_MULTISAMPLE) 2781 *pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET; 2773 2782 } 2774 2783 } else { … … 2786 2795 //DEBUG_BREAKPOINT_TEST(); 2787 2796 PVBOXDX_DEVICE pDevice = (PVBOXDX_DEVICE)hDevice.pDrvPrivate; 2788 RT_NOREF(pDevice, Format, SampleCount, pNumQualityLevels); 2789 // LogFlowFunc(("pDevice 0x%p, Format %d, SampleCount %d", pDevice, Format, SampleCount)); 2797 //LogFlowFunc(("pDevice 0x%p, Format %d, SampleCount %d", pDevice, Format, SampleCount)); 2790 2798 2791 2799 if (SampleCount == 1) 2792 2800 *pNumQualityLevels = 1; 2793 2801 else 2802 { 2794 2803 *pNumQualityLevels = 0; 2804 2805 SVGA3dDevCapIndex const idxDevCap = vboxDXGIFormat2CapIdx(Format); 2806 if (idxDevCap != SVGA3D_DEVCAP_INVALID) 2807 { 2808 PVBOXDXADAPTER pVBoxAdapter = pDevice->pAdapter; 2809 uint32_t const *au32Caps = pVBoxAdapter->AdapterInfo.u.vmsvga.HWInfo.u.svga.au32Caps; 2810 uint32_t const u32Cap = au32Caps[idxDevCap]; 2811 if (u32Cap & SVGA3D_DXFMT_MULTISAMPLE) 2812 { 2813 bool fSampleCountSupported = false; 2814 if (SampleCount == 2) 2815 fSampleCountSupported = RT_BOOL(au32Caps[SVGA3D_DEVCAP_MULTISAMPLE_2X]); 2816 else if (SampleCount == 4) 2817 fSampleCountSupported = RT_BOOL(au32Caps[SVGA3D_DEVCAP_MULTISAMPLE_4X]); 2818 else if (SampleCount == 8) 2819 fSampleCountSupported = RT_BOOL(au32Caps[SVGA3D_DEVCAP_MULTISAMPLE_8X]); 2820 *pNumQualityLevels = fSampleCountSupported ? 1 : 0; 2821 } 2822 } 2823 } 2795 2824 } 2796 2825 … … 4129 4158 p11_1DeviceFuncs->pfnGenMips = ddi10GenMips; 4130 4159 p11_1DeviceFuncs->pfnResourceCopy = ddi10ResourceCopy; 4131 p11_1DeviceFuncs->pfnResourceResolveSubresource = vboxDXResourceResolveSubresource;4160 p11_1DeviceFuncs->pfnResourceResolveSubresource = ddi10ResourceResolveSubresource; 4132 4161 4133 4162 /* Infrequent paths. */ … … 4306 4335 p11DeviceFuncs->pfnGenMips = ddi10GenMips; 4307 4336 p11DeviceFuncs->pfnResourceCopy = ddi10ResourceCopy; 4308 p11DeviceFuncs->pfnResourceResolveSubresource = vboxDXResourceResolveSubresource;4337 p11DeviceFuncs->pfnResourceResolveSubresource = ddi10ResourceResolveSubresource; 4309 4338 4310 4339 /* Infrequent paths. */ … … 4476 4505 p10_1DeviceFuncs->pfnGenMips = ddi10GenMips; 4477 4506 p10_1DeviceFuncs->pfnResourceCopy = ddi10ResourceCopy; 4478 p10_1DeviceFuncs->pfnResourceResolveSubresource = vboxDXResourceResolveSubresource;4507 p10_1DeviceFuncs->pfnResourceResolveSubresource = ddi10ResourceResolveSubresource; 4479 4508 4480 4509 /* Infrequent paths. */ … … 4597 4626 p10DeviceFuncs->pfnGenMips = ddi10GenMips; 4598 4627 p10DeviceFuncs->pfnResourceCopy = ddi10ResourceCopy; 4599 p10DeviceFuncs->pfnResourceResolveSubresource = vboxDXResourceResolveSubresource;4628 p10DeviceFuncs->pfnResourceResolveSubresource = ddi10ResourceResolveSubresource; 4600 4629 4601 4630 /* Infrequent paths. */
Note:
See TracChangeset
for help on using the changeset viewer.