[GPU] Fix scaled resolve tracking for blocks outside write range
This commit is contained in:
committed by
Radosław Gliński
parent
f8fb490ef8
commit
fcebdfb255
@@ -1052,6 +1052,13 @@ void TextureCache::ScaledResolveGlobalWatchCallback(
|
|||||||
uint32_t resolve_l2_block_last = resolve_block_last >> 6;
|
uint32_t resolve_l2_block_last = resolve_block_last >> 6;
|
||||||
for (uint32_t i = resolve_l2_block_first; i <= resolve_l2_block_last; ++i) {
|
for (uint32_t i = resolve_l2_block_first; i <= resolve_l2_block_last; ++i) {
|
||||||
uint64_t resolve_l2_block = scaled_resolve_pages_l2_[i];
|
uint64_t resolve_l2_block = scaled_resolve_pages_l2_[i];
|
||||||
|
// Pre-mask to only process blocks within the write range.
|
||||||
|
if (i == resolve_l2_block_first) {
|
||||||
|
resolve_l2_block &= ~((UINT64_C(1) << (resolve_block_first & 63)) - 1);
|
||||||
|
}
|
||||||
|
if (i == resolve_l2_block_last && (resolve_block_last & 63) != 63) {
|
||||||
|
resolve_l2_block &= (UINT64_C(1) << ((resolve_block_last & 63) + 1)) - 1;
|
||||||
|
}
|
||||||
uint32_t resolve_block_relative_index;
|
uint32_t resolve_block_relative_index;
|
||||||
while (
|
while (
|
||||||
xe::bit_scan_forward(resolve_l2_block, &resolve_block_relative_index)) {
|
xe::bit_scan_forward(resolve_l2_block, &resolve_block_relative_index)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user