shader: track buffer liveness and offsets by resource count

Co-authored-by: fxpw <fxpw@outlook.com>
This commit is contained in:
nmzik
2026-10-14 21:11:14 +02:00
parent 2f6ee0e91d
commit b24ce3440d
7 changed files with 28 additions and 21 deletions
@@ -311,12 +311,12 @@ void Visit(Program& program, ShaderStageInputInfo input_info, InputUsage& inputs
if (memory.resource >= info.buffers.size() || memory.resource >= ShaderInfo::MaxBuffers) {
return Fail("buffer operation has invalid resource metadata");
}
info.live_buffers |= uint64_t{1} << memory.resource;
info.buffers[memory.resource].live = true;
for (const auto child: info.buffers[memory.resource].indirect_resources) {
if (child >= info.buffers.size()) {
return Fail("indirect buffer operation has invalid resource metadata");
}
info.live_buffers |= uint64_t{1} << child;
info.buffers[child].live = true;
}
}
}
@@ -572,7 +572,7 @@ void CollectShaderInfo(Program& program, ShaderStageInputInfo input_info) {
info.inputs.clear();
info.outputs.clear();
info.user_data_registers.clear();
info.live_buffers = 0;
for (auto& buffer: info.buffers) buffer.live = false;
info.has_bitwise_xor = info.uses_lds = info.uses_gds = info.uses_flattened_srt =
info.uses_dispatch_threads = info.uses_swizzle = false;
info.bvh = info.subgroup_ballot = info.subgroup_barrier = info.subgroup_shuffle = info.subgroup_arithmetic =