Je ne comprends pas pourquoi il me dit que pCommandBuffers n'est pas un pointeur valide.
void RenderWindow::drawVulkanFrame() {
if (getCommandBuffers().size() > 0) {
vkWaitForFences(vkSettup.getDevice(), 1, &inFlightFences[currentFrame], VK_TRUE, UINT64_MAX);
uint32_t imageIndex;
vkAcquireNextImageKHR(vkSettup.getDevice(), swapChain, UINT64_MAX, imageAvailableSemaphores[currentFrame], VK_NULL_HANDLE, &imageIndex);
// Vérifier si une frame précédente est en train d'utiliser cette image (il y a une fence à attendre)
if (imagesInFlight[imageIndex] != VK_NULL_HANDLE) {
vkWaitForFences(vkSettup.getDevice(), 1, &imagesInFlight[imageIndex], VK_TRUE, UINT64_MAX);
}
// Marque l'image comme étant à nouveau utilisée par cette frame
imagesInFlight[imageIndex] = inFlightFences[currentFrame];
VkSubmitInfo submitInfo{};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
VkSemaphore waitSemaphores[] = {imageAvailableSemaphores[currentFrame]};
VkPipelineStageFlags waitStages[] = {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT};
submitInfo.waitSemaphoreCount = 1;
submitInfo.pWaitSemaphores = waitSemaphores;
submitInfo.pWaitDstStageMask = waitStages;
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &getCommandBuffers()[imageIndex];
VkSemaphore signalSemaphores[] = {renderFinishedSemaphores[currentFrame]};
submitInfo.signalSemaphoreCount = 1;
submitInfo.pSignalSemaphores = signalSemaphores;
vkResetFences(vkSettup.getDevice(), 1, &inFlightFences[currentFrame]);
if (vkQueueSubmit(vkSettup.getGraphicQueue(), 1, &submitInfo, inFlightFences[currentFrame]) != VK_SUCCESS) {
throw core::Erreur(0, "échec de l'envoi d'un command buffer!", 1);
}
VkPresentInfoKHR presentInfo{};
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
presentInfo.waitSemaphoreCount = 1;
presentInfo.pWaitSemaphores = signalSemaphores;
VkSwapchainKHR swapChains[] = {swapChain};
presentInfo.swapchainCount = 1;
presentInfo.pSwapchains = swapChains;
presentInfo.pImageIndices = &imageIndex;
presentInfo.pResults = nullptr; // Optionnel
vkQueuePresentKHR(vkSettup.getPresentQueue(), &presentInfo);
currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT;
vkDeviceWaitIdle(vkSettup.getDevice());
}
}
ça crash dans vkQueueSubmit.
Et apparemment il faut lui indiquer toutes les variables dans les shaders même celles que je n'utilise pas pour les descriptor je trouve pas ça très pratique de la part de vulkan parce que la texture pourrait être null et dans ce cas inutile de récupérer l'imageview et le texture sampler.
Merci.
EDIT : ça ne crash plus il fallait retourner une référence ici :
Par contre ça ne m'affiche rien je n'ai plus l'erreur avec pCommandBuffer mais j'ai toujours les autres erreurs. EDIT 2 : j'ai essayer avec la texture plus d'erreur mais ça ne m'affiche rien.
- Edité par OmbreNoire 23 novembre 2023 à 19:33:50
[VULKAN] Validation layer erreur.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.