PowerVR Vulkan 드라이버 버그: combined image sampler 배열 8개 초과 시 vkUpdateDescriptorSets crash

환경

  • 기기: TOPST D3-G
  • GPU: PowerVR GT9524 (IMG PowerVR 9XTP)
  • Vulkan: 1.3.225
  • 드라이버: libVK_IMG.so (TOPST Ubuntu 이미지 기본 탑재)

증상

vkUpdateDescriptorSets() 호출 시 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER 타입의 VkWriteDescriptorSet에서 descriptorCount > 8이면 libVK_IMG.so 내부에서 SIGSEGV crash가 발생합니다.

Vulkan spec 상 유효한 동작임에도 드라이버에서 처리되지 않는 것으로 보입니다.

재현 방법

  1. VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, descriptorCount = 16으로 descriptor set layout binding 생성
  2. VkWriteDescriptorSet.descriptorCount = 16 (또는 8 초과 값)으로 vkUpdateDescriptorSets() 호출
  3. libVK_IMG.so 내부에서 crash 발생

스택 트레이스 (gdb)

Program received signal SIGSEGV
#0  libVK_IMG.so  (내부)
#1  vkUpdateDescriptorSets()
#2  StateTracker::UpdateGXDescriptorSet()  [Dolphin libretro]

임시 워크어라운드

배열 write를 descriptorCount = 1씩 개별 호출로 분리하고, 단일 binding 내 dstArrayElement를 0~7 이내로 유지하여 8번째 이후 sampler는 별도 binding으로 분리하는 방식으로 우회하였습니다.

요청사항

가능하시다면 Imagination Technologies 측에 해당 버그를 전달해 주시면 감사하겠습니다. combined image sampler 배열의 8개 한계는 별도로 문서화되어 있지 않아, 표준 Vulkan 사용 시 예상치 못한 동작으로 이어질 수 있습니다.