test(pipeline): cover pipeline-cache header validation (#69)
PipelineCacheValidation drives Device::PipelineCacheDataCompatible directly (no GPU): synthetic device identities + 32-byte cache headers assert that a matching header is accepted while foreign vendor/device, a bumped UUID (driver update), unknown version, undersized headerSize, and short/empty blobs are all rejected. Mirrors the GPU-free style of MemoryTypeFallback / UploadStrategy. Also gitignore the serialized pipeline_cache.bin a real-device test run drops in the working dir. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
a3a6dd2006
commit
a728482731
3 changed files with 188 additions and 1 deletions
29
project.cpp
29
project.cpp
|
|
@ -587,6 +587,35 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
hitImpls.emplace_back("tests/InputFieldHitTest/main");
|
||||
hc.GetInterfacesAndImplementations(ifaces, hitImpls);
|
||||
cfg.tests.push_back(std::move(hitTest));
|
||||
|
||||
// Issue #69: the engine feeds one shared Device::pipelineCache to every
|
||||
// vkCreate*Pipelines call and persists it across runs, discarding an
|
||||
// on-disk blob whose header doesn't match the current GPU. That gate —
|
||||
// Device::PipelineCacheDataCompatible — is pure logic over the standard
|
||||
// VkPipelineCache header and Device::deviceProperties, so this test
|
||||
// stamps synthetic device identities + headers and drives it directly,
|
||||
// no GPU device needed at runtime.
|
||||
Test cacheTest;
|
||||
Configuration& cc = cacheTest.config;
|
||||
cc.path = cfg.path;
|
||||
cc.name = "PipelineCacheValidation";
|
||||
cc.outputName = "PipelineCacheValidation";
|
||||
cc.type = ConfigurationType::Executable;
|
||||
cc.target = cfg.target;
|
||||
cc.march = cfg.march;
|
||||
cc.mtune = cfg.mtune;
|
||||
cc.debug = cfg.debug;
|
||||
cc.sysroot = cfg.sysroot;
|
||||
cc.dependencies = cfg.dependencies;
|
||||
cc.externalDependencies = cfg.externalDependencies;
|
||||
cc.compileFlags = cfg.compileFlags;
|
||||
cc.linkFlags = cfg.linkFlags;
|
||||
cc.defines = cfg.defines;
|
||||
cc.cFiles = cfg.cFiles;
|
||||
std::vector<fs::path> cacheImpls(impls.begin(), impls.end());
|
||||
cacheImpls.emplace_back("tests/PipelineCacheValidation/main");
|
||||
cc.GetInterfacesAndImplementations(ifaces, cacheImpls);
|
||||
cfg.tests.push_back(std::move(cacheTest));
|
||||
}
|
||||
|
||||
return cfg;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue