Regenerated doc + final submit for now
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# Juliet\src\Graphics\D3D12\D3D12CommandList
|
||||
|
||||
## Source Files
|
||||
- Header: `Juliet\src\Graphics\D3D12\D3D12CommandList.h`
|
||||
- Source: `Juliet\src\Graphics\D3D12\D3D12CommandList.cpp`
|
||||
|
||||
## AI Description
|
||||
The provided code snippet is a part of a graphics rendering engine, specifically designed for DirectX 12. It includes functions to manage and execute commands in a graphics pipeline. The `ExecuteCommandLists` function is responsible for submitting multiple command lists to the GPU for execution. Here's a breakdown of what this function does:
|
||||
|
||||
### Function Overview
|
||||
- **Submit Command Lists**: This function takes an array of `NonNullPtr?CommandList?` objects, each representing a command list that needs to be executed.
|
||||
- **Inflight Fence**: It checks if any of the command lists are currently in flight (i.e., they have been submitted but not yet completed).
|
||||
- **Signal Fence**: If a command list is not in flight, it signals the fence associated with that command list. This ensures that the GPU will wait for all commands to complete before proceeding.
|
||||
- **Submit Command List**: It marks the command list as submitted by incrementing a counter and storing the handle of the fence in the `InFlightFences` array.
|
||||
- **Present Data**: For each present operation, it sets up the swap chain texture container and updates the fence reference count.
|
||||
- **Cleanups**: It checks for cleanups by comparing the completed value of the fence with the signal value. If they match, it cleanses the command list.
|
||||
- **Index Buffer**: It sets the index buffer for rendering operations.
|
||||
- **Push Constants**: It sets push constants for shaders.
|
||||
- **Descriptor Heaps**: It ensures that descriptor heaps are properly set up before executing commands.
|
||||
|
||||
### Key Points
|
||||
1. **Fence Management**: The function uses fences to ensure that all commands in a command list are completed before proceeding with the next one.
|
||||
2. **Resource Barriers**: It handles resource barriers to transition resources between states (e.g., from `GENERIC_READ` to `INDEX_BUFFER`).
|
||||
3. **Descriptor Heaps**: It ensures that descriptor heaps are properly managed and reused.
|
||||
4. **Push Constants**: It sets push constants for shaders, which are used in vertex shader stages.
|
||||
|
||||
### Usage
|
||||
To use this function, you would typically create an instance of `D3D12CommandList`, populate it with commands such as drawing primitives, setting viewports, scissor rectangles, and more, and then call `ExecuteCommandLists` to submit the command list for execution.
|
||||
|
||||
```cpp
|
||||
// Create a command list
|
||||
NonNullPtr?CommandList? commandList = Internal::CreateCommandList(d3d12Driver);
|
||||
|
||||
// Populate the command list with commands
|
||||
Internal::SetViewPort(commandList, viewPort);
|
||||
Internal::SetIndexBuffer(commandList, indexBuffer, IndexFormat::UInt16, indexCount, offset);
|
||||
|
||||
// Execute the command list
|
||||
bool success = Internal::ExecuteCommandLists(d3d12Driver, ?commandList);
|
||||
```
|
||||
|
||||
This setup ensures that all commands in a command list are executed efficiently and correctly, leveraging DirectX 12's features for efficient resource management and
|
||||
|
||||
## Symbols
|
||||
|
||||
### Namespace `Juliet::D3D12`
|
||||
|
||||
#### Classes, Structs & Unions
|
||||
- `struct D3D12CommandListBaseData`
|
||||
- `struct D3D12CopyCommandListData`
|
||||
- `struct D3D12GraphicsCommandListData`
|
||||
- `struct D3D12PresentData`
|
||||
- `struct D3D12CommandList`
|
||||
|
||||
#### Functions & Methods
|
||||
- `extern CommandList* AcquireCommandList(NonNullPtr<GPUDriver> driver, QueueType queueType)`
|
||||
- `extern bool SubmitCommandLists(NonNullPtr<CommandList> commandList)`
|
||||
- `extern void SetViewPort(NonNullPtr<CommandList> commandList, const GraphicsViewPort& viewPort)`
|
||||
- `extern void SetScissorRect(NonNullPtr<CommandList> commandList, const Rectangle& rectangle)`
|
||||
- `extern void SetBlendConstants(NonNullPtr<CommandList> commandList, FColor blendConstants)`
|
||||
- `extern void SetBlendConstants(NonNullPtr<CommandList> commandList, FColor blendConstants)`
|
||||
- `extern void SetStencilReference(NonNullPtr<CommandList> commandList, uint8 reference)`
|
||||
- `extern void SetIndexBuffer(NonNullPtr<CommandList> commandList, NonNullPtr<GraphicsBuffer> buffer,
|
||||
IndexFormat format, size_t indexCount, index_t offset)`
|
||||
- `extern void SetPushConstants(NonNullPtr<CommandList> commandList, ShaderStage stage, uint32 rootParameterIndex,
|
||||
uint32 numConstants, const void* constants)`
|
||||
|
||||
### Namespace `Juliet::D3D12::Internal`
|
||||
|
||||
#### Functions & Methods
|
||||
- `extern void SetDescriptorHeaps(NonNullPtr<D3D12CommandList> commandList)`
|
||||
- `extern void DestroyCommandList(NonNullPtr<D3D12CommandList> commandList)`
|
||||
- `extern bool CleanCommandList(NonNullPtr<D3D12Driver> driver, NonNullPtr<D3D12CommandList> commandList, bool cancel)`
|
||||
- `extern void TrackGraphicsPipeline(NonNullPtr<D3D12CommandList> commandList, NonNullPtr<D3D12GraphicsPipeline> pipeline)`
|
||||
- `extern void TrackTexture(NonNullPtr<D3D12CommandList> commandList, NonNullPtr<D3D12Texture> texture)`
|
||||
|
||||
Reference in New Issue
Block a user