Fix CreateDescriptorTable: pass descriptor ranges array instead of using static

This commit is contained in:
2026-03-17 01:03:13 +08:00
parent 988f94eb29
commit 73627f62f4
2 changed files with 4 additions and 11 deletions

View File

@@ -35,7 +35,7 @@ public:
static D3D12_ROOT_PARAMETER CreateSRV(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 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 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_ROOT_PARAMETER CreateDescriptorTable(uint32_t numRanges, const D3D12_DESCRIPTOR_RANGE* ranges, ShaderVisibility visibility = ShaderVisibility::All);
static D3D12_STATIC_SAMPLER_DESC CreateStaticSampler(uint32_t shaderRegister, const D3D12_SAMPLER_DESC& desc, ShaderVisibility visibility = ShaderVisibility::Pixel); static D3D12_STATIC_SAMPLER_DESC CreateStaticSampler(uint32_t shaderRegister, const D3D12_SAMPLER_DESC& desc, ShaderVisibility visibility = ShaderVisibility::Pixel);

View File

@@ -91,19 +91,12 @@ D3D12_ROOT_PARAMETER D3D12RootSignature::Create32BitConstants(uint32_t shaderReg
return param; return param;
} }
D3D12_ROOT_PARAMETER D3D12RootSignature::CreateDescriptorTable(uint32_t shaderRegister, uint32_t numDescriptors, D3D12_DESCRIPTOR_RANGE_TYPE rangeType, ShaderVisibility visibility, uint32_t registerSpace) { D3D12_ROOT_PARAMETER D3D12RootSignature::CreateDescriptorTable(uint32_t numRanges, const D3D12_DESCRIPTOR_RANGE* ranges, ShaderVisibility visibility) {
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 = {}; D3D12_ROOT_PARAMETER param = {};
param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE; param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
param.ShaderVisibility = ToD3D12(visibility); param.ShaderVisibility = ToD3D12(visibility);
param.DescriptorTable.NumDescriptorRanges = 1; param.DescriptorTable.NumDescriptorRanges = numRanges;
param.DescriptorTable.pDescriptorRanges = ⦥ param.DescriptorTable.pDescriptorRanges = ranges;
return param; return param;
} }