Fix RHI texture binding and add pure quad test

This commit is contained in:
2026-03-26 00:47:12 +08:00
parent 76c4c2ace2
commit 9adac63b4c
20 changed files with 711 additions and 53 deletions

View File

@@ -142,6 +142,7 @@ inline DXGI_FORMAT ToD3D12(Format format) {
case Format::R32G32B32A32_Float: return DXGI_FORMAT_R32G32B32A32_FLOAT;
case Format::R16_Float: return DXGI_FORMAT_R16_FLOAT;
case Format::R32_Float: return DXGI_FORMAT_R32_FLOAT;
case Format::R32G32_Float: return DXGI_FORMAT_R32G32_FLOAT;
case Format::D16_UNorm: return DXGI_FORMAT_D16_UNORM;
case Format::D24_UNorm_S8_UInt: return DXGI_FORMAT_D24_UNORM_S8_UINT;
case Format::D32_Float: return DXGI_FORMAT_D32_FLOAT;
@@ -168,6 +169,7 @@ inline Format FromD3D12(DXGI_FORMAT format) {
case DXGI_FORMAT_R32G32B32A32_FLOAT: return Format::R32G32B32A32_Float;
case DXGI_FORMAT_R16_FLOAT: return Format::R16_Float;
case DXGI_FORMAT_R32_FLOAT: return Format::R32_Float;
case DXGI_FORMAT_R32G32_FLOAT: return Format::R32G32_Float;
case DXGI_FORMAT_D16_UNORM: return Format::D16_UNorm;
case DXGI_FORMAT_D24_UNORM_S8_UINT: return Format::D24_UNorm_S8_UInt;
case DXGI_FORMAT_D32_FLOAT: return Format::D32_Float;
@@ -319,4 +321,4 @@ inline D3D12_COMMAND_LIST_TYPE ToD3D12(CommandQueueType type) {
}
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -3,6 +3,7 @@
#include <d3d12.h>
#include <wrl/client.h>
#include <unordered_map>
#include <vector>
#include "../RHIPipelineLayout.h"
#include "D3D12RootSignature.h"
@@ -36,7 +37,8 @@ private:
D3D12Device* m_device;
std::unordered_map<uint32_t, uint32_t> m_registerToRootIndex;
std::vector<D3D12_ROOT_PARAMETER> m_rootParameters;
std::vector<D3D12_DESCRIPTOR_RANGE> m_descriptorRanges;
};
} // namespace RHI
} // namespace XCEngine
} // namespace XCEngine

View File

@@ -19,7 +19,7 @@ public:
bool Initialize(ID3D12Device* device, const D3D12_SAMPLER_DESC& desc);
void Shutdown() override;
D3D12_SAMPLER_DESC GetDesc() const { return m_desc; }
const D3D12_SAMPLER_DESC& GetDesc() const { return m_desc; }
void* GetNativeHandle() override { return &m_desc; }
unsigned int GetID() override { return m_id; }

View File

@@ -20,7 +20,8 @@ public:
bool Initialize(ID3D12Device* device, const D3D12_RESOURCE_DESC& desc, D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON);
bool InitializeFromExisting(ID3D12Resource* resource, bool ownsResource = false);
bool InitializeFromData(ID3D12Device* device, ID3D12GraphicsCommandList* commandList,
const void* pixelData, uint32_t width, uint32_t height, DXGI_FORMAT format, uint32_t rowPitch = 0);
const void* pixelData, uint32_t width, uint32_t height, DXGI_FORMAT format, uint32_t rowPitch = 0,
ComPtr<ID3D12Resource>* uploadBuffer = nullptr);
bool InitializeDepthStencil(ID3D12Device* device, uint32_t width, uint32_t height, DXGI_FORMAT format = DXGI_FORMAT_D24_UNORM_S8_UINT);
void Shutdown() override;

View File

@@ -126,6 +126,9 @@ inline void ToOpenGLFormat(OpenGLFormat fmt, GLint& internalFormat, GLenum& glFo
case OpenGLFormat::RG8:
internalFormat = GL_RG8; glFormat = GL_RG; glType = GL_UNSIGNED_BYTE;
break;
case OpenGLFormat::RG32F:
internalFormat = GL_RG32F; glFormat = GL_RG; glType = GL_FLOAT;
break;
case OpenGLFormat::RGBA8:
internalFormat = GL_RGBA8; glFormat = GL_RGBA; glType = GL_UNSIGNED_BYTE;
break;

View File

@@ -20,6 +20,7 @@ enum class OpenGLTextureType {
enum class OpenGLFormat {
R8,
RG8,
RG32F,
RGBA8,
RGBA16F,
RGBA32F,
@@ -32,6 +33,7 @@ enum class OpenGLFormat {
enum class OpenGLInternalFormat {
R8 = 1,
RG8 = 2,
RG32F = 13,
RGBA8 = 4,
RGBA16F = 11,
RGBA32F = 16,

View File

@@ -314,7 +314,8 @@ enum class Format : uint32_t {
BC6H_UF16,
BC7_UNorm,
R32G32B32A32_UInt,
R32_UInt
R32_UInt,
R32G32_Float
};
enum class ResourceStates : uint32_t {