Merge pull request 'perf(image): batch final mip-chain layout transition (#70)' (#100) from claude/issue-70 into master

This commit is contained in:
catbot 2026-06-16 20:31:16 +02:00
commit e86facc2af
3 changed files with 202 additions and 4 deletions

View file

@ -446,6 +446,33 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
mc.GetInterfacesAndImplementations(ifaces, memImpls);
cfg.tests.push_back(std::move(memTest));
// Issue #70: ImageVulkan's mip-chain upload folds the never-read final
// blit destination into a single batched final-transition barrier
// instead of giving it a dedicated DST->SRC barrier. The barrier set is
// built by BuildMipChainFinalBarriers, pure CPU logic over mip count and
// layout, so this test drives it directly — no GPU device at runtime.
Test mipBarrierTest;
Configuration& mbc = mipBarrierTest.config;
mbc.path = cfg.path;
mbc.name = "MipChainBarrierBatch";
mbc.outputName = "MipChainBarrierBatch";
mbc.type = ConfigurationType::Executable;
mbc.target = cfg.target;
mbc.march = cfg.march;
mbc.mtune = cfg.mtune;
mbc.debug = cfg.debug;
mbc.sysroot = cfg.sysroot;
mbc.dependencies = cfg.dependencies;
mbc.externalDependencies = cfg.externalDependencies;
mbc.compileFlags = cfg.compileFlags;
mbc.linkFlags = cfg.linkFlags;
mbc.defines = cfg.defines;
mbc.cFiles = cfg.cFiles;
std::vector<fs::path> mipBarrierImpls(impls.begin(), impls.end());
mipBarrierImpls.emplace_back("tests/MipChainBarrierBatch/main");
mbc.GetInterfacesAndImplementations(ifaces, mipBarrierImpls);
cfg.tests.push_back(std::move(mipBarrierTest));
// Issue #47: the fused UI uber-kernel (shaders/ui-fused.comp.glsl) and
// its C++ push-constant mirror UIFusedHeader. Compiles the real shader
// with glslang, validates with spirv-val, and pins the push-constant