- Rename D3D12Enum.h to D3D12Enums.h for naming consistency - Fix OpenGL unit test GLAD initialization by using gladLoadGL() instead of gladLoadGLLoader(wglGetProcAddress) for fallback support - Migrate remaining tests to use gtest_discover_tests for granular test discovery (math, core, containers, memory, threading, debug, components, scene, resources, input, opengl) - Remove obsolete TEST_RESOURCES_DIR and copy_directory commands from OpenGL unit test CMakeLists (minimal/Res doesn't exist) - Update TEST_SPEC.md with performance metrics and per-module build/test commands for faster development workflow - Update CMake path references to use lowercase paths
51 lines
2.3 KiB
C++
51 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <d3d12.h>
|
|
#include <wrl/client.h>
|
|
#include <vector>
|
|
|
|
#include "../RHIEnums.h"
|
|
#include "D3D12Enums.h"
|
|
|
|
using Microsoft::WRL::ComPtr;
|
|
|
|
namespace XCEngine {
|
|
namespace RHI {
|
|
|
|
class D3D12RootSignature {
|
|
public:
|
|
D3D12RootSignature();
|
|
~D3D12RootSignature();
|
|
|
|
bool Initialize(ID3D12Device* device, const D3D12_ROOT_SIGNATURE_DESC& desc);
|
|
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 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_SAMPLER_DESC CreateSamplerDesc(FilterMode filter, TextureAddressMode address, float maxLOD = D3D12_FLOAT32_MAX);
|
|
static D3D12_DESCRIPTOR_RANGE CreateDescriptorRange(D3D12_DESCRIPTOR_RANGE_TYPE type, uint32_t baseShaderRegister, uint32_t numDescriptors, uint32_t registerSpace = 0);
|
|
|
|
private:
|
|
ComPtr<ID3D12RootSignature> m_rootSignature;
|
|
uint32_t m_parameterCount = 0;
|
|
};
|
|
|
|
} // namespace RHI
|
|
} // namespace XCEngine
|