fix(image): scope sampled-image upload barriers to the real consumer stage (#54)
ImageVulkan hardcoded VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR as the consuming stage in every layout transition. The UI font atlas is sampled by a *compute* shader, so the upload barrier's dst scope never covered the real consumer — a correctness gap, not just lost overlap. Parameterize the consuming stage per image: store it once at Create (defaulting to RT, preserving existing RT/example callers) and reuse it in every Update / UpdateRegion / compressed-Update transition. FontAtlas passes VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
0b00d9d680
commit
8cca1dae47
2 changed files with 22 additions and 12 deletions
|
|
@ -36,7 +36,10 @@ void FontAtlas::Initialize(GraphicsCommandBuffer cmd) {
|
|||
kAtlasSize, kAtlasSize, /*mipLevels*/ 1, cmd,
|
||||
VK_FORMAT_R8_UNORM,
|
||||
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
// The atlas is sampled by the UI text *compute* shader, not an RT
|
||||
// pipeline — scope the upload barriers to the real consumer.
|
||||
VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
|
||||
);
|
||||
std::memset(image.buffer.value, 0, kAtlasSize * kAtlasSize);
|
||||
#else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue