微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Vulkan 无缘无故地给我错误

如何解决Vulkan 无缘无故地给我错误

我正在尝试根据 vulkan-tutorial.com 上的 C++ 教程在 Rust 中编写一个三角形。我可以看到我的三角形,但我的程序在完成 drawFrame 函数 3 次后停止响应。 unsafe { vkWaitForFences( self.vulkan.logical_device,1,&self.vulkan.in_flight_fences[self.vulkan.current_frame as usize],VK_TRUE,18446744073709551615,// uint_max ); } let mut image_index = 0; let wait_stages = VkPipelinestageFlagBits_VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; unsafe { let result = vkAcquireNextimageKHR( self.vulkan.logical_device,self.vulkan.swapchain,u64::MAX,self.vulkan.image_available_semaphore[self.vulkan.current_frame as usize],null_mut(),&mut image_index,); if result != VkResult_VK_SUCCESS { panic!("Couldn't aquire next image. Error code: {}",result); } } if self.vulkan.images_in_flight[image_index as usize] != null_mut() { unsafe { vkWaitForFences( self.vulkan.logical_device,&self.vulkan.images_in_flight[image_index as usize],// uint_max ); } } let wait_semaphores = [self.vulkan.image_available_semaphore[self.vulkan.current_frame as usize]]; let signal_semaphores = [self.vulkan.render_finished_semaphore[self.vulkan.current_frame as usize]]; self.vulkan.images_in_flight[image_index as usize] = self.vulkan.in_flight_fences[self.vulkan.current_frame as usize]; let mut submit_info: VkSubmitInfo = unsafe { core::mem::zeroed() }; submit_info.sType = VkStructureType_VK_STRUCTURE_TYPE_SUBMIT_INFO; submit_info.waitSemaphoreCount = 1; submit_info.pWaitSemaphores = wait_semaphores.as_ptr(); submit_info.pWaitDstStageMask = &wait_stages; submit_info.commandBufferCount = 1; submit_info.pCommandBuffers = &self.vulkan.command_buffers[image_index as usize]; submit_info.signalSemaphoreCount = 1; submit_info.pSignalSemaphores = signal_semaphores.as_ptr(); unsafe { vkResetFences( self.vulkan.logical_device,); } let result = unsafe { vkQueueSubmit( self.vulkan.graphics_queue,&submit_info,self.vulkan.in_flight_fences[self.vulkan.current_frame as usize],) }; if result != VkResult_VK_SUCCESS { panic!( "Failed to submit draw command buffer. Error code: {}",result ); } let mut present_info: VkPresentInfoKHR = unsafe { core::mem::zeroed() }; present_info.sType = VkStructureType_VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; present_info.waitSemaphoreCount = 1; present_info.pWaitSemaphores = self.vulkan.render_finished_semaphore.as_ptr(); present_info.swapchainCount = 1; present_info.pSwapchains = &self.vulkan.swapchain; present_info.pImageIndices = &image_index; present_info.pResults = null_mut(); unsafe { vkQueuePresentKHR(self.vulkan.present_queue,&present_info); } self.vulkan.current_frame = (self.vulkan.current_frame + 1) % MAX_FRAMES_IN_FLIGHT; 函数

UNASSIGNED-CoreValidation-DrawState-QueueForwardProgress and VUID-vkQueuePresentKHR-pWaitSemaphores-03268.

它给了我对我来说毫无意义的错误

@setproduct-ui

我不想使用 vulkano 或其他 crate,我只想知道我做错了什么。

解决方法

在我看来,您正在等待错误的信号量。

您发出 self.vulkan.render_finished_semaphore[self.vulkan.current_frame] 信号,然后在当前等待 self.vulkan.render_finished_semaphore[0]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。