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

Bugfix: Issue with param block size calculation when they contain array elements

BearishSun 8 лет назад
Родитель
Сommit
ff4188ee13

+ 2 - 2
Source/BansheeD3D11RenderAPI/BsD3D11RenderAPI.cpp

@@ -1388,7 +1388,7 @@ namespace bs { namespace ct
 				else
 					size = Math::divideAndRoundUp(typeInfo.size, 16U) * 4;
 
-				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U);
+				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U) * 4;
 
 				param.elementSize = size;
 				param.arrayElementStride = size;
@@ -1411,7 +1411,7 @@ namespace bs { namespace ct
 				{
 					// Structs are always aligned and arounded up to 4 component vectors
 					size = Math::divideAndRoundUp(param.elementSize, 16U) * 4;
-					block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U);
+					block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U) * 4;
 				}
 				else
 				{

+ 1 - 1
Source/BansheeGLRenderAPI/BsGLRenderAPI.cpp

@@ -2793,7 +2793,7 @@ namespace bs { namespace ct
 			{
 				// Structs are always aligned and rounded up to vec4
 				size = Math::divideAndRoundUp(param.elementSize, 16U) * 4;
-				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U);
+				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U) * 4;
 			}
 			else
 				size = GLSLParamParser::calcInterfaceBlockElementSizeAndOffset(param.type, param.arraySize, block.blockSize);

+ 1 - 1
Source/BansheeVulkanRenderAPI/BsVulkanRenderAPI.cpp

@@ -590,7 +590,7 @@ namespace bs { namespace ct
 			{
 				// Structs are always aligned and rounded up to vec4
 				size = Math::divideAndRoundUp(param.elementSize, 16U) * 4;
-				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U);
+				block.blockSize = Math::divideAndRoundUp(block.blockSize, 4U) * 4;
 			}
 			else
 				size = VulkanUtility::calcInterfaceBlockElementSizeAndOffset(param.type, param.arraySize, block.blockSize);