Skip to content

Commit 435d5ce

Browse files
committed
vk: Allow GPUs with 64k maxTexelBufferElements to run with broken graphics
Allows Mali-G610 to run with panvk
1 parent 23b339d commit 435d5ce

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

rpcs3/Emu/RSX/VK/VKGSRender.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,12 @@ VKGSRender::VKGSRender(utils::serial* ar) noexcept : GSRender(ar)
560560
const auto& limits = m_device->gpu().get_limits();
561561
m_texbuffer_view_size = std::min(limits.maxTexelBufferElements, VK_ATTRIB_RING_BUFFER_SIZE_M * 0x100000u);
562562

563-
if (m_texbuffer_view_size < 0x800000)
563+
if (m_texbuffer_view_size <= 65536)
564+
{
565+
// Expected on PanVK
566+
rsx_log.error("Your GPU does not support enough addressable texels for a buffer view. Graphics will not render correctly.", m_texbuffer_view_size);
567+
}
568+
else if (m_texbuffer_view_size < 0x800000)
564569
{
565570
// Warn, only possibly expected on macOS
566571
rsx_log.warning("Current driver may crash due to memory limitations (%uk)", m_texbuffer_view_size / 1024);

rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,10 @@ vk::vertex_upload_info VKGSRender::upload_vertex_data()
336336
{
337337
if (!m_persistent_attribute_storage || !m_persistent_attribute_storage->in_range(persistent_range_base, required.first, persistent_range_base))
338338
{
339-
ensure(m_texbuffer_view_size >= required.first); // "Incompatible driver (MacOS?)"
339+
if (m_texbuffer_view_size < required.first) // "Incompatible driver (PanVK)"
340+
{
341+
rsx_log.error("Not enough texbuffer memory, required.first=%d, available=%d", required.first, m_texbuffer_view_size);
342+
}
340343
vk::get_resource_manager()->dispose(m_persistent_attribute_storage);
341344

342345
//View 64M blocks at a time (different drivers will only allow a fixed viewable heap size, 64M should be safe)
@@ -350,7 +353,10 @@ vk::vertex_upload_info VKGSRender::upload_vertex_data()
350353
{
351354
if (!m_volatile_attribute_storage || !m_volatile_attribute_storage->in_range(volatile_range_base, required.second, volatile_range_base))
352355
{
353-
ensure(m_texbuffer_view_size >= required.second); // "Incompatible driver (MacOS?)"
356+
if (m_texbuffer_view_size < required.second) // "Incompatible driver (PanVK)"
357+
{
358+
rsx_log.error("Not enough texbuffer memory, required.second=%d, available=%d", required.second, m_texbuffer_view_size);
359+
}
354360
vk::get_resource_manager()->dispose(m_volatile_attribute_storage);
355361

356362
const usz view_size = (volatile_range_base + m_texbuffer_view_size) > m_attrib_ring_info.size() ? m_attrib_ring_info.size() - volatile_range_base : m_texbuffer_view_size;

0 commit comments

Comments
 (0)