Fix device local alloc in hellovulkantexture
Running with QT_VK_FORCE_STAGE_TEX does not work at all with recent NVIDIA drivers due to QVulkanWindow's and the example's naive way of picking the memory index. Enhance this and add a warning note to the QVulkanWindow docs as well. Change-Id: I7f200e11d982b56e3da3b71ee3915bd7bfca5cc1 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
parent
48897f97e7
commit
1c6bd414dd
@ -223,6 +223,16 @@ bool VulkanRenderer::createTextureImage(const QSize &size, VkImage *image, VkDev
|
||||
VkMemoryRequirements memReq;
|
||||
m_devFuncs->vkGetImageMemoryRequirements(dev, *image, &memReq);
|
||||
|
||||
if (!(memReq.memoryTypeBits & (1 << memIndex))) {
|
||||
VkPhysicalDeviceMemoryProperties physDevMemProps;
|
||||
m_window->vulkanInstance()->functions()->vkGetPhysicalDeviceMemoryProperties(m_window->physicalDevice(), &physDevMemProps);
|
||||
for (uint32_t i = 0; i < physDevMemProps.memoryTypeCount; ++i) {
|
||||
if (!(memReq.memoryTypeBits & (1 << i)))
|
||||
continue;
|
||||
memIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
VkMemoryAllocateInfo allocInfo = {
|
||||
VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
|
||||
nullptr,
|
||||
|
@ -2298,6 +2298,11 @@ uint32_t QVulkanWindow::hostVisibleMemoryIndex() const
|
||||
\note Calling this function is only valid from the invocation of
|
||||
QVulkanWindowRenderer::initResources() up until
|
||||
QVulkanWindowRenderer::releaseResources().
|
||||
|
||||
\note It is not guaranteed that this memory type is always suitable. The
|
||||
correct, cross-implementation solution - especially for device local images
|
||||
- is to manually pick a memory type after checking the mask returned from
|
||||
\c{vkGetImageMemoryRequirements}.
|
||||
*/
|
||||
uint32_t QVulkanWindow::deviceLocalMemoryIndex() const
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user