fixed up build script and improved render functions
This commit is contained in:
parent
3279fabb1b
commit
f661493c39
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
build
|
||||
19
build.sh
19
build.sh
@ -24,13 +24,12 @@ source_files="../src/main.c"
|
||||
include_flags="-I../src/ -I../external/ -L."
|
||||
|
||||
# executable name
|
||||
out_name="GearWorks"
|
||||
out_name="Gears"
|
||||
|
||||
# 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_compile_flags="-std=c++20 -I../external/vma"
|
||||
vma_out="-c -o"
|
||||
vma_compile_flags="-std=c++20 -I../external/vma -c"
|
||||
vma_out="-o"
|
||||
vma_obj="vma.o"
|
||||
|
||||
# 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_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_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"
|
||||
|
||||
link_dll="-fPIC"
|
||||
@ -77,11 +76,6 @@ mkdir -p build
|
||||
|
||||
cd build
|
||||
|
||||
if [ ! -f $vma_obj ]; then
|
||||
$vma_ld
|
||||
fi
|
||||
|
||||
|
||||
if [ -v vulkan ]; then
|
||||
mkdir -p ./shaders/glsl
|
||||
mkdir -p ../src/file_data
|
||||
@ -115,7 +109,8 @@ fi
|
||||
|
||||
$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
|
||||
|
||||
|
||||
|
||||
@ -308,13 +308,10 @@ b32 HandleWindowEvent(WindowEvent *event, b32 wait_for_event)
|
||||
linux_window.h = expose_e->height;
|
||||
break;
|
||||
case XCB_CONFIGURE_NOTIFY:
|
||||
Printfln("configure notify");
|
||||
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)
|
||||
{
|
||||
|
||||
Printfln("inner w %d h %d", configure_event->width, configure_event->height);
|
||||
event->type = EVENT_RESIZE;
|
||||
valid_event = true;
|
||||
|
||||
|
||||
@ -108,6 +108,44 @@ b32 _BeginFrame()
|
||||
}
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
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);
|
||||
|
||||
VkRenderingAttachmentInfo col_attach_info = {
|
||||
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||
.imageView = renderer.vk.sc.draw_img.view,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
};
|
||||
|
||||
VkRenderingAttachmentInfo depth_attach_info = {
|
||||
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||
.imageView = renderer.vk.sc.depth_img.view,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
};
|
||||
|
||||
VkRenderingInfo render_info = {
|
||||
.sType = STYPE(RENDERING_INFO),
|
||||
.layerCount = 1,
|
||||
.colorAttachmentCount = 1,
|
||||
.pColorAttachments = &col_attach_info,
|
||||
.pDepthAttachment = &depth_attach_info,
|
||||
.renderArea = {
|
||||
.extent = {
|
||||
.width = renderer.vk.sc.extent.width,
|
||||
.height = renderer.vk.sc.extent.height,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
vkCmdBeginRendering(cmd, &render_info);
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
@ -118,44 +156,7 @@ void _ClearScreen()
|
||||
|
||||
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 = {
|
||||
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||
.imageView = renderer.vk.sc.draw_img.view,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
};
|
||||
|
||||
VkRenderingAttachmentInfo depth_attach_info = {
|
||||
.sType = STYPE(RENDERING_ATTACHMENT_INFO),
|
||||
.imageView = renderer.vk.sc.depth_img.view,
|
||||
.imageLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL,
|
||||
.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR,
|
||||
.storeOp = VK_ATTACHMENT_STORE_OP_STORE,
|
||||
};
|
||||
|
||||
VkRenderingInfo render_info = {
|
||||
.sType = STYPE(RENDERING_INFO),
|
||||
.layerCount = 1,
|
||||
.colorAttachmentCount = 1,
|
||||
.pColorAttachments = &col_attach_info,
|
||||
.pDepthAttachment = &depth_attach_info,
|
||||
.renderArea = {
|
||||
.extent = {
|
||||
.width = renderer.vk.sc.extent.width,
|
||||
.height = renderer.vk.sc.extent.height,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
vkCmdBeginRendering(cmd, &render_info);
|
||||
VkCommandBuffer cmd = GetFrameCmdBuf();
|
||||
|
||||
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);
|
||||
@ -187,18 +188,16 @@ b32 _FinishFrame()
|
||||
b32 success = true;
|
||||
VkResult result;
|
||||
|
||||
u32 f_ix = renderer.frame_state.frame_cnt % renderer.vk.sc.img_count;
|
||||
|
||||
VkCommandBuffer cmd = renderer.vk.frame.buffers[f_ix];
|
||||
VkSemaphore sc_sem = renderer.vk.frame.swapchain_sems[f_ix];
|
||||
VkSemaphore rndr_sem = renderer.vk.frame.render_sems[f_ix];
|
||||
VkFence fence = renderer.vk.frame.render_fences[f_ix];
|
||||
VkCommandBuffer cmd = GetFrameCmdBuf();
|
||||
VkSemaphore sc_sem = GetFrameSwapSem();
|
||||
VkSemaphore rndr_sem = GetFrameRenderSem();
|
||||
VkFence *fence = GetFrameRenderFence();
|
||||
VkImage curr_img = renderer.vk.sc.imgs[renderer.frame_state.img_ix];
|
||||
|
||||
vkCmdEndRendering(cmd);
|
||||
|
||||
TransitionImage(cmd, renderer.vk.sc.draw_img.img, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
TransitionImage(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
TransitionImage(cmd, &renderer.vk.sc.draw_img, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
|
||||
TransitionImageLayout(cmd, curr_img, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
|
||||
|
||||
VkExtent2D extent = {
|
||||
.width = renderer.vk.sc.extent.width,
|
||||
@ -207,7 +206,7 @@ b32 _FinishFrame()
|
||||
|
||||
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);
|
||||
if (result != VK_SUCCESS)
|
||||
@ -247,7 +246,7 @@ b32 _FinishFrame()
|
||||
.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)
|
||||
{
|
||||
Printf("vkQueueSubmit2 failure: %s", VkResultStr(result));
|
||||
@ -357,7 +356,7 @@ static void CopyImageToImage(VkCommandBuffer cmd, VkImage src, VkImage dst, VkEx
|
||||
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 = {
|
||||
.sType = STYPE(IMAGE_MEMORY_BARRIER_2),
|
||||
@ -386,6 +385,12 @@ static void TransitionImage(VkCommandBuffer cmd, VkImage img, VkImageLayout curr
|
||||
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
|
||||
|
||||
static b32 InitVulkan(Arena *arena)
|
||||
@ -989,7 +994,9 @@ static b32 CreateDrawImages()
|
||||
// Setting values
|
||||
renderer.vk.sc.extent = extent;
|
||||
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.curr_layout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
|
||||
return success;
|
||||
}
|
||||
@ -1383,3 +1390,4 @@ static VkBool32 DebugCallback(
|
||||
return VK_FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -196,6 +196,7 @@ typedef struct {
|
||||
VkImageView view;
|
||||
VmaAllocation alloc;
|
||||
VkFormat fmt;
|
||||
VkImageLayout curr_layout;
|
||||
} Image;
|
||||
|
||||
typedef struct {
|
||||
@ -282,6 +283,7 @@ static VkFence *GetFrameRenderFence();
|
||||
static VkSemaphore GetFrameRenderSem();
|
||||
static VkSemaphore GetFrameSwapSem();
|
||||
static u32 GetFrameIndex();
|
||||
static VkImage GetFrameSwapImage();
|
||||
|
||||
// Destroy
|
||||
static void DestroyVulkan();
|
||||
@ -289,7 +291,8 @@ static void DestroySwapchain();
|
||||
static void DestroyDrawImages();
|
||||
|
||||
// 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);
|
||||
|
||||
// Swapchain
|
||||
@ -343,3 +346,4 @@ static b32 _BeginFrame();
|
||||
static void _DrawTriangle();
|
||||
static b32 _FinishFrame();
|
||||
static void _SetRenderSize(u32 x, u32 y);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user