Compare commits

..

7 Commits

Author SHA1 Message Date
mo7sen a6dff30bc7 Updated .gitignore
Test Compilation / Build evk (push) Successful in 25s
2026-05-08 14:40:27 +03:00
mo7sen 9b68f070cf Ensured usage of bundled shaderc instead of the VulkanSDK one
Test Compilation / Build evk (push) Successful in 25s
2026-05-08 14:30:42 +03:00
mo7sen 9d1e0ead4b Added .editorconfig
Test Compilation / Build evk (push) Failing after 16s
2026-05-08 14:23:55 +03:00
mo7sen 95f122e93c Updated + Formatted meson.build 2026-05-08 14:23:31 +03:00
mo7sen 3a2cc0d312 Enforced usage of volk subproject
Test Compilation / Build evk (push) Successful in 31s
2026-05-08 12:45:53 +03:00
mo7sen 5f362970c1 Added missing dependency name in vma.wrap
Test Compilation / Build evk (push) Failing after 1m20s
2026-05-08 12:39:32 +03:00
mo7sen 3f4792c7f1 WIP Samples
Test Compilation / Build evk (push) Failing after 22s
2026-05-08 01:53:34 +03:00
9 changed files with 55 additions and 82 deletions
+6 -6
View File
@@ -88,9 +88,9 @@ static inline const char* VkResultStrings(VkResult res) {
} }
}; };
static VkResult __evk_check_result_internal; #define EVK_ASSERT(fn) do { \
#define EVK_CHECK(fn) ( \ VkResult __vk_assert_result_internal = fn; \
__evk_check_result_internal = fn, \ if(__vk_assert_result_internal != VK_SUCCESS) { \
__evk_check_result_internal != VK_SUCCESS? \ ev_log_error("[VulkanError] `%s` returned error code %d ('%s')", EV_STRINGIZE(fn), __vk_assert_result_internal, VkResultStrings(__vk_assert_result_internal));\
ev_log_error("[VulkanError] `%s` returned error code %d ('%s')", EV_STRINGIZE(fn), __evk_check_result_internal, VkResultStrings(__evk_check_result_internal)):0, \ } \
__evk_check_result_internal) } while (0)
+1 -1
View File
@@ -210,7 +210,7 @@ evkDevice evkCreateDevice(evkDeviceCreateInfo createInfo)
} }
} }
EVK_CHECK(vkCreateDevice(device._physicalDevice, &vkDeviceCreateInfo, evkGetAllocationCallbacks(), &device.vk)); EVK_ASSERT(vkCreateDevice(device._physicalDevice, &vkDeviceCreateInfo, evkGetAllocationCallbacks(), &device.vk));
vec_fini(&queueCreateInfoList); vec_fini(&queueCreateInfoList);
vec_fini(&priorities); vec_fini(&priorities);
-2
View File
@@ -56,7 +56,6 @@ evkImage evkGPUCreateImage(evkGPUAllocationCreateInfo allocationCreateInfo, VkIm
.flags = allocationCreateInfo.allocationFlags, .flags = allocationCreateInfo.allocationFlags,
.pool = allocationCreateInfo.pool.vma, .pool = allocationCreateInfo.pool.vma,
}; };
img.allocData.allocator = allocationCreateInfo.allocator;
vmaCreateImage(allocationCreateInfo.allocator.vma, imageCreateInfo, &vmaAllocCreateInfo, &img.vk, &img.allocData.allocation.vma, &img.allocData.allocationInfo.vma); vmaCreateImage(allocationCreateInfo.allocator.vma, imageCreateInfo, &vmaAllocCreateInfo, &img.vk, &img.allocData.allocation.vma, &img.allocData.allocationInfo.vma);
@@ -80,7 +79,6 @@ evkBuffer evkGPUCreateBuffer(evkGPUAllocationCreateInfo allocationCreateInfo, Vk
vmaCreateBuffer(allocationCreateInfo.allocator.vma, bufferCreateInfo, &vmaAllocCreateInfo, &buf.vk, &buf.allocData.allocation.vma, &buf.allocData.allocationInfo.vma); vmaCreateBuffer(allocationCreateInfo.allocator.vma, bufferCreateInfo, &vmaAllocCreateInfo, &buf.vk, &buf.allocData.allocation.vma, &buf.allocData.allocationInfo.vma);
buf.usage = bufferCreateInfo->usage; buf.usage = bufferCreateInfo->usage;
buf.allocData.allocator = allocationCreateInfo.allocator;
return buf; return buf;
} }
+1 -1
View File
@@ -210,7 +210,7 @@ evkPipeline evkCreateGraphicsPipeline(evkDevice device, evkPipelineCreateInfo cr
.layout = res.layout.vk, .layout = res.layout.vk,
}; };
EVK_CHECK(vkCreateGraphicsPipelines(device.vk, VK_NULL_HANDLE, 1, &graphicsPipelineCreateInfo, NULL, &res.vk)); EVK_ASSERT(vkCreateGraphicsPipelines(device.vk, VK_NULL_HANDLE, 1, &graphicsPipelineCreateInfo, NULL, &res.vk));
res._device = device; res._device = device;
+10 -9
View File
@@ -107,26 +107,27 @@ void evkDestroyShaderCompiler(evkShaderCompiler compiler)
shaderc_compiler_release(compiler.sc); shaderc_compiler_release(compiler.sc);
} }
evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler,evstring shaderName, evstring shaderText) evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath)
{ {
shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(compiler.sc, shaderText, evstring_getLength(shaderText), shaderc_glsl_infer_from_source, shaderName, "main", compiler.scopt); evstring shaderText = evstring_readFile(shaderPath);
shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(compiler.sc, shaderText, evstring_getLength(shaderText), shaderc_glsl_infer_from_source, shaderPath, "main", compiler.scopt);
shaderc_compilation_status status = shaderc_result_get_compilation_status(compilation_result); shaderc_compilation_status status = shaderc_result_get_compilation_status(compilation_result);
u32 errorCount = shaderc_result_get_num_errors(compilation_result); u32 errorCount = shaderc_result_get_num_errors(compilation_result);
u32 warnCount = shaderc_result_get_num_warnings(compilation_result); u32 warnCount = shaderc_result_get_num_warnings(compilation_result);
ev_log_info("[[evkShader]] %s Compilation Status: %d ( %d Errors, %d Warnings )", shaderName, status, errorCount, warnCount); ev_log_info("[[evkShader]] %s Compilation Status: %d ( %d Errors, %d Warnings )", shaderPath, status, errorCount, warnCount);
if(errorCount + warnCount > 0) if(errorCount + warnCount > 0)
{ {
ev_log_error("Errors:\n%s", shaderc_result_get_error_message(compilation_result)); ev_log_error("Errors:\n%s", shaderc_result_get_error_message(compilation_result));
} }
return evkInitShaderFromBytes(device, (u8*)shaderc_result_get_bytes(compilation_result), shaderc_result_get_length(compilation_result)); evkShader shader = evkInitShaderFromBytes(device, (u8*)shaderc_result_get_bytes(compilation_result), shaderc_result_get_length(compilation_result));
}
evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath) evstring_free(shaderText);
{
evstring shaderText = evstring_readFile(shaderPath); return shader;
return evkInitShaderFromString(device, compiler, shaderPath, shaderText);
} }
VkPipelineShaderStageCreateInfo evkGetShaderStageCreateInfo(evkShader shader) VkPipelineShaderStageCreateInfo evkGetShaderStageCreateInfo(evkShader shader)
-3
View File
@@ -4,9 +4,6 @@
[[nodiscard("Leaking VkShaderModule")]] [[nodiscard("Leaking VkShaderModule")]]
evkShader evkInitShaderFromBytes(evkDevice device, const u8* shaderBytes, u32 shaderLen); evkShader evkInitShaderFromBytes(evkDevice device, const u8* shaderBytes, u32 shaderLen);
[[nodiscard("Leaking VkShaderModule")]]
evkShader evkInitShaderFromString(evkDevice device, evkShaderCompiler compiler, evstring shaderName, evstring shaderText);
[[nodiscard("Leaking VkShaderModule")]]
evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath); evkShader evkInitShaderFromFile(evkDevice device, evkShaderCompiler compiler, evstring shaderPath);
void evkDestroyShader(evkDevice device, evkShader shader); void evkDestroyShader(evkDevice device, evkShader shader);
+1 -1
View File
@@ -56,7 +56,7 @@ evkSwapChain evkCreateSwapChain(evkSwapChainCreateInfo createInfo)
.oldSwapchain = VK_NULL_HANDLE, .oldSwapchain = VK_NULL_HANDLE,
}; };
EVK_CHECK(vkCreateSwapchainKHR(createInfo.device.vk, &swapChainCreateInfo, NULL, &swapChain.vk)); EVK_ASSERT(vkCreateSwapchainKHR(createInfo.device.vk, &swapChainCreateInfo, NULL, &swapChain.vk));
vkGetSwapchainImagesKHR(createInfo.device.vk, swapChain.vk, &buffering, NULL); vkGetSwapchainImagesKHR(createInfo.device.vk, swapChain.vk, &buffering, NULL);
VkImage swapChainVkImages[buffering]; VkImage swapChainVkImages[buffering];
+4 -26
View File
@@ -8,15 +8,6 @@
evstring PROJECT_NAME = evstr("basic_triangle"); evstring PROJECT_NAME = evstr("basic_triangle");
char vertexShaderBytes[] = {
#embed "shaders/basic_triangle.vert"
,'\0'
};
char fragmentShaderBytes[] = {
#embed "shaders/basic_triangle.frag"
,'\0'
};
int main(void) int main(void)
{ {
u32 width = 1280; u32 width = 1280;
@@ -91,7 +82,7 @@ int main(void)
} }
VkSurfaceKHR surface; VkSurfaceKHR surface;
VkResult err = EVK_CHECK(glfwCreateWindowSurface(instance.vk, window, NULL, &surface)); VkResult err = glfwCreateWindowSurface(instance.vk, window, NULL, &surface);
if (err) if (err)
{ {
ev_log_error("Surface creation failed."); ev_log_error("Surface creation failed.");
@@ -118,14 +109,8 @@ int main(void)
evkShaderCompiler compiler = evkCreateShaderCompiler(); evkShaderCompiler compiler = evkCreateShaderCompiler();
evstring vertexShaderText = evstring_new(vertexShaderBytes); evkShader vertShader = evkInitShaderFromFile(device, compiler, "shaders/basic_triangle.vert");
evstring fragmentShaderText = evstring_new(fragmentShaderBytes); evkShader fragShader = evkInitShaderFromFile(device, compiler, "shaders/basic_triangle.frag");
evkShader vertShader = evkInitShaderFromString(device, compiler, evstr("basic_triangle.vert"),vertexShaderText);
evkShader fragShader = evkInitShaderFromString(device, compiler, evstr("basic_triangle.frag"), fragmentShaderText);
evstring_free(vertexShaderText);
evstring_free(fragmentShaderText);
evkDestroyShaderCompiler(compiler); evkDestroyShaderCompiler(compiler);
@@ -147,7 +132,6 @@ int main(void)
// }) // })
// ); // );
// evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromBindings(&device, vertShader.reflect.bindings); // evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromBindings(&device, vertShader.reflect.bindings);
evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromShaders(&device, svec_init(evkShader, {vertShader, fragShader})); evkDescriptorSetLayout setLayout_0 = evkCreateDescriptorSetLayoutFromShaders(&device, svec_init(evkShader, {vertShader, fragShader}));
evkPipelineCreateInfo pipelineCreateInfo = EV_DEFAULT(evkPipelineCreateInfo, evkPipelineCreateInfo pipelineCreateInfo = EV_DEFAULT(evkPipelineCreateInfo,
@@ -244,7 +228,7 @@ int main(void)
{ {
imageIdx = (imageIdx + 1) % imageCount; imageIdx = (imageIdx + 1) % imageCount;
u32 swapChainImageIdx; u32 swapChainImageIdx;
EVK_CHECK(vkAcquireNextImageKHR(device.vk, swapChain.vk, UInt64.MAX, imageAcquiredSemaphores[imageIdx], VK_NULL_HANDLE, &swapChainImageIdx)); EVK_ASSERT(vkAcquireNextImageKHR(device.vk, swapChain.vk, UInt64.MAX, imageAcquiredSemaphores[imageIdx], VK_NULL_HANDLE, &swapChainImageIdx));
evkCommandBuffer cmdbuf = commandBuffers[imageIdx]; evkCommandBuffer cmdbuf = commandBuffers[imageIdx];
@@ -285,7 +269,6 @@ int main(void)
evkCmdImageBarrier(&cmdbuf, EV_DEFAULT(VkImageMemoryBarrier, evkCmdImageBarrier(&cmdbuf, EV_DEFAULT(VkImageMemoryBarrier,
image = swapChain.images[swapChainImageIdx].vk, image = swapChain.images[swapChainImageIdx].vk,
oldLayout = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, newLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT
)); ));
@@ -338,9 +321,6 @@ int main(void)
evkDestroyPipeline(graphicsPipeline); evkDestroyPipeline(graphicsPipeline);
evkDestroyBuffer(vertBuf);
evkDestroyBuffer(uniBuf);
evkDestroyDescriptorSet(&device, &set_0); evkDestroyDescriptorSet(&device, &set_0);
evkDestroyDescriptorSetLayout(&device, &setLayout_0); evkDestroyDescriptorSetLayout(&device, &setLayout_0);
@@ -350,8 +330,6 @@ int main(void)
evkFreeCommandBuffers(device, commandPool, commandBuffers); evkFreeCommandBuffers(device, commandPool, commandBuffers);
evkDestroyCommandPool(device, commandPool); evkDestroyCommandPool(device, commandPool);
evkGPUDestroyAllocator(allocator);
evkDestroySwapChain(device, swapChain); evkDestroySwapChain(device, swapChain);
// SwapchainCreationFailed: // SwapchainCreationFailed:
@@ -1,7 +1,7 @@
#version 450 #version 450
#pragma shader_stage(vertex) #pragma shader_stage(vertex)
in layout(location=0) vec2 position; // in layout(location=0) vec2 position;
layout(set=0, binding=0) uniform data { layout(set=0, binding=0) uniform data {
vec4 positions[3]; vec4 positions[3];
@@ -12,5 +12,4 @@ void main() {
// gl_Position = vec4(position, 0.0, 1.0); // gl_Position = vec4(position, 0.0, 1.0);
// gl_Position = vec4(inputData.positions[gl_VertexIndex], 0.0, 1.0); // gl_Position = vec4(inputData.positions[gl_VertexIndex], 0.0, 1.0);
gl_Position = vertexData.positions[gl_VertexIndex]; gl_Position = vertexData.positions[gl_VertexIndex];
// gl_Position = vec4(position, 0.0, 1.0);
} }