mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-12 04:14:35 +00:00
rsx: Write ref+get atomically
May contribute to better FIFO synchronization in some cases.
This commit is contained in:
parent
ff74c241c7
commit
e407018bb5
@ -260,6 +260,7 @@ error_code sys_rsx_context_allocate(vm::ptr<u32> context_id, vm::ptr<u64> lpar_d
|
||||
render->current_display_buffer = 0;
|
||||
render->label_addr = vm::cast(*lpar_reports, HERE);
|
||||
render->device_addr = rsx_cfg->device_addr;
|
||||
render->dma_address = rsx_cfg->dma_address;
|
||||
render->local_mem_size = rsx_cfg->memory_size;
|
||||
render->init(vm::cast(*lpar_dma_control, HERE));
|
||||
|
||||
|
@ -618,6 +618,7 @@ namespace rsx
|
||||
|
||||
public:
|
||||
RsxDmaControl* ctrl = nullptr;
|
||||
u32 dma_address{0};
|
||||
rsx_iomap_table iomap_table;
|
||||
u32 restore_point = 0;
|
||||
atomic_t<u32> external_interrupt_lock{ 0 };
|
||||
|
@ -45,7 +45,9 @@ namespace rsx
|
||||
void set_reference(thread* rsx, u32 _reg, u32 arg)
|
||||
{
|
||||
rsx->sync();
|
||||
rsx->ctrl->ref.exchange(arg);
|
||||
|
||||
// Write ref+get atomically (get will be written again with the same value at command end)
|
||||
vm::_ref<atomic_be_t<u64>>(rsx->dma_address + ::offset32(&RsxDmaControl::get)).store(u64{rsx->fifo_ctrl->get_pos()} << 32 | arg);
|
||||
}
|
||||
|
||||
void semaphore_acquire(thread* rsx, u32 /*_reg*/, u32 arg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user