rendering: add vulkan hlsl shader compilation

This commit is contained in:
2026-04-06 17:28:59 +08:00
parent b68e514154
commit 4afeb19d25
3 changed files with 214 additions and 17 deletions

View File

@@ -55,6 +55,54 @@ TEST_F(VulkanGraphicsFixture, CreateShaderFromGlslFileProducesValidVertexShader)
delete shader;
}
TEST_F(VulkanGraphicsFixture, CreateShaderFromHlslSourceProducesValidVertexShader) {
static const char* vertexSource = R"(
float4 MainVS(uint vertexId : SV_VertexID) : SV_POSITION
{
const float x = (vertexId == 1u) ? 0.5f : -0.5f;
const float y = (vertexId == 2u) ? -0.5f : 0.5f;
return float4(x, y, 0.0f, 1.0f);
}
)";
ShaderCompileDesc shaderDesc = {};
shaderDesc.sourceLanguage = ShaderLanguage::HLSL;
shaderDesc.entryPoint = L"MainVS";
shaderDesc.profile = L"vs_5_0";
shaderDesc.source.assign(vertexSource, vertexSource + std::strlen(vertexSource));
RHIShader* shader = m_device->CreateShader(shaderDesc);
ASSERT_NE(shader, nullptr);
EXPECT_TRUE(shader->IsValid());
EXPECT_EQ(shader->GetType(), ShaderType::Vertex);
EXPECT_NE(shader->GetNativeHandle(), nullptr);
shader->Shutdown();
delete shader;
}
TEST_F(VulkanGraphicsFixture, CreateShaderFromHlslSourceProducesValidFragmentShader) {
static const char* fragmentSource = R"(
float4 MainPS() : SV_TARGET
{
return float4(1.0f, 0.0f, 0.0f, 1.0f);
}
)";
ShaderCompileDesc shaderDesc = {};
shaderDesc.sourceLanguage = ShaderLanguage::HLSL;
shaderDesc.entryPoint = L"MainPS";
shaderDesc.profile = L"ps_5_0";
shaderDesc.source.assign(fragmentSource, fragmentSource + std::strlen(fragmentSource));
RHIShader* shader = m_device->CreateShader(shaderDesc);
ASSERT_NE(shader, nullptr);
EXPECT_TRUE(shader->IsValid());
EXPECT_EQ(shader->GetType(), ShaderType::Fragment);
EXPECT_NE(shader->GetNativeHandle(), nullptr);
shader->Shutdown();
delete shader;
}
TEST_F(VulkanGraphicsFixture, CreateShaderFromGlslSourceInfersComputeShader) {
RHIShader* shader = CreateWriteRedComputeShaderFromGlsl();
ASSERT_NE(shader, nullptr);