@ZeroFault
Been a while since this post, but i did try.. I downloaded some pre-compiled thing of this demo that was "only" 25GB or so, but i think its not really working cos when running it (without UINT64_ATOMIC) everything is just a huge blue ocean, with a few spots of shrubbery here and there, and the bonfire at the "players" feet, so i kinda gave up on that.
I attach a experimental version of nvapi with this feature enabled, so you can test and see what crashes when the game tries to use UINT64_ATOMIC.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:fixme:vkd3d_dxbc_compiler_emit_sync: Unhandled sync flags 0x8.
0194:err:vkd3d_memory_allocator_flush_clears_locked: Failed to submit command buffer, vr -4.
0194:warn:d3d12_device_mark_as_removed: Device 000000001f520030 is lost (reason 0x80004005, "Failed to execute pending memory clears.
").
0194:err:vkd3d_memory_allocator_flush_clears_locked: Failed to submit command buffer, vr -4.
0194:warn:d3d12_device_mark_as_removed: Device 000000001f520030 is lost (reason 0x80004005, "Failed to execute pending memory clears.
").
I made a small example project in UE5 to demonstrate the SM6.6 atomics for Nanite.
link to download
I tested this on native dx12 and it works, but when running with vkd3d-proton it reaches an assert in cfg_structurizer.cpp and crashes on line 3466
You need VKD3D_FEATURE_LEVEL=12_1 and pass the arguments -sm6 -novendordevice to the executable in order to force it to use the SM6 atomics.
@ZeroFault Hi there. I believe this should work correctly now. If you want to retest.
Yes, it does seem to be working now. Thank you
The new UE5 tech demo seems to require uint 64 bit image atomics in shaders for its new nanite feature.
Tested on Windows with a RTX 2080 ti
Checking the source code, it uses NVAPI and AGS to detect support for this. I don't think vkd3d supports these extended opcodes.
NVAPI
NvAPI_D3D12_IsNvShaderExtnOpCodeSupported(GetAdapter().GetD3DDevice(), NV_EXTN_OP_UINT64_ATOMIC, &GRHISupportsAtomicUInt64);AMD AGS
AGS_DX12_EXTENSION_INTRINSIC_ATOMIC_U64andAGS_DX12_EXTENSION_INTRINSIC_UAV_BIND_SLOTThe demo disables rendering all meshes that uses nanite if you don't support it. However, I am still getting a hang a couple seconds after finishing the loading the demo that I believe might be unrelated the image atomics. I dumped the shaders for the demo and seen some spir-v validation errors
error: line 1225: block <ID> 3337[%3337] exits the loop headed by <ID> 3330[%3330], but not via a structured exit %3337 = OpLabelerror: line 2204: Expected arithmetic operands to have the same dimension as Result Type: ISub operand index 2 %1748 = OpISub %v2uint %uint_31 %1746Shaders with validation errors:
shaders.zip
I haven't been able to get apitrace to work on this yet
vkd3d.log