blob: b24079495035b8c906bfd5df1e45edf1f177230d [file] [log] [blame]
/*
* Copyright 2025 Rive
*/
#pragma once
#include "rive/renderer/gpu.hpp"
#include "draw_shader_vulkan.hpp"
#include "render_pass_vulkan.hpp"
namespace rive::gpu
{
class PipelineManagerVulkan;
class DrawPipelineVulkan
{
public:
enum class Options
{
none = 0,
wireframe = 1 << 0,
};
constexpr static int OPTION_COUNT = 1;
struct PipelineProps
{
DrawType drawType;
ShaderFeatures shaderFeatures;
InterlockMode interlockMode;
ShaderMiscFlags shaderMiscFlags;
// Vulkan has pipeline props beyond just the standard ones
gpu::PipelineState pipelineState;
Options drawPipelineOptions;
RenderPassOptionsVulkan renderPassOptions;
VkFormat renderTargetFormat;
LoadAction colorLoadAction;
uint32_t subpassIndex;
#ifdef WITH_RIVE_TOOLS
SynthesizedFailureType synthesizedFailureType =
SynthesizedFailureType::none;
#endif
uint64_t createKey() const;
};
using VertexShaderType = DrawShaderVulkan;
using FragmentShaderType = DrawShaderVulkan;
DrawPipelineVulkan(PipelineManagerVulkan*,
const DrawPipelineLayoutVulkan&,
const PipelineProps&,
VkRenderPass
#ifdef WITH_RIVE_TOOLS
,
SynthesizedFailureType
#endif
);
~DrawPipelineVulkan();
DrawPipelineVulkan(const DrawPipelineVulkan&) = delete;
DrawPipelineVulkan& operator=(const DrawPipelineVulkan&) = delete;
operator VkPipeline() const { return m_vkPipeline; }
private:
const rcp<VulkanContext> m_vk;
VkPipeline m_vkPipeline = VK_NULL_HANDLE;
};
RIVE_MAKE_ENUM_BITSET(DrawPipelineVulkan::Options);
} // namespace rive::gpu