Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion rpcs3/Emu/RSX/VK/VKGSRender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -564,7 +564,12 @@ VKGSRender::VKGSRender(utils::serial* ar) noexcept : GSRender(ar)
const auto& limits = m_device->gpu().get_limits();
m_texbuffer_view_size = std::min(limits.maxTexelBufferElements, VK_ATTRIB_RING_BUFFER_SIZE_M * 0x100000u);

if (m_texbuffer_view_size < 0x800000)
if (m_texbuffer_view_size <= 65536)
{
// Expected on PanVK
rsx_log.error("Your GPU does not support enough addressable texels for a buffer view. Graphics will not render correctly.", m_texbuffer_view_size);
}
else if (m_texbuffer_view_size < 0x800000)
{
// Warn, only possibly expected on macOS
rsx_log.warning("Current driver may crash due to memory limitations (%uk)", m_texbuffer_view_size / 1024);
Expand Down
10 changes: 8 additions & 2 deletions rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,10 @@ vk::vertex_upload_info VKGSRender::upload_vertex_data()
{
if (!m_persistent_attribute_storage || !m_persistent_attribute_storage->in_range(persistent_range_base, required.first, persistent_range_base))
{
ensure(m_texbuffer_view_size >= required.first); // "Incompatible driver (MacOS?)"
if (m_texbuffer_view_size < required.first) // "Incompatible driver (PanVK)"
{
rsx_log.error("Not enough texbuffer memory, required.first=%d, available=%d", required.first, m_texbuffer_view_size);
}
vk::get_resource_manager()->dispose(m_persistent_attribute_storage);

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

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;
Expand Down
Loading