mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-08-11 18:50:55 +00:00
Improved NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE and NV4097_TEXTURE_READ_SEMAPHORE_RELEASE commands handling
This commit is contained in:
parent
e4f6eb04e8
commit
737080274a
4 changed files with 14 additions and 27 deletions
|
@ -300,12 +300,12 @@ bool D3D12GSRender::domethod(u32 cmd, u32 arg)
|
||||||
clear_surface(arg);
|
clear_surface(arg);
|
||||||
return true;
|
return true;
|
||||||
case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE:
|
case NV4097_TEXTURE_READ_SEMAPHORE_RELEASE:
|
||||||
semaphore_PGRAPH_texture_read_release(label_addr + rsx::method_registers[NV4097_SET_SEMAPHORE_OFFSET], arg);
|
semaphore_PGRAPH_texture_read_release();
|
||||||
return true;
|
return false; //call rsx::thread method implementation
|
||||||
case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE:
|
case NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE:
|
||||||
semaphore_PGRAPH_backend_release(label_addr + rsx::method_registers[NV4097_SET_SEMAPHORE_OFFSET],
|
semaphore_PGRAPH_backend_release();
|
||||||
(arg & 0xff00ff00) | ((arg & 0xff) << 16) | ((arg >> 16) & 0xff));
|
return false; //call rsx::thread method implementation
|
||||||
return true;;
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -898,12 +898,12 @@ void copyToCellRamAndRelease(void *dstAddress, ID3D12Resource *res, size_t dstPi
|
||||||
res->Release();
|
res->Release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void D3D12GSRender::semaphore_PGRAPH_texture_read_release(u32 offset, u32 value)
|
void D3D12GSRender::semaphore_PGRAPH_texture_read_release()
|
||||||
{
|
{
|
||||||
semaphore_PGRAPH_backend_release(offset, value);
|
semaphore_PGRAPH_backend_release();
|
||||||
}
|
}
|
||||||
|
|
||||||
void D3D12GSRender::semaphore_PGRAPH_backend_release(u32 offset, u32 value)
|
void D3D12GSRender::semaphore_PGRAPH_backend_release()
|
||||||
{
|
{
|
||||||
// Add all buffer write
|
// Add all buffer write
|
||||||
// Cell can't make any assumption about readyness of color/depth buffer
|
// Cell can't make any assumption about readyness of color/depth buffer
|
||||||
|
@ -1163,7 +1163,5 @@ void D3D12GSRender::semaphore_PGRAPH_backend_release(u32 offset, u32 value)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vm::ps3::write32(offset, value);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -456,8 +456,8 @@ public:
|
||||||
D3D12GSRender();
|
D3D12GSRender();
|
||||||
virtual ~D3D12GSRender();
|
virtual ~D3D12GSRender();
|
||||||
|
|
||||||
void semaphore_PGRAPH_texture_read_release(u32 offset, u32 value);
|
void semaphore_PGRAPH_texture_read_release();
|
||||||
void semaphore_PGRAPH_backend_release(u32 offset, u32 value);
|
void semaphore_PGRAPH_backend_release();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void InitD2DStructures();
|
void InitD2DStructures();
|
||||||
|
|
|
@ -1162,23 +1162,11 @@ void nv4097_clear_surface(u32 arg, GLGSRender* renderer)
|
||||||
renderer->draw_fbo.clear((gl::buffers)mask);
|
renderer->draw_fbo.clear((gl::buffers)mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nv4097_texture_read_semaphore_release(u32 arg, GLGSRender* render)
|
|
||||||
{
|
|
||||||
vm::ps3::write32(render->label_addr + rsx::method_registers[NV4097_SET_SEMAPHORE_OFFSET], arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void nv4097_backend_write_semaphore_release(u32 arg, GLGSRender* render)
|
|
||||||
{
|
|
||||||
vm::ps3::write32(render->label_addr + rsx::method_registers[NV4097_SET_SEMAPHORE_OFFSET], (arg & 0xff00ff00) | ((arg & 0xff) << 16) | ((arg >> 16) & 0xff));
|
|
||||||
}
|
|
||||||
|
|
||||||
using rsx_method_impl_t = void(*)(u32, GLGSRender*);
|
using rsx_method_impl_t = void(*)(u32, GLGSRender*);
|
||||||
|
|
||||||
static const std::unordered_map<u32, rsx_method_impl_t> g_gl_method_tbl =
|
static const std::unordered_map<u32, rsx_method_impl_t> g_gl_method_tbl =
|
||||||
{
|
{
|
||||||
{ NV4097_CLEAR_SURFACE, nv4097_clear_surface },
|
{ NV4097_CLEAR_SURFACE, nv4097_clear_surface }
|
||||||
{ NV4097_TEXTURE_READ_SEMAPHORE_RELEASE, nv4097_texture_read_semaphore_release },
|
|
||||||
{ NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE, nv4097_backend_write_semaphore_release },
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool GLGSRender::domethod(u32 cmd, u32 arg)
|
bool GLGSRender::domethod(u32 cmd, u32 arg)
|
||||||
|
|
|
@ -68,13 +68,14 @@ namespace rsx
|
||||||
force_inline void texture_read_semaphore_release(thread* rsx, u32 arg)
|
force_inline void texture_read_semaphore_release(thread* rsx, u32 arg)
|
||||||
{
|
{
|
||||||
//TODO: dma
|
//TODO: dma
|
||||||
rsx->domethod(NV4097_TEXTURE_READ_SEMAPHORE_RELEASE, arg);
|
vm::write32(rsx->label_addr + method_registers[NV4097_SET_SEMAPHORE_OFFSET], arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
force_inline void back_end_write_semaphore_release(thread* rsx, u32 arg)
|
force_inline void back_end_write_semaphore_release(thread* rsx, u32 arg)
|
||||||
{
|
{
|
||||||
//TODO: dma
|
//TODO: dma
|
||||||
rsx->domethod(NV4097_BACK_END_WRITE_SEMAPHORE_RELEASE, arg);
|
vm::write32(rsx->label_addr + method_registers[NV4097_SET_SEMAPHORE_OFFSET],
|
||||||
|
(arg & 0xff00ff00) | ((arg & 0xff) << 16) | ((arg >> 16) & 0xff));
|
||||||
}
|
}
|
||||||
|
|
||||||
//fire only when all data passed to rsx cmd buffer
|
//fire only when all data passed to rsx cmd buffer
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue