BearishSun 9 лет назад
Родитель
Сommit
0e2f10dd0d

+ 3 - 3
Data/Raw/Engine/Shaders/PPEyeAdaptHistogramReduce.bsl

@@ -62,7 +62,7 @@ Technique : inherits("PPBase") =
 			in VStoFS
 			in VStoFS
 			{
 			{
 				layout(location = 0) vec2 uv0;
 				layout(location = 0) vec2 uv0;
-			} input;
+			} FSInput;
 		
 		
 			layout(location = 0) out vec4 fragColor;
 			layout(location = 0) out vec4 fragColor;
 			
 			
@@ -76,11 +76,11 @@ Technique : inherits("PPBase") =
 			
 			
 			void main()
 			void main()
 			{
 			{
-				ivec2 iUV = ivec2(trunc(input.uv0));
+				ivec2 iUV = ivec2(trunc(FSInput.uv0));
 				vec4 outputValue = vec4(0.0f);
 				vec4 outputValue = vec4(0.0f);
 
 
 				// Output texture only has two rows, store histogram on the first
 				// Output texture only has two rows, store histogram on the first
-				if(input.uv0.y < 1.0f)
+				if(FSInput.uv0.y < 1.0f)
 				{
 				{
 					// TODO - Potentially optimize using bilinear filtering
 					// TODO - Potentially optimize using bilinear filtering
 					for(uint i = 0; i < gThreadGroupCount; i++)
 					for(uint i = 0; i < gThreadGroupCount; i++)

+ 9 - 7
Source/BansheeCore/Source/BsGpuParamsSet.cpp

@@ -244,13 +244,15 @@ namespace bs
 					}
 					}
 				}
 				}
 
 
-				if (!isBlockValid)
-				{
-					LOGWRN("Found two param blocks with the same name but different contents: " + blockIter->first);
-					uniqueParamBlocks[blockIter->first] = BlockInfo(&curBlock, nullptr, false);
-
-					continue;
-				}
+				// Note: Ignoring mismatched blocks for now, because glslang parser doesn't report dead uniform entries,
+				// meaning identical blocks can have different sets of uniforms reported depending on which are unused.
+				//if (!isBlockValid)
+				//{
+				//	LOGWRN("Found two param blocks with the same name but different contents: " + blockIter->first);
+				//	uniqueParamBlocks[blockIter->first] = BlockInfo(&curBlock, nullptr, false);
+
+				//	continue;
+				//}
 			}
 			}
 		}
 		}
 
 

+ 1 - 0
Source/BansheeCore/Source/BsGpuPipelineParamInfo.cpp

@@ -117,6 +117,7 @@ namespace bs
 		for(UINT32 i = 0; i < mNumSets; i++)
 		for(UINT32 i = 0; i < mNumSets; i++)
 		{
 		{
 			mSetInfos[i].slotIndices = (UINT32*)dataPtr;
 			mSetInfos[i].slotIndices = (UINT32*)dataPtr;
+			memset(mSetInfos[i].slotIndices, -1, sizeof(UINT32) * mSetInfos[i].numSlots);
 			dataPtr += sizeof(UINT32) * mSetInfos[i].numSlots;
 			dataPtr += sizeof(UINT32) * mSetInfos[i].numSlots;
 
 
 			mSetInfos[i].slotTypes = (ParamType*)dataPtr;
 			mSetInfos[i].slotTypes = (ParamType*)dataPtr;

+ 11 - 2
Source/BansheeVulkanRenderAPI/Source/BsVulkanGpuParams.cpp

@@ -35,6 +35,8 @@ namespace bs
 				{
 				{
 					for (auto& entry : mPerDeviceData[i].perSetData[j].sets)
 					for (auto& entry : mPerDeviceData[i].perSetData[j].sets)
 						entry->destroy();
 						entry->destroy();
+
+					mPerDeviceData[i].perSetData[j].sets.~Vector<VulkanDescriptorSet*>();
 				}
 				}
 			}
 			}
 		}
 		}
@@ -86,7 +88,7 @@ namespace bs
 			}
 			}
 
 
 			mPerDeviceData[i].perSetData = (PerSetData*)dataIter;
 			mPerDeviceData[i].perSetData = (PerSetData*)dataIter;
-			dataIter += sizeof(perSetBytes);
+			dataIter += perSetBytes;
 
 
 			VulkanDescriptorManager& descManager = devices[i]->getDescriptorManager();
 			VulkanDescriptorManager& descManager = devices[i]->getDescriptorManager();
 			for (UINT32 j = 0; j < numSets; j++)
 			for (UINT32 j = 0; j < numSets; j++)
@@ -94,6 +96,8 @@ namespace bs
 				UINT32 numBindingsPerSet = vkParamInfo.getNumBindings(j);
 				UINT32 numBindingsPerSet = vkParamInfo.getNumBindings(j);
 
 
 				PerSetData& perSetData = mPerDeviceData[i].perSetData[j];
 				PerSetData& perSetData = mPerDeviceData[i].perSetData[j];
+				new (&perSetData.sets) Vector<VulkanDescriptorSet*>();
+
 				perSetData.writeSetInfos = (VkWriteDescriptorSet*)dataIter;
 				perSetData.writeSetInfos = (VkWriteDescriptorSet*)dataIter;
 				dataIter += sizeof(VkWriteDescriptorSet) * numBindingsPerSet;
 				dataIter += sizeof(VkWriteDescriptorSet) * numBindingsPerSet;
 
 
@@ -176,7 +180,12 @@ namespace bs
 			if (mPerDeviceData[i].perSetData == nullptr)
 			if (mPerDeviceData[i].perSetData == nullptr)
 				continue;
 				continue;
 
 
-			VulkanBuffer* bufferRes = vulkanParamBlockBuffer->getResource(i);
+			VulkanBuffer* bufferRes;
+			if (vulkanParamBlockBuffer != nullptr)
+				bufferRes = vulkanParamBlockBuffer->getResource(i);
+			else
+				bufferRes = nullptr;
+
 			if (bufferRes != nullptr)
 			if (bufferRes != nullptr)
 				mPerDeviceData[i].perSetData[set].writeInfos[slot].buffer.buffer = bufferRes->getHandle();
 				mPerDeviceData[i].perSetData[set].writeInfos[slot].buffer.buffer = bufferRes->getHandle();
 			else
 			else

+ 10 - 5
Source/BansheeVulkanRenderAPI/Source/BsVulkanGpuPipelineParamInfo.cpp

@@ -66,12 +66,15 @@ namespace bs
 
 
 			for (UINT32 j = 0; j < mSetInfos[i].numSlots; j++)
 			for (UINT32 j = 0; j < mSetInfos[i].numSlots; j++)
 			{
 			{
-				VkDescriptorSetLayoutBinding& binding = bindings[globalBindingIdx + j];
-				binding.binding = mLayoutInfos[i].numBindings + j;
-			}
+				if (mSetInfos[i].slotIndices[j] == -1)
+					continue;
+
+				VkDescriptorSetLayoutBinding& binding = bindings[globalBindingIdx];
+				binding.binding = j;
 
 
-			globalBindingIdx += mSetInfos[i].numSlots;
-			mLayoutInfos[i].numBindings += mSetInfos[i].numSlots;
+				mLayoutInfos[i].numBindings++;
+				globalBindingIdx++;
+			}
 		}
 		}
 
 
 		UINT32 offset = 0;
 		UINT32 offset = 0;
@@ -100,6 +103,8 @@ namespace bs
 			{
 			{
 				for (auto& entry : params)
 				for (auto& entry : params)
 				{
 				{
+					assert(false); // Accesing the slot below is wrong
+
 					VkDescriptorSetLayoutBinding& binding = mLayoutInfos[entry.second.set].bindings[entry.second.slot];
 					VkDescriptorSetLayoutBinding& binding = mLayoutInfos[entry.second.set].bindings[entry.second.slot];
 					binding.descriptorCount = 1;
 					binding.descriptorCount = 1;
 					binding.stageFlags |= stageFlagsLookup[i];
 					binding.stageFlags |= stageFlagsLookup[i];

+ 1 - 1
Source/BansheeVulkanRenderAPI/Source/BsVulkanGpuPipelineState.cpp

@@ -575,7 +575,7 @@ namespace bs
 				VkPipeline pipeline;
 				VkPipeline pipeline;
 				VkResult result = vkCreateComputePipelines(devices[i]->getLogical(), VK_NULL_HANDLE, 1, &pipelineCI,
 				VkResult result = vkCreateComputePipelines(devices[i]->getLogical(), VK_NULL_HANDLE, 1, &pipelineCI,
 														   gVulkanAllocator, &pipeline);
 														   gVulkanAllocator, &pipeline);
-				assert(result != VK_SUCCESS);
+				assert(result == VK_SUCCESS);
 
 
 
 
 				mPerDeviceData[i].pipeline = rescManager.create<VulkanPipeline>(pipeline);
 				mPerDeviceData[i].pipeline = rescManager.create<VulkanPipeline>(pipeline);

+ 1 - 1
Source/BansheeVulkanRenderAPI/Source/BsVulkanTexture.cpp

@@ -75,7 +75,7 @@ namespace bs
 		mMainView = createView(completeSurface);
 		mMainView = createView(completeSurface);
 
 
 		UINT32 numSubresources = mNumFaces * mNumMipLevels;
 		UINT32 numSubresources = mNumFaces * mNumMipLevels;
-		mSubresources = (VulkanImageSubresource**)bs_alloc<VulkanImageSubresource*>(numSubresources);
+		mSubresources = (VulkanImageSubresource**)bs_alloc(sizeof(VulkanImageSubresource*) * numSubresources);
 		for (UINT32 i = 0; i < numSubresources; i++)
 		for (UINT32 i = 0; i < numSubresources; i++)
 			mSubresources[i] = owner->create<VulkanImageSubresource>();
 			mSubresources[i] = owner->create<VulkanImageSubresource>();
 	}
 	}