Refactor various headers
This commit is contained in:
@@ -27,7 +27,6 @@ set(ENGINE_SRC
|
||||
platform/linux/x11/window_driver.cpp
|
||||
platform/windows/window_driver.cpp
|
||||
platform/window_driver.cpp
|
||||
render/renderer.cpp
|
||||
render/render_device.cpp
|
||||
render/render_driver.cpp
|
||||
)
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
namespace Nova {
|
||||
enum class WindowAPI { WAYLAND, WINDOWS, X11 };
|
||||
|
||||
class WindowDriver;
|
||||
|
||||
struct Window;
|
||||
using WindowID = Window*;
|
||||
} // namespace Nova
|
||||
@@ -7,13 +7,17 @@
|
||||
#pragma once
|
||||
|
||||
#include <nova/api.h>
|
||||
#include <nova/platform/window_fwd.h>
|
||||
#include <nova/render/render_fwd.h>
|
||||
#include <nova/platform/platform_structs.h>
|
||||
#include <nova/render/render_structs.h>
|
||||
#include <nova/types.h>
|
||||
|
||||
#include <string_view>
|
||||
|
||||
namespace Nova {
|
||||
class RenderDriver;
|
||||
|
||||
enum class WindowAPI { WAYLAND, WINDOWS, X11 };
|
||||
|
||||
class NOVA_API WindowDriver {
|
||||
public:
|
||||
static WindowDriver* create();
|
||||
|
||||
@@ -7,15 +7,6 @@
|
||||
#pragma once
|
||||
|
||||
namespace Nova {
|
||||
enum class CullMode { NONE, FRONT, BACK };
|
||||
enum class FrontFace { CLOCKWISE, COUNTER_CLOCKWISE };
|
||||
enum class InputRate { VERTEX, INSTANCE };
|
||||
enum class PipelineType { GRAPHICS, COMPUTE };
|
||||
enum class PrimitiveTopology { POINT_LIST, LINE_LIST, LINE_STRIP, TRIANGLE_LIST, TRIANGLE_STRIP };
|
||||
enum class QueueType { UNDEFINED, GRAPHICS, COMPUTE, TRANSFER };
|
||||
enum class RenderAPI { DX12, VULKAN };
|
||||
enum class ShaderStage { VERTEX, FRAGMENT, GEOMETRY, TESS_CONTROL, TESS_EVAL, COMPUTE, MESH, TASK };
|
||||
|
||||
enum class DataFormat {
|
||||
UNDEFINED,
|
||||
R4G4_UNORM_PACK8,
|
||||
@@ -237,31 +228,4 @@ namespace Nova {
|
||||
G16_B16R16_2PLANE_422_UNORM,
|
||||
G16_B16_R16_3PLANE_444_UNORM,
|
||||
};
|
||||
|
||||
class RenderDriver;
|
||||
struct RenderDevice;
|
||||
|
||||
struct VertexAttribute;
|
||||
struct VertexBinding;
|
||||
struct RenderPassParams;
|
||||
struct GraphicsPipelineParams;
|
||||
struct ComputePipelineParams;
|
||||
|
||||
struct CommandBuffer;
|
||||
struct CommandPool;
|
||||
struct Pipeline;
|
||||
struct Queue;
|
||||
struct RenderPass;
|
||||
struct Shader;
|
||||
struct Surface;
|
||||
struct Swapchain;
|
||||
|
||||
using CommandBufferID = CommandBuffer*;
|
||||
using CommandPoolID = CommandPool*;
|
||||
using PipelineID = Pipeline*;
|
||||
using QueueID = Queue*;
|
||||
using RenderPassID = RenderPass*;
|
||||
using ShaderID = Shader*;
|
||||
using SurfaceID = Surface*;
|
||||
using SwapchainID = Swapchain*;
|
||||
} // namespace Nova
|
||||
13
engine/include/nova/render/params/compute_pipeline.h
Normal file
13
engine/include/nova/render/params/compute_pipeline.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Nova {
|
||||
struct ComputePipelineParams {
|
||||
// TODO
|
||||
};
|
||||
} // namespace Nova
|
||||
@@ -6,12 +6,18 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <nova/render/render_fwd.h>
|
||||
#include <nova/render/data_format.h>
|
||||
#include <nova/render/render_structs.h>
|
||||
#include <nova/types.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace Nova {
|
||||
enum class CullMode { NONE, FRONT, BACK };
|
||||
enum class FrontFace { CLOCKWISE, COUNTER_CLOCKWISE };
|
||||
enum class InputRate { VERTEX, INSTANCE };
|
||||
enum class PrimitiveTopology { POINT_LIST, LINE_LIST, LINE_STRIP, TRIANGLE_LIST, TRIANGLE_STRIP };
|
||||
|
||||
struct VertexAttribute {
|
||||
u32 binding = 0;
|
||||
u32 location = 0;
|
||||
@@ -25,8 +31,6 @@ namespace Nova {
|
||||
InputRate rate = InputRate::VERTEX;
|
||||
};
|
||||
|
||||
struct RenderPassParams {};
|
||||
|
||||
struct GraphicsPipelineParams {
|
||||
std::vector<ShaderID> shaders;
|
||||
std::vector<VertexBinding> bindings;
|
||||
@@ -54,6 +58,4 @@ namespace Nova {
|
||||
RenderPassID render_pass = nullptr;
|
||||
u32 subpass = 0;
|
||||
};
|
||||
|
||||
struct ComputePipelineParams {};
|
||||
} // namespace Nova
|
||||
13
engine/include/nova/render/params/render_pass.h
Normal file
13
engine/include/nova/render/params/render_pass.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Nova {
|
||||
struct RenderPassParams {
|
||||
// TODO
|
||||
};
|
||||
} // namespace Nova
|
||||
@@ -7,7 +7,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <nova/api.h>
|
||||
#include <nova/render/render_fwd.h>
|
||||
#include <nova/render/render_structs.h>
|
||||
#include <nova/types.h>
|
||||
|
||||
#include <initializer_list>
|
||||
@@ -15,13 +15,15 @@
|
||||
#include <string>
|
||||
|
||||
namespace Nova {
|
||||
struct NOVA_API RenderDevice {
|
||||
enum class Vendor { UNKNOWN = 0, INTEL = 0x8086, AMD = 0x1002, NVIDIA = 0x10de };
|
||||
enum class Type { OTHER = 0, INTEGRATED = 1, DISCRETE = 2, VIRTUAL = 3, CPU = 4 };
|
||||
class RenderDriver;
|
||||
|
||||
enum class DeviceVendor { UNKNOWN = 0, INTEL = 0x8086, AMD = 0x1002, NVIDIA = 0x10de };
|
||||
enum class DeviceType { OTHER = 0, INTEGRATED = 1, DISCRETE = 2, VIRTUAL = 3, CPU = 4 };
|
||||
|
||||
struct NOVA_API RenderDevice {
|
||||
std::string name;
|
||||
Vendor vendor;
|
||||
Type type;
|
||||
DeviceVendor vendor;
|
||||
DeviceType type;
|
||||
u32 deviceID;
|
||||
void* handle;
|
||||
|
||||
|
||||
@@ -7,14 +7,25 @@
|
||||
#pragma once
|
||||
|
||||
#include <nova/api.h>
|
||||
#include <nova/platform/window_fwd.h>
|
||||
#include <nova/render/render_fwd.h>
|
||||
#include <nova/platform/platform_structs.h>
|
||||
#include <nova/render/params/compute_pipeline.h>
|
||||
#include <nova/render/params/graphics_pipeline.h>
|
||||
#include <nova/render/params/render_pass.h>
|
||||
#include <nova/render/render_device.h>
|
||||
#include <nova/render/render_structs.h>
|
||||
#include <nova/types.h>
|
||||
|
||||
#include <span>
|
||||
#include <string>
|
||||
|
||||
namespace Nova {
|
||||
class WindowDriver;
|
||||
|
||||
enum class PipelineType { GRAPHICS, COMPUTE };
|
||||
enum class QueueType { UNDEFINED, GRAPHICS, COMPUTE, TRANSFER };
|
||||
enum class RenderAPI { DX12, VULKAN };
|
||||
enum class ShaderStage { VERTEX, FRAGMENT, GEOMETRY, TESS_CONTROL, TESS_EVAL, COMPUTE, MESH, TASK };
|
||||
|
||||
class NOVA_API RenderDriver {
|
||||
public:
|
||||
static RenderDriver* create(RenderAPI api, WindowDriver* window_driver = nullptr);
|
||||
|
||||
27
engine/include/nova/render/render_structs.h
Normal file
27
engine/include/nova/render/render_structs.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace Nova {
|
||||
struct CommandBuffer;
|
||||
struct CommandPool;
|
||||
struct Pipeline;
|
||||
struct Queue;
|
||||
struct RenderPass;
|
||||
struct Shader;
|
||||
struct Surface;
|
||||
struct Swapchain;
|
||||
|
||||
using CommandBufferID = CommandBuffer*;
|
||||
using CommandPoolID = CommandPool*;
|
||||
using PipelineID = Pipeline*;
|
||||
using QueueID = Queue*;
|
||||
using RenderPassID = RenderPass*;
|
||||
using ShaderID = Shader*;
|
||||
using SurfaceID = Surface*;
|
||||
using SwapchainID = Swapchain*;
|
||||
} // namespace Nova
|
||||
@@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <nova/api.h>
|
||||
#include <nova/render/render_fwd.h>
|
||||
|
||||
namespace Nova {
|
||||
class NOVA_API Renderer {
|
||||
public:
|
||||
static void init(RenderAPI api);
|
||||
static void shutdown();
|
||||
static RenderDriver* get_driver();
|
||||
};
|
||||
} // namespace Nova
|
||||
@@ -8,291 +8,292 @@
|
||||
|
||||
#include "drivers/vulkan/render_driver.h"
|
||||
|
||||
#include "drivers/vulkan/render_structs.h"
|
||||
|
||||
#include <nova/core/debug.h>
|
||||
#include <nova/platform/window_driver.h>
|
||||
#include <nova/render/render_device.h>
|
||||
#include <nova/render/render_params.h>
|
||||
#include <nova/version.h>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <bit>
|
||||
#include <format>
|
||||
#include <limits>
|
||||
#include <string_view>
|
||||
|
||||
#define VALIDATION_LAYER "VK_LAYER_KHRONOS_validation"
|
||||
#define MAX_QUEUES_PER_FAMILY 2U
|
||||
namespace {
|
||||
static constexpr u32 MAX_QUEUES_PER_FAMILY = 2;
|
||||
static constexpr std::string_view VALIDATION_LAYER = "VK_LAYER_KHRONOS_validation";
|
||||
|
||||
static constexpr VkShaderStageFlagBits VK_SHADER_STAGE_MAP[] = {
|
||||
VK_SHADER_STAGE_VERTEX_BIT,
|
||||
VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||
VK_SHADER_STAGE_GEOMETRY_BIT,
|
||||
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
|
||||
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
|
||||
VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
VK_SHADER_STAGE_MESH_BIT_EXT,
|
||||
VK_SHADER_STAGE_TASK_BIT_EXT
|
||||
};
|
||||
|
||||
static constexpr VkPrimitiveTopology VK_PRIMITIVE_TOPOLOGY_MAP[] = {
|
||||
VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
|
||||
};
|
||||
|
||||
static constexpr VkCullModeFlags VK_CULL_MODE_MAP[] = {
|
||||
VK_CULL_MODE_NONE,
|
||||
VK_CULL_MODE_FRONT_BIT,
|
||||
VK_CULL_MODE_BACK_BIT,
|
||||
};
|
||||
|
||||
static constexpr VkFrontFace VK_FRONT_FACE_MAP[] = {
|
||||
VK_FRONT_FACE_COUNTER_CLOCKWISE,
|
||||
VK_FRONT_FACE_CLOCKWISE,
|
||||
};
|
||||
|
||||
static constexpr VkVertexInputRate VK_VERTEX_INPUT_RATE_MAP[] = {
|
||||
VK_VERTEX_INPUT_RATE_VERTEX,
|
||||
VK_VERTEX_INPUT_RATE_INSTANCE,
|
||||
};
|
||||
|
||||
static constexpr VkQueueFlagBits VK_QUEUE_FLAGS_MAP[] = {
|
||||
static_cast<VkQueueFlagBits>(0),
|
||||
VK_QUEUE_GRAPHICS_BIT,
|
||||
VK_QUEUE_COMPUTE_BIT,
|
||||
VK_QUEUE_TRANSFER_BIT,
|
||||
};
|
||||
|
||||
static constexpr VkFormat VK_FORMAT_MAP[] = {
|
||||
VK_FORMAT_UNDEFINED,
|
||||
VK_FORMAT_R4G4_UNORM_PACK8,
|
||||
VK_FORMAT_R4G4B4A4_UNORM_PACK16,
|
||||
VK_FORMAT_B4G4R4A4_UNORM_PACK16,
|
||||
VK_FORMAT_R5G6B5_UNORM_PACK16,
|
||||
VK_FORMAT_B5G6R5_UNORM_PACK16,
|
||||
VK_FORMAT_R5G5B5A1_UNORM_PACK16,
|
||||
VK_FORMAT_B5G5R5A1_UNORM_PACK16,
|
||||
VK_FORMAT_A1R5G5B5_UNORM_PACK16,
|
||||
VK_FORMAT_R8_UNORM,
|
||||
VK_FORMAT_R8_SNORM,
|
||||
VK_FORMAT_R8_USCALED,
|
||||
VK_FORMAT_R8_SSCALED,
|
||||
VK_FORMAT_R8_UINT,
|
||||
VK_FORMAT_R8_SINT,
|
||||
VK_FORMAT_R8_SRGB,
|
||||
VK_FORMAT_R8G8_UNORM,
|
||||
VK_FORMAT_R8G8_SNORM,
|
||||
VK_FORMAT_R8G8_USCALED,
|
||||
VK_FORMAT_R8G8_SSCALED,
|
||||
VK_FORMAT_R8G8_UINT,
|
||||
VK_FORMAT_R8G8_SINT,
|
||||
VK_FORMAT_R8G8_SRGB,
|
||||
VK_FORMAT_R8G8B8_UNORM,
|
||||
VK_FORMAT_R8G8B8_SNORM,
|
||||
VK_FORMAT_R8G8B8_USCALED,
|
||||
VK_FORMAT_R8G8B8_SSCALED,
|
||||
VK_FORMAT_R8G8B8_UINT,
|
||||
VK_FORMAT_R8G8B8_SINT,
|
||||
VK_FORMAT_R8G8B8_SRGB,
|
||||
VK_FORMAT_B8G8R8_UNORM,
|
||||
VK_FORMAT_B8G8R8_SNORM,
|
||||
VK_FORMAT_B8G8R8_USCALED,
|
||||
VK_FORMAT_B8G8R8_SSCALED,
|
||||
VK_FORMAT_B8G8R8_UINT,
|
||||
VK_FORMAT_B8G8R8_SINT,
|
||||
VK_FORMAT_B8G8R8_SRGB,
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_SNORM,
|
||||
VK_FORMAT_R8G8B8A8_USCALED,
|
||||
VK_FORMAT_R8G8B8A8_SSCALED,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_R8G8B8A8_SRGB,
|
||||
VK_FORMAT_B8G8R8A8_UNORM,
|
||||
VK_FORMAT_B8G8R8A8_SNORM,
|
||||
VK_FORMAT_B8G8R8A8_USCALED,
|
||||
VK_FORMAT_B8G8R8A8_SSCALED,
|
||||
VK_FORMAT_B8G8R8A8_UINT,
|
||||
VK_FORMAT_B8G8R8A8_SINT,
|
||||
VK_FORMAT_B8G8R8A8_SRGB,
|
||||
VK_FORMAT_A8B8G8R8_UNORM_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SNORM_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_USCALED_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_UINT_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SINT_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SRGB_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_UNORM_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SNORM_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_USCALED_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_UNORM_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SNORM_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_USCALED_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_UINT_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SINT_PACK32,
|
||||
VK_FORMAT_R16_UNORM,
|
||||
VK_FORMAT_R16_SNORM,
|
||||
VK_FORMAT_R16_USCALED,
|
||||
VK_FORMAT_R16_SSCALED,
|
||||
VK_FORMAT_R16_UINT,
|
||||
VK_FORMAT_R16_SINT,
|
||||
VK_FORMAT_R16_SFLOAT,
|
||||
VK_FORMAT_R16G16_UNORM,
|
||||
VK_FORMAT_R16G16_SNORM,
|
||||
VK_FORMAT_R16G16_USCALED,
|
||||
VK_FORMAT_R16G16_SSCALED,
|
||||
VK_FORMAT_R16G16_UINT,
|
||||
VK_FORMAT_R16G16_SINT,
|
||||
VK_FORMAT_R16G16_SFLOAT,
|
||||
VK_FORMAT_R16G16B16_UNORM,
|
||||
VK_FORMAT_R16G16B16_SNORM,
|
||||
VK_FORMAT_R16G16B16_USCALED,
|
||||
VK_FORMAT_R16G16B16_SSCALED,
|
||||
VK_FORMAT_R16G16B16_UINT,
|
||||
VK_FORMAT_R16G16B16_SINT,
|
||||
VK_FORMAT_R16G16B16_SFLOAT,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_USCALED,
|
||||
VK_FORMAT_R16G16B16A16_SSCALED,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R16G16B16A16_SFLOAT,
|
||||
VK_FORMAT_R32_UINT,
|
||||
VK_FORMAT_R32_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_UINT,
|
||||
VK_FORMAT_R32G32_SINT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32_UINT,
|
||||
VK_FORMAT_R32G32B32_SINT,
|
||||
VK_FORMAT_R32G32B32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_UINT,
|
||||
VK_FORMAT_R32G32B32A32_SINT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
VK_FORMAT_R64_UINT,
|
||||
VK_FORMAT_R64_SINT,
|
||||
VK_FORMAT_R64_SFLOAT,
|
||||
VK_FORMAT_R64G64_UINT,
|
||||
VK_FORMAT_R64G64_SINT,
|
||||
VK_FORMAT_R64G64_SFLOAT,
|
||||
VK_FORMAT_R64G64B64_UINT,
|
||||
VK_FORMAT_R64G64B64_SINT,
|
||||
VK_FORMAT_R64G64B64_SFLOAT,
|
||||
VK_FORMAT_R64G64B64A64_UINT,
|
||||
VK_FORMAT_R64G64B64A64_SINT,
|
||||
VK_FORMAT_R64G64B64A64_SFLOAT,
|
||||
VK_FORMAT_B10G11R11_UFLOAT_PACK32,
|
||||
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
|
||||
VK_FORMAT_D16_UNORM,
|
||||
VK_FORMAT_X8_D24_UNORM_PACK32,
|
||||
VK_FORMAT_D32_SFLOAT,
|
||||
VK_FORMAT_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
VK_FORMAT_BC1_RGB_UNORM_BLOCK,
|
||||
VK_FORMAT_BC1_RGB_SRGB_BLOCK,
|
||||
VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
|
||||
VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
|
||||
VK_FORMAT_BC2_UNORM_BLOCK,
|
||||
VK_FORMAT_BC2_SRGB_BLOCK,
|
||||
VK_FORMAT_BC3_UNORM_BLOCK,
|
||||
VK_FORMAT_BC3_SRGB_BLOCK,
|
||||
VK_FORMAT_BC4_UNORM_BLOCK,
|
||||
VK_FORMAT_BC4_SNORM_BLOCK,
|
||||
VK_FORMAT_BC5_UNORM_BLOCK,
|
||||
VK_FORMAT_BC5_SNORM_BLOCK,
|
||||
VK_FORMAT_BC6H_UFLOAT_BLOCK,
|
||||
VK_FORMAT_BC6H_SFLOAT_BLOCK,
|
||||
VK_FORMAT_BC7_UNORM_BLOCK,
|
||||
VK_FORMAT_BC7_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
|
||||
VK_FORMAT_EAC_R11_UNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11_SNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
|
||||
VK_FORMAT_G8B8G8R8_422_UNORM,
|
||||
VK_FORMAT_B8G8R8G8_422_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
|
||||
VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
|
||||
VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
|
||||
VK_FORMAT_R10X6_UNORM_PACK16,
|
||||
VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
|
||||
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
|
||||
VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
|
||||
VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
|
||||
VK_FORMAT_R12X4_UNORM_PACK16,
|
||||
VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
|
||||
VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
|
||||
VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
|
||||
VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
|
||||
VK_FORMAT_G16B16G16R16_422_UNORM,
|
||||
VK_FORMAT_B16G16R16G16_422_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
|
||||
VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
|
||||
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
|
||||
};
|
||||
} // namespace
|
||||
|
||||
using namespace Nova;
|
||||
|
||||
static constexpr VkShaderStageFlagBits VK_SHADER_STAGE_MAP[] = {
|
||||
VK_SHADER_STAGE_VERTEX_BIT,
|
||||
VK_SHADER_STAGE_FRAGMENT_BIT,
|
||||
VK_SHADER_STAGE_GEOMETRY_BIT,
|
||||
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
|
||||
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
|
||||
VK_SHADER_STAGE_COMPUTE_BIT,
|
||||
VK_SHADER_STAGE_MESH_BIT_EXT,
|
||||
VK_SHADER_STAGE_TASK_BIT_EXT
|
||||
};
|
||||
|
||||
static constexpr VkPrimitiveTopology VK_PRIMITIVE_TOPOLOGY_MAP[] = {
|
||||
VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_LINE_STRIP,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
|
||||
VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
|
||||
static constexpr VkCullModeFlags VK_CULL_MODE_MAP[] = {
|
||||
VK_CULL_MODE_NONE,
|
||||
VK_CULL_MODE_FRONT_BIT,
|
||||
VK_CULL_MODE_BACK_BIT
|
||||
};
|
||||
|
||||
static constexpr VkFrontFace VK_FRONT_FACE_MAP[] = {
|
||||
VK_FRONT_FACE_COUNTER_CLOCKWISE,
|
||||
VK_FRONT_FACE_CLOCKWISE
|
||||
};
|
||||
|
||||
static constexpr VkVertexInputRate VK_VERTEX_INPUT_RATE_MAP[] = {
|
||||
VK_VERTEX_INPUT_RATE_VERTEX,
|
||||
VK_VERTEX_INPUT_RATE_INSTANCE
|
||||
};
|
||||
|
||||
static constexpr VkQueueFlagBits VK_QUEUE_FLAGS_MAP[] = {
|
||||
static_cast<VkQueueFlagBits>(0),
|
||||
VK_QUEUE_GRAPHICS_BIT,
|
||||
VK_QUEUE_COMPUTE_BIT,
|
||||
VK_QUEUE_TRANSFER_BIT
|
||||
};
|
||||
|
||||
// clang-format on
|
||||
|
||||
static constexpr VkFormat VK_FORMAT_MAP[] = {
|
||||
VK_FORMAT_UNDEFINED,
|
||||
VK_FORMAT_R4G4_UNORM_PACK8,
|
||||
VK_FORMAT_R4G4B4A4_UNORM_PACK16,
|
||||
VK_FORMAT_B4G4R4A4_UNORM_PACK16,
|
||||
VK_FORMAT_R5G6B5_UNORM_PACK16,
|
||||
VK_FORMAT_B5G6R5_UNORM_PACK16,
|
||||
VK_FORMAT_R5G5B5A1_UNORM_PACK16,
|
||||
VK_FORMAT_B5G5R5A1_UNORM_PACK16,
|
||||
VK_FORMAT_A1R5G5B5_UNORM_PACK16,
|
||||
VK_FORMAT_R8_UNORM,
|
||||
VK_FORMAT_R8_SNORM,
|
||||
VK_FORMAT_R8_USCALED,
|
||||
VK_FORMAT_R8_SSCALED,
|
||||
VK_FORMAT_R8_UINT,
|
||||
VK_FORMAT_R8_SINT,
|
||||
VK_FORMAT_R8_SRGB,
|
||||
VK_FORMAT_R8G8_UNORM,
|
||||
VK_FORMAT_R8G8_SNORM,
|
||||
VK_FORMAT_R8G8_USCALED,
|
||||
VK_FORMAT_R8G8_SSCALED,
|
||||
VK_FORMAT_R8G8_UINT,
|
||||
VK_FORMAT_R8G8_SINT,
|
||||
VK_FORMAT_R8G8_SRGB,
|
||||
VK_FORMAT_R8G8B8_UNORM,
|
||||
VK_FORMAT_R8G8B8_SNORM,
|
||||
VK_FORMAT_R8G8B8_USCALED,
|
||||
VK_FORMAT_R8G8B8_SSCALED,
|
||||
VK_FORMAT_R8G8B8_UINT,
|
||||
VK_FORMAT_R8G8B8_SINT,
|
||||
VK_FORMAT_R8G8B8_SRGB,
|
||||
VK_FORMAT_B8G8R8_UNORM,
|
||||
VK_FORMAT_B8G8R8_SNORM,
|
||||
VK_FORMAT_B8G8R8_USCALED,
|
||||
VK_FORMAT_B8G8R8_SSCALED,
|
||||
VK_FORMAT_B8G8R8_UINT,
|
||||
VK_FORMAT_B8G8R8_SINT,
|
||||
VK_FORMAT_B8G8R8_SRGB,
|
||||
VK_FORMAT_R8G8B8A8_UNORM,
|
||||
VK_FORMAT_R8G8B8A8_SNORM,
|
||||
VK_FORMAT_R8G8B8A8_USCALED,
|
||||
VK_FORMAT_R8G8B8A8_SSCALED,
|
||||
VK_FORMAT_R8G8B8A8_UINT,
|
||||
VK_FORMAT_R8G8B8A8_SINT,
|
||||
VK_FORMAT_R8G8B8A8_SRGB,
|
||||
VK_FORMAT_B8G8R8A8_UNORM,
|
||||
VK_FORMAT_B8G8R8A8_SNORM,
|
||||
VK_FORMAT_B8G8R8A8_USCALED,
|
||||
VK_FORMAT_B8G8R8A8_SSCALED,
|
||||
VK_FORMAT_B8G8R8A8_UINT,
|
||||
VK_FORMAT_B8G8R8A8_SINT,
|
||||
VK_FORMAT_B8G8R8A8_SRGB,
|
||||
VK_FORMAT_A8B8G8R8_UNORM_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SNORM_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_USCALED_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SSCALED_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_UINT_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SINT_PACK32,
|
||||
VK_FORMAT_A8B8G8R8_SRGB_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_UNORM_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SNORM_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_USCALED_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SSCALED_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_UINT_PACK32,
|
||||
VK_FORMAT_A2R10G10B10_SINT_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_UNORM_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SNORM_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_USCALED_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SSCALED_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_UINT_PACK32,
|
||||
VK_FORMAT_A2B10G10R10_SINT_PACK32,
|
||||
VK_FORMAT_R16_UNORM,
|
||||
VK_FORMAT_R16_SNORM,
|
||||
VK_FORMAT_R16_USCALED,
|
||||
VK_FORMAT_R16_SSCALED,
|
||||
VK_FORMAT_R16_UINT,
|
||||
VK_FORMAT_R16_SINT,
|
||||
VK_FORMAT_R16_SFLOAT,
|
||||
VK_FORMAT_R16G16_UNORM,
|
||||
VK_FORMAT_R16G16_SNORM,
|
||||
VK_FORMAT_R16G16_USCALED,
|
||||
VK_FORMAT_R16G16_SSCALED,
|
||||
VK_FORMAT_R16G16_UINT,
|
||||
VK_FORMAT_R16G16_SINT,
|
||||
VK_FORMAT_R16G16_SFLOAT,
|
||||
VK_FORMAT_R16G16B16_UNORM,
|
||||
VK_FORMAT_R16G16B16_SNORM,
|
||||
VK_FORMAT_R16G16B16_USCALED,
|
||||
VK_FORMAT_R16G16B16_SSCALED,
|
||||
VK_FORMAT_R16G16B16_UINT,
|
||||
VK_FORMAT_R16G16B16_SINT,
|
||||
VK_FORMAT_R16G16B16_SFLOAT,
|
||||
VK_FORMAT_R16G16B16A16_UNORM,
|
||||
VK_FORMAT_R16G16B16A16_SNORM,
|
||||
VK_FORMAT_R16G16B16A16_USCALED,
|
||||
VK_FORMAT_R16G16B16A16_SSCALED,
|
||||
VK_FORMAT_R16G16B16A16_UINT,
|
||||
VK_FORMAT_R16G16B16A16_SINT,
|
||||
VK_FORMAT_R16G16B16A16_SFLOAT,
|
||||
VK_FORMAT_R32_UINT,
|
||||
VK_FORMAT_R32_SINT,
|
||||
VK_FORMAT_R32_SFLOAT,
|
||||
VK_FORMAT_R32G32_UINT,
|
||||
VK_FORMAT_R32G32_SINT,
|
||||
VK_FORMAT_R32G32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32_UINT,
|
||||
VK_FORMAT_R32G32B32_SINT,
|
||||
VK_FORMAT_R32G32B32_SFLOAT,
|
||||
VK_FORMAT_R32G32B32A32_UINT,
|
||||
VK_FORMAT_R32G32B32A32_SINT,
|
||||
VK_FORMAT_R32G32B32A32_SFLOAT,
|
||||
VK_FORMAT_R64_UINT,
|
||||
VK_FORMAT_R64_SINT,
|
||||
VK_FORMAT_R64_SFLOAT,
|
||||
VK_FORMAT_R64G64_UINT,
|
||||
VK_FORMAT_R64G64_SINT,
|
||||
VK_FORMAT_R64G64_SFLOAT,
|
||||
VK_FORMAT_R64G64B64_UINT,
|
||||
VK_FORMAT_R64G64B64_SINT,
|
||||
VK_FORMAT_R64G64B64_SFLOAT,
|
||||
VK_FORMAT_R64G64B64A64_UINT,
|
||||
VK_FORMAT_R64G64B64A64_SINT,
|
||||
VK_FORMAT_R64G64B64A64_SFLOAT,
|
||||
VK_FORMAT_B10G11R11_UFLOAT_PACK32,
|
||||
VK_FORMAT_E5B9G9R9_UFLOAT_PACK32,
|
||||
VK_FORMAT_D16_UNORM,
|
||||
VK_FORMAT_X8_D24_UNORM_PACK32,
|
||||
VK_FORMAT_D32_SFLOAT,
|
||||
VK_FORMAT_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
VK_FORMAT_BC1_RGB_UNORM_BLOCK,
|
||||
VK_FORMAT_BC1_RGB_SRGB_BLOCK,
|
||||
VK_FORMAT_BC1_RGBA_UNORM_BLOCK,
|
||||
VK_FORMAT_BC1_RGBA_SRGB_BLOCK,
|
||||
VK_FORMAT_BC2_UNORM_BLOCK,
|
||||
VK_FORMAT_BC2_SRGB_BLOCK,
|
||||
VK_FORMAT_BC3_UNORM_BLOCK,
|
||||
VK_FORMAT_BC3_SRGB_BLOCK,
|
||||
VK_FORMAT_BC4_UNORM_BLOCK,
|
||||
VK_FORMAT_BC4_SNORM_BLOCK,
|
||||
VK_FORMAT_BC5_UNORM_BLOCK,
|
||||
VK_FORMAT_BC5_SNORM_BLOCK,
|
||||
VK_FORMAT_BC6H_UFLOAT_BLOCK,
|
||||
VK_FORMAT_BC6H_SFLOAT_BLOCK,
|
||||
VK_FORMAT_BC7_UNORM_BLOCK,
|
||||
VK_FORMAT_BC7_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK,
|
||||
VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK,
|
||||
VK_FORMAT_EAC_R11_UNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11_SNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11G11_UNORM_BLOCK,
|
||||
VK_FORMAT_EAC_R11G11_SNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_4x4_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_4x4_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_5x4_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_5x4_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_5x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_5x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_6x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_6x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_6x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_6x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_8x8_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_8x8_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x5_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x5_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x6_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x6_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x8_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x8_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_10x10_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_10x10_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_12x10_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_12x10_SRGB_BLOCK,
|
||||
VK_FORMAT_ASTC_12x12_UNORM_BLOCK,
|
||||
VK_FORMAT_ASTC_12x12_SRGB_BLOCK,
|
||||
VK_FORMAT_G8B8G8R8_422_UNORM,
|
||||
VK_FORMAT_B8G8R8G8_422_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
|
||||
VK_FORMAT_G8_B8R8_2PLANE_420_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM,
|
||||
VK_FORMAT_G8_B8R8_2PLANE_422_UNORM,
|
||||
VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM,
|
||||
VK_FORMAT_R10X6_UNORM_PACK16,
|
||||
VK_FORMAT_R10X6G10X6_UNORM_2PACK16,
|
||||
VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16,
|
||||
VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
|
||||
VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
|
||||
VK_FORMAT_R12X4_UNORM_PACK16,
|
||||
VK_FORMAT_R12X4G12X4_UNORM_2PACK16,
|
||||
VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16,
|
||||
VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
|
||||
VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16,
|
||||
VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
|
||||
VK_FORMAT_G16B16G16R16_422_UNORM,
|
||||
VK_FORMAT_B16G16R16G16_422_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM,
|
||||
VK_FORMAT_G16_B16R16_2PLANE_420_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
|
||||
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
|
||||
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
|
||||
};
|
||||
|
||||
VulkanRenderDriver::VulkanRenderDriver(WindowDriver* p_driver) : m_window_driver(p_driver) {
|
||||
NOVA_AUTO_TRACE();
|
||||
_check_version();
|
||||
@@ -1058,7 +1059,7 @@ void VulkanRenderDriver::_check_layers() {
|
||||
for (const auto& layer : available) {
|
||||
if (std::string_view(layer.layerName) == VALIDATION_LAYER) {
|
||||
NOVA_LOG("Using layer: {}", layer.layerName);
|
||||
m_layers.push_back(VALIDATION_LAYER);
|
||||
m_layers.push_back(VALIDATION_LAYER.data());
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1104,12 +1105,13 @@ void VulkanRenderDriver::_init_hardware() {
|
||||
VkPhysicalDeviceProperties properties;
|
||||
vkGetPhysicalDeviceProperties(device, &properties);
|
||||
|
||||
m_devices.emplace_back();
|
||||
m_devices.back().name = properties.deviceName;
|
||||
m_devices.back().vendor = static_cast<RenderDevice::Vendor>(properties.vendorID);
|
||||
m_devices.back().type = static_cast<RenderDevice::Type>(properties.deviceType);
|
||||
m_devices.back().deviceID = properties.deviceID;
|
||||
m_devices.back().handle = device;
|
||||
m_devices.emplace_back<RenderDevice>({
|
||||
.name = properties.deviceName,
|
||||
.vendor = static_cast<DeviceVendor>(properties.vendorID),
|
||||
.type = static_cast<DeviceType>(properties.deviceType),
|
||||
.deviceID = properties.deviceID,
|
||||
.handle = device,
|
||||
});
|
||||
|
||||
NOVA_LOG("Found device: {}", properties.deviceName);
|
||||
}
|
||||
|
||||
@@ -9,62 +9,13 @@
|
||||
#ifdef NOVA_VULKAN
|
||||
|
||||
#include <nova/render/render_driver.h>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
namespace Nova {
|
||||
struct CommandBuffer {
|
||||
VkCommandBuffer handle = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct CommandPool {
|
||||
VkCommandPool handle = VK_NULL_HANDLE;
|
||||
std::vector<CommandBufferID> allocated_buffers;
|
||||
};
|
||||
|
||||
struct Pipeline {
|
||||
PipelineType type;
|
||||
VkPipeline handle = VK_NULL_HANDLE;
|
||||
VkPipelineLayout layout = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct Queue {
|
||||
VkQueue handle = VK_NULL_HANDLE;
|
||||
u32 family_index;
|
||||
u32 queue_index;
|
||||
u32 usage_count = 0;
|
||||
};
|
||||
|
||||
struct RenderPass {
|
||||
VkRenderPass handle = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct Shader {
|
||||
VkShaderModule handle = VK_NULL_HANDLE;
|
||||
ShaderStage stage = ShaderStage::VERTEX;
|
||||
std::string name;
|
||||
};
|
||||
|
||||
struct Surface {
|
||||
VkSurfaceKHR handle = VK_NULL_HANDLE;
|
||||
u32 width = 0;
|
||||
u32 height = 0;
|
||||
bool dirty = false; // TODO: Use state enum
|
||||
};
|
||||
|
||||
struct Swapchain {
|
||||
VkSwapchainKHR handle = VK_NULL_HANDLE;
|
||||
VkFormat format = VK_FORMAT_UNDEFINED;
|
||||
VkColorSpaceKHR color_space = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
|
||||
std::vector<VkImage> images;
|
||||
std::vector<VkImageView> image_views;
|
||||
std::vector<VkFramebuffer> framebuffers;
|
||||
SurfaceID surface = nullptr;
|
||||
RenderPassID render_pass = nullptr;
|
||||
};
|
||||
|
||||
class VulkanRenderDriver final : public RenderDriver {
|
||||
public:
|
||||
explicit VulkanRenderDriver(WindowDriver* window_driver);
|
||||
|
||||
70
engine/src/drivers/vulkan/render_structs.h
Normal file
70
engine/src/drivers/vulkan/render_structs.h
Normal file
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/// NOTE: This header should only be included in implementation files
|
||||
|
||||
#include <nova/render/render_driver.h>
|
||||
#include <nova/render/render_structs.h>
|
||||
#include <nova/types.h>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace Nova {
|
||||
struct CommandBuffer {
|
||||
VkCommandBuffer handle = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct CommandPool {
|
||||
VkCommandPool handle = VK_NULL_HANDLE;
|
||||
std::vector<CommandBufferID> allocated_buffers;
|
||||
};
|
||||
|
||||
struct Pipeline {
|
||||
PipelineType type;
|
||||
VkPipeline handle = VK_NULL_HANDLE;
|
||||
VkPipelineLayout layout = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct Queue {
|
||||
VkQueue handle = VK_NULL_HANDLE;
|
||||
u32 family_index;
|
||||
u32 queue_index;
|
||||
u32 usage_count = 0;
|
||||
};
|
||||
|
||||
struct RenderPass {
|
||||
VkRenderPass handle = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
struct Shader {
|
||||
VkShaderModule handle = VK_NULL_HANDLE;
|
||||
ShaderStage stage = ShaderStage::VERTEX;
|
||||
std::string name;
|
||||
};
|
||||
|
||||
struct Surface {
|
||||
VkSurfaceKHR handle = VK_NULL_HANDLE;
|
||||
u32 width = 0;
|
||||
u32 height = 0;
|
||||
bool dirty = false; // TODO: Use state enum
|
||||
};
|
||||
|
||||
struct Swapchain {
|
||||
VkSwapchainKHR handle = VK_NULL_HANDLE;
|
||||
VkFormat format = VK_FORMAT_UNDEFINED;
|
||||
VkColorSpaceKHR color_space = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;
|
||||
std::vector<VkImage> images;
|
||||
std::vector<VkImageView> image_views;
|
||||
std::vector<VkFramebuffer> framebuffers;
|
||||
SurfaceID surface = nullptr;
|
||||
RenderPassID render_pass = nullptr;
|
||||
};
|
||||
} // namespace Nova
|
||||
@@ -8,8 +8,12 @@
|
||||
|
||||
#include "platform/linux/x11/window_driver.h"
|
||||
|
||||
#include "platform/linux/x11/window_structs.h"
|
||||
#include "platform/linux/x11/wrapper.h"
|
||||
|
||||
#ifdef NOVA_VULKAN
|
||||
#include "drivers/vulkan/render_driver.h"
|
||||
#include "drivers/vulkan/render_structs.h"
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include <vulkan/vulkan_xlib.h>
|
||||
|
||||
@@ -8,24 +8,13 @@
|
||||
|
||||
#ifdef NOVA_X11
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "platform/linux/x11/wrapper.h"
|
||||
|
||||
#include <nova/platform/window_driver.h>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
namespace X11 {
|
||||
using Window = ::Window;
|
||||
using Display = ::Display;
|
||||
using Atom = ::Atom;
|
||||
} // namespace X11
|
||||
|
||||
namespace Nova {
|
||||
struct Window {
|
||||
X11::Window handle = 0;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
};
|
||||
|
||||
class X11WindowDriver final : public WindowDriver {
|
||||
public:
|
||||
X11WindowDriver();
|
||||
|
||||
21
engine/src/platform/linux/x11/window_structs.h
Normal file
21
engine/src/platform/linux/x11/window_structs.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/// NOTE: This header should only be included in implementation files
|
||||
|
||||
#include "platform/linux/x11/wrapper.h"
|
||||
|
||||
#include <nova/platform/platform_structs.h>
|
||||
|
||||
namespace Nova {
|
||||
struct Window {
|
||||
X11::Window handle = 0;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
};
|
||||
} // namespace Nova
|
||||
15
engine/src/platform/linux/x11/wrapper.h
Normal file
15
engine/src/platform/linux/x11/wrapper.h
Normal file
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
|
||||
namespace X11 {
|
||||
using Window = ::Window;
|
||||
using Display = ::Display;
|
||||
using Atom = ::Atom;
|
||||
} // namespace X11
|
||||
@@ -32,16 +32,16 @@ u32 RenderDevice::choose_device(RenderDriver* p_driver, std::span<const SurfaceI
|
||||
}
|
||||
|
||||
switch (device.type) {
|
||||
case Type::DISCRETE:
|
||||
case DeviceType::DISCRETE:
|
||||
score += prefer_discrete ? 4 : 3;
|
||||
break;
|
||||
case Type::INTEGRATED:
|
||||
case DeviceType::INTEGRATED:
|
||||
score += prefer_discrete ? 3 : 4;
|
||||
break;
|
||||
case Type::VIRTUAL:
|
||||
case DeviceType::VIRTUAL:
|
||||
score += 2;
|
||||
break;
|
||||
case Type::CPU:
|
||||
case DeviceType::CPU:
|
||||
score += 1;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <nova/core/debug.h>
|
||||
#include <nova/render/render_driver.h>
|
||||
#include <nova/render/renderer.h>
|
||||
|
||||
#include <memory>
|
||||
|
||||
using namespace Nova;
|
||||
|
||||
static std::unique_ptr<RenderDriver> s_driver;
|
||||
|
||||
void Renderer::init(const RenderAPI p_api) {
|
||||
NOVA_AUTO_TRACE();
|
||||
NOVA_ASSERT(!s_driver);
|
||||
|
||||
s_driver = std::unique_ptr<RenderDriver>(RenderDriver::create(p_api, nullptr));
|
||||
}
|
||||
|
||||
void Renderer::shutdown() {
|
||||
NOVA_AUTO_TRACE();
|
||||
s_driver.reset();
|
||||
}
|
||||
|
||||
RenderDriver* Renderer::get_driver() {
|
||||
NOVA_ASSERT(s_driver);
|
||||
return s_driver.get();
|
||||
}
|
||||
Reference in New Issue
Block a user