Просмотр исходного кода

Fixing Vulkan infinite loop when generating image barriers

BearishSun 8 лет назад
Родитель
Сommit
6688eb5447
1 измененных файлов с 5 добавлено и 2 удалено
  1. 5 2
      Source/BansheeVulkanRenderAPI/Source/BsVulkanTexture.cpp

+ 5 - 2
Source/BansheeVulkanRenderAPI/Source/BsVulkanTexture.cpp

@@ -474,7 +474,8 @@ namespace bs { namespace ct
 
 
 							for (UINT32 i = 0; i < barrier->subresourceRange.levelCount; i++)
 							for (UINT32 i = 0; i < barrier->subresourceRange.levelCount; i++)
 							{
 							{
-								UINT32 idx = i * range.layerCount + (face - range.baseArrayLayer);
+								UINT32 curMip = (barrier->subresourceRange.baseMipLevel + i) - range.baseMipLevel;
+								UINT32 idx = curMip * range.layerCount + (face - range.baseArrayLayer);
 								processed[idx] = true;
 								processed[idx] = true;
 							}
 							}
 						}
 						}
@@ -505,7 +506,8 @@ namespace bs { namespace ct
 
 
 							for (UINT32 i = 0; i < barrier->subresourceRange.layerCount; i++)
 							for (UINT32 i = 0; i < barrier->subresourceRange.layerCount; i++)
 							{
 							{
-								UINT32 idx = (mip - range.baseMipLevel) * range.layerCount + i;
+								UINT32 curFace = (barrier->subresourceRange.baseArrayLayer + i) - range.baseArrayLayer;
+								UINT32 idx = (mip - range.baseMipLevel) * range.layerCount + curFace;
 								processed[idx] = true;
 								processed[idx] = true;
 							}
 							}
 						}
 						}
@@ -531,6 +533,7 @@ namespace bs { namespace ct
 							face = range.baseArrayLayer + j;
 							face = range.baseArrayLayer + j;
 
 
 							found = true;
 							found = true;
+							processed[idx] = true;
 							break;
 							break;
 						}
 						}
 					}
 					}