diff --git a/tests/D3D12/main.cpp b/tests/D3D12/main.cpp index be8c95a9..8be40e59 100644 --- a/tests/D3D12/main.cpp +++ b/tests/D3D12/main.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include "XCEngine/RHI/D3D12/D3D12Shader.h" #include #include #include @@ -69,6 +69,9 @@ XCEngine::RHI::D3D12CommandAllocator gCommandAllocator; XCEngine::RHI::D3D12CommandList gCommandList; XCEngine::RHI::D3D12RootSignature gRootSignature; XCEngine::RHI::D3D12PipelineState gPipelineState; +XCEngine::RHI::D3D12Shader gVertexShader; +XCEngine::RHI::D3D12Shader gGeometryShader; +XCEngine::RHI::D3D12Shader gPixelShader; // 同步对象 XCEngine::RHI::D3D12Fence gFence; @@ -286,31 +289,6 @@ ID3D12RootSignature* InitRootSignature() { return gRootSignature.GetRootSignature(); } -//================================================================================= -// 着色器加载函数 -// 从.hlsl文件编译着色器 (VS/GS/PS) -//================================================================================= -void CreateShaderFromFile( - LPCTSTR inShaderFilePath, - const char* inMainFunctionName, - const char* inTarget, - D3D12_SHADER_BYTECODE* inShader) { - ID3DBlob* shaderBuffer = nullptr; - ID3DBlob* errorBuffer = nullptr; - HRESULT hResult = D3DCompileFromFile(inShaderFilePath, nullptr, nullptr, - inMainFunctionName, inTarget, D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION, - 0, &shaderBuffer, &errorBuffer); - if (FAILED(hResult)) { - char szLog[1024] = { 0 }; - strcpy_s(szLog, (char*)errorBuffer->GetBufferPointer()); - Log("CreateShaderFromFile error : [%s][%s]:[%s]\n", inMainFunctionName, inTarget, szLog); - errorBuffer->Release(); - return; - } - inShader->pShaderBytecode = shaderBuffer->GetBufferPointer(); - inShader->BytecodeLength = shaderBuffer->GetBufferSize(); -} - //================================================================================= // 常量缓冲 (Constant Buffer) 创建与更新 // UPLOAD堆: CPU可写, GPU可读 @@ -850,11 +828,10 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine staticMeshComponent.InitFromFile(gCommandList.GetCommandList(), "Res/Model/Sphere.lhsm"); ID3D12RootSignature* rootSignature = InitRootSignature(); - D3D12_SHADER_BYTECODE vs, gs, ps; - CreateShaderFromFile(L"Res/Shader/gs.hlsl", "MainVS", "vs_5_1", &vs); - CreateShaderFromFile(L"Res/Shader/gs.hlsl", "MainGS", "gs_5_1", &gs); - CreateShaderFromFile(L"Res/Shader/gs.hlsl", "MainPS", "ps_5_1", &ps); - ID3D12PipelineState* pso = CreatePSO(rootSignature, vs, ps, gs); + gVertexShader.CompileFromFile(L"Res/Shader/gs.hlsl", "MainVS", "vs_5_1"); + gGeometryShader.CompileFromFile(L"Res/Shader/gs.hlsl", "MainGS", "gs_5_1"); + gPixelShader.CompileFromFile(L"Res/Shader/gs.hlsl", "MainPS", "ps_5_1"); + ID3D12PipelineState* pso = CreatePSO(rootSignature, gVertexShader.GetBytecode(), gPixelShader.GetBytecode(), gGeometryShader.GetBytecode()); ID3D12Resource* cb = CreateConstantBufferObject(65536); DirectX::XMMATRIX projectionMatrix = DirectX::XMMatrixPerspectiveFovLH(