Drawing a textured quad

Added new assets
Loaded all texture assets into game state
Loaded the basic pipeline
Setup a hard-coded quad to test drawing
Created a very jank vertex struct
Added ReadEntireFile for filesystem
Added getting file size from file handle
Added a descriptor pool to each in flight frame
Changed Vk_BufferCreate to handle multiple uses
Added shader building to the windows.bat build script
This commit is contained in:
2025-10-04 21:42:04 +01:00
parent b1a805cea8
commit 187359f747
27 changed files with 470 additions and 57 deletions

View File

@@ -25,26 +25,6 @@
#define VK_MAX_FRAMES_IN_FLIGHT 8
#define VK_NUM_SCRATCH 8
typedef struct Vk_CommandBuffer Vk_CommandBuffer;
struct Vk_CommandBuffer {
VkCommandBuffer handle;
VkFence fence;
};
typedef struct Vk_Frame Vk_Frame;
struct Vk_Frame {
VkCommandPool pool;
VkCommandBuffer cmd;
VkSemaphore acquire, complete;
VkFence fence;
U32 next_scratch;
Vk_CommandBuffer scratch[VK_NUM_SCRATCH];
U32 image; // swapchain image index
};
typedef struct Vk_Image Vk_Image;
struct Vk_Image {
VkDeviceMemory memory;
@@ -60,14 +40,65 @@ struct Vk_Image {
typedef struct Vk_Buffer Vk_Buffer;
struct Vk_Buffer {
VkBuffer handle;
VkDeviceMemory memory;
VkDeviceSize size;
VkBuffer handle;
VkBufferUsageFlags usage;
B32 host_visible;
void *data; // if mapped host visible memory
};
typedef struct Vk_Shader Vk_Shader;
struct Vk_Shader {
VkShaderModule handle;
VkShaderStageFlags stage;
};
typedef struct Vk_Pipeline Vk_Pipeline;
struct Vk_Pipeline {
VkPipeline handle;
struct {
VkPipelineLayout pipeline;
VkDescriptorSetLayout set;
} layout;
struct {
VkFormat items[8];
U32 count;
} targets;
struct {
Vk_Shader items[8];
U32 count;
} shaders;
};
typedef struct Vk_CommandBuffer Vk_CommandBuffer;
struct Vk_CommandBuffer {
VkCommandBuffer handle;
VkFence fence;
};
typedef struct Vk_Frame Vk_Frame;
struct Vk_Frame {
VkCommandPool pool;
VkCommandBuffer cmd;
VkDescriptorPool descriptors;
VkSemaphore acquire, complete;
VkFence fence;
U32 next_scratch;
Vk_CommandBuffer scratch[VK_NUM_SCRATCH];
U32 image; // swapchain image index
};
typedef struct Vk_Context Vk_Context;
struct Vk_Context {
void *lib;
@@ -110,6 +141,8 @@ struct Vk_Context {
U32 width;
U32 height;
} swapchain;
VkSampler sampler;
};
extern Vk_Context vk;
@@ -122,6 +155,7 @@ function void Vk_FrameEnd();
function Vk_CommandBuffer *Vk_CommandBufferPush();
function void Vk_CommandBufferSubmit(Vk_CommandBuffer *cmds, B32 wait);
function Vk_Buffer Vk_BufferCreate(U64 size, B32 host_visible);
function void Vk_BufferCreate(Vk_Buffer *buffer);
function void Vk_ImageCreate(Vk_Image *image);
#endif // LD_VULKAN_CORE_H_