[host] Adjusted Track function for bias handling and alignment checks for storage buffers
This commit is contained in:
committed by
Caio Oliveira
parent
39506ae599
commit
d3392954bf
@@ -354,16 +354,21 @@ std::optional<StorageBufferAddr> Track(const IR::Value& value, const Bias* bias)
|
||||
.index = index.U32(),
|
||||
.offset = offset.U32(),
|
||||
};
|
||||
const u32 alignment{bias ? bias->alignment : 16U};
|
||||
if (!Common::IsAligned(storage_buffer.offset, alignment)) {
|
||||
if (bias) {
|
||||
if (!MeetsBias(storage_buffer, *bias)) {
|
||||
// We have to blacklist some addresses in case we wrongly
|
||||
// point to them
|
||||
return std::nullopt;
|
||||
}
|
||||
const u32 relative_offset{storage_buffer.offset - bias->offset_begin};
|
||||
if (!Common::IsAligned(relative_offset, bias->alignment)) {
|
||||
// NVN descriptors are tightly packed but the range base is biased
|
||||
return std::nullopt;
|
||||
}
|
||||
} else if (!Common::IsAligned(storage_buffer.offset, 16U)) {
|
||||
// The SSBO pointer has to be aligned
|
||||
return std::nullopt;
|
||||
}
|
||||
if (bias && !MeetsBias(storage_buffer, *bias)) {
|
||||
// We have to blacklist some addresses in case we wrongly
|
||||
// point to them
|
||||
return std::nullopt;
|
||||
}
|
||||
return storage_buffer;
|
||||
}};
|
||||
return BreadthFirstSearch(value, pred);
|
||||
|
||||
Reference in New Issue
Block a user