UBO layer bind optimization (#2335)

This commit is contained in:
Alex Cristici
2024-04-26 19:15:58 +03:00
committed by GitHub
parent 84ec4f8234
commit 6ebbc3dd6a
3 changed files with 36 additions and 12 deletions

View File

@@ -93,8 +93,7 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters)
const auto debugGroupRender = parameters.encoder->createDebugGroup(label_render.c_str());
#endif
bindUniformBuffers();
bool bindUBOs = false;
visitDrawables([&](gfx::Drawable& drawable) {
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
return;
@@ -121,10 +120,17 @@ void TileLayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters)
context.setStencilMode(drawable.getEnableStencil() ? stencilMode3d : gfx::StencilMode::disabled());
}
if (!bindUBOs) {
bindUniformBuffers();
bindUBOs = true;
}
drawable.draw(parameters);
});
unbindUniformBuffers();
if (bindUBOs) {
unbindUniformBuffers();
}
}
void TileLayerGroupGL::bindUniformBuffers() const {
@@ -178,8 +184,7 @@ void LayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) {
return;
}
bindUniformBuffers();
bool bindUBOs = false;
visitDrawables([&](gfx::Drawable& drawable) {
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
return;
@@ -193,10 +198,17 @@ void LayerGroupGL::render(RenderOrchestrator&, PaintParameters& parameters) {
tweaker->execute(drawable, parameters);
}
if (!bindUBOs) {
bindUniformBuffers();
bindUBOs = true;
}
drawable.draw(parameters);
});
unbindUniformBuffers();
if (bindUBOs) {
unbindUniformBuffers();
}
}
void LayerGroupGL::bindUniformBuffers() const {

View File

@@ -46,8 +46,7 @@ void LayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
auto& context = static_cast<Context&>(parameters.context);
auto& renderPass = static_cast<RenderPass&>(*parameters.renderPass);
bindUniformBuffers(renderPass);
bool bindUBOs = false;
visitDrawables([&](gfx::Drawable& drawable) {
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
return;
@@ -57,10 +56,17 @@ void LayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
tweaker->execute(drawable, parameters);
}
if (!bindUBOs) {
bindUniformBuffers(renderPass);
bindUBOs = true;
}
drawable.draw(parameters);
});
unbindUniformBuffers(renderPass);
if (bindUBOs) {
unbindUniformBuffers(renderPass);
}
}
void LayerGroup::bindUniformBuffers(RenderPass& renderPass) const noexcept {

View File

@@ -120,8 +120,7 @@ void TileLayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
parameters.renderTileClippingMasks(stencilTiles);
}
bindUniformBuffers(renderPass);
bool bindUBOs = false;
visitDrawables([&](gfx::Drawable& drawable) {
if (!drawable.getEnabled() || !drawable.hasRenderPass(parameters.pass)) {
return;
@@ -139,10 +138,17 @@ void TileLayerGroup::render(RenderOrchestrator&, PaintParameters& parameters) {
renderPass.setDepthStencilState(state);
}
if (!bindUBOs) {
bindUniformBuffers(renderPass);
bindUBOs = true;
}
drawable.draw(parameters);
});
unbindUniformBuffers(renderPass);
if (bindUBOs) {
unbindUniformBuffers(renderPass);
}
}
void TileLayerGroup::bindUniformBuffers(RenderPass& renderPass) const noexcept {