vulkan: improve loop in createVulkanVertexFormat

This commit is contained in:
niki
2022-10-27 14:22:43 +02:00
parent e95319873c
commit 3b3bd63c93
2 changed files with 13 additions and 5 deletions
+8 -4
View File
@@ -2184,17 +2184,18 @@ void Graphics::createVulkanVertexFormat(
{ {
std::set<uint32_t> usedBuffers; std::set<uint32_t> usedBuffers;
auto allBits = vertexAttributes.enableBits; auto enableBits = vertexAttributes.enableBits;
auto allBits = enableBits;
bool usesColor = false; bool usesColor = false;
uint8_t highestBufferBinding = 0; uint8_t highestBufferBinding = 0;
// fixme: change to loop like in opengl implementation ? uint32_t i = 0;
for (uint32_t i = 0; i < VertexAttributes::MAX; i++) while (allBits)
{ {
uint32 bit = 1u << i; uint32 bit = 1u << i;
if (allBits & bit) if (enableBits & bit)
{ {
if (i == ATTRIB_COLOR) if (i == ATTRIB_COLOR)
usesColor = true; usesColor = true;
@@ -2225,6 +2226,9 @@ void Graphics::createVulkanVertexFormat(
attributeDescriptions.push_back(attributeDescription); attributeDescriptions.push_back(attributeDescription);
} }
i++;
allBits >>= 1;
} }
if (!usesColor) if (!usesColor)
+4
View File
@@ -355,6 +355,7 @@ void Shader::cmdPushDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBind
}; };
for (const auto &builtin : builtinUniformTextures) for (const auto &builtin : builtinUniformTextures)
{
if (builtinUniformInfo[builtin] != nullptr) if (builtinUniformInfo[builtin] != nullptr)
{ {
auto texture = dynamic_cast<Texture*>(builtinUniformInfo[builtin]->textures[0]); 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); vkUpdateDescriptorSets(device, 1, &textureWrite, 0, nullptr);
} }
}
vkCmdBindDescriptorSets(commandBuffer, bindPoint, pipelineLayout, 0, 1, &currentDescriptorSet, 0, nullptr); vkCmdBindDescriptorSets(commandBuffer, bindPoint, pipelineLayout, 0, 1, &currentDescriptorSet, 0, nullptr);
@@ -1039,6 +1041,7 @@ void Shader::setVideoTextures(graphics::Texture *ytexture, graphics::Texture *cb
static_assert(textures.size() == builtIns.size(), "expected number of textures to be the same"); static_assert(textures.size() == builtIns.size(), "expected number of textures to be the same");
for (size_t i = 0; i < textures.size(); i++) for (size_t i = 0; i < textures.size(); i++)
{
if (builtinUniformInfo[builtIns[i]] != nullptr) if (builtinUniformInfo[builtIns[i]] != nullptr)
{ {
textures[i]->retain(); textures[i]->retain();
@@ -1046,6 +1049,7 @@ void Shader::setVideoTextures(graphics::Texture *ytexture, graphics::Texture *cb
builtinUniformInfo[builtIns[i]]->textures[0] = textures[i]; builtinUniformInfo[builtIns[i]]->textures[0] = textures[i];
} }
} }
}
bool Shader::hasUniform(const std::string &name) const bool Shader::hasUniform(const std::string &name) const
{ {