为什么vkCreateSwapchainKHR导致访问

为什么vkCreateSwapchainKHR导致访问

Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        在8个月前关闭。
                                                                                            
                
        
好的,所以我对Vulkan API还是很陌生,如我上一个问题所示。我对为什么vkCreateSwapchainKHR导致访问被拒绝感到非常困惑。

我尝试重新键入代码。我尝试了最小可行代码。我还尝试过在不同时间初始化交换链,但是它们似乎都不起作用。

像_sur_capab这样的变量是表面功能的获取时间早于此。并且,_logicalDevice只是VkDevice的一个实例。

VkSwapchainCreateInfoKHR cri = {  };
cri.clipped = VK_TRUE;
cri.oldSwapchain = VK_NULL_HANDLE;
cri.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
cri.flags = VkSwapchainCreateFlagBitsKHR::VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR;
cri.imageArrayLayers = 1;
cri.imageColorSpace = VkColorSpaceKHR::VK_COLORSPACE_SRGB_NONLINEAR_KHR;
cri.imageExtent = _sur_capab.maxImageExtent;
cri.imageFormat = VkFormat::VK_FORMAT_ASTC_5x4_UNORM_BLOCK;
cri.imageSharingMode = VkSharingMode::VK_SHARING_MODE_MAX_ENUM;
cri.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
cri.minImageCount = _sur_capab.minImageCount;
cri.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
cri.preTransform = _sur_capab.currentTransform;


vkCreateSwapchainKHR(
    _logicalDevice,
    &cri,
    nullptr,
    &_swapChain);

最佳答案

前面的一个建议:始终在启用验证层的情况下运行应用程序,它们应提示您代码中的潜在问题。

在不了解其余相关代码部分的情况下,我可以在上面的代码中看到一些潜在的问题:

第一个事实是您为flagsimageSharingMode设置了无效值。 _MAX_ENUM_值不用于初始化,因此您需要在此处传递适当的值。通常对于0flags,例如VK_SHARING_MODE_EXCLUSIVE表示imageSharingMode。检查规范,以了解哪些值对您的VkSwapchainCreateInfoKHR结构的成员有效。

接下来,您需要通过vkGetPhysicalDeviceSurfaceFormatsKHR检查设备上是否确实支持您请求的imageFormat。 VK_FORMAT_ASTC_5x4_UNORM_BLOCK是一种非常特定的格式,我可以想象只有极少数(如果有的话)实现将其支持为表面格式。

看起来您根本没有设置presentMode,由于初始化(等于0)而将其设置为VK_PRESENT_MODE_IMMEDIATE_KHR。您的目标实现可能不支持此模式,就像图像格式一样。您需要选择一个随处可用的当前模式,或者正确选择vkGetPhysicalDeviceSurfacePresentModesKHR支持的当前模式。

关于c++ - 为什么vkCreateSwapchainKHR导致访问冲突? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55886435/

10-11 01:09