Add static helper methods to D3D12RootSignature and D3D12PipelineState
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <d3d12.h>
|
||||
#include <dxgi1_4.h>
|
||||
#include <wrl/client.h>
|
||||
|
||||
#include "../Enums.h"
|
||||
#include "D3D12Enum.h"
|
||||
|
||||
using Microsoft::WRL::ComPtr;
|
||||
@@ -23,6 +25,27 @@ public:
|
||||
void* GetNativeHandle() const { return m_pipelineState.Get(); }
|
||||
PipelineType GetType() const { return PipelineType::Graphics; }
|
||||
|
||||
static D3D12_GRAPHICS_PIPELINE_STATE_DESC CreateDesc(
|
||||
ID3D12RootSignature* rootSignature,
|
||||
const D3D12_SHADER_BYTECODE& vs,
|
||||
const D3D12_SHADER_BYTECODE& ps,
|
||||
const D3D12_SHADER_BYTECODE& gs,
|
||||
uint32_t inputElementCount,
|
||||
const D3D12_INPUT_ELEMENT_DESC* inputElements);
|
||||
|
||||
static D3D12_INPUT_ELEMENT_DESC CreateInputElement(
|
||||
const char* semanticName,
|
||||
uint32_t semanticIndex,
|
||||
Format format,
|
||||
uint32_t inputSlot,
|
||||
uint32_t alignedByteOffset);
|
||||
|
||||
static D3D12_INPUT_ELEMENT_DESC CreateInputElement(
|
||||
const char* semanticName,
|
||||
uint32_t semanticIndex,
|
||||
Format format,
|
||||
uint32_t inputSlot);
|
||||
|
||||
private:
|
||||
ComPtr<ID3D12PipelineState> m_pipelineState;
|
||||
};
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <d3d12.h>
|
||||
#include <wrl/client.h>
|
||||
#include <vector>
|
||||
|
||||
#include "../Enums.h"
|
||||
#include "D3D12Enum.h"
|
||||
@@ -20,10 +21,24 @@ public:
|
||||
void Shutdown();
|
||||
|
||||
ID3D12RootSignature* GetRootSignature() const { return m_rootSignature.Get(); }
|
||||
|
||||
void* GetNativeHandle() const { return m_rootSignature.Get(); }
|
||||
uint32_t GetParameterCount() const { return m_parameterCount; }
|
||||
|
||||
static D3D12_ROOT_SIGNATURE_DESC CreateDesc(
|
||||
D3D12_ROOT_PARAMETER* parameters,
|
||||
uint32_t parameterCount,
|
||||
D3D12_STATIC_SAMPLER_DESC* samplers = nullptr,
|
||||
uint32_t samplerCount = 0,
|
||||
D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT);
|
||||
|
||||
static D3D12_ROOT_PARAMETER CreateCBV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
static D3D12_ROOT_PARAMETER CreateSRV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
static D3D12_ROOT_PARAMETER CreateUAV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
static D3D12_ROOT_PARAMETER Create32BitConstants(uint32_t shaderRegister, uint32_t num32BitValues, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
static D3D12_ROOT_PARAMETER CreateDescriptorTable(uint32_t shaderRegister, uint32_t numDescriptors, D3D12_DESCRIPTOR_RANGE_TYPE rangeType, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
|
||||
static D3D12_STATIC_SAMPLER_DESC CreateStaticSampler(uint32_t shaderRegister, const D3D12_SAMPLER_DESC& desc, ShaderVisibility visibility = ShaderVisibility::Pixel);
|
||||
|
||||
private:
|
||||
ComPtr<ID3D12RootSignature> m_rootSignature;
|
||||
uint32_t m_parameterCount = 0;
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <d3d12.h>
|
||||
#include <dxgi1_4.h>
|
||||
#include "../Enums.h"
|
||||
#include "D3D12Enum.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
class PipelineStateBuilder {
|
||||
public:
|
||||
PipelineStateBuilder();
|
||||
|
||||
PipelineStateBuilder& SetRootSignature(ID3D12RootSignature* rootSignature);
|
||||
PipelineStateBuilder& SetVertexShader(const D3D12_SHADER_BYTECODE& shader);
|
||||
PipelineStateBuilder& SetPixelShader(const D3D12_SHADER_BYTECODE& shader);
|
||||
PipelineStateBuilder& SetGeometryShader(const D3D12_SHADER_BYTECODE& shader);
|
||||
|
||||
PipelineStateBuilder& SetInputLayout(uint32_t numElements, const D3D12_INPUT_ELEMENT_DESC* elements);
|
||||
PipelineStateBuilder& SetPrimitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE topologyType);
|
||||
|
||||
PipelineStateBuilder& SetRenderTargetFormat(Format format);
|
||||
PipelineStateBuilder& SetRenderTargetFormats(uint32_t count, const Format* formats);
|
||||
PipelineStateBuilder& SetDepthStencilFormat(Format format);
|
||||
|
||||
PipelineStateBuilder& SetSampleDesc(uint32_t count, uint32_t quality);
|
||||
|
||||
PipelineStateBuilder& SetFillMode(FillMode mode);
|
||||
PipelineStateBuilder& SetCullMode(CullMode mode);
|
||||
PipelineStateBuilder& SetDepthClipEnable(bool enable);
|
||||
|
||||
PipelineStateBuilder& SetDepthEnable(bool enable);
|
||||
PipelineStateBuilder& SetDepthWriteMask(D3D12_DEPTH_WRITE_MASK writeMask);
|
||||
PipelineStateBuilder& SetDepthFunc(ComparisonFunc func);
|
||||
|
||||
PipelineStateBuilder& SetStencilEnable(bool enable);
|
||||
PipelineStateBuilder& SetFrontFaceStencilOp(D3D12_STENCIL_OP failOp, D3D12_STENCIL_OP depthFailOp, D3D12_STENCIL_OP passOp, ComparisonFunc func);
|
||||
PipelineStateBuilder& SetBackFaceStencilOp(D3D12_STENCIL_OP failOp, D3D12_STENCIL_OP depthFailOp, D3D12_STENCIL_OP passOp, ComparisonFunc func);
|
||||
|
||||
PipelineStateBuilder& SetBlendEnable(bool enable);
|
||||
PipelineStateBuilder& SetBlendFactor(BlendFactor srcBlend, BlendFactor dstBlend, BlendOp blendOp);
|
||||
PipelineStateBuilder& SetAlphaBlendFactor(BlendFactor srcBlendAlpha, BlendFactor dstBlendAlpha, BlendOp blendOpAlpha);
|
||||
PipelineStateBuilder& SetColorWriteMask(ColorWriteMask mask);
|
||||
|
||||
D3D12_GRAPHICS_PIPELINE_STATE_DESC Build();
|
||||
|
||||
private:
|
||||
D3D12_GRAPHICS_PIPELINE_STATE_DESC m_desc;
|
||||
};
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
@@ -1,30 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <d3d12.h>
|
||||
#include <vector>
|
||||
|
||||
#include "../Enums.h"
|
||||
#include "D3D12Enum.h"
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
|
||||
class RootSignatureBuilder {
|
||||
public:
|
||||
RootSignatureBuilder();
|
||||
|
||||
RootSignatureBuilder& AddCBV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
RootSignatureBuilder& AddSRV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
RootSignatureBuilder& AddUAV(uint32_t shaderRegister, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
RootSignatureBuilder& Add32BitConstants(uint32_t shaderRegister, uint32_t num32BitValues, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
RootSignatureBuilder& AddDescriptorTable(uint32_t shaderRegister, uint32_t numDescriptors, D3D12_DESCRIPTOR_RANGE_TYPE rangeType, ShaderVisibility visibility = ShaderVisibility::All, uint32_t registerSpace = 0);
|
||||
|
||||
D3D12_ROOT_SIGNATURE_DESC Build();
|
||||
|
||||
private:
|
||||
std::vector<D3D12_ROOT_PARAMETER> m_parameters;
|
||||
std::vector<std::vector<D3D12_DESCRIPTOR_RANGE>> m_descriptorRanges;
|
||||
};
|
||||
|
||||
} // namespace RHI
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user