protonscr

Missing indirect rendering features

vkd3dclosed
HansKristian-Work/vkd3d-proton#910 · opened 2021-11-17 by K0bin · updated 2022-11-06 · 14 comments · github
KK0bin 2021-11-17 github

Halo Infinite appears to use D3D12 indirect rendering features that aren't supported by Vulkan (as far as I know).

7eb4:fixme:d3d12_command_list_ExecuteIndirect: Ignoring unhandled argument type 0x6.
7eb4:fixme:d3d12_command_list_ExecuteIndirect: Ignoring unhandled argument type 0x4.

Argument type 6 is D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW.
Argument type 4 is D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW.

FFullbrik 2021-11-18 github

Is there a way to improperly implement these until vulkan has support? It might make games like halo work, even if it slows down the game a bit.

Rrupansh 2021-11-19 github
Ddoitsujin maintainer 2021-11-19 github

What exactly is that link supposed to help with? We do support simple indirect draws and dispatches, as well as indirect multidraw with indirect draw count, but not stuff like indirect vertex buffers because there is no corresponding Vulkan feature other than an Nvidia vendor extension.

Rrupansh 2021-11-19 github

indirect vertex buffers

Ah my bad i misunderstood the initial comment! I thought indirect rendering wasn't supported.

TTheEssem 2021-12-04 github

For anyone who missed it: #923 has a prototype for this based on the Nvidia vendor extension.

Hhugeblank 2021-12-04 github

Is there any information regarding AMD support?

MM-Ro 2021-12-04 github

For anyone who missed it: #923 has a prototype for this based on the Nvidia vendor extension.

For the people coming from the Halo Infinite issue thread - This doesn't appear to help with Halo Infinite yet. Crashes immediately after the initial loading spinner.

Nvidia 1080Ti, 470.74 drivers (stable, not vulkan beta)

vkd3d.log

game crashlog

TTheEssem 2022-01-28 github

Any idea if the newly-released Vulkan 1.3 has anything that could help with this?

Hhugeblank 2022-01-28 github

Any idea if the newly-released Vulkan 1.3 has anything that could help with this?

Probably not. I don't see any mention in the api docs of "indirect vertex buffers" like the above conversation suggests has been missing from Vulkan. Someone more proficient in reading specifications would have to confirm this, though.

See:

KK0bin 2022-01-28 github

Vulkan 1.3 doesn't have any new features or extensions. It just moves existing extensions into the core API. VKD3D-Proton already uses many of those extensions so it pretty much already uses Vulkan 1.3.

It can be implemented using VK_NV_device_generated_commands and there's a WIP implementation using that in PR 923. It doesn't really work yet due to driver issues though.

DDistantThunder 2022-05-10 github

Hi, just to know:

  • Adds an optional new indirect ray tracing dispatch command,
    flink:vkCmdTraceRaysIndirect2KHR, which sources the shader binding table
    parameters as well as the dispatch dimensions from the device.
    The <<features-rayTracingPipelineTraceRaysIndirect2,
    pname:rayTracingPipelineTraceRaysIndirect2>> feature indicates whether
    this functionality is supported.

Is this related?

KK0bin 2022-05-10 github

Not to this issue but it's required for VKD3D-Proton to be able to implement DirectX Ray Tracing 1.1.

DDistantThunder 2022-05-10 github

Ah yes , thank you. Not indirect rendering, sorry I misread. So stuff like CP2077 will start working again hopefully?

KK0bin 2022-11-06 github

This is implemented in 2.7.

Nothing extracted yet.