Add static helper methods to D3D12RootSignature and D3D12PipelineState

This commit is contained in:
2026-03-17 00:57:35 +08:00
parent 7874033379
commit 988f94eb29
9 changed files with 180 additions and 331 deletions

View File

@@ -39,5 +39,91 @@ void D3D12RootSignature::Shutdown() {
m_rootSignature.Reset();
}
D3D12_ROOT_SIGNATURE_DESC D3D12RootSignature::CreateDesc(
D3D12_ROOT_PARAMETER* parameters,
uint32_t parameterCount,
D3D12_STATIC_SAMPLER_DESC* samplers,
uint32_t samplerCount,
D3D12_ROOT_SIGNATURE_FLAGS flags) {
D3D12_ROOT_SIGNATURE_DESC desc = {};
desc.NumParameters = parameterCount;
desc.pParameters = parameters;
desc.NumStaticSamplers = samplerCount;
desc.pStaticSamplers = samplers;
desc.Flags = flags;
return desc;
}
D3D12_ROOT_PARAMETER D3D12RootSignature::CreateCBV(uint32_t shaderRegister, ShaderVisibility visibility, uint32_t registerSpace) {
D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
param.ShaderVisibility = ToD3D12(visibility);
param.Descriptor.RegisterSpace = registerSpace;
param.Descriptor.ShaderRegister = shaderRegister;
return param;
}
D3D12_ROOT_PARAMETER D3D12RootSignature::CreateSRV(uint32_t shaderRegister, ShaderVisibility visibility, uint32_t registerSpace) {
D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;
param.ShaderVisibility = ToD3D12(visibility);
param.Descriptor.RegisterSpace = registerSpace;
param.Descriptor.ShaderRegister = shaderRegister;
return param;
}
D3D12_ROOT_PARAMETER D3D12RootSignature::CreateUAV(uint32_t shaderRegister, ShaderVisibility visibility, uint32_t registerSpace) {
D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;
param.ShaderVisibility = ToD3D12(visibility);
param.Descriptor.RegisterSpace = registerSpace;
param.Descriptor.ShaderRegister = shaderRegister;
return param;
}
D3D12_ROOT_PARAMETER D3D12RootSignature::Create32BitConstants(uint32_t shaderRegister, uint32_t num32BitValues, ShaderVisibility visibility, uint32_t registerSpace) {
D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
param.ShaderVisibility = ToD3D12(visibility);
param.Constants.RegisterSpace = registerSpace;
param.Constants.ShaderRegister = shaderRegister;
param.Constants.Num32BitValues = num32BitValues;
return param;
}
D3D12_ROOT_PARAMETER D3D12RootSignature::CreateDescriptorTable(uint32_t shaderRegister, uint32_t numDescriptors, D3D12_DESCRIPTOR_RANGE_TYPE rangeType, ShaderVisibility visibility, uint32_t registerSpace) {
static D3D12_DESCRIPTOR_RANGE range;
range.RangeType = rangeType;
range.NumDescriptors = numDescriptors;
range.BaseShaderRegister = shaderRegister;
range.RegisterSpace = registerSpace;
range.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;
D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
param.ShaderVisibility = ToD3D12(visibility);
param.DescriptorTable.NumDescriptorRanges = 1;
param.DescriptorTable.pDescriptorRanges = ⦥
return param;
}
D3D12_STATIC_SAMPLER_DESC D3D12RootSignature::CreateStaticSampler(uint32_t shaderRegister, const D3D12_SAMPLER_DESC& desc, ShaderVisibility visibility) {
D3D12_STATIC_SAMPLER_DESC samplerDesc = {};
samplerDesc.Filter = desc.Filter;
samplerDesc.AddressU = desc.AddressU;
samplerDesc.AddressV = desc.AddressV;
samplerDesc.AddressW = desc.AddressW;
samplerDesc.MipLODBias = desc.MipLODBias;
samplerDesc.MaxAnisotropy = desc.MaxAnisotropy;
samplerDesc.ComparisonFunc = desc.ComparisonFunc;
samplerDesc.BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
samplerDesc.MinLOD = desc.MinLOD;
samplerDesc.MaxLOD = desc.MaxLOD;
samplerDesc.RegisterSpace = 0;
samplerDesc.ShaderRegister = shaderRegister;
samplerDesc.ShaderVisibility = ToD3D12(visibility);
return samplerDesc;
}
} // namespace RHI
} // namespace XCEngine