Major changes
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
+144
-21
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user