mirror of
https://github.com/love2d/love.git
synced 2026-08-20 04:30:09 +02:00
vulkan: improve loop in createVulkanVertexFormat
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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, ¤tDescriptorSet, 0, nullptr);
|
vkCmdBindDescriptorSets(commandBuffer, bindPoint, pipelineLayout, 0, 1, ¤tDescriptorSet, 0, nullptr);
|
||||||
|
|
||||||
@@ -765,7 +767,7 @@ void Shader::compileShaders()
|
|||||||
auto shaderResources = comp.get_shader_resources(active);
|
auto shaderResources = comp.get_shader_resources(active);
|
||||||
comp.set_enabled_interface_variables(std::move(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")
|
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");
|
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();
|
||||||
builtinUniformInfo[builtIns[i]]->textures[0]->release();
|
builtinUniformInfo[builtIns[i]]->textures[0]->release();
|
||||||
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
|
||||||
|
|||||||
Reference in New Issue
Block a user