58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
// =============================================
|
|
// Aster: pipeline.h
|
|
// Copyright (c) 2020-2025 Anish Bhobe
|
|
// =============================================
|
|
|
|
#pragma once
|
|
|
|
#include "global.h"
|
|
|
|
#include <EASTL/vector.h>
|
|
|
|
struct Device;
|
|
|
|
struct Pipeline
|
|
{
|
|
enum class Kind
|
|
{
|
|
eGraphics,
|
|
eCompute,
|
|
};
|
|
|
|
const Device *m_Device = nullptr;
|
|
vk::PipelineLayout m_Layout;
|
|
vk::Pipeline m_Pipeline = nullptr;
|
|
eastl::vector<vk::DescriptorSetLayout> m_SetLayouts;
|
|
Kind m_Kind;
|
|
|
|
Pipeline() = default;
|
|
Pipeline(const Device *device, vk::PipelineLayout layout, vk::Pipeline pipeline,
|
|
eastl::vector<vk::DescriptorSetLayout> &&setLayouts, Kind kind);
|
|
~Pipeline();
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(Pipeline);
|
|
|
|
Pipeline(Pipeline &&other) noexcept
|
|
: m_Device{other.m_Device}
|
|
, m_Layout{Take(other.m_Layout)}
|
|
, m_Pipeline{Take(other.m_Pipeline)}
|
|
, m_SetLayouts{std::move(other.m_SetLayouts)}
|
|
, m_Kind{other.m_Kind}
|
|
{
|
|
}
|
|
|
|
Pipeline &
|
|
operator=(Pipeline &&other) noexcept
|
|
{
|
|
if (this == &other)
|
|
return *this;
|
|
using eastl::swap;
|
|
swap(m_Device, other.m_Device);
|
|
swap(m_Layout, other.m_Layout);
|
|
swap(m_Pipeline, other.m_Pipeline);
|
|
swap(m_SetLayouts, other.m_SetLayouts);
|
|
swap(m_Kind, other.m_Kind);
|
|
return *this;
|
|
}
|
|
};
|