3#include <shaderc/shaderc.h>
4#include <shaderc/status.h>
9#include <tl/expected.hpp>
10#include <vulkan/vulkan.hpp>
11#include <vulkan/vulkan_enums.hpp>
12#include <vulkan/vulkan_handles.hpp>
13#include <vulkan/vulkan_structs.hpp>
20 shaderc_compilation_status_invalid_stage,
21 shaderc_compilation_status_compilation_error,
22 shaderc_compilation_status_internal_error,
23 shaderc_compilation_status_null_result_object,
24 shaderc_compilation_status_validation_error,
25 shaderc_compilation_status_transformation_error,
26 shaderc_compilation_status_configuration_error)
31 reflect::spirv_t spirv;
32 ::vk::ShaderModule
module;
33 std::shared_ptr<spv_reflect::ShaderModule> reflection;
35 ShaderModule() =
default;
36 ShaderModule(reflect::spirv_t spirv, const ::vk::ShaderModule &module);
38 [[nodiscard]]
auto get_vertex_input_bindings() const
39 -> std::vector<::
vk::VertexInputBindingDescription>;
41 [[nodiscard]] auto get_vertex_input_attributes() const
42 -> std::vector<::
vk::VertexInputAttributeDescription>;
44 [[nodiscard]] auto get_descriptor_set_layout_bindings() const
45 -> std::vector<::
vk::DescriptorSetLayoutBinding>;
50 static auto create(const ::vk::Device &device,
51 const std::string &vertex_shader,
52 const std::string &fragment_shader)
53 -> expected<std::shared_ptr<Shader>>;
55 static auto compile_shader(const ::vk::Device &device,
56 const shaderc_shader_kind &shader_kind,
57 const std::string &filename,
58 const std::string &shader_source)
61 [[nodiscard]]
auto get_pipeline()
const {
return pipeline_; }
62 [[nodiscard]]
auto pipeline_layout()
const {
return pipeline_layout_; }
63 [[nodiscard]]
auto descriptor_layout()
const {
return descriptor_layout_; }
65 void fragment_shader(
const ShaderModule &fragment) {
66 fragment_shader_module_ = fragment;
69 void vertex_shader(
const ShaderModule &vertex) {
70 vertex_shader_module_ = vertex;
73 auto create_graphics_pipeline(const ::vk::Device &device,
74 const ::vk::RenderPass &render_pass,
75 const math::vec2i &size) -> expected<void>;
78 ::vk::DescriptorSetLayout descriptor_layout_;
79 ::vk::PipelineLayout pipeline_layout_;
80 ::vk::Pipeline pipeline_;
82 ShaderModule vertex_shader_module_;
83 ShaderModule fragment_shader_module_;
BOOST_DESCRIBE_ENUM(Result, eSuccess, eNotReady, eTimeout, eEventSet, eEventReset, eIncomplete, eErrorOutOfHostMemory, eErrorOutOfDeviceMemory, eErrorInitializationFailed, eErrorDeviceLost, eErrorMemoryMapFailed, eErrorLayerNotPresent, eErrorExtensionNotPresent, eErrorFeatureNotPresent, eErrorIncompatibleDriver, eErrorTooManyObjects, eErrorFormatNotSupported, eErrorFragmentedPool, eErrorUnknown, eErrorOutOfPoolMemory, eErrorOutOfPoolMemoryKHR, eErrorInvalidExternalHandle, eErrorInvalidExternalHandleKHR, eErrorFragmentation, eErrorFragmentationEXT, eErrorInvalidOpaqueCaptureAddress, eErrorInvalidDeviceAddressEXT, eErrorInvalidOpaqueCaptureAddressKHR, ePipelineCompileRequired, eErrorPipelineCompileRequiredEXT, ePipelineCompileRequiredEXT, eErrorSurfaceLostKHR, eErrorNativeWindowInUseKHR, eSuboptimalKHR, eErrorOutOfDateKHR, eErrorIncompatibleDisplayKHR, eErrorValidationFailedEXT, eErrorInvalidShaderNV, eErrorImageUsageNotSupportedKHR, eErrorVideoPictureLayoutNotSupportedKHR, eErrorVideoProfileOperationNotSupportedKHR, eErrorVideoProfileFormatNotSupportedKHR, eErrorVideoProfileCodecNotSupportedKHR, eErrorVideoStdVersionNotSupportedKHR, eErrorInvalidDrmFormatModifierPlaneLayoutEXT, eErrorNotPermittedKHR, eErrorNotPermittedEXT, eThreadIdleKHR, eThreadDoneKHR, eOperationDeferredKHR, eOperationNotDeferredKHR, eErrorCompressionExhaustedEXT)
Definition render_pass.hpp:19
tl::expected< T, Err > expected
Definition errors.hpp:49
#define DEFINE_ERROR_IMPL(CAT_NAME, ERROR_ENUM)
This macro creates the hooks into std::error_code for a given error enum.
Definition errors.hpp:61