Vulkan renderer backend (#2564)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bart Louwers <bart.louwers@gmail.com>
This commit is contained in:
@@ -16,6 +16,12 @@
|
||||
#include <mbgl/shaders/mtl/clipping_mask.hpp>
|
||||
#endif // MLN_RENDER_BACKEND_METAL
|
||||
|
||||
#if MLN_RENDER_BACKEND_VULKAN
|
||||
#include <mbgl/vulkan/render_pass.hpp>
|
||||
#include <mbgl/shaders/vulkan/clipping_mask.hpp>
|
||||
#include <mbgl/vulkan/context.hpp>
|
||||
#endif // MLN_RENDER_BACKEND_VULKAN
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
TransformParameters::TransformParameters(const TransformState& state_)
|
||||
@@ -139,6 +145,11 @@ void PaintParameters::clearStencil() {
|
||||
0,
|
||||
0}};
|
||||
mtlContext.renderTileClippingMasks(*renderPass, staticData, tileUBO);
|
||||
context.renderingStats().stencilClears++;
|
||||
#elif MLN_RENDER_BACKEND_VULKAN
|
||||
const auto& vulkanRenderPass = static_cast<vulkan::RenderPass&>(*renderPass);
|
||||
vulkanRenderPass.clearStencil();
|
||||
|
||||
context.renderingStats().stencilClears++;
|
||||
#else // !MLN_RENDER_BACKEND_METAL
|
||||
context.clearStencilBuffer(0b00000000);
|
||||
@@ -198,6 +209,39 @@ void PaintParameters::renderTileClippingMasks(const RenderTiles& renderTiles) {
|
||||
mtlContext.renderingStats().stencilUpdates++;
|
||||
}
|
||||
|
||||
#elif MLN_RENDER_BACKEND_VULKAN
|
||||
|
||||
std::vector<shaders::ClipUBO> tileUBOs;
|
||||
for (const auto& tileRef : *renderTiles) {
|
||||
const auto& tileID = tileRef.get().id;
|
||||
|
||||
const uint32_t stencilID = nextStencilID;
|
||||
const auto result = tileClippingMaskIDs.insert(std::make_pair(tileID, stencilID));
|
||||
if (result.second) {
|
||||
// inserted
|
||||
nextStencilID++;
|
||||
} else {
|
||||
// already present
|
||||
continue;
|
||||
}
|
||||
|
||||
if (tileUBOs.empty()) {
|
||||
tileUBOs.reserve(count);
|
||||
}
|
||||
|
||||
tileUBOs.emplace_back(shaders::ClipUBO{util::cast<float>(matrixForTile(tileID)), stencilID});
|
||||
}
|
||||
|
||||
if (!tileUBOs.empty()) {
|
||||
#if !defined(NDEBUG)
|
||||
const auto debugGroup = renderPass->createDebugGroup("tile-clip-masks");
|
||||
#endif
|
||||
|
||||
auto& vulkanContext = static_cast<vulkan::Context&>(context);
|
||||
vulkanContext.renderTileClippingMasks(*renderPass, staticData, tileUBOs);
|
||||
vulkanContext.renderingStats().stencilUpdates++;
|
||||
}
|
||||
|
||||
#else // !MLN_RENDER_BACKEND_METAL
|
||||
auto program = staticData.shaders->getLegacyGroup().get<ClippingMaskProgram>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user