Formalize gaussian splat prepare-order pass
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Core/Asset/ResourceTypes.h>
|
||||
#include <XCEngine/Core/Containers/Array.h>
|
||||
#include <XCEngine/RHI/RHITypes.h>
|
||||
#include "Rendering/Internal/ShaderVariantUtils.h"
|
||||
|
||||
using namespace XCEngine::Resources;
|
||||
using namespace XCEngine::Containers;
|
||||
@@ -77,6 +79,69 @@ TEST(Shader, AddGetAttributes) {
|
||||
EXPECT_EQ(attributes[0].name, "aPosition");
|
||||
}
|
||||
|
||||
TEST(Shader, StoresBackendCompiledBinariesPerBackend) {
|
||||
ShaderStageVariant variant = {};
|
||||
variant.stage = ShaderType::Fragment;
|
||||
variant.language = ShaderLanguage::HLSL;
|
||||
variant.backend = ShaderBackend::Generic;
|
||||
|
||||
Array<XCEngine::Core::uint8> d3d12Payload;
|
||||
d3d12Payload.PushBack(0x01);
|
||||
d3d12Payload.PushBack(0x02);
|
||||
variant.SetCompiledBinaryForBackend(ShaderBackend::D3D12, d3d12Payload);
|
||||
|
||||
Array<XCEngine::Core::uint8> vulkanPayload;
|
||||
vulkanPayload.PushBack(0x03);
|
||||
vulkanPayload.PushBack(0x04);
|
||||
vulkanPayload.PushBack(0x05);
|
||||
variant.SetCompiledBinaryForBackend(ShaderBackend::Vulkan, vulkanPayload);
|
||||
|
||||
const Array<XCEngine::Core::uint8>* d3d12Binary =
|
||||
variant.GetCompiledBinaryForBackend(ShaderBackend::D3D12);
|
||||
ASSERT_NE(d3d12Binary, nullptr);
|
||||
ASSERT_EQ(d3d12Binary->Size(), 2u);
|
||||
EXPECT_EQ((*d3d12Binary)[1], 0x02);
|
||||
|
||||
const Array<XCEngine::Core::uint8>* vulkanBinary =
|
||||
variant.GetCompiledBinaryForBackend(ShaderBackend::Vulkan);
|
||||
ASSERT_NE(vulkanBinary, nullptr);
|
||||
ASSERT_EQ(vulkanBinary->Size(), 3u);
|
||||
EXPECT_EQ((*vulkanBinary)[2], 0x05);
|
||||
|
||||
EXPECT_EQ(variant.GetCompiledBinaryForBackend(ShaderBackend::OpenGL), nullptr);
|
||||
}
|
||||
|
||||
TEST(Shader, ApplyShaderStageVariantCarriesMatchedBackendCompiledBinary) {
|
||||
ShaderPass pass = {};
|
||||
pass.name = "ForwardLit";
|
||||
|
||||
ShaderStageVariant variant = {};
|
||||
variant.stage = ShaderType::Fragment;
|
||||
variant.language = ShaderLanguage::HLSL;
|
||||
variant.backend = ShaderBackend::Generic;
|
||||
variant.entryPoint = "MainPS";
|
||||
variant.profile = "ps_5_1";
|
||||
variant.sourceCode = "float4 MainPS() : SV_TARGET { return 1; }";
|
||||
|
||||
Array<XCEngine::Core::uint8> vulkanPayload;
|
||||
vulkanPayload.PushBack(0x07);
|
||||
vulkanPayload.PushBack(0x08);
|
||||
vulkanPayload.PushBack(0x09);
|
||||
variant.SetCompiledBinaryForBackend(ShaderBackend::Vulkan, vulkanPayload);
|
||||
|
||||
XCEngine::RHI::ShaderCompileDesc compileDesc = {};
|
||||
::XCEngine::Rendering::Internal::ApplyShaderStageVariant(
|
||||
pass,
|
||||
ShaderBackend::Vulkan,
|
||||
variant,
|
||||
compileDesc);
|
||||
|
||||
EXPECT_EQ(compileDesc.compiledBinaryBackend, XCEngine::RHI::ShaderBinaryBackend::Vulkan);
|
||||
ASSERT_EQ(compileDesc.compiledBinary.size(), 3u);
|
||||
EXPECT_EQ(compileDesc.compiledBinary[0], 0x07);
|
||||
EXPECT_EQ(compileDesc.compiledBinary[2], 0x09);
|
||||
}
|
||||
|
||||
TEST(Shader, FindsBackendSpecificVariantAndFallsBackToGeneric) {
|
||||
Shader shader;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user