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.

Related reading