mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-28 04:54:30 +00:00
Fixes for better sync
This commit is contained in:
parent
19473b2672
commit
b6001e47d6
@ -179,8 +179,8 @@ public:
|
|||||||
const Id after_first_time_label = OpLabel();
|
const Id after_first_time_label = OpLabel();
|
||||||
const Id fallback_label = OpLabel();
|
const Id fallback_label = OpLabel();
|
||||||
const Id available_label = OpLabel();
|
const Id available_label = OpLabel();
|
||||||
const Id save_unmasked_label = OpLabel();
|
const Id save_masked_label = OpLabel();
|
||||||
const Id after_save_unmasked_label = OpLabel();
|
const Id after_save_masked_label = OpLabel();
|
||||||
const Id merge_label = OpLabel();
|
const Id merge_label = OpLabel();
|
||||||
|
|
||||||
// Get page BDA
|
// Get page BDA
|
||||||
@ -225,22 +225,20 @@ public:
|
|||||||
|
|
||||||
// Value is available
|
// Value is available
|
||||||
AddLabel(available_label);
|
AddLabel(available_label);
|
||||||
const Id unmasked_bda = OpBitwiseAnd(U64, bda, bda_first_time_inv_mask);
|
OpSelectionMerge(after_save_masked_label, spv::SelectionControlMask::MaskNone);
|
||||||
|
OpBranchConditional(first_time, save_masked_label, after_save_masked_label);
|
||||||
// Check if BDA was masked
|
|
||||||
const Id had_mask = OpIEqual(U1[1], bda, unmasked_bda);
|
|
||||||
OpSelectionMerge(save_unmasked_label, spv::SelectionControlMask::MaskNone);
|
|
||||||
OpBranchConditional(had_mask, save_unmasked_label, after_save_unmasked_label);
|
|
||||||
|
|
||||||
// Save unmasked BDA
|
// Save unmasked BDA
|
||||||
AddLabel(save_unmasked_label);
|
AddLabel(save_masked_label);
|
||||||
OpStore(bda_ptr, unmasked_bda);
|
const Id masked_bda = OpBitwiseOr(U64, bda, bda_first_time_mask);
|
||||||
OpBranch(after_save_unmasked_label);
|
OpStore(bda_ptr, masked_bda);
|
||||||
|
OpBranch(after_save_masked_label);
|
||||||
|
|
||||||
// Load value
|
// Load value
|
||||||
AddLabel(after_save_unmasked_label);
|
AddLabel(after_save_masked_label);
|
||||||
|
const Id unmasked_bda = OpBitwiseAnd(U64, bda, bda_first_time_inv_mask);
|
||||||
const Id offset_in_bda = OpBitwiseAnd(U64, address, caching_pagemask_value);
|
const Id offset_in_bda = OpBitwiseAnd(U64, address, caching_pagemask_value);
|
||||||
const Id addr = OpIAdd(U64, bda, offset_in_bda);
|
const Id addr = OpIAdd(U64, unmasked_bda, offset_in_bda);
|
||||||
const PointerType pointer_type = PointerTypeFromType(type);
|
const PointerType pointer_type = PointerTypeFromType(type);
|
||||||
const Id pointer_type_id = physical_pointer_types[pointer_type];
|
const Id pointer_type_id = physical_pointer_types[pointer_type];
|
||||||
const Id addr_ptr = OpConvertUToPtr(pointer_type_id, addr);
|
const Id addr_ptr = OpConvertUToPtr(pointer_type_id, addr);
|
||||||
|
@ -734,7 +734,7 @@ void Rasterizer::AddDmaSyncRanges(const boost::icl::interval_set<VAddr>& ranges)
|
|||||||
{
|
{
|
||||||
std::scoped_lock lock{dma_sync_mapped_ranges_mutex};
|
std::scoped_lock lock{dma_sync_mapped_ranges_mutex};
|
||||||
std::shared_lock lock2(mapped_ranges_mutex);
|
std::shared_lock lock2(mapped_ranges_mutex);
|
||||||
dma_sync_mapped_ranges = mapped_ranges & ranges;
|
dma_sync_mapped_ranges = mapped_ranges & dma_sync_ranges;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user