Quick answer: SPIR-V Cross-translated shader rendering rotated on Android Vulkan? Pre-rotation transform needs explicit handling - apply rotation matrix in vertex shader or set swap chain transform.
Mobile game renders portrait correctly; landscape devices show the image rotated 90 degrees.
Apply rotation matrix
gl_Position = preRotationMatrix * worldPosition;Per-frame matrix accounts for device orientation. Skips OS-level composition.
Or set surface transform
VkSurfaceCapabilitiesKHR.currentTransform. Pass to swap chain creation; OS handles rotation.
Test on landscape devices
Pre-rotation issues are landscape-specific. Portrait-only testing misses them.
“Mobile Vulkan has pre-rotation. iOS hides it; Android requires explicit handling.”
If you ship Android Vulkan, pre-rotation is on your roadmap. Plan for it; document the solution.