refactor(rhi): let pipeline layouts own set metadata

This commit is contained in:
2026-03-26 12:40:49 +08:00
parent 36d2f479cd
commit 476a56724f
6 changed files with 270 additions and 26 deletions

View File

@@ -47,6 +47,8 @@ private:
uint32_t m_shaderResourceTableRootIndex = UINT32_MAX;
uint32_t m_unorderedAccessTableRootIndex = UINT32_MAX;
uint32_t m_samplerTableRootIndex = UINT32_MAX;
std::vector<DescriptorSetLayoutDesc> m_setLayouts;
std::vector<std::vector<DescriptorSetLayoutBinding>> m_setLayoutBindings;
std::vector<D3D12_ROOT_PARAMETER> m_rootParameters;
std::vector<D3D12_DESCRIPTOR_RANGE> m_descriptorRanges;
};

View File

@@ -1,5 +1,7 @@
#pragma once
#include <vector>
#include "../RHIPipelineLayout.h"
namespace XCEngine {
@@ -18,6 +20,8 @@ public:
private:
RHIPipelineLayoutDesc m_desc = {};
std::vector<DescriptorSetLayoutDesc> m_setLayouts;
std::vector<std::vector<DescriptorSetLayoutBinding>> m_setLayoutBindings;
bool m_initialized = false;
};

View File

@@ -365,7 +365,21 @@ struct RHIRenderPassDesc {
bool hasDepthStencil = false;
};
struct DescriptorSetLayoutBinding {
uint32_t binding = 0;
uint32_t type = 0;
uint32_t count = 0;
uint32_t visibility = 0;
};
struct DescriptorSetLayoutDesc {
DescriptorSetLayoutBinding* bindings = nullptr;
uint32_t bindingCount = 0;
};
struct RHIPipelineLayoutDesc {
DescriptorSetLayoutDesc* setLayouts = nullptr;
uint32_t setLayoutCount = 0;
uint32_t constantBufferCount = 0;
uint32_t textureCount = 0;
uint32_t samplerCount = 0;
@@ -383,18 +397,6 @@ struct ResourceViewDesc {
uint32_t structureByteStride = 0;
};
struct DescriptorSetLayoutBinding {
uint32_t binding = 0;
uint32_t type = 0;
uint32_t count = 0;
uint32_t visibility = 0;
};
struct DescriptorSetLayoutDesc {
DescriptorSetLayoutBinding* bindings = nullptr;
uint32_t bindingCount = 0;
};
struct DescriptorPoolDesc {
void* device = nullptr;
DescriptorHeapType type = DescriptorHeapType::CBV_SRV_UAV;