fixed up build script and improved render functions

This commit is contained in:
Matthew 2025-03-03 20:55:43 +11:00
parent 3279fabb1b
commit f661493c39
5 changed files with 70 additions and 65 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
build

View File

@ -24,13 +24,12 @@ source_files="../src/main.c"
include_flags="-I../src/ -I../external/ -L." include_flags="-I../src/ -I../external/ -L."
# executable name # executable name
out_name="GearWorks" out_name="Gears"
# vma flags # vma flags
vma_ld="ld -static vma.o `g++ -print-file-name=libstdc++.a` -o vmastdc++.o"
vma_source_files="../external/vma/vma.cpp" vma_source_files="../external/vma/vma.cpp"
vma_compile_flags="-std=c++20 -I../external/vma" vma_compile_flags="-std=c++20 -I../external/vma -c"
vma_out="-c -o" vma_out="-o"
vma_obj="vma.o" vma_obj="vma.o"
# glslc # glslc
@ -51,10 +50,10 @@ clang_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${clang_common} ${auto_compile_f
clang_link="-lpthread -lm -lrt -ldl -l:libvma.a" clang_link="-lpthread -lm -lrt -ldl -l:libvma.a"
clang_out="-o" clang_out="-o"
gcc_common="${include_flags} -fuse-ld=mold -g -Wno-unknown-warning-option -Wall -Wno-missing-braces -Wno-unused-function -Wno-attributes -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-compare-distinct-pointer-types -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf -DVMA_STATIC_VULKAN_FUNCTIONS=0" gcc_common="${include_flags} -std=c99 -fuse-ld=mold -g -Wno-unknown-warning-option -Wall -Wno-missing-braces -Wno-unused-function -Wno-attributes -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-compare-distinct-pointer-types -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf -DVMA_STATIC_VULKAN_FUNCTIONS=0"
gcc_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${gcc_common} ${auto_compile_flags}" gcc_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${gcc_common} ${auto_compile_flags}"
gcc_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${gcc_common} ${auto_compile_flags}" gcc_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${gcc_common} ${auto_compile_flags}"
gcc_link="-lpthread -lm -lrt -ldl -l:libvma.a" gcc_link="-lpthread -lm -lrt -ldl -l:libvma.a -lstdc++"
gcc_out="-o" gcc_out="-o"
link_dll="-fPIC" link_dll="-fPIC"
@ -77,11 +76,6 @@ mkdir -p build
cd build cd build
if [ ! -f $vma_obj ]; then
$vma_ld
fi
if [ -v vulkan ]; then if [ -v vulkan ]; then
mkdir -p ./shaders/glsl mkdir -p ./shaders/glsl
mkdir -p ../src/file_data mkdir -p ../src/file_data
@ -115,7 +109,8 @@ fi
$cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj $cpp_compiler $vma_compile_flags $vma_source_files $vma_out $vma_obj
ar rcs libvma.a vmastdc++.o ar rcs libvma.a vma.o
$compile $source_files $compile_link $link_os_gfx $out $out_name $compile $source_files $compile_link $link_os_gfx $out $out_name

View File

@ -308,13 +308,10 @@ b32 HandleWindowEvent(WindowEvent *event, b32 wait_for_event)
linux_window.h = expose_e->height; linux_window.h = expose_e->height;
break; break;
case XCB_CONFIGURE_NOTIFY: case XCB_CONFIGURE_NOTIFY:
Printfln("configure notify");
xcb_configure_notify_event_t *configure_event = (xcb_configure_notify_event_t *)e; xcb_configure_notify_event_t *configure_event = (xcb_configure_notify_event_t *)e;
if (linux_window.w != configure_event->width || linux_window.h != configure_event->height) if (linux_window.w != configure_event->width || linux_window.h != configure_event->height)
{ {
Printfln("inner w %d h %d", configure_event->width, configure_event->height);
event->type = EVENT_RESIZE; event->type = EVENT_RESIZE;
valid_event = true; valid_event = true;

View File

@ -108,22 +108,10 @@ b32 _BeginFrame()
} }
} }
return success; if (success)
}
void _ClearScreen()
{ {
TransitionImage(cmd, &renderer.vk.sc.draw_img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
} TransitionImage(cmd, &renderer.vk.sc.depth_img, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
void _DrawTriangle()
{
u32 f_ix = renderer.frame_state.frame_cnt % renderer.vk.sc.img_count;
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
TransitionImage(cmd, renderer.vk.sc.depth_img.img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL);
VkRenderingAttachmentInfo col_attach_info = { VkRenderingAttachmentInfo col_attach_info = {
.sType = STYPE(RENDERING_ATTACHMENT_INFO), .sType = STYPE(RENDERING_ATTACHMENT_INFO),
@ -156,6 +144,19 @@ void _DrawTriangle()
}; };
vkCmdBeginRendering(cmd, &render_info); vkCmdBeginRendering(cmd, &render_info);
}
return success;
}
void _ClearScreen()
{
}
void _DrawTriangle()
{
VkCommandBuffer cmd = GetFrameCmdBuf();
vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipelines[PIPELINE_CUBE]); vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipelines[PIPELINE_CUBE]);
vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipeline_layout, 0, DESC_TYPE_MAX, renderer.vk.pipe.sets, 0, NULL); vkCmdBindDescriptorSets(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, renderer.vk.pipe.pipeline_layout, 0, DESC_TYPE_MAX, renderer.vk.pipe.sets, 0, NULL);
@ -187,18 +188,16 @@ b32 _FinishFrame()
b32 success = true; b32 success = true;
VkResult result; VkResult result;
u32 f_ix = renderer.frame_state.frame_cnt % renderer.vk.sc.img_count; VkCommandBuffer cmd = GetFrameCmdBuf();
VkSemaphore sc_sem = GetFrameSwapSem();
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix]; VkSemaphore rndr_sem = GetFrameRenderSem();
VkSemaphore sc_sem = renderer.vk.frame.swapchain_sems[f_ix]; VkFence *fence = GetFrameRenderFence();
VkSemaphore rndr_sem = renderer.vk.frame.render_sems[f_ix];
VkFence fence = renderer.vk.frame.render_fences[f_ix];
VkImage curr_img = renderer.vk.sc.imgs[renderer.frame_state.img_ix]; VkImage curr_img = renderer.vk.sc.imgs[renderer.frame_state.img_ix];
vkCmdEndRendering(cmd); vkCmdEndRendering(cmd);
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); TransitionImage(cmd, &renderer.vk.sc.draw_img, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
TransitionImage(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); TransitionImageLayout(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
VkExtent2D extent = { VkExtent2D extent = {
.width = renderer.vk.sc.extent.width, .width = renderer.vk.sc.extent.width,
@ -207,7 +206,7 @@ b32 _FinishFrame()
CopyImageToImage(cmd, renderer.vk.sc.draw_img.img, curr_img, extent, extent); CopyImageToImage(cmd, renderer.vk.sc.draw_img.img, curr_img, extent, extent);
TransitionImage(cmd, curr_img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); TransitionImageLayout(cmd, curr_img, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
result = vkEndCommandBuffer(cmd); result = vkEndCommandBuffer(cmd);
if (result != VK_SUCCESS) if (result != VK_SUCCESS)
@ -247,7 +246,7 @@ b32 _FinishFrame()
.pCommandBufferInfos = &cmd_info, .pCommandBufferInfos = &cmd_info,
}; };
result = vkQueueSubmit2(renderer.vk.queues.graphics_queue, 1, &submit_info, fence); result = vkQueueSubmit2(renderer.vk.queues.graphics_queue, 1, &submit_info, *fence);
if (result != VK_SUCCESS) if (result != VK_SUCCESS)
{ {
Printf("vkQueueSubmit2 failure: %s", VkResultStr(result)); Printf("vkQueueSubmit2 failure: %s", VkResultStr(result));
@ -357,7 +356,7 @@ static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkEx
vkCmdBlitImage2(cmd, &blit_info); vkCmdBlitImage2(cmd, &blit_info);
} }
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new) static void TransitionImageLayout(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new)
{ {
VkImageMemoryBarrier2 barrier = { VkImageMemoryBarrier2 barrier = {
.sType = STYPE(IMAGE_MEMORY_BARRIER_2), .sType = STYPE(IMAGE_MEMORY_BARRIER_2),
@ -386,6 +385,12 @@ static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr
vkCmdPipelineBarrier2(cmd, &dep_info); vkCmdPipelineBarrier2(cmd, &dep_info);
} }
static void TransitionImage(VkCommandBuffer cmd, Image *img, VkImageLayout new)
{
TransitionImageLayout(cmd, img->img, img->curr_layout, new);
img->curr_layout = new;
}
// INIT // INIT
static b32 InitVulkan(Arena *arena) static b32 InitVulkan(Arena *arena)
@ -989,7 +994,9 @@ static b32 CreateDrawImages()
// Setting values // Setting values
renderer.vk.sc.extent = extent; renderer.vk.sc.extent = extent;
renderer.vk.sc.depth_img.fmt = depth_image_create_info.format; renderer.vk.sc.depth_img.fmt = depth_image_create_info.format;
renderer.vk.sc.depth_img.curr_layout = VK_IMAGE_LAYOUT_UNDEFINED;
renderer.vk.sc.draw_img.fmt = draw_image_create_info.format; renderer.vk.sc.draw_img.fmt = draw_image_create_info.format;
renderer.vk.sc.draw_img.curr_layout = VK_IMAGE_LAYOUT_UNDEFINED;
return success; return success;
} }
@ -1383,3 +1390,4 @@ static VkBool32 DebugCallback(
return VK_FALSE; return VK_FALSE;
} }

View File

@ -196,6 +196,7 @@ typedef struct {
VkImageView view; VkImageView view;
VmaAllocation alloc; VmaAllocation alloc;
VkFormat fmt; VkFormat fmt;
VkImageLayout curr_layout;
} Image; } Image;
typedef struct { typedef struct {
@ -282,6 +283,7 @@ static VkFence *GetFrameRenderFence();
static VkSemaphore GetFrameRenderSem(); static VkSemaphore GetFrameRenderSem();
static VkSemaphore GetFrameSwapSem(); static VkSemaphore GetFrameSwapSem();
static u32 GetFrameIndex(); static u32 GetFrameIndex();
static VkImage GetFrameSwapImage();
// Destroy // Destroy
static void DestroyVulkan(); static void DestroyVulkan();
@ -289,7 +291,8 @@ static void DestroySwapchain();
static void DestroyDrawImages(); static void DestroyDrawImages();
// Util // Util
static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new); static void TransitionImage(VkCommandBuffer cmd, Image *img, VkImageLayout new);
static void TransitionImageLayout(VkCommandBuffer cmd, VkImage img, VkImageLayout curr, VkImageLayout new);
static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext); static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkExtent2D src_ext, VkExtent2D dst_ext);
// Swapchain // Swapchain
@ -343,3 +346,4 @@ static b32 _BeginFrame();
static void _DrawTriangle(); static void _DrawTriangle();
static b32 _FinishFrame(); static b32 _FinishFrame();
static void _SetRenderSize(u32 x, u32 y); static void _SetRenderSize(u32 x, u32 y);