test: cover builtin shader manifest resolution outside project cwd
This commit is contained in:
@@ -426,4 +426,69 @@ TEST(ShaderLoader, ResourceManagerLazilyLoadsBuiltinForwardLitShader) {
|
||||
manager.Shutdown();
|
||||
}
|
||||
|
||||
TEST(ShaderLoader, ResourceManagerLoadsBuiltinShadersOutsideProjectWorkingDirectory) {
|
||||
namespace fs = std::filesystem;
|
||||
|
||||
ResourceManager& manager = ResourceManager::Get();
|
||||
const fs::path previousPath = fs::current_path();
|
||||
const String previousResourceRoot = manager.GetResourceRoot();
|
||||
const fs::path isolatedWorkingDirectory = fs::temp_directory_path() / "xc_builtin_shader_out_of_tree";
|
||||
|
||||
fs::remove_all(isolatedWorkingDirectory);
|
||||
fs::create_directories(isolatedWorkingDirectory);
|
||||
|
||||
manager.Shutdown();
|
||||
manager.SetResourceRoot("");
|
||||
fs::current_path(isolatedWorkingDirectory);
|
||||
|
||||
auto expectBuiltinShader = [&](const String& path,
|
||||
const char* passName,
|
||||
ShaderType stage,
|
||||
ShaderBackend backend,
|
||||
const char* marker) {
|
||||
const ResourceHandle<Shader> shaderHandle = manager.Load<Shader>(path);
|
||||
EXPECT_TRUE(shaderHandle.IsValid()) << path.CStr();
|
||||
if (!shaderHandle.IsValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
EXPECT_NE(shaderHandle->FindPass(passName), nullptr) << path.CStr();
|
||||
const ShaderStageVariant* variant = shaderHandle->FindVariant(passName, stage, backend);
|
||||
EXPECT_NE(variant, nullptr) << path.CStr();
|
||||
if (variant != nullptr) {
|
||||
EXPECT_NE(std::string(variant->sourceCode.CStr()).find(marker), std::string::npos) << path.CStr();
|
||||
}
|
||||
};
|
||||
|
||||
expectBuiltinShader(
|
||||
GetBuiltinForwardLitShaderPath(),
|
||||
"ForwardLit",
|
||||
ShaderType::Vertex,
|
||||
ShaderBackend::D3D12,
|
||||
"XC_BUILTIN_FORWARD_LIT_D3D12_VS");
|
||||
expectBuiltinShader(
|
||||
GetBuiltinObjectIdShaderPath(),
|
||||
"ObjectId",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::Vulkan,
|
||||
"XC_BUILTIN_OBJECT_ID_VULKAN_PS");
|
||||
expectBuiltinShader(
|
||||
GetBuiltinObjectIdOutlineShaderPath(),
|
||||
"ObjectIdOutline",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::D3D12,
|
||||
"XC_BUILTIN_OBJECT_ID_OUTLINE_D3D12_PS");
|
||||
expectBuiltinShader(
|
||||
GetBuiltinInfiniteGridShaderPath(),
|
||||
"InfiniteGrid",
|
||||
ShaderType::Fragment,
|
||||
ShaderBackend::D3D12,
|
||||
"XC_BUILTIN_INFINITE_GRID_D3D12_PS");
|
||||
|
||||
fs::current_path(previousPath);
|
||||
manager.SetResourceRoot(previousResourceRoot);
|
||||
manager.Shutdown();
|
||||
fs::remove_all(isolatedWorkingDirectory);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user