Nsight 2020.4 issues with DX 11 tiled resources

Hi Nsight team,

We have another issue when debugging our DX11 engine. There we using tiled resource buffers. It turns out that NSight showed some weird behavior on it.

(1) Live Capture:
When we capture a frame, the D3D Debug Layer outputs tons of warnings before getting crashed due to “device removed” when sliding at the scrubber:

D3D11 WARNING: ID3D11DeviceContext::CopyResource: A Copy or Update is being done to a Tiled Resource that contains at least 2014 tile mapping(s) that point to the same Tile Pool location(s) as other mappings all within the covered area. Writing results are undefined in these tiles unless the data itself is identical - different hardware may write the tiles in different orders. [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: Example tile mapping(s) for the previous message: [ {X=34, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=35, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=36, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=37, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=38, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=39, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=40, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=41, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ] [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: A Copy or Update is being done to a Tiled Resource that contains at least 2037 tile mapping(s) that point to the same Tile Pool location(s) as other mappings all within the covered area. Writing results are undefined in these tiles unless the data itself is identical - different hardware may write the tiles in different orders. [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: Example tile mapping(s) for the previous message: [ {X=11, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=12, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=13, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=14, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=15, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=16, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=17, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=18, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ] [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: A Copy or Update is being done to a Tiled Resource that contains at least 2014 tile mapping(s) that point to the same Tile Pool location(s) as other mappings all within the covered area. Writing results are undefined in these tiles unless the data itself is identical - different hardware may write the tiles in different orders. [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: Example tile mapping(s) for the previous message: [ {X=34, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=35, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=36, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=37, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=38, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=39, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=40, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ], [ {X=41, Y=0, Z=0, Subresource=0} → {TilePoolIndex=1} ] [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: A Copy or Update is being done to a Tiled Resource that contains at least 2037 tile mapping(s) that point to the same Tile Pool location(s) as other mappings all within the covered area. Writing results are undefined in these tiles unless the data itself is identical - different hardware may write the tiles in different orders. [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: Example tile mapping(s) for the previous message: [ {X=11, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=12, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=13, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=14, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=15, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=16, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=17, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ], [ {X=18, Y=0, Z=0, Subresource=0} → {TilePoolIndex=127} ] [ EXECUTION WARNING #3146133: DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA]
D3D11 WARNING: ID3D11DeviceContext::CopyResource: A Copy or Update is being done on a Tiled Resource that contains at least 11 tile mapping(s) last accessed through a different Tiled Resource or subresource sharing mappings. The TiledResourceBarrier API must be called between switching Tiled Resources like this otherwise rendering results are undefined (including possible device reset on some hardware). Hardware/drivers may not notice that there is a dependency between the resources due to a shared mapping that requires operations to remain ordered. The TiledResourceBarrier API identifies which Tiled Resources before and after the barrier could be sharing mappings so hardware/drivers must complete operations before the barrier before proceeding to operations afterwards. NULL can be specified as the Tiled Resource parameters for before and/or after the barrier to signify that all accesses to Tiled Resources issued before the barrier must complete beforehand and/or all accesses to Tiled Resources issued after the barrier can only start after the barrier. If it is known the GPU is finished with the operations on the previous tile mappings (e.g. the results have been observed) AND old tile mappings have been removed, then this message can be safely ignored since there is no synchronization issue (something the debug layer cannot tell). [ EXECUTION WARNING #3146140: NEED_TO_CALL_TILEDRESOURCEBARRIER]

(2) C++ Capture:
The c++ capture of a frame (including usage of a tiled resource buffer) running fine. But the generated output includes initial data at the DX11Ctx::CreateBuffer() call, which is not allowed on buffers created with D3D11_RESOURCE_MISC_TILED flag. This leads to a crash when starting the compiled Capture Program.

Any ideas on that?

Unfortunately I have not the possibility to upload bigger zip files. If you want I can upload my caputure elsewhere.

Cheers,
René

Hello,
Thanks for your additional question on Nsight Graphics. I’ll connect with the engineering team and get back to you.
Regards,

Hello,
Wanted to get back to you on your question after discussing with the engineering team. Unfortunately, tiled resources are not a fully supported feature within Nsight Graphics for DX11.
Regards,

Hi,
thanks for your reply. I have two last questions on that topic.

(1) Are tiled resources (sparse textures) generally not supported across the platforms(DX11/12, GL) ?

(2) We have various issues with tiled resources at driver driver level for instance:
(a) GPU memory footprint increase of ~700MB when asigning only one default tile 2048 times across a tiled buffer.
(b) Crash inside driver when create an empty tiled pool, which should be resized later.
(c) Random device_removed error when GPU seems to evict pages when physical VRAM usage is high and the runtime uses tiled buffers

(3) Are you generally recommend tiled resources API not to use for dynamic buffering?

I know these questions are out of scope of the Devools forum but it would be great if you can refer me to somebody who can give advice on that topic.

Thanks,
René

Hello,

Wanted to get back to you on what I initially said regarding tiled resources in Nsight Graphics not being supported for DX11. After further discussion internally we determined that we do have support for tiled resources in Nsight Graphics for DX11, however, there is a bug in the feature. I have created a bug for the engineering team to take action on for your issue in a future release.

With regard to the additional questions you asked have you tried this Forum here DirectX, DXR, DirectCompute - NVIDIA Developer Forums? Another possibility is this Driver category here About the Drivers - Linux, Windows, MacOS category.

Regards,
DG-9237

1 Like

Hi there,

thanks for your reply and the good news on the tiled resource feature :-)
I ve placed a post of my additional questions at the driver forum. Hope I get an advice there.

Looking forward to the next release of nsight.

René

I wanted to update this thread that we have made some fixes to our tiled resource support that will be present in an upcoming 2021.4 version.