Browse Source

vulkan: improve loop in createVulkanVertexFormat

niki 2 years ago
parent
commit
3b3bd63c93
2 changed files with 13 additions and 5 deletions
  1. 8 4
      src/modules/graphics/vulkan/Graphics.cpp
  2. 5 1
      src/modules/graphics/vulkan/Shader.cpp

+ 8 - 4
src/modules/graphics/vulkan/Graphics.cpp

@@ -2184,17 +2184,18 @@ void Graphics::createVulkanVertexFormat(
 {
 	std::set<uint32_t> usedBuffers;
 
-	auto allBits = vertexAttributes.enableBits;
+	auto enableBits = vertexAttributes.enableBits;
+	auto allBits = enableBits;
 
 	bool usesColor = false;
 
 	uint8_t highestBufferBinding = 0;
 
-	// fixme: change to loop like in opengl implementation ?
-	for (uint32_t i = 0; i < VertexAttributes::MAX; i++)
+	uint32_t i = 0;
+	while (allBits)
 	{
 		uint32 bit = 1u << i;
-		if (allBits & bit)
+		if (enableBits & bit)
 		{
 			if (i == ATTRIB_COLOR)
 				usesColor = true;
@@ -2225,6 +2226,9 @@ void Graphics::createVulkanVertexFormat(
 
 			attributeDescriptions.push_back(attributeDescription);
 		}
+
+		i++;
+		allBits >>= 1;
 	}
 
 	if (!usesColor)

+ 5 - 1
src/modules/graphics/vulkan/Shader.cpp

@@ -355,6 +355,7 @@ void Shader::cmdPushDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBind
 	};
 
 	for (const auto &builtin : builtinUniformTextures)
+	{
 		if (builtinUniformInfo[builtin] != nullptr)
 		{
 			auto texture = dynamic_cast<Texture*>(builtinUniformInfo[builtin]->textures[0]);
@@ -374,6 +375,7 @@ void Shader::cmdPushDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBind
 
 			vkUpdateDescriptorSets(device, 1, &textureWrite, 0, nullptr);
 		}
+	}
 
 	vkCmdBindDescriptorSets(commandBuffer, bindPoint, pipelineLayout, 0, 1, &currentDescriptorSet, 0, nullptr);
 
@@ -765,7 +767,7 @@ void Shader::compileShaders()
 		auto shaderResources = comp.get_shader_resources(active);
 		comp.set_enabled_interface_variables(std::move(active));
 
-		for (const auto  &resource : shaderResources.uniform_buffers)
+		for (const auto &resource : shaderResources.uniform_buffers)
 		{
 			if (resource.name == "gl_DefaultUniformBlock")
 			{
@@ -1039,12 +1041,14 @@ void Shader::setVideoTextures(graphics::Texture *ytexture, graphics::Texture *cb
 	static_assert(textures.size() == builtIns.size(), "expected number of textures to be the same");
 
 	for (size_t i = 0; i < textures.size(); i++)
+	{
 		if (builtinUniformInfo[builtIns[i]] != nullptr)
 		{
 			textures[i]->retain();
 			builtinUniformInfo[builtIns[i]]->textures[0]->release();
 			builtinUniformInfo[builtIns[i]]->textures[0] = textures[i];
 		}
+	}
 }
 
 bool Shader::hasUniform(const std::string &name) const