Saturday, December 29, 2018

Studying D3D12HelloTriangle and D3D12HelloBundles desktop project

D3D12HelloTriangle






Difference from D3D12HelloWorld

Took diff with WinMerge to find difference.

D3D12HelloTriangle class has several new members
CD3DX12_VIEWPORT m_viewport;
CD3DX12_RECT m_scissorRect;
ComPtr<ID3D12RootSignature> m_rootSignature;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12Resource> m_vertexBuffer;
D3D12_VERTEX_BUFFER_VIEW m_vertexBufferView;
New struct declaration of triangle vertex
struct Vertex {
    XMFLOAT3 position;
    XMFLOAT4 color;
};


D3D12HelloTriangle.cpp objects and their relations

m_rootSignature

rootSignature specifies shader input parameters such as vertex buffer location or shader constants.

But vertex buffer is specified by m_commandList->IASetVertexBuffers() and shader does not use shader constants.

m_rootSignature is referenced by pipeline state object and pso uses it internally.

m_commandList also referenced m_rootSignature but it seems it is not absolute necessary on this sample.

m_viewPort

specifies viewport size (used to scale images to fit client area)

m_scissorRect

this parameter is used for “scissoring” : scissors triangles which crosses window edge to prevent corruption of geometry shape.

m_pipelineState

contains rendering pipeline parameters such as vertex shader, pixel shader, alpha blending, render target format and m_rootSignature

m_vertexBuffer

contains triangle vertices position and vertex colors data.

data is placed on GPU memory.

m_vertexBufferView

struct to store GPU memory address of vertex buffer and its size info.

used by m_commandList

Shader code
 
Shader is a program that runs on GPU.

D3D12HelloTriangle sample contains shaders.hlsl

shaders.hlsl contains vertex shader VSMain() and pixel shader PSMain().

VSMain() processes one vertex, input vertex position and color from arg, and send it to subsequent stage. VSMain() is called 3 times.

PSMain() is called on every pixel of triangle with VSMain() return value and calculate pixel color.

Shader program is compiled to the executable code on D3D12HelloTriangle::OnInit() by calling D3DCompileFromFile() and those shader binaries is passed to pipeline state object.




D3D12HelloBundles sample



DirectX-Graphics-Samples-master\Samples\Desktop\D3D12HelloWorld\src\HelloBundles

Shows efficient triangle drawing using bundles.


Difference from HelloTriangle sample

 
D3D12HelloBundles.h

ComPtr<ID3D12CommandAllocator> m_bundleAllocator;

ComPtr<ID3D12GraphicsCommandList> m_bundle;

D3D12HelloBundles.cpp

m_bundleAllocator created as COMMAND_LIST_TYPE_BUNDLE

m_bundle command list is created as COMMAND_LIST_TYPE_BUNDLE and  record pipeline setup and draw commands

m_commandList->ExecuteBundle() to execute recorded pipeline setup and draw command


No comments:

Post a Comment