Major changes

Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
2025-07-02 12:26:20 +03:00
parent 4ec57bbd79
commit dd0d232c97
32 changed files with 997 additions and 182 deletions
+144 -21
View File
@@ -2,7 +2,6 @@
#include "evkCommon.h"
#include "shaderc/shaderc.h"
#include "spirv_reflect.h"
TYPEDATA_GEN(VkInstance, INVALID(VK_NULL_HANDLE));
TYPEDATA_GEN(VkDevice, INVALID(VK_NULL_HANDLE));
@@ -15,14 +14,14 @@ TYPEDATA_GEN(VkCommandBuffer);
TYPEDATA_GEN(VkDynamicState);
TYPEDATA_GEN(VkSurfaceFormatKHR);
TYPEDATA_GEN(VkFormat);
TYPEDATA_GEN(VkClearValue, DEFAULT(0.f,0.f,0.f,1.f));
TYPEDATA_GEN(VkClearValue, DEFAULT({{0.f,0.f,0.f,1.f}}));
TYPEDATA_GEN(VkRenderingAttachmentInfoKHR,
DEFAULT(
.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR,
.imageLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL, // Requires VK_KHR_synchronization2
.loadOp = VK_ATTACHMENT_LOAD_OP_NONE_KHR,
.storeOp = VK_ATTACHMENT_STORE_OP_NONE,
.clearValue = (VkClearValue){0.f, 0.f, 0.f, 1.f},
.clearValue = (VkClearValue){{{0.f, 0.f, 0.f, 1.f}}},
)
);
TYPEDATA_GEN(VkViewport,
@@ -44,7 +43,7 @@ TYPEDATA_GEN(VkRenderingInfo,
DEFAULT(
.sType = VK_STRUCTURE_TYPE_RENDERING_INFO,
.flags = 0,
.renderArea = {0, 0, 0, 0},
.renderArea = {{0, 0}, {0, 0}},
.layerCount = 1,
.viewMask = 0,
.colorAttachmentCount = 0,
@@ -100,6 +99,9 @@ TYPEDATA_GEN(VkDescriptorSetLayoutCreateInfo,
)
);
TYPEDATA_GEN(VkVertexInputBindingDescription);
TYPEDATA_GEN(VkVertexInputAttributeDescription);
// ========================================================================================================= //
// =================================evk Types=============================================================== //
// ========================================================================================================= //
@@ -116,11 +118,19 @@ typedef struct {
u32 count;
} evkDeviceQueueRequirement;
typedef struct {
VkPhysicalDeviceFeatures features10;
VkPhysicalDeviceVulkan11Features features11;
VkPhysicalDeviceVulkan12Features features12;
VkPhysicalDeviceVulkan13Features features13;
} evkPhysicalDeviceFeatures;
typedef struct {
evkInstance instance;
VkPhysicalDeviceType physicalDeviceType;
ev_vec(evkDeviceQueueRequirement) queueRequirements;
ev_vec(evstring) deviceExtensions;
evkPhysicalDeviceFeatures enabledFeatures;
} evkDeviceCreateInfo;
typedef struct {
@@ -129,9 +139,9 @@ typedef struct {
} evkDeviceQueueFamily;
typedef struct {
bool dynamicRendering;
bool multiViewport;
} evkPhysicalDeviceFeatures;
VkPhysicalDeviceLimits limits;
VkPhysicalDeviceDescriptorBufferPropertiesEXT desc_buf;
} evkDeviceProperties;
#define MAX_QUEUE_FAMILIES ((VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT | VK_QUEUE_SPARSE_BINDING_BIT) + 1)
typedef struct {
@@ -139,7 +149,7 @@ typedef struct {
VkPhysicalDevice _physicalDevice;
evkInstance _instance;
evkDeviceQueueFamily queueFamilies[MAX_QUEUE_FAMILIES];
VkPhysicalDeviceLimits limits;
evkDeviceProperties props;
evkPhysicalDeviceFeatures enabledFeatures;
} evkDevice;
@@ -174,11 +184,6 @@ typedef struct {
VkPipelineLayout vk;
} evkPipelineLayout;
typedef struct {
vec(VkDescriptorSetLayout) descriptorSetLayouts;
vec(VkPushConstantRange) pushConstantRanges;
} evkPipelineLayoutCreateInfo;
typedef struct {
VkOffset2D renderOffset;
VkExtent2D renderExtents;
@@ -202,14 +207,30 @@ typedef union {
};
} evkViewport;
typedef union {
VkDescriptorSetLayoutBinding vk;
struct {
VkDescriptorSetLayoutBinding;
u32 set;
};
// typedef union {
// VkDescriptorSetLayoutBinding vk;
// struct {
// VkDescriptorSetLayoutBinding;
// u32 set;
// };
// } evkDescriptorBinding;
// typedef VkDescriptorSetLayoutBinding evkDescriptorBinding;
typedef struct {
evstring name;
VkDescriptorType descriptorType;
VkShaderStageFlags stageFlags;
uint32_t descriptorCount;
const VkSampler* pImmutableSamplers;
uint32_t binding;
} evkDescriptorBinding;
// typedef struct {
// VkDescriptorSetLayout vk;
// vec(evkDescriptorBinding) bindings;
// } evkDescriptorSetLayout;
// typedef VkDescriptorSetLayout evkDescriptorSetLayout;
typedef struct {
VkShaderStageFlags stage;
vec(evkDescriptorBinding) bindings;
@@ -265,6 +286,7 @@ typedef enum evkGPUMemoryUsage
{
EVK_GPU_MEMORY_USAGE_UNKNOWN = VMA_MEMORY_USAGE_UNKNOWN,
EVK_GPU_MEMORY_USAGE_GPU_LAZILY_ALLOCATED = VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED,
EVK_GPU_MEMORY_USAGE_CPU_TO_GPU = VMA_MEMORY_USAGE_CPU_TO_GPU,
EVK_GPU_MEMORY_USAGE_AUTO = VMA_MEMORY_USAGE_AUTO,
EVK_GPU_MEMORY_USAGE_AUTO_PREFER_DEVICE = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE,
EVK_GPU_MEMORY_USAGE_AUTO_PREFER_HOST = VMA_MEMORY_USAGE_AUTO_PREFER_HOST,
@@ -277,7 +299,6 @@ typedef struct {
typedef struct {
evkGPUAllocationFlags allocationFlags;
evkGPUMemoryUsage memoryUsage;
evkGPUAllocator allocator;
evkGPUMemoryPool pool;
} evkGPUAllocationCreateInfo;
@@ -315,6 +336,8 @@ typedef struct {
VkBuffer vk;
evkGPUAllocationData allocData;
u32 sizeInBytes;
VkBufferUsageFlags usage;
VkDeviceAddress address;
} evkBuffer;
typedef struct {
@@ -355,7 +378,88 @@ typedef struct {
VkPipelineColorBlendAttachmentState blendState;
} evkColorAttachment;
typedef enum {
EVK_VERTEX_ATTRIBUTE_INVALID = 0,
EVK_VERTEX_ATTRIBUTE_POSITION,
EVK_VERTEX_ATTRIBUTE_NORMAL,
EVK_VERTEX_ATTRIBUTE_TANGENT,
EVK_VERTEX_ATTRIBUTE_COLOR,
EVK_VERTEX_ATTRIBUTE_UV0,
EVK_VERTEX_ATTRIBUTE_UV1,
EVK_VERTEX_ATTRIBUTE_UV2,
EVK_VERTEX_ATTRIBUTE_UV3,
EVK_VERTEX_ATTRIBUTE_UV4,
EVK_VERTEX_ATTRIBUTE_UV5,
EVK_VERTEX_ATTRIBUTE_UV6,
EVK_VERTEX_ATTRIBUTE_UV7,
EVK_VERTEX_ATTRIBUTE_BLENDWEIGHT,
EVK_VERTEX_ATTRIBUTE_BLENDINDICES,
EVK_VERTEX_ATTRIBUTE_TYPE_COUNT
} evkVertexAttributeType;
typedef enum {
EVK_FMT_INVALID = 0,
EVK_FMT_FLOAT32,
EVK_FMT_UINT32,
EVK_FMT_SINT32,
EVK_FMT_FLOAT16,
EVK_FMT_UNORM16,
EVK_FMT_SNORM16,
EVK_FMT_UINT16,
EVK_FMT_SINT16,
EVK_FMT_UNORM8,
EVK_FMT_SNORM8,
EVK_FMT_UINT8,
EVK_FMT_SINT8,
EVK_VERTEX_ATTRIBUTE_FORMAT_COUNT
} evkVertexAttributeFormat;
typedef struct {
evkVertexAttributeType type;
evkVertexAttributeFormat fmt;
u32 dim;
} evkVertexAttribute;
typedef struct {
evkVertexAttribute attributes[EVK_VERTEX_ATTRIBUTE_TYPE_COUNT];
VkVertexInputRate inputRate;
} evkVertexBufferLayout;
// typedef evkVertexAttribute evkVertexBufferLayout[EVK_VERTEX_ATTRIBUTE_TYPE_COUNT];
typedef struct {
VkDescriptorSetLayout vk;
vec(evstring) names;
vec(VkDescriptorSetLayoutBinding) vkBindings;
u64 size;
u64 offset;
} evkDescriptorSetLayout;
typedef struct {
evkDevice* device;
evkGPUAllocator* allocator;
evkDescriptorSetLayout* layout;
} evkDescriptorSetCreateInfo;
typedef struct {
evkDevice* device;
evkDescriptorSetLayout layout;
evkBuffer buffer;
} evkDescriptorSet;
typedef enum {
EVK_PIPELINE_TYPE_GRAPHICS = VK_PIPELINE_BIND_POINT_GRAPHICS,
EVK_PIPELINE_TYPE_COMPUTE = VK_PIPELINE_BIND_POINT_COMPUTE,
} evkPipelineType;
typedef struct {
vec(evkDescriptorSetLayout) setLayouts;
vec(VkPushConstantRange) pushConstantRanges;
} evkPipelineLayoutCreateInfo;
typedef struct {
evkPipelineType type;
vec(VkDynamicState) dynamicStates;
vec(evkShader) shaderStages;
@@ -369,14 +473,25 @@ typedef struct {
u32 viewportCountOverride;
vec(evkViewport) viewports;
vec(evkVertexBufferLayout) vertexBufferLayouts;
vec(evkDescriptorSetLayout) setLayouts;
} evkPipelineCreateInfo;
typedef struct {
VkPipeline vk;
evkPipelineLayout layout;
evkDevice _device;
evkPipelineType type;
evkDescriptorSet boundSets[MAX_DESCRIPTOR_SETS];
} evkPipeline;
typedef struct {
VkCommandBuffer vk;
bool recording;
evkPipeline* boundPipeline;
} evkCommandBuffer;
TYPEDATA_GEN(evkInstance,
INVALID(
.vk = VK_NULL_HANDLE,
@@ -387,7 +502,7 @@ TYPEDATA_GEN(evkShader);
TYPEDATA_GEN(evkPipelineLayoutCreateInfo,
DEFAULT(
.descriptorSetLayouts = EV_VEC_EMPTY,
.setLayouts = EV_VEC_EMPTY,
.pushConstantRanges = EV_VEC_EMPTY,
)
);
@@ -435,6 +550,7 @@ TYPEDATA_GEN(evkColorAttachment);
TYPEDATA_GEN(evkPipelineCreateInfo,
DEFAULT(
.type = EVK_PIPELINE_TYPE_GRAPHICS,
.dynamicStates = EV_VEC_EMPTY,
.shaderStages = EV_VEC_EMPTY,
@@ -445,4 +561,11 @@ TYPEDATA_GEN(evkPipelineCreateInfo,
)
);
TYPEDATA_GEN(evkVertexBufferLayout);
TYPEDATA_GEN(evkVertexAttribute);
TYPEDATA_GEN(evkDescriptorBinding);
TYPEDATA_GEN(evkDescriptorSetLayout);
TYPEDATA_GEN(evkDescriptorSet);
TYPEDATA_GEN(evkCommandBuffer);