Partage
  • Partager sur Facebook
  • Partager sur Twitter

Validation Error à la création de la Swapchain

Vulkan Tutorial

    19 août 2021 à 23:50:34

    Avant toutes choses : si vous avez besoin de plus d'informations auxquelles je n'aurais pas pensé, merci de me le dire gentiment ! Aussi, si vous avez besoin du code ENTIER (.hpp et .cpp) dites-le-moi aussi... agréablement !

    Bonjour, c'est encore moi !

    J'ai vraiment pas mal de problèmes avec le tuto Vulkan donc je reviens de nouveau vers vous puisque jusqu'ici, tous les problème se sont résolus soit par eux-même, soit par la communauté du forum.

    Je donnerai cette fois-ci le plus de détails possibles pour éviter les jérémiades de certains. :/

    Alors voilà ! J'ai un problème au niveau de la création de la swapchain. Voici les Validations Errors que l'exécution engendre :

    Validation Errors

    Là encore, j'ai du mal à voir mon erreur sachant que j'ai suivi le tuto à la lettre prête (mais je ne doute pas qu'il y en a forcément une... quelque part). J'ai même copié/collé pour être sûr ! Malheureusement le problème persiste et je ne trouve pas de solution.

    Je vous mets le lien du tuto sur la Swapchain ici !!!

    Je vous envoie aussi mon code sur la swapchain...

    Code dans le fichier .cpp (non exhaustif) :

    bool HelloTriangleApp::isDeviceSuitable(VkPhysicalDevice device) {
    		bool extensionsSupported = checkDeviceExtensionSupport(device);
    
    		bool swapChainAdequate = false;
    		if (extensionsSupported) {
    			SwapChainSupportDetails swapChainSupport = querySwapChainSupport(device);
    			swapChainAdequate = !swapChainSupport.formats.empty() && !swapChainSupport.presentModes.empty();
    		}
    
    		return extensionsSupported && swapChainAdequate;
    	}
    bool HelloTriangleApp::checkDeviceExtensionSupport(VkPhysicalDevice device) {
    		uint32_t extensionCount;
    		vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
    
    		std::vector<VkExtensionProperties> availableExtensions(extensionCount);
    		vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, availableExtensions.data());
    
    		std::set<std::string> requiredExtensions(deviceExtensions.begin(), deviceExtensions.end());
    
    		for (const auto& extension : availableExtensions) {
    			requiredExtensions.erase(extension.extensionName);
    		}
    
    		return requiredExtensions.empty();
    	}



    SwapChainSupportDetails HelloTriangleApp::querySwapChainSupport(VkPhysicalDevice device) {
    		SwapChainSupportDetails details;
    
    		vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities);
    
    		uint32_t formatCount;
    		vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr);
    
    		if (formatCount != 0) {
    			details.formats.resize(formatCount);
    			vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, details.formats.data());
    		}
    
    		uint32_t presentModeCount;
    		vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, nullptr);
    
    		if (presentModeCount != 0) {
    			details.presentModes.resize(presentModeCount);
    			vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, details.presentModes.data());
    		}
    
    		return details;
    	}
    
    	VkSurfaceFormatKHR HelloTriangleApp::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats) {
    		for (const auto& availableFormat : availableFormats) {
    			if (availableFormat.format == VK_FORMAT_B8G8R8A8_SRGB && availableFormat.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) {
    				return availableFormat;
    			}
    		}
    
    		return availableFormats[0];
    	}
    
    	VkPresentModeKHR HelloTriangleApp::chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes) {
    		for (const auto& availablePresentMode : availablePresentModes) {
    			if (availablePresentMode == VK_PRESENT_MODE_MAILBOX_KHR) {
    				return availablePresentMode;
    			}
    		}
    
    		return VK_PRESENT_MODE_FIFO_KHR;
    	}
    
    	VkExtent2D HelloTriangleApp::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities) {
    		if (capabilities.currentExtent.width != UINT32_MAX) {
    			return capabilities.currentExtent;
    		}
    		else {
    			VkExtent2D actualExtent = { WIDTH, HEIGHT };
    
    			actualExtent.width = std::clamp(actualExtent.width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
    			actualExtent.height = std::clamp(actualExtent.height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
    
    			return actualExtent;
    		}
    	}
    
    	void HelloTriangleApp::createSwapChain() {
    		SwapChainSupportDetails swapChainSupport = querySwapChainSupport(physicalDevice);
    
    		VkSurfaceFormatKHR surfaceFormat = chooseSwapSurfaceFormat(swapChainSupport.formats);
    		VkPresentModeKHR presentMode = chooseSwapPresentMode(swapChainSupport.presentModes);
    		VkExtent2D extent = chooseSwapExtent(swapChainSupport.capabilities);
    
    		uint32_t imageCount = swapChainSupport.capabilities.minImageCount + 1;
    		if (swapChainSupport.capabilities.maxImageCount > 0 && imageCount > swapChainSupport.capabilities.maxImageCount) {
    			imageCount = swapChainSupport.capabilities.maxImageCount;
    		}
    
    		//On reconnait ce modèle 
    		VkSwapchainCreateInfoKHR createInfo{};
    		createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
    		createInfo.surface = surface;
    
    		createInfo.minImageCount = imageCount;
    		createInfo.imageFormat = surfaceFormat.format;
    		createInfo.imageColorSpace = surfaceFormat.colorSpace;
    		createInfo.imageExtent = extent;
    		createInfo.imageArrayLayers = 1;
    		createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
    
    		QueueFamilyIndices indices = findQueueFamilies(physicalDevice);
    		uint32_t queueFamilyIndices[] = { indices.graphicsFamily.value(), indices.presentFamily.value() };
    
    		if (indices.graphicsFamily != indices.presentFamily) {
    			createInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
    			createInfo.queueFamilyIndexCount = 2;
    			createInfo.pQueueFamilyIndices = queueFamilyIndices;
    		}
    		else {
    			createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
    			createInfo.queueFamilyIndexCount = 0; // Optionnel
    			createInfo.pQueueFamilyIndices = nullptr; // Optionnel
    		}
    
    		createInfo.preTransform = swapChainSupport.capabilities.currentTransform;
    		createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
    		createInfo.presentMode = presentMode;
    		createInfo.clipped = VK_TRUE;
    
    		createInfo.oldSwapchain = VK_NULL_HANDLE;
    
    		if (vkCreateSwapchainKHR(device, &createInfo, nullptr, &swapChain) != VK_SUCCESS) {
    			throw std::runtime_error("failed to create swap chain!");
    		}
    
    		vkGetSwapchainImagesKHR(device, swapChain, &imageCount, nullptr);
    		swapChainImages.resize(imageCount);
    		vkGetSwapchainImagesKHR(device, swapChain, &imageCount, swapChainImages.data());
    
    		swapChainImageFormat = surfaceFormat.format;
    		swapChainExtent = extent;
    	}

    Code dans le fichier .hpp (non exhaustif) :

    #define GLFW_INCLUDE_VULKAN
    #include <GLFW/glfw3.h>
    
    #include <iostream>
    #include <stdexcept>
    #include <vector>
    #include <cstring>
    #include <cstdlib>
    #include <optional>
    #include <set>
    #include <cstdint> // UINT32_MAX
    #include <algorithm> // std::min/std::max
    
    const std::vector<const char*> deviceExtensions = {
    	VK_KHR_SWAPCHAIN_EXTENSION_NAME
    };
    
    struct SwapChainSupportDetails {
    	VkSurfaceCapabilitiesKHR capabilities;
    	std::vector<VkSurfaceFormatKHR> formats;
    	std::vector<VkPresentModeKHR> presentModes;
    };
    
    class HelloTriangleApp {
    	VkDevice device;
    	VkSwapchainKHR swapChain;
    	std::vector<VkImage> swapChainImages;
    
    	SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device);
    	VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats);
    	VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes);
    	VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities);
    };


    Si vous avez des suggestions ou bien si quelqu'un a une/des solution(s) aux problèmes lors de l'exécution, je suis preneur !

    Cordialement.

    Haulun

    -
    Edité par Haulun 20 août 2021 à 2:42:32

    • Partager sur Facebook
    • Partager sur Twitter
      20 août 2021 à 0:58:50

      Un "jérémiard" te dirait que les messages d'erreurs sont plutôt explicites mais qu'il ne prendra pas la peine de te les expliquer car tu n'as pas pris la peine de donner les messages d'erreurs sous une forme qui permettrait de les copier-coller dans notre plus grand ami à tous : Google.

      (oui, les copies d'écran pour les messages d'erreurs, c'est du caca)

      (Et Github est aussi un bon ami.)

      -
      Edité par bacelar 20 août 2021 à 0:59:39

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        20 août 2021 à 2:35:17

        Je n'y ai pas pensé, je ne poste pas de problèmes liés à la programmation depuis très longtemps (1 jour ou 2) donc je suis en apprentissage d'écriture de sujets liés au Code si on veut. Alors la prochaine fois essaie de le dire sur un autre ton, ça passera mieux, car la chose qu'on veut faire avec ce type de message ce n'est pas de te jeter des fleurs. Pourtant j'avais prévenu à la fin du message d'essayer de ne pas être désagréable quand une personne demande aimablement de l'aide et que si il y avait besoin de quoi que ce soit, de le demander dans le respect. Les forums sont un peu tous pareils on dirait. Ainsi pense à la courtoisie la prochaine fois. 

        Un petit "pourrais-tu faire en sorte qu'on puisse copier/coller s'il te plaît car les messages d'erreurs en capture d'écran c'est pas top" aurait été mieux reçu. 

        Et d'ailleurs, j'ai cherché sur Google mais j'ai rien trouvé de mon côté, donc je demandais à de "vraies" personnes plus compétentes que moi que je pensais d'ailleurs un minimum courtois pour me proposer des pistes ou bien des solutions. Espérons qu'une personne pourra en être à la hauteur. JE renvoie les messages d'erreurs demain pour que VOUS puissiez copier/coller sur "notre plus grand ami à tous, Google".

        Bonne soirée. 

        PS : si tu les as compris sans copier/coller car ils sont plutôt explicites, pourquoi ce message presque inutile ?

        -
        Edité par Haulun 20 août 2021 à 3:00:41

        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2021 à 11:02:40

          D'où sort l'appel à vkGetPhysicalDeviceExternalImageFormatPropertiesNV ?

          Ensuite il râle sur le format des images de ta swapchain. Tu as essayé d'autres formats que B8R8G8A8_SRGB ? (de mon côté, ma swapchain supporte aussi B8R8G8A8_UNORM, qui fonctionne, et après test _SRGB ne pose pas non plus de problème pour la création de la swapchain).

          C'est bien sur l'appel à vkCreateSwapchainKHR que tu as ces erreurs de validation ? (je suis surpris de voir qu'il râle sur des appels à vkCreateImageView)

          • Partager sur Facebook
          • Partager sur Twitter

          Si vous ne trouvez plus rien, cherchez autre chose.

            20 août 2021 à 12:17:59

            Tout d'abord, merci pour ton message


            dragonjoker a écrit:

            D'où sort l'appel à vkGetPhysicalDeviceExternalImageFormatPropertiesNV ?

            Je ne sais pas, je n'ai jamais écrit ça dans mon code... 

            dragonjoker a écrit:

            Ensuite il râle sur le format des images de ta swapchain. Tu as essayé d'autres formats que B8R8G8A8_SRGB ? (de mon côté, ma swapchain supporte aussi B8R8G8A8_UNORM, qui fonctionne, et après test _SRGB ne pose pas non plus de problème pour la création de la swapchain).


            Je vais essayer et je te dirai si ça fonctionne. (voir réponse ci-dessous)

            dragonjoker a écrit:

            C'est bien sur l'appel à vkCreateSwapchainKHR que tu as ces erreurs de validation ? (je suis surpris de voir qu'il râle sur des appels à vkCreateImageView)

            Oui c'est sûr et certain ! Car j'ai utilisé le petit stop qu'on peut mettre à gauche du Code. Et lorsque vient la création de la swapchain, les validation errors me hurlent dessus. Pour le vkCreateImageView c'est parce que j'ai continué le tuto sur l'imageView. 

            code ici :

            void HelloTriangleApp::createImageViews() {
            		swapChainImageViews.resize(swapChainImages.size());
            
            		for (size_t i = 0; i < swapChainImages.size(); i++) {
            			VkImageViewCreateInfo createInfo{};
            			createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
            			createInfo.image = swapChainImages[i];
            			
            			createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; //Permet de traiter les images comme des textures 1D, 2D, 3D ou cubemap
            			createInfo.format = swapChainImageFormat;
            
            			createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
            			createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
            			createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
            			createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
            
            			//subresourceRange décrit l'utilisation de l'image et indique quelles parties de l'image devraient être accédées
            			createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
            			createInfo.subresourceRange.baseMipLevel = 0;
            			createInfo.subresourceRange.levelCount = 1;
            			createInfo.subresourceRange.baseArrayLayer = 0;
            			createInfo.subresourceRange.layerCount = 1;
            
            			if (vkCreateImageView(device, &createInfo, nullptr, &swapChainImageViews[i]) != VK_SUCCESS) {
            				throw std::runtime_error("failed when creating the image view !");
            			}
            		}
            	}



            Cordialement

            __________________________________________________________________

            Désolé pour le double message, mais sinon je dois attendre 24h pour pouvoir poster à la suite du message précédent ci-dessus

            dragonjoker a écrit:

            Ensuite il râle sur le format des images de ta swapchain. Tu as essayé d'autres formats que B8R8G8A8_SRGB ? (de mon côté, ma swapchain supporte aussi B8R8G8A8_UNORM, qui fonctionne, et après test _SRGB ne pose pas non plus de problème pour la création de la swapchain).


            J'ai essayé et le B8R8G8A8_UNORM fait moins crier les validation layers (est-ce une bonne chose ?). Cependant 1 erreur persiste et la voici :

            validation layer: Validation Error: [ UNASSIGNED-GeneralParameterError-ExtensionNotEnabled ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe92b452d | Attemped to call vkGetPhysicalDeviceExternalImageFormatPropertiesNV() but its required extension VK_NV_external_memory_capabilities has not been enabled

            Il dit que je n'ai pas activé une extension d'après ce que je comprends (serait-elle inaccessible ou indisponible ?) : VK_NV_external_memory_capabilities

            Ensuite, lorsque je repasse en B8R8G8A8_SRGB, j'ai les même erreurs qu'auparavant.

            Voici les toutes les erreurs pour ceux qui veulent pouvoir copier/coller :

            validation layer: Validation Error: [ UNASSIGNED-GeneralParameterError-ExtensionNotEnabled ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe92b452d | Attemped to call vkGetPhysicalDeviceExternalImageFormatPropertiesNV() but its required extension VK_NV_external_memory_capabilities has not been enabled

            validation layer: Validation Error: [ VUID-VkSwapchainCreateInfoKHR-imageFormat-01778 ] Object 0: handle = 0x17ffe066698, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xc036022f | vkCreateSwapchainKHR(): pCreateInfo->imageFormat VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL does not support usage that includes VK_IMAGE_USAGE_STORAGE_BIT. The Vulkan spec states: The implied image creation parameters of the swapchain must be supported as reported by vkGetPhysicalDeviceImageFormatProperties (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkSwapchainCreateInfoKHR-imageFormat-01778)

            validation layer: Validation Error: [ VUID-VkSwapchainCreateInfoKHR-imageFormat-01778 ] Object 0: handle = 0x17ffe066698, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xc036022f | vkGetPhysicalDeviceImageFormatProperties() unexpectedly failed, when called for vkCreateSwapchainKHR() validation with following params: format: VK_FORMAT_B8G8R8A8_SRGB, imageType: VK_IMAGE_TYPE_2D, tiling: VK_IMAGE_TILING_OPTIMAL, usage: VK_IMAGE_USAGE_TRANSFER_SRC_BIT|VK_IMAGE_USAGE_STORAGE_BIT|VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, flags: Unhandled VkImageCreateFlagBits. The Vulkan spec states: The implied image creation parameters of the swapchain must be supported as reported by vkGetPhysicalDeviceImageFormatProperties (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkSwapchainCreateInfoKHR-imageFormat-01778)

            validation layer: Validation Error: [ VUID-VkSwapchainCreateInfoKHR-imageFormat-01778 ] Object 0: handle = 0x17ffe066698, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xc036022f | vkCreateSwapchainKHR() called with a non-supported imageArrayLayers (i.e. 1). Maximum value returned by vkGetPhysicalDeviceImageFormatProperties() is 0 for imageFormat VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL The Vulkan spec states: The implied image creation parameters of the swapchain must be supported as reported by vkGetPhysicalDeviceImageFormatProperties (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkSwapchainCreateInfoKHR-imageFormat-01778)

            validation layer: Validation Error: [ VUID-VkSwapchainCreateInfoKHR-imageFormat-01778 ] Object 0: handle = 0x17ffe066698, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xc036022f | vkCreateSwapchainKHR() called with imageExtent = (800,600), which is bigger than max extent (0,0)returned by vkGetPhysicalDeviceImageFormatProperties(): for imageFormat VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL The Vulkan spec states: The implied image creation parameters of the swapchain must be supported as reported by vkGetPhysicalDeviceImageFormatProperties (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkSwapchainCreateInfoKHR-imageFormat-01778)

            validation layer: Validation Error: [ VUID-VkImageViewCreateInfo-usage-02275 ] Object 0: handle = 0x5d11410000000004, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x618ab1e7 | vkCreateImageView(): pCreateInfo->format VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL does not support usage that includes VK_IMAGE_USAGE_STORAGE_BIT. The Vulkan spec states: If usage contains VK_IMAGE_USAGE_STORAGE_BIT, then the image view's format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkImageViewCreateInfo-usage-02275)

            validation layer: Validation Error: [ VUID-VkImageViewCreateInfo-usage-02275 ] Object 0: handle = 0x6dc7200000000005, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x618ab1e7 | vkCreateImageView(): pCreateInfo->format VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL does not support usage that includes VK_IMAGE_USAGE_STORAGE_BIT. The Vulkan spec states: If usage contains VK_IMAGE_USAGE_STORAGE_BIT, then the image view's format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkImageViewCreateInfo-usage-02275)

            validation layer: Validation Error: [ VUID-VkImageViewCreateInfo-usage-02275 ] Object 0: handle = 0x3ba5830000000006, type = VK_OBJECT_TYPE_IMAGE; | MessageID = 0x618ab1e7 | vkCreateImageView(): pCreateInfo->format VK_FORMAT_B8G8R8A8_SRGB with tiling VK_IMAGE_TILING_OPTIMAL does not support usage that includes VK_IMAGE_USAGE_STORAGE_BIT. The Vulkan spec states: If usage contains VK_IMAGE_USAGE_STORAGE_BIT, then the image view's format features must contain VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT (https://vulkan.lunarg.com/doc/view/1.2.170.0/windows/1.2-extensions/vkspec.html#VUID-VkImageViewCreateInfo-usage-02275)



            -
            Edité par Haulun 20 août 2021 à 14:14:49

            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2021 à 11:58:25

              Lu',

              essaie de faire un ctrl+f dans ton projet actif pour voir d'où vient l'appel à vkGetPhysicalDeviceExternalImageFormatPropertiesNV.

              Pour les VkImageView, vu qu'ils dependent de VkImage qui dans ce cas precis dependent de la swapchain, ça te crée des erreurs en cascade. Il faut d'abord corriger le probleme de la swapchain.

              Et pour l'erreur de la swapchain, on dirait que le code ne colle pas avec le message des VL. Rajoute un breakpoint juste avant vkCreateSwapchainKHR et regarde si  "createInfo.imageUsage" vaut bien VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT.

              • Partager sur Facebook
              • Partager sur Twitter

              Eug

                21 août 2021 à 13:41:07

                eugchriss a écrit:

                essaie de faire un ctrl+f dans ton projet actif pour voir d'où vient l'appel à vkGetPhysicalDeviceExternalImageFormatPropertiesNV.

                Et pour l'erreur de la swapchain, on dirait que le code ne colle pas avec le message des VL. Rajoute un breakpoint juste avant vkCreateSwapchainKHR et regarde si  "createInfo.imageUsage" vaut bien VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT.

                Je fais ça de ce pas !

                (en cours...)

                • Mais comment tu veux que je vois la valeur de createInfo.imageUsage ? Via le code ? Si oui, j'ai bien marqué VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT >_<
                • Pas d'appel de vkGetPhysicalDeviceExternalImageFormatPropertiesNV() dans le Projet Actif.

                eugchriss a écrit:

                Pour les VkImageView, vu qu'ils dependent de VkImage qui dans ce cas precis dependent de la swapchain, ça te crée des erreurs en cascade. Il faut d'abord corriger le probleme de la swapchain.

                Oui je sais, c'est pour cela que je cherche surtout pour la swapchain qui fait planter le reste ^^


                Cordialement

                PS : Est-ce un problème d'extension ? Car la première erreur me met que VK_NV_external_memory_capabilities n'est pas activé et donc qu'il a échoué à appeler la fonction : vkGetPhysicalDeviceExternalImageFormatPropertiesNV()

                ____________________________________________________________

                Re (double message)

                J'ai fait du stop pas à pas et j'ai découvert que la première erreur venait du debug : 

                VKAPI_ATTR VkBool32 VKAPI_CALL HelloTriangleApp::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) {
                		std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
                
                		return VK_FALSE;
                	}


                Je suppose que seulement ça, ça ne vous aidera pas donc je vais mettre l'erreur en question :

                validation layer: Validation Error: [ UNASSIGNED-GeneralParameterError-ExtensionNotEnabled ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe92b452d | Attemped to call vkGetPhysicalDeviceExternalImageFormatPropertiesNV() but its required extension VK_NV_external_memory_capabilities has not been enabled

                Quand je continue après ce bug, VS me dit qu'il manque des Sources :

                • vk_layer_logging.h
                • chassis.h / chassis.cpp
                • paramater_validation.cpp
                • et pleins d'autres...

                Help ! :(

                -
                Edité par Haulun 21 août 2021 à 14:50:55

                • Partager sur Facebook
                • Partager sur Twitter
                  21 août 2021 à 14:45:18

                  Le pas à pas ne te donnera pas grand chose vu les VL fonctionnent à base de callback. Au mieux tu sauras juste quel appel a vulkan à causé le callback.

                  Haulun a écrit:

                  • Mais comment tu veux que je vois la valeur de createInfo.imageUsage ? Via le code ? Si oui, j'ai bien marqué VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT >_<

                  Comme je disais ton code ne colle pas avec tes erreurs. Tu as surement une modification qui est faite quelque part. Du coup je cherche à verifier si ton appel à vkCreateSwapchainKHR reçoit bien ce qu'il est censé recevoir. 
                  Tu as juste à passer la souris sur la variable "createInfo" puis cliquer sur le menu deroulant qui apparait. Chez moi ça donne ceci. Si tu n'y arrives pas tu peux aussi aller dans l'onglet "variables locales" ou l'onglet "Automatique" qui sont situés en bas à gauche.

                  Haulun a écrit:

                  PS : Est-ce un problème d'extension ? Car la première erreur me met que VK_NV_external_memory_capabilities n'est pas activé et donc qu'il a échoué à appeler la fonction : vkGetPhysicalDeviceExternalImageFormatPropertiesNV()

                  En theorie, oui il te faut l'extension qui va avec mais vu que tu n'as aucun appel (à priori) à vkGetPhysicalDeviceExternalImageFormatPropertiesNV(), tu n'en as pas besoin. C'est pour ça que ton code est bizarre. Essaie de poster l'ensemble sur github.

                  -
                  Edité par eugchriss 21 août 2021 à 14:48:12

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Eug

                    21 août 2021 à 15:32:37

                    eugchriss a écrit:

                    Le pas à pas ne te donnera pas grand chose vu les VL fonctionnent à base de callback. Au mieux tu sauras juste quel appel a vulkan à causé le callback.

                    D'accord, je garde ça en tête ^^

                    eugchriss a écrit:

                    Comme je disais ton code ne colle pas avec tes erreurs. Tu as surement une modification qui est faite quelque part. Du coup je cherche à verifier si ton appel à vkCreateSwapchainKHR reçoit bien ce qu'il est censé recevoir. 
                    Tu as juste à passer la souris sur la variable "createInfo" puis cliquer sur le menu deroulant qui apparait. Chez moi ça donne ceci. Si tu n'y arrives pas tu peux aussi aller dans l'onglet "variables locales" ou l'onglet "Automatique" qui sont situés en bas à gauche.


                    C'est bon, merci, je t'envoie ce que j'ai dans la liste déroulante si je passe la souris sur "createInfo" ici ! Perso je ne vois rien de différent à part le "minImageCount" qui est de 3 et le "height" qui est de 600px chez moi.

                    Les 3 derniers attributs qui n'a pas pu être pris dans la capture sont :

                    liste deroulante createInfo

                    eugchriss a écrit:

                    En theorie, oui il te faut l'extension qui va avec mais vu que tu n'as aucun appel (à priori) à vkGetPhysicalDeviceExternalImageFormatPropertiesNV(), tu n'en as pas besoin. C'est pour ça que ton code est bizarre. Essaie de poster l'ensemble sur github.

                    Voici le github et le code qui va avec :

                    https://github.com/Haulun/MySuperEngine

                    J'ai mis un peu de temps car je le reprenais en main. Ca faisait un moment que je ne l'avais pas utilisé. Mais le lien est bon (normalement) ;)

                    Cordialement

                    -
                    Edité par Haulun 21 août 2021 à 16:18:28

                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 août 2021 à 17:38:20

                      Aucun soucis de mon côté, avec ton code en _SRGB et en _UNORM

                      Tu utilises quelle version du SDK ?

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Si vous ne trouvez plus rien, cherchez autre chose.

                        21 août 2021 à 19:25:27

                        Je vais te dire tout ce que j'utilise :

                        • Plateforme : Windows
                        • Editeur : Visual Studio 2019
                        • Vulkan : version 1.2.170.0
                        • glfw : version 3.3.4
                        • glm

                        Ai-je répondu à ta question ?

                        As-tu besoin d'autre chose ?

                        -
                        Edité par Haulun 22 août 2021 à 12:38:55

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 août 2021 à 14:38:56

                          Je l'ai aussi testé de mon coté et tout fonctionne comme il faut. Honnêtement je suis à court d'idée hormis peut etre de tout recommencer à zero...
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Eug

                            22 août 2021 à 14:49:04

                            Tant pis... merci à vous quand même :/
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 août 2021 à 14:49:15

                              Il faut te tourner vers vkconfig (https://vulkan.lunarg.com/doc/view/1.2.135.0/windows/vkconfig.html), pour vérifier s'il n'y a pas des layers qu'il faudrait désactiver (ou activer).

                              Et au pire une désinstal complète du SDK avec réinstallation de sa dernière version.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Si vous ne trouvez plus rien, cherchez autre chose.

                                22 août 2021 à 16:30:22

                                J'ai réinstallé la dernière version du SDK mais rien n'a changé. 

                                Cependant, je suis allé sur vkconfig puis j'ai cliqué sur Tools tout en haut pour enfin aller dans Vulkan Info. J'ai fait ensuite :

                                Device Properties and Extensions -> GPU0 -> Device Extensions.

                                Or je n'ai pas trouvé l'extension VK_NV_external_memory_capabilities :

                                Vulkan Info

                                Est-ce normal que je ne l'ai pas ?

                                Peut-être est-ce pour ça que j'ai le message d'erreur qui me dit que cette extensions n'est pas activé et donc qu'il n'a pas pu appeler vkGetPhysicalDeviceExternalImageFormatProperties().

                                Dois-je l'activer manuellement ? 

                                Si oui, comment ?

                                De plus, quand je clique sur "launch" pour avoir le cube qui tourne, j'ai le même message !

                                erreur extension

                                Cordialement.

                                -
                                Edité par Haulun 22 août 2021 à 16:42:36

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 août 2021 à 18:45:19

                                  une mise a jour du driver GPU que tu as manqué peut etre?
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Eug

                                    22 août 2021 à 22:14:53

                                    Je regarde ça, cordialement

                                    ________________________________________________________

                                    Mon driver GPU est mis à jour et........ ça ne fonctionne toujours pas

                                    Ca m'agace :/

                                    -
                                    Edité par Haulun 22 août 2021 à 22:48:04

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 août 2021 à 19:17:29

                                      Plus personne n'a de chose à proposer comme possible solution ?

                                      Tant que ce ne sera pas fixé, je ne pourrais sûrement pas continuer le tuto (car je suppose que ça va faire boguer mon programme à un certain moment voire le faire crash). 

                                      Piqure de rappel : 

                                      • Les validation errors font la gueule à cause d'une extension qui n'est apparemment pas activée.
                                      • Mon driver GPU est à jour mais quand je vais dans vkconfig, l'extension VK_NV_external_memory_capabilities n'y est pas (Comment l'ajouter ?)
                                      • Le SDK est à jour.
                                      • Aucun appel à une quelconque fonction appelée vkGetPhysicalDeviceExternalImageFormatProperties().

                                      Je veux vraiment continuer le tuto Vulkan mais pour le moment, c'est mort :/

                                      J'ai vraiment besoin de votre aide.

                                      Bien cordialement.

                                      Haulun

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        24 août 2021 à 20:36:33

                                        Selon la documentation, c'est une extension obsolète depuis Vulkan 1.1 :

                                        https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_NV_external_memory_capabilities.html

                                        Le SDK est peut-être à jour, mais faudrait penser à configurer le bidule pour qu'il n'utilise pas ces vieilleries, non ?

                                        Sinon, si vous avez les fichiers des symboles de tout ce fatras, collez un point d'arrêt sur l'appel de la fonction vkGetPhysicalDeviceExternalImageFormatPropertiesNV.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                                          25 août 2021 à 11:42:07

                                          Et sinon, à part cette erreur de validation, si tu choisis le format UNORM des images de ta swapchain, le reste fonctionne ?

                                          -
                                          Edité par dragonjoker 25 août 2021 à 11:42:35

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Si vous ne trouvez plus rien, cherchez autre chose.

                                            25 août 2021 à 16:40:12

                                            dragonjoker a écrit:

                                            Et sinon, à part cette erreur de validation, si tu choisis le format UNORM des images de ta swapchain, le reste fonctionne ?

                                            Si j'utilise UNORM, il ne reste que la première erreur qui est :

                                            validation layer: Validation Error: [ UNASSIGNED-GeneralParameterError-ExtensionNotEnabled ] Object 0: VK_NULL_HANDLE, type = VK_OBJECT_TYPE_INSTANCE; | MessageID = 0xe92b452d | Attemped to call vkGetPhysicalDeviceExternalImageFormatPropertiesNV() but its required extension VK_NV_external_memory_capabilities has not been enabled

                                            et les autres erreurs en dessous de celui-ci disparaissent donc oui, "le reste fonctionne".

                                            bacelar a écrit:

                                            Le SDK est peut-être à jour, mais faudrait penser à configurer le bidule pour qu'il n'utilise pas ces vieilleries, non ?

                                            Comment dois-je faire cela ?

                                            Cordialement



                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              25 août 2021 à 17:06:56

                                              Si le reste fonctionne, ignore la pour l'instant...

                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Si vous ne trouvez plus rien, cherchez autre chose.

                                                25 août 2021 à 17:56:41

                                                dragonjoker a écrit:

                                                Si le reste fonctionne, ignore la pour l'instant...


                                                Espérons que ça ne me plante pas le reste plus tard dans ce cas :(
                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Validation Error à la création de la Swapchain

                                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                • Editeur
                                                • Markdown