fix(vk): Only rely on implicit PowerVR raster ordering on Vulkan 1.3 (#11132) 4cdb5779cd

After testing a statistically significant number of devices (7,
specifically!) I have concluded that implicit PowerVR raster ordering
only works with Rive on Vulkan 1.3 contexts. Update our renderer
accordingly.

Co-authored-by: Chris Dalton <99840794+csmartdalton@users.noreply.github.com>
This commit is contained in:
JoshJRive
2025-11-21 06:10:58 +00:00
parent 291c6071be
commit c4c909792c
3 changed files with 22 additions and 6 deletions

View File

@@ -1 +1 @@
19be344a5a7049529f7296ef3d2f3e6a99ca986d
4cdb5779cd45ccbb2a5d351f5ae60d923a9d511a

View File

@@ -742,13 +742,29 @@ RenderContextVulkanImpl::RenderContextVulkanImpl(
break;
case VULKAN_VENDOR_ARM:
case VULKAN_VENDOR_IMG_TEC:
// This is undocumented, but raster ordering works on Mali and
// PowerVR if you define a subpass dependency, even without
// EXT_rasterization_order_attachment_access.
// Raster ordering is known to work on ARM hardware, even on old
// drivers without EXT_rasterization_order_attachment_access, as
// long as you define a subpass self-dependency.
m_platformFeatures.supportsRasterOrderingMode =
!contextOptions.forceAtomicMode;
break;
case VULKAN_VENDOR_IMG_TEC:
// Raster ordering is known to work on IMG hardware, even without
// EXT_rasterization_order_attachment_access, as long as you define
// a subpass self-dependency.
// IMG just can't expose the extension because they do _not_
// guarantee raster ordering across samples, which is required by
// the extension, but irrelevant to Rive.
// THAT BEING SAID: while Google Chrome relies on implicit raster
// ordering on all IMG devices, it has only been observed to work
// with Rive on Vulkan 1.3 contexts (PowerVR Rogue GE9215 -- driver
// 1.555, and PowerVR D-Series DXT-48-1536 (Pixel 10) -- driver
// 1.602).
m_platformFeatures.supportsRasterOrderingMode =
!contextOptions.forceAtomicMode &&
m_vk->features.apiVersion >= VK_API_VERSION_1_3;
break;
}
}

View File

@@ -53,7 +53,7 @@ while :; do
-a|-a32)
TARGET="android"
DEFAULT_BACKEND=gl
SERIAL="$(adb get-serialno)"
SERIAL="$(adb get-serialno | sed 's/[:.]/_/g')"
if [[ "$1" == "-a32" ]]; then
ARGS="--android-arch arm"
fi