2016-09-29 38 views
-1

創建的映像時我已經被分配了相應的內存(VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)創造了vkCreateImage我自己的交換鏈。並通過映射與其關聯的內存獲取vkQueueSubmit和vkQueueWaitIdle後的圖像數據。vkCmdCopyImageToBuffer不起作用與應用

由於分期緩衝區的優勢,我創建了VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT以上內存,並沒有在命令緩衝區一個vkCmdCopyImageToBuffer但結果是所有值0。但是,如果我只是一個vkCreateBuffer聯想到上述圖像並做vkCmdCopyBuffer我做獲取所有渲染圖像。

這是預期的行爲,我們不能這樣做vkCmdCopyImageToBuffer除非它是一個系統swapchain?

編輯1:

我渲染vkCreateImage內存類型VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT。事情是,當我在這個緩衝區做vkCmdCopyImageToBuffer圖像數據全爲0。 現在,當我創建一個vkCreateBuffer並綁定與vkBindBufferMemory上述圖像存儲器。之後我做了vkCmdCopyBuffer,我確實得到了圖像數據。爲什麼vkCmdCopyImageToBuffer不起作用?是因爲我爲圖像分配內存嗎?因爲在我們沒有分配內存的交換鏈圖像的情況下,使用vkCmdCopyImageToBuffer可以正常工作。爲什麼我需要額外的開銷來將緩衝區綁定到我分配的映像內存才能使其工作。

+0

「*我創造了我自己的交換鏈*」你不能創建自己的存儲交換鏈。交換鏈圖像的內存由實現擁有,而不是你。 –

+0

@NicolBolas我沒有使用系統的交換鏈,但創建的圖像,並使用圍欄,所以在所有這些都會像系統的交換鏈。我正在做這些圖像的離屏渲染。 –

+0

我的觀點是,無論它可能「像交換鏈一樣」,它*都不是交換鏈。這只是你創建的一些圖像,你正在渲染。在任何情況下,你的問題都沒有說明你分配哪種對象以及哪種內存。也許你可以發佈一些代碼來明確你在做什麼。 –

回答

0

檢查所關注圖像的佈局。您可能需要一個屏障來適當地轉換佈局。

您也可以打開驗證層,看看他們是否抓到任何東西。

(我很困惑被描述爲好,我模糊的回答很抱歉。)

+0

可以是任何東西。同步,失效(對於非連貫)或使用標誌也是如此。 – krOoze