blob: c15ff2633a800759ab2d1248b0614e9b27f526e5 [file] [log] [blame]
/*
* Copyright 2025 Rive
*/
#pragma once
#include <vulkan/vulkan.h>
#include "rive/renderer/vulkan/vulkan_context.hpp"
#include "rive/renderer/gpu.hpp"
#include "draw_pipeline_layout_vulkan.hpp"
namespace rive::gpu
{
class PipelineManagerVulkan;
class RenderPassVulkan
{
public:
constexpr static uint64_t FORMAT_BIT_COUNT = 19;
constexpr static uint64_t LOAD_OP_BIT_COUNT = 2;
constexpr static uint64_t KEY_BIT_COUNT =
FORMAT_BIT_COUNT + DrawPipelineLayoutVulkan::BIT_COUNT +
LOAD_OP_BIT_COUNT;
static_assert(KEY_BIT_COUNT <= 32);
static uint32_t Key(gpu::InterlockMode,
DrawPipelineLayoutVulkan::Options,
VkFormat renderTargetFormat,
gpu::LoadAction);
RenderPassVulkan(PipelineManagerVulkan*,
gpu::InterlockMode,
DrawPipelineLayoutVulkan::Options,
VkFormat renderTargetFormat,
gpu::LoadAction);
~RenderPassVulkan();
RenderPassVulkan(const RenderPassVulkan&) = delete;
RenderPassVulkan& operator=(const RenderPassVulkan&) = delete;
const DrawPipelineLayoutVulkan* drawPipelineLayout() const
{
return m_drawPipelineLayout;
}
operator VkRenderPass() const { return m_renderPass; }
private:
const rcp<VulkanContext> m_vk;
// Raw pointer into impl->m_drawPipelineLayouts. RenderContextVulkanImpl
// ensures the pipline layouts outlive this RenderPass instance.
const DrawPipelineLayoutVulkan* m_drawPipelineLayout = nullptr;
VkRenderPass m_renderPass = VK_NULL_HANDLE;
};
} // namespace rive::gpu