Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement indirect draw and dispatch. #118

Draft
wants to merge 36 commits into
base: main
Choose a base branch
from
Draft

Implement indirect draw and dispatch. #118

wants to merge 36 commits into from

Conversation

crud89
Copy link
Owner

@crud89 crud89 commented Jan 11, 2024

Describe the pull request

This PR adds support for indirect draw (both indexed and non-indexed) and dispatch. Buffers can be marked with BufferUsage::Indirect to indicate that they store indirect draw commands. New structures (IndirectBatch, IndirectIndexedBatch and IndirectDispatch) have been added, which are not required but recommended to be used to record indirect commands into indirect draw/dispatch buffers, as the command layout is defined by convention.

The Indirect sample shows how to use a compute shader to perform GPU culling to write an indirect buffer, which is then executed on the graphics pipeline to draw simple geometries.

Additionally, some improvements have been made to simplify recording of indirect draw buffers:

  • Buffers now support counter variables (which allows to use AppendStructuredBuffer and similar descriptor types).
  • In Vulkan, unbounded descriptor arrays are no longer required to have pre-defined maximum sizes.
  • Shader reflection has been improved to better differ between structured and byte address buffers (though they are semantically the same in Vulkan most of the times anyway).

Related issues

@crud89 crud89 added Type: Requirement An implementation is required before the next release. Module: Vulkan 🌋 The issue involves the Vulkan backend. Module: DX12 ❎ The issue involves the DX12 backend. labels Jan 11, 2024
@crud89 crud89 added this to the Alpha #04 milestone Jan 11, 2024
@crud89 crud89 self-assigned this Jan 11, 2024
@crud89 crud89 linked an issue Jan 11, 2024 that may be closed by this pull request
@crud89 crud89 modified the milestones: Alpha #04, Alpha #05 Jan 13, 2024
@crud89
Copy link
Owner Author

crud89 commented Jan 13, 2024

Blocking for now, as we wait for SM 6.8 support in DXC to release (and preferably ship with Vulkan SDK). Implementing a workaround for instance indexing in DirectX backend would fragment interfaces too much, with the alternative in form of a SV_StartInstanceLocation vertex shader input waiting to be released.

@crud89 crud89 removed the Type: Requirement An implementation is required before the next release. label Jan 13, 2024
@crud89
Copy link
Owner Author

crud89 commented May 5, 2024

I've merged all upstream changes and did some final tests, however I keep this blocked until a new Vulkan SDK ships with a recent DXC binary supporting Shader Model 6.8.

@crud89 crud89 modified the milestones: Alpha #05, Alpha #04 May 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Module: DX12 ❎ The issue involves the DX12 backend. Module: Vulkan 🌋 The issue involves the Vulkan backend.
Projects
Status: Blocked
Development

Successfully merging this pull request may close these issues.

Support GPU-based rendering (draw indirect).
1 participant