2017-09-13 1 views
0

유효성 검사 레이어 및 디버그 콜백 확장 기능이 활성화되어 작동 중 (잘못된 구조체 등에 응답 함)에도 여전히 "VK_ERROR_VALIDATION_FAILED_EXT"결과가 vkCreateSwapchainKHR()에서 발생하며 오류를 찾아내는 유효성 검사 레이어 오류가 없습니다. ... 스왑 체인 생성 (GTX 970을 사용) :vkCreateSwapchainKHR 오류

VkBool32 isSupported = false; 
vkGetPhysicalDeviceSurfaceSupportKHR(physicalDevices[0], 0, surface, &isSupported); 

if (!isSupported) { 
    std::cout << "*ERROR* This device doesn't support surfaces" << std::endl; 
} 

VkSurfaceCapabilitiesKHR surfCaps; 
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevices[0], surface, &surfCaps); 

std::vector<VkSurfaceFormatKHR> deviceFormats; 
uint32_t formatCount; 
vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevices[0], surface, &formatCount, nullptr); 
deviceFormats.resize(formatCount); 
vkGetPhysicalDeviceSurfaceFormatsKHR(physicalDevices[0], surface, &formatCount, deviceFormats.data()); 


swapChainInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; 
swapChainInfo.pNext = nullptr; 
swapChainInfo.flags = 0; 
swapChainInfo.surface = surface; 

swapChainInfo.minImageCount = surfCaps.minImageCount; 
swapChainInfo.imageFormat = VK_FORMAT_B8G8R8A8_UNORM; 
swapChainInfo.imageColorSpace = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR; 
swapChainInfo.imageExtent = surfCaps.currentExtent; 
swapChainInfo.imageArrayLayers = 1; 
swapChainInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; 
swapChainInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; 

swapChainInfo.queueFamilyIndexCount = 0; 
swapChainInfo.pQueueFamilyIndices = VK_NULL_HANDLE; 
swapChainInfo.preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; 
swapChainInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; 
swapChainInfo.presentMode = VK_PRESENT_MODE_FIFO_KHR; 
swapChainInfo.clipped = VK_TRUE; // TODO : TEST clipping against another window 
swapChainInfo.oldSwapchain = VK_NULL_HANDLE; 

result = vkCreateSwapchainKHR(device, &swapChainInfo, nullptr, &swapChain); 
if (result) { 
    std::cout << "*ERROR* Swapchain Creation Failed :" << result << std::endl; 
} 

(오류를 반환하지 않습니다) GLFW를 사용하여 표면 작성 :

if (result = glfwCreateWindowSurface(instance, window, nullptr, &surface)) 
    { 
     std::cout << "*ERROR* Surface Creation Failed : " << result << std::endl; 
    } 
+0

에 대한 swapChainInfo.compositeAlpha을 확인하지 않는 surfCaps.supportedTransforms

  • 에 대해 swapChainInfo.preTransform을 확인하지 않는 nullptr
  • 사용할 수 있습니까? – krOoze

  • 답변

    0

    의 이유로 검증의 거대한 숫자가 있습니다 vkCreateSwapchainKHR은 실패합니다 (PreCallValidateCreateSwapchainKHRcore_validation.cpp에 있음).

    오류가 발생한 이유를 알려주는 코드가 충분하지 않을 수 있습니다. 예를 들어 표면이 유효하지 않아 오류가 발생했을 수 있습니다. 그러나 문제를 정확히 찾아 내기 위해 디버그 로그에 실패 메시지가 표시되어야합니다. 그러면 디버그 로그가 정확한 이유를 알려줍니다. 스왑 체인을 만들려고하기 전에 CreateDebugReportCallbackEXT을 호출하여이 기능을 활성화해야합니다. 또한 VK_EXT_debug_report 확장 프로그램을 사용하도록 설정해야합니다. 자세한 내용은 here을 참조하십시오. 코드에 대한

    +0

    답장을 보내 주셔서 감사합니다. 구조체에서 사용할 수 없거나 유효하지 않은 기능을 사용할 때 콘솔에서 유효성 검사 오류가 발생하지만 CreateDebugReportCallbackEXT를 사용하여 관리하지 않으면 더 많은 정보를 확인할 수 있습니다. –

    +1

    CreateDebugReportCallbackEXT 사용하기 "내부 드로어 블 생성이 실패했습니다"라는 유효성 검증 오류가 발생하여 다음과 같은 메시지가 나타납니다. https://stackoverflow.com/questions/41379529/wat-does-the-vkcreateswapchainkhrinternal-drawable-creation-failed-means –

    1

    그냥 몇 점 (문제의 잠재적 원인) :

    당신은 모든 vkGet* 명령 VkResult 확인되지
    • 당신은 당신의 deviceFormats 에서 지원되는 형식에 대한 swapChainInfo.imageFormat을 확인하지 않는
    • surfCaps.currentExtent0xFFFFFFFF
    • swapChainInfo.pQueueFamilyIndices이 될 수있는 상황을 고려하지 않았습니다. 손잡이; 당신은 당신이 그것을 층과 같은 오류 해제를 반환합니까 surfCaps.supportedCompositeAlpha
    +0

    감사합니다. 답장, 이전 명령에 대한 결과를 캡처하는 것은 좋은 점이다. 내가 실수로 프로젝트 폴더를 삭제 한 전체 내용을 다시 한 번 확인해보고 내가 언급 한 검사에 관해서는 내가 테스트 한만큼, 내 그래픽 카드/화면에서 모두 사용할 수 있으며 잘못된 기능을 사용하면 유효성 검사 오류가 발생합니다. –

    +0

    c --a --u --s --e --s - ** ** 확인 오류가 발생해야합니다. 유효성 검사 레이어가 완전하고 버그가 없다고 가정하지 마십시오. – krOoze

    +0

    도움을 주셔서 감사합니다. GLFW가 OpenGL 컨텍스트를 만드는 것이 문제였습니다. https://stackoverflow.com/questions/41379529/wat-does-the-vkcreateswapchainkhrinternal-drawable-creation-failed-means –