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:
kd-11 2022-06-26 15:48:32 +03:00 committed by kd-11
parent 9fc6382909
commit f60002e87d
4 changed files with 7 additions and 4 deletions

View file

@ -1103,7 +1103,7 @@ namespace gl
u32 scratch_offset = 0;
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 ]]
{
@ -1111,7 +1111,8 @@ namespace gl
}
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);

View file

@ -68,6 +68,7 @@ namespace gl
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_24_8:
rsx::convert_linear_swizzle<u32, false>(tmp_data.data(), dst, width, height, rsx_pitch);

View file

@ -44,7 +44,8 @@ namespace gl
enum remap_constants : u32
{
GL_REMAP_IDENTITY = 0xCAFEBABE
GL_REMAP_IDENTITY = 0xCAFEBABE,
GL_REMAP_BGRA = 0x0000AA6C
};
struct subresource_range

View file

@ -285,7 +285,7 @@ namespace gl
{
if (barrier_.range.overlaps(range))
{
barrier_.signal.wait_for_signal();
barrier_.signal.server_wait_sync();
return true;
}