summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoromnisci3nce <17525998+omnisci3nce@users.noreply.github.com>2024-03-27 21:05:04 +1100
committeromnisci3nce <17525998+omnisci3nce@users.noreply.github.com>2024-03-27 21:05:04 +1100
commit80cdd4f2b1c2a3355926b59a85e14100b3daa7b7 (patch)
tree0c7787806aeb5613462e4e966fccd9f4de1c57b7
parent90248a622203da205916ac89a1ac144d363cf37d (diff)
simple shaders for testing
-rw-r--r--assets/shaders/triangle.frag8
-rw-r--r--assets/shaders/triangle.vert8
-rw-r--r--src/renderer/backends/backend_vulkan.c24
-rw-r--r--xmake.lua17
4 files changed, 52 insertions, 5 deletions
diff --git a/assets/shaders/triangle.frag b/assets/shaders/triangle.frag
new file mode 100644
index 0000000..d26e5c4
--- /dev/null
+++ b/assets/shaders/triangle.frag
@@ -0,0 +1,8 @@
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 0) out vec4 out_colour;
+
+void main() {
+ out_colour = vec4(1.0);
+} \ No newline at end of file
diff --git a/assets/shaders/triangle.vert b/assets/shaders/triangle.vert
new file mode 100644
index 0000000..0518c62
--- /dev/null
+++ b/assets/shaders/triangle.vert
@@ -0,0 +1,8 @@
+#version 450
+#extension GL_ARB_separate_shader_objects : enable
+
+layout(location = 0) in vec3 in_position;
+
+void main() {
+ gl_Position = vec4(in_position, 1.0);
+} \ No newline at end of file
diff --git a/src/renderer/backends/backend_vulkan.c b/src/renderer/backends/backend_vulkan.c
index 2b6bcd5..863cd65 100644
--- a/src/renderer/backends/backend_vulkan.c
+++ b/src/renderer/backends/backend_vulkan.c
@@ -176,9 +176,29 @@ bool create_shader_module(vulkan_context* context, const char* filename, const c
// char file_name[512];
memset(&shader_stages[stage_index].create_info, 0, sizeof(VkShaderModuleCreateInfo));
+ memset(&shader_stages[stage_index].stage_create_info, 0, sizeof(VkPipelineShaderStageCreateInfo));
+
shader_stages[stage_index].create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
// todo: file input
+ const char* file_contents = string_from_file(filename);
+
+ u64 bytes = strlen(file_contents);
+ shader_stages[stage_index].create_info.codeSize = bytes;
+ shader_stages[stage_index].create_info.pCode = (u32*)file_contents;
+
+ vkCreateShaderModule(context->device.logical_device, &shader_stages[stage_index].create_info,
+ context->allocator, &shader_stages[stage_index].handle);
+
+ shader_stages[stage_index].stage_create_info.sType =
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
+ shader_stages[stage_index].stage_create_info.stage = flag;
+ shader_stages[stage_index].stage_create_info.module = shader_stages[stage_index].handle;
+ shader_stages[stage_index].stage_create_info.pName = "main";
+
+ free(file_contents);
+
+ return true;
}
bool vulkan_object_shader_create(vulkan_context* context, vulkan_shader* out_shader) {
@@ -186,8 +206,8 @@ bool vulkan_object_shader_create(vulkan_context* context, vulkan_shader* out_sha
VkShaderStageFlagBits stage_types[SHADER_STAGE_COUNT] = { VK_SHADER_STAGE_VERTEX_BIT,
VK_SHADER_STAGE_FRAGMENT_BIT };
for (u8 i = 0; i < SHADER_STAGE_COUNT; i++) {
- create_shader_module(context, "build/linux/x86_64/debug/blinn_phong.vert.spv",
- stage_type_strs[i], stage_types[i], i, out_shader->stages);
+ create_shader_module(context, "build/linux/x86_64/debug/triangle.vert.spv", stage_type_strs[i],
+ stage_types[i], i, out_shader->stages);
}
}
void vulkan_object_shader_destroy(vulkan_context* context, vulkan_shader* shader) {}
diff --git a/xmake.lua b/xmake.lua
index 32e5ba4..5457ccb 100644
--- a/xmake.lua
+++ b/xmake.lua
@@ -63,7 +63,7 @@ local core_sources = {
"src/systems/*.c",
}
-rule("compile_glsl_shaders")
+rule("compile_glsl_vert_shaders")
set_extensions(".vert")
on_buildcmd_file(function (target, batchcmds, sourcefile, opt)
local targetfile = path.join(target:targetdir(), path.basename(sourcefile) .. ".vert.spv")
@@ -72,6 +72,15 @@ rule("compile_glsl_shaders")
batchcmds:vrunv('glslc', {sourcefile, "-o", targetfile})
batchcmds:add_depfiles(sourcefile)
end)
+rule("compile_glsl_frag_shaders")
+ set_extensions(".frag")
+ on_buildcmd_file(function (target, batchcmds, sourcefile, opt)
+ local targetfile = path.join(target:targetdir(), path.basename(sourcefile) .. ".frag.spv")
+
+ print("Compiling shader: %s", sourcefile)
+ batchcmds:vrunv('glslc', {sourcefile, "-o", targetfile})
+ batchcmds:add_depfiles(sourcefile)
+end)
-- TODO: Metal shaders compilation
-- common configuration for both static and shared libraries
@@ -94,9 +103,11 @@ target("core_config")
add_includedirs("src/std/", {public = true})
add_includedirs("src/std/containers", {public = true})
add_includedirs("src/systems/", {public = true})
- add_rules("compile_glsl_shaders")
+ add_rules("compile_glsl_vert_shaders")
+ add_rules("compile_glsl_frag_shaders")
add_files("src/empty.c") -- for some reason we need this on Mac so it doesnt call 'ar' with no files and error
- add_files("assets/shaders/*.vert")
+ add_files("assets/shaders/triangle.vert")
+ add_files("assets/shaders/triangle.frag")
-- add_files("assets/shaders/*.frag")
set_default(false) -- prevents standalone building of this target