mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-06 06:51:26 +12:00
gl: Optimize memory barriers a bit
- Move waits to server side - Increase the scratch buffer size to avoid waiting on barriers
This commit is contained in:
parent
9fc6382909
commit
f60002e87d
4 changed files with 7 additions and 4 deletions
|
@ -1103,7 +1103,7 @@ namespace gl
|
||||||
|
|
||||||
u32 scratch_offset = 0;
|
u32 scratch_offset = 0;
|
||||||
const u64 min_storage_requirement = src_mem.image_size_in_bytes + dst_mem.image_size_in_bytes;
|
const u64 min_storage_requirement = src_mem.image_size_in_bytes + dst_mem.image_size_in_bytes;
|
||||||
const u64 min_required_buffer_size = std::max<u64>(utils::align(min_storage_requirement, 0x100000) * 4, 16 * 0x100000);
|
const u64 min_required_buffer_size = utils::align(min_storage_requirement, 256);
|
||||||
|
|
||||||
if (g_typeless_transfer_buffer.size() >= min_required_buffer_size) [[ likely ]]
|
if (g_typeless_transfer_buffer.size() >= min_required_buffer_size) [[ likely ]]
|
||||||
{
|
{
|
||||||
|
@ -1111,7 +1111,8 @@ namespace gl
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_typeless_transfer_buffer.create(gl::buffer::target::ssbo, min_required_buffer_size);
|
const auto new_size = std::max(min_required_buffer_size, g_typeless_transfer_buffer.size() + (64 * 0x100000));
|
||||||
|
g_typeless_transfer_buffer.create(gl::buffer::target::ssbo, new_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void* data_ptr = copy_image_to_buffer(cmd, pack_info, src, &g_typeless_transfer_buffer.get(), scratch_offset, 0, src_region, &src_mem);
|
void* data_ptr = copy_image_to_buffer(cmd, pack_info, src, &g_typeless_transfer_buffer.get(), scratch_offset, 0, src_region, &src_mem);
|
||||||
|
|
|
@ -68,6 +68,7 @@ namespace gl
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
case gl::texture::type::uint_8_8_8_8_rev:
|
||||||
case gl::texture::type::uint_8_8_8_8:
|
case gl::texture::type::uint_8_8_8_8:
|
||||||
case gl::texture::type::uint_24_8:
|
case gl::texture::type::uint_24_8:
|
||||||
rsx::convert_linear_swizzle<u32, false>(tmp_data.data(), dst, width, height, rsx_pitch);
|
rsx::convert_linear_swizzle<u32, false>(tmp_data.data(), dst, width, height, rsx_pitch);
|
||||||
|
|
|
@ -44,7 +44,8 @@ namespace gl
|
||||||
|
|
||||||
enum remap_constants : u32
|
enum remap_constants : u32
|
||||||
{
|
{
|
||||||
GL_REMAP_IDENTITY = 0xCAFEBABE
|
GL_REMAP_IDENTITY = 0xCAFEBABE,
|
||||||
|
GL_REMAP_BGRA = 0x0000AA6C
|
||||||
};
|
};
|
||||||
|
|
||||||
struct subresource_range
|
struct subresource_range
|
||||||
|
|
|
@ -285,7 +285,7 @@ namespace gl
|
||||||
{
|
{
|
||||||
if (barrier_.range.overlaps(range))
|
if (barrier_.range.overlaps(range))
|
||||||
{
|
{
|
||||||
barrier_.signal.wait_for_signal();
|
barrier_.signal.server_wait_sync();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue