summaryrefslogtreecommitdiff
path: root/src/ral/backends
diff options
context:
space:
mode:
authoromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-10-05 12:48:05 +1000
committeromniscient <17525998+omnisci3nce@users.noreply.github.com>2024-10-05 12:48:05 +1000
commitdfb6adbcbcc7d50b770b6d5ea82efdd8f8c32e25 (patch)
treea470b91a90716d7ea46fde53ed395449c24583a2 /src/ral/backends
parent54354e32c6498cc7f8839ab4deb1208d37216cc5 (diff)
delete documentation workflow
Diffstat (limited to 'src/ral/backends')
-rw-r--r--src/ral/backends/metal/backend_metal.h0
-rw-r--r--src/ral/backends/opengl/backend_opengl.c449
-rw-r--r--src/ral/backends/opengl/backend_opengl.h109
-rw-r--r--src/ral/backends/opengl/opengl_helpers.h159
-rw-r--r--src/ral/backends/vulkan/backend_vulkan.c0
-rw-r--r--src/ral/backends/vulkan/backend_vulkan.h44
-rw-r--r--src/ral/backends/vulkan/vulkan_glossary.md18
-rw-r--r--src/ral/backends/vulkan/vulkan_helpers.h199
8 files changed, 0 insertions, 978 deletions
diff --git a/src/ral/backends/metal/backend_metal.h b/src/ral/backends/metal/backend_metal.h
deleted file mode 100644
index e69de29..0000000
--- a/src/ral/backends/metal/backend_metal.h
+++ /dev/null
diff --git a/src/ral/backends/opengl/backend_opengl.c b/src/ral/backends/opengl/backend_opengl.c
deleted file mode 100644
index 613d7e1..0000000
--- a/src/ral/backends/opengl/backend_opengl.c
+++ /dev/null
@@ -1,449 +0,0 @@
-#include "backend_opengl.h"
-#include "colours.h"
-#include "maths_types.h"
-#if defined(CEL_REND_BACKEND_OPENGL)
-#include <assert.h>
-#include "log.h"
-#include "mem.h"
-#include "opengl_helpers.h"
-#include "ral_common.h"
-#include "ral_impl.h"
-#include "ral_types.h"
-
-#include <glad/glad.h>
-#include <glfw3.h>
-
-typedef struct OpenglCtx {
- GLFWwindow* window;
- arena pool_arena;
- GPU_Swapchain swapchain;
- GPU_CmdEncoder main_encoder;
- GPU_BackendPools gpu_pools;
- ResourcePools* resource_pools;
-} OpenglCtx;
-
-static OpenglCtx context;
-
-bool GPU_Backend_Init(const char* window_name, struct GLFWwindow* window,
- struct ResourcePools* res_pools) {
- INFO("loading OpenGL backend");
-
- memset(&context, 0, sizeof(context));
- context.window = window;
-
- size_t pool_buffer_size = 1024 * 1024;
- context.pool_arena = arena_create(malloc(pool_buffer_size), pool_buffer_size);
-
- BackendPools_Init(&context.pool_arena, &context.gpu_pools);
- context.resource_pools = res_pools;
-
- glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
- glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
- glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
- glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
-
- // glad: load all opengl function pointers
- if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
- ERROR("Failed to initialise GLAD \n");
- return false;
- }
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
-
- context.swapchain = (GPU_Swapchain){ .dimensions = u32x2(1000, 1000) };
-
- return true;
-}
-
-// All of these are no-ops in OpenGL
-void GPU_Backend_Shutdown() { /* TODO */ }
-bool GPU_Device_Create(GPU_Device* out_device) { return true; }
-void GPU_Device_Destroy(GPU_Device* device) {}
-bool GPU_Swapchain_Create(GPU_Swapchain* out_swapchain) { return true; }
-void GPU_Swapchain_Destroy(GPU_Swapchain* swapchain) {}
-void GPU_CmdEncoder_Destroy(GPU_CmdEncoder* encoder) {}
-
-void GPU_CmdEncoder_BeginRender(GPU_CmdEncoder* encoder, GPU_Renderpass* renderpass) {
- glBindFramebuffer(GL_FRAMEBUFFER, renderpass->fbo);
- // rgba clear_colour = STONE_800;
- // glClearColor(clear_colour.r, clear_colour.g, clear_colour.b, 1.0f);
- // if (renderpass->description.has_depth_stencil) {
- // glClear(GL_DEPTH_BUFFER_BIT);
- // } else {
- // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- // }
-}
-
-void GPU_CmdEncoder_EndRender(GPU_CmdEncoder* encoder) { glBindFramebuffer(GL_FRAMEBUFFER, 0); }
-
-GPU_CmdEncoder* GPU_GetDefaultEncoder() { return &context.main_encoder; }
-void GPU_QueueSubmit(GPU_CmdBuffer* cmd_buffer) {}
-
-void GPU_Swapchain_Resize(i32 new_width, i32 new_height) {
- context.swapchain.dimensions = u32x2(new_width, new_height);
-}
-
-u32x2 GPU_Swapchain_GetDimensions() { return context.swapchain.dimensions; }
-
-GPU_Renderpass* GPU_Renderpass_Create(GPU_RenderpassDesc description) {
- // allocate new pass
- GPU_Renderpass* renderpass = Renderpass_pool_alloc(&context.gpu_pools.renderpasses, NULL);
- renderpass->description = description;
-
- if (!description.default_framebuffer) {
- // If we're not using the default framebuffer we need to generate a new one
- GLuint gl_fbo_id;
- glGenFramebuffers(1, &gl_fbo_id);
- renderpass->fbo = gl_fbo_id;
- } else {
- renderpass->fbo = OPENGL_DEFAULT_FRAMEBUFFER;
- assert(!description.has_color_target);
- assert(!description.has_depth_stencil);
- }
- glBindFramebuffer(GL_FRAMEBUFFER, renderpass->fbo);
-
- if (description.has_color_target && !description.default_framebuffer) {
- GPU_Texture* colour_attachment = TEXTURE_GET(description.color_target);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
- colour_attachment->id, 0);
- }
- if (description.has_depth_stencil && !description.default_framebuffer) {
- GPU_Texture* depth_attachment = TEXTURE_GET(description.depth_stencil);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_attachment->id,
- 0);
- }
-
- if (description.has_depth_stencil && !description.has_color_target) {
- glDrawBuffer(GL_NONE);
- glReadBuffer(GL_NONE);
- }
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0); // reset to default framebuffer
-
- return renderpass;
-}
-
-void GPU_Renderpass_Destroy(GPU_Renderpass* pass) { glDeleteFramebuffers(1, &pass->fbo); }
-
-GPU_Pipeline* GPU_GraphicsPipeline_Create(GraphicsPipelineDesc description,
- GPU_Renderpass* renderpass) {
- GPU_Pipeline* pipeline = Pipeline_pool_alloc(&context.gpu_pools.pipelines, NULL);
-
- // Create shader program
- u32 shader_id = shader_create_separate(description.vs.filepath.buf, description.fs.filepath.buf);
- pipeline->shader_id = shader_id;
-
- // Vertex format
- pipeline->vertex_desc = description.vertex_desc;
-
- // Allocate uniform buffers if needed
- u32 ubo_count = 0;
- // printf("data layouts %d\n", description.data_layouts_count);
- for (u32 layout_i = 0; layout_i < description.data_layouts_count; layout_i++) {
- ShaderDataLayout sdl = description.data_layouts[layout_i];
- TRACE("Got shader data layout %d's bindings! . found %d", layout_i, sdl.binding_count);
-
- for (u32 binding_j = 0; binding_j < sdl.binding_count; binding_j++) {
- u32 binding_id = binding_j;
- assert(binding_id < MAX_PIPELINE_UNIFORM_BUFFERS);
- ShaderBinding binding = sdl.bindings[binding_j];
- // Do I want Buffer vs Bytes?
- if (binding.kind == BINDING_BYTES) {
- static u32 s_binding_point = 0;
- BufferHandle ubo_handle = GPU_BufferCreate(binding.data.bytes.size, BUFFER_UNIFORM,
- BUFFER_FLAG_GPU, NULL); // no data right now
- pipeline->uniform_bindings[ubo_count++] = ubo_handle;
- GPU_Buffer* ubo_buf = BUFFER_GET(ubo_handle);
-
- i32 blockIndex = glGetUniformBlockIndex(pipeline->shader_id, binding.label);
- printf("Block index for %s: %d", binding.label, blockIndex);
- if (blockIndex < 0) {
- WARN("Couldn't retrieve block index for uniform block '%s'", binding.label);
- } else {
- // DEBUG("Retrived block index %d for %s", blockIndex, binding.label);
- }
- u32 blocksize;
- glGetActiveUniformBlockiv(pipeline->shader_id, blockIndex, GL_UNIFORM_BLOCK_DATA_SIZE,
- &blocksize);
- printf("\t with size %d bytes\n", blocksize);
-
- glBindBufferBase(GL_UNIFORM_BUFFER, s_binding_point, ubo_buf->id.ubo);
- if (blockIndex != GL_INVALID_INDEX) {
- glUniformBlockBinding(pipeline->shader_id, blockIndex, s_binding_point);
- }
- ubo_buf->ubo_binding_point = s_binding_point++;
- ubo_buf->name = binding.label;
- assert(s_binding_point < GL_MAX_UNIFORM_BUFFER_BINDINGS);
- }
- }
- }
- pipeline->uniform_count = ubo_count;
-
- pipeline->renderpass = renderpass;
- pipeline->wireframe = description.wireframe;
-
- return pipeline;
-}
-
-void GraphicsPipeline_Destroy(GPU_Pipeline* pipeline) {}
-
-GPU_CmdEncoder GPU_CmdEncoder_Create() {
- GPU_CmdEncoder encoder = { 0 };
- return encoder;
-}
-
-BufferHandle GPU_BufferCreate(u64 size, GPU_BufferType buf_type, GPU_BufferFlags flags,
- const void* data) {
- // "allocating" the cpu-side buffer struct
- BufferHandle handle;
- GPU_Buffer* buffer = Buffer_pool_alloc(&context.resource_pools->buffers, &handle);
- buffer->size = size;
- buffer->vao = 0;
-
- // Opengl buffer
- GLuint gl_buffer_id;
- glGenBuffers(1, &gl_buffer_id);
-
- GLenum gl_buf_type;
- GLenum gl_buf_usage = GL_STATIC_DRAW;
-
- switch (buf_type) {
- case BUFFER_UNIFORM:
- DEBUG("Creating Uniform buffer");
- gl_buf_type = GL_UNIFORM_BUFFER;
- /* gl_buf_usage = GL_DYNAMIC_DRAW; */
- buffer->id.ubo = gl_buffer_id;
- break;
- case BUFFER_DEFAULT:
- case BUFFER_VERTEX:
- DEBUG("Creating Vertex buffer");
- gl_buf_type = GL_ARRAY_BUFFER;
- buffer->id.vbo = gl_buffer_id;
- break;
- case BUFFER_INDEX:
- DEBUG("Creating Index buffer");
- gl_buf_type = GL_ELEMENT_ARRAY_BUFFER;
- buffer->id.ibo = gl_buffer_id;
- break;
- default:
- WARN("Unimplemented gpu_buffer_type provided %s", buffer_type_names[buf_type]);
- break;
- }
- // bind buffer
- glBindBuffer(gl_buf_type, gl_buffer_id);
-
- if (data) {
- TRACE("Upload data (%d bytes) as part of buffer creation", size);
- glBufferData(gl_buf_type, buffer->size, data, gl_buf_usage);
- } else {
- TRACE("Allocating but not uploading (%d bytes)", size);
- glBufferData(gl_buf_type, buffer->size, NULL, gl_buf_usage);
- }
-
- glBindBuffer(gl_buf_type, 0);
-
- return handle;
-}
-
-void GPU_BufferDestroy(BufferHandle handle) { glDeleteBuffers(1, &handle.raw); }
-
-TextureHandle GPU_TextureCreate(TextureDesc desc, bool create_view, const void* data) {
- // "allocating" the cpu-side struct
- TextureHandle handle;
- GPU_Texture* texture = Texture_pool_alloc(&context.resource_pools->textures, &handle);
- DEBUG("Allocated texture with handle %d", handle.raw);
-
- GLuint gl_texture_id;
- glGenTextures(1, &gl_texture_id);
- texture->id = gl_texture_id;
-
- GLenum gl_tex_type = opengl_tex_type(desc.tex_type);
- texture->type = desc.tex_type;
- printf("Creating texture of type %s\n", texture_type_names[desc.tex_type]);
- glBindTexture(gl_tex_type, gl_texture_id);
-
- GLint internal_format;
- if (desc.format == TEXTURE_FORMAT_DEPTH_DEFAULT) {
- internal_format = GL_DEPTH_COMPONENT;
- } else if (desc.format == TEXTURE_FORMAT_8_8_8_8_RGBA_UNORM) {
- internal_format = GL_RGBA;
- } else {
- internal_format = GL_RGB;
- }
-
- GLint format = internal_format;
- // FIXME: GLint format = desc.format == TEXTURE_FORMAT_DEPTH_DEFAULT ? GL_DEPTH_COMPONENT :
- // GL_RGBA;
- GLenum data_type = desc.format == TEXTURE_FORMAT_DEPTH_DEFAULT ? GL_FLOAT : GL_UNSIGNED_BYTE;
-
- if (desc.format == TEXTURE_FORMAT_DEPTH_DEFAULT) {
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
- } else {
- // set the texture wrapping parameters
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
- GL_REPEAT); // set texture wrapping to GL_REPEAT (default wrapping method)
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- // set texture filtering parameters
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- }
-
- if (data) {
- glTexImage2D(GL_TEXTURE_2D, 0, internal_format, desc.extents.x, desc.extents.y, 0, format,
- data_type, data);
- if (desc.tex_type == TEXTURE_TYPE_2D) {
- glGenerateMipmap(GL_TEXTURE_2D);
- }
- } else {
- WARN("No image data provided");
- glTexImage2D(GL_TEXTURE_2D, 0, internal_format, desc.extents.x, desc.extents.y, 0, format,
- data_type, NULL);
- }
-
- glBindTexture(GL_TEXTURE_2D, 0);
-
- return handle;
-}
-
-GPU_Texture* GPU_TextureAlloc(TextureHandle* out_handle) {
- TextureHandle handle;
- GPU_Texture* texture = Texture_pool_alloc(&context.resource_pools->textures, &handle);
- DEBUG("Allocated texture with handle %d", handle.raw);
-
- GLuint gl_texture_id;
- glGenTextures(1, &gl_texture_id);
- texture->id = gl_texture_id;
-
- if (out_handle != NULL) {
- *out_handle = handle;
- }
-
- return texture;
-}
-
-void GPU_TextureDestroy(TextureHandle handle) { glDeleteTextures(1, &handle.raw); }
-
-// TODO: void GPU_TextureUpload(TextureHandle handle, size_t n_bytes, const void* data)
-
-void GPU_EncodeBindPipeline(GPU_CmdEncoder* encoder, GPU_Pipeline* pipeline) {
- encoder->pipeline = pipeline;
-
- // In OpenGL binding a pipeline is more or less equivalent to just setting the shader
- glUseProgram(pipeline->shader_id);
-
- if (pipeline->wireframe) {
- glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
- } else {
- glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
- }
-}
-
-void GPU_EncodeBindShaderData(GPU_CmdEncoder* encoder, u32 group, ShaderDataLayout layout) {
- for (u32 binding_i = 0; binding_i < layout.binding_count; binding_i++) {
- ShaderBinding binding = layout.bindings[binding_i];
-
- switch (binding.kind) {
- case BINDING_BYTES: {
-#ifdef RAL_ASSERTS
- CASSERT_MSG(binding.data.bytes.data, "void* data pointer should be non null");
- CASSERT_MSG(binding.data.bytes.size > 0, "size should be greater than 0 bytes");
-#endif
- BufferHandle b;
- GPU_Buffer* ubo_buf;
- bool found = false;
- for (u32 i = 0; i < encoder->pipeline->uniform_count; i++) {
- b = encoder->pipeline->uniform_bindings[i];
- ubo_buf = BUFFER_GET(b);
- assert(ubo_buf->name != NULL);
- if (strcmp(ubo_buf->name, binding.label) == 0) {
- found = true;
- break;
- }
- }
- if (!found) {
- ERROR("Couldnt find uniform buffer object for %s!!", binding.label);
- break;
- }
-
- i32 blockIndex = glGetUniformBlockIndex(encoder->pipeline->shader_id, binding.label);
- if (blockIndex < 0) {
- WARN("Couldn't retrieve block index for uniform block '%s'", binding.label);
- break;
- }
-
- glBindBuffer(GL_UNIFORM_BUFFER, ubo_buf->id.ubo);
- glBufferSubData(GL_UNIFORM_BUFFER, 0, ubo_buf->size, binding.data.bytes.data);
- break;
- }
- case BINDING_TEXTURE: {
- GPU_Texture* tex = TEXTURE_GET(binding.data.texture.handle);
- GLint tex_slot = glGetUniformLocation(encoder->pipeline->shader_id, binding.label);
- if (tex_slot == GL_INVALID_VALUE || tex_slot < 0) {
- WARN("Invalid binding label for texture %s - couldn't fetch texture slot uniform",
- binding.label);
- }
- glUniform1i(tex_slot, binding_i);
- glActiveTexture(GL_TEXTURE0 + binding_i);
- glBindTexture(opengl_tex_type(tex->type), tex->id);
- break;
- }
- default:
- WARN("Unsupported binding kind");
- }
- }
-}
-
-void GPU_EncodeSetDefaults(GPU_CmdEncoder* encoder) {}
-
-void GPU_EncodeSetVertexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf) {
- GPU_Buffer* buffer = BUFFER_GET(buf);
- if (buffer->vao == 0) { // if no VAO for this vertex buffer, create it
- INFO("Setting up VAO");
- buffer->vao = opengl_bindcreate_vao(buffer, encoder->pipeline->vertex_desc);
- }
- glBindVertexArray(buffer->vao);
-}
-void GPU_EncodeSetIndexBuffer(GPU_CmdEncoder* encoder, BufferHandle buf) {
- GPU_Buffer* buffer = BUFFER_GET(buf);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer->id.ibo);
-}
-void GPU_EncodeDrawTris(GPU_CmdEncoder* encoder, u64 count) {
- glDrawArrays(GL_TRIANGLES, 0, count);
-}
-void GPU_EncodeDrawIndexedTris(GPU_CmdEncoder* encoder, u64 index_count) {
- glDrawElements(GL_TRIANGLES, index_count, GL_UNSIGNED_INT, 0);
-}
-
-PUB void GPU_EncodeDraw(GPU_CmdEncoder* encoder, PrimitiveTopology topology, u64 count) {
- glDrawArrays(opengl_prim_topology(topology), 0, count);
-}
-PUB void GPU_EncodeDrawIndexed(GPU_CmdEncoder* encoder, PrimitiveTopology topology,
- u64 index_count) {
- glDrawElements(opengl_prim_topology(topology), index_count, GL_UNSIGNED_INT, 0);
-}
-
-PUB void GPU_WriteTextureRegion(GPU_CmdEncoder* encoder, TextureHandle dst, u32 x_offset,
- u32 y_offset, u32 width, u32 height, const void* data) {
- CASSERT_MSG(data, "const void* data must not be NULL");
-
- GPU_Texture* tex = TEXTURE_GET(dst);
-
- glBindTexture(GL_TEXTURE_2D, tex->id);
- glTexSubImage2D(GL_TEXTURE_2D, 0, x_offset, y_offset, width, height, GL_RGBA, GL_UNSIGNED_BYTE,
- data);
-}
-
-bool GPU_Backend_BeginFrame() {
- glViewport(0, 0, context.swapchain.dimensions.x * 2, context.swapchain.dimensions.y * 2);
- glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- return true;
-}
-
-void GPU_Backend_EndFrame() { glfwSwapBuffers(context.window); }
-
-#endif
diff --git a/src/ral/backends/opengl/backend_opengl.h b/src/ral/backends/opengl/backend_opengl.h
deleted file mode 100644
index 7bd1b81..0000000
--- a/src/ral/backends/opengl/backend_opengl.h
+++ /dev/null
@@ -1,109 +0,0 @@
-#pragma once
-#include "defines.h"
-
-#if defined(CEL_REND_BACKEND_OPENGL)
-
-#include "maths_types.h"
-#include "ral_impl.h"
-#include "ral_types.h"
-
-#define MAX_PIPELINE_UNIFORM_BUFFERS 32
-
-#define OPENGL_DEFAULT_FRAMEBUFFER 0
-
-typedef struct GPU_Swapchain {
- u32x2 dimensions;
-} GPU_Swapchain;
-
-typedef struct GPU_Device {
- u32 pad;
-} GPU_Device;
-
-typedef struct GPU_PipelineLayout {
- void* pad;
-} GPU_PipelineLayout;
-
-typedef struct GPU_Pipeline {
- u32 shader_id;
- GPU_Renderpass* renderpass;
- VertexDescription vertex_desc;
- BufferHandle uniform_bindings[MAX_PIPELINE_UNIFORM_BUFFERS];
- u32 uniform_count;
- bool wireframe;
-} GPU_Pipeline;
-
-typedef struct GPU_Renderpass {
- u32 fbo;
- GPU_RenderpassDesc description;
-} GPU_Renderpass;
-
-typedef struct GPU_CmdEncoder {
- GPU_Pipeline* pipeline;
-} GPU_CmdEncoder; // Recording
-
-typedef struct GPU_CmdBuffer {
- void* pad;
-} GPU_CmdBuffer; // Ready for submission
-
-typedef struct GPU_Buffer {
- union {
- u32 vbo;
- u32 ibo;
- u32 ubo;
- } id;
- union {
- u32 vao;
- u32 ubo_binding_point;
- }; // Optional
- char* name;
- u64 size;
-} GPU_Buffer;
-
-typedef struct GPU_Texture {
- u32 id;
- GPU_TextureType type;
-} GPU_Texture;
-
-typedef struct opengl_support {
- u32 pad;
-} opengl_support;
-
-void uniform_vec3f(u32 program_id, const char* uniform_name, Vec3* value);
-void uniform_f32(u32 program_id, const char* uniform_name, f32 value);
-void uniform_i32(u32 program_id, const char* uniform_name, i32 value);
-void uniform_mat4f(u32 program_id, const char* uniform_name, Mat4* value);
-
-typedef enum GlCommandType {
- GLCMD_DRAW,
- GLCMD_DRAW_INDEXED,
- GLCMD_BIND_VBUF,
- GLCMD_BIND_IBUF,
- GLCMD_SET_PROGRAM,
-} GlCommandType;
-
-typedef struct GlCommand {
- GlCommandType cmd_type;
- union {
- struct {
- PrimitiveTopology topology;
- u32 start_vertex;
- u32 vertex_count;
- // TODO: instance
- } draw;
- struct {
- PrimitiveTopology topology;
- u32 index_count;
- } draw_indexed;
- struct {
- u32 buffer_id;
- } bind_vbuf;
- struct {
- u32 buffer_id;
- } bind_ibuf;
- struct {
- u32 program_id;
- } set_program;
- } data;
-} GlCommand;
-
-#endif
diff --git a/src/ral/backends/opengl/opengl_helpers.h b/src/ral/backends/opengl/opengl_helpers.h
deleted file mode 100644
index 706e2a0..0000000
--- a/src/ral/backends/opengl/opengl_helpers.h
+++ /dev/null
@@ -1,159 +0,0 @@
-#pragma once
-#include "defines.h"
-#include "ral_common.h"
-#include "ral_impl.h"
-#if defined(CEL_REND_BACKEND_OPENGL)
-#include "backend_opengl.h"
-#include "file.h"
-#include "log.h"
-#include "ral_types.h"
-
-#include <glad/glad.h>
-#include <glfw3.h>
-#include "ral_types.h"
-
-typedef struct opengl_vertex_attr {
- u32 count;
- GLenum data_type;
-} opengl_vertex_attr;
-
-static opengl_vertex_attr format_from_vertex_attr(VertexAttribType attr) {
- switch (attr) {
- case ATTR_F32:
- return (opengl_vertex_attr){ .count = 1, .data_type = GL_FLOAT };
- case ATTR_U32:
- return (opengl_vertex_attr){ .count = 1, .data_type = GL_UNSIGNED_INT };
- case ATTR_I32:
- return (opengl_vertex_attr){ .count = 1, .data_type = GL_INT };
- case ATTR_F32x2:
- return (opengl_vertex_attr){ .count = 2, .data_type = GL_FLOAT };
- case ATTR_U32x2:
- // return VK_FORMAT_R32G32_UINT;
- case ATTR_I32x2:
- // return VK_FORMAT_R32G32_UINT;
- case ATTR_F32x3:
- return (opengl_vertex_attr){ .count = 3, .data_type = GL_FLOAT };
- case ATTR_U32x3:
- // return VK_FORMAT_R32G32B32_UINT;
- case ATTR_I32x3:
- // return VK_FORMAT_R32G32B32_SINT;
- case ATTR_F32x4:
- return (opengl_vertex_attr){ .count = 4, .data_type = GL_FLOAT };
- case ATTR_U32x4:
- // return VK_FORMAT_R32G32B32A32_UINT;
- case ATTR_I32x4:
- return (opengl_vertex_attr){ .count = 4, .data_type = GL_INT };
- }
-}
-
-static u32 opengl_bindcreate_vao(GPU_Buffer* buf, VertexDescription desc) {
- DEBUG("Vertex format name %s", desc.debug_label);
- // 1. Bind the buffer
- glBindBuffer(GL_ARRAY_BUFFER, buf->id.vbo);
- // 2. Create new VAO
- u32 vao;
- glGenVertexArrays(1, &vao);
- glBindVertexArray(vao);
-
- // Attributes
- u32 attr_count = desc.attributes_count;
- // printf("N attributes %d\n", attr_count);
- u64 offset = 0;
- size_t vertex_size = desc.use_full_vertex_size ? sizeof(Vertex) : VertexDesc_CalcStride(&desc);
- for (u32 i = 0; i < desc.attributes_count; i++) {
- opengl_vertex_attr format = format_from_vertex_attr(desc.attributes[i]);
- glVertexAttribPointer(i, format.count, format.data_type, GL_FALSE, vertex_size, (void*)offset);
- TRACE(" %d %d %d %d %d %s", i, format.count, format.data_type, vertex_size, offset,
- desc.attr_names[i]);
- glEnableVertexAttribArray(i); // nth index
- size_t this_offset = VertexAttribSize(desc.attributes[i]);
- // printf("offset total %lld this attr %zu\n", offset, this_offset);
- offset += this_offset;
- }
- glBindBuffer(GL_ARRAY_BUFFER, 0);
-
- return vao;
-}
-
-static u32 shader_create_separate(const char* vert_shader, const char* frag_shader) {
- INFO("Load shaders at %s and %s", vert_shader, frag_shader);
- int success;
- char info_log[512];
-
- u32 vertex = glCreateShader(GL_VERTEX_SHADER);
- const char* vertex_shader_src = string_from_file(vert_shader);
- if (vertex_shader_src == NULL) {
- ERROR("EXIT: couldnt load shader");
- exit(-1);
- }
- glShaderSource(vertex, 1, &vertex_shader_src, NULL);
- glCompileShader(vertex);
- glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
- if (!success) {
- glGetShaderInfoLog(vertex, 512, NULL, info_log);
- printf("%s\n", info_log);
- ERROR("EXIT: vertex shader compilation failed");
- exit(-1);
- }
-
- // fragment shader
- u32 fragment = glCreateShader(GL_FRAGMENT_SHADER);
- const char* fragment_shader_src = string_from_file(frag_shader);
- if (fragment_shader_src == NULL) {
- ERROR("EXIT: couldnt load shader");
- exit(-1);
- }
- glShaderSource(fragment, 1, &fragment_shader_src, NULL);
- glCompileShader(fragment);
- glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
- if (!success) {
- glGetShaderInfoLog(fragment, 512, NULL, info_log);
- printf("%s\n", info_log);
- ERROR("EXIT: fragment shader compilation failed");
- exit(-1);
- }
-
- u32 shader_prog;
- shader_prog = glCreateProgram();
-
- glAttachShader(shader_prog, vertex);
- glAttachShader(shader_prog, fragment);
- glLinkProgram(shader_prog);
- glDeleteShader(vertex);
- glDeleteShader(fragment);
- free((char*)vertex_shader_src);
- free((char*)fragment_shader_src);
-
- return shader_prog;
-}
-
-static GLenum opengl_tex_type(GPU_TextureType tex_type) {
- switch (tex_type) {
- case TEXTURE_TYPE_2D:
- return GL_TEXTURE_2D;
- case TEXTURE_TYPE_CUBE_MAP:
- return GL_TEXTURE_CUBE_MAP;
- default:
- return GL_TEXTURE_2D;
- }
-}
-
-static GLenum opengl_prim_topology(PrimitiveTopology t) {
- switch (t) {
- case CEL_POINT:
- return GL_POINT;
- case CEL_LINE:
- return GL_LINES;
- case CEL_LINE_STRIP:
- return GL_LINE_STRIP;
- case CEL_TRI:
- return GL_TRIANGLES;
- case CEL_TRI_STRIP:
- return GL_TRIANGLE_STRIP;
- case PRIMITIVE_TOPOLOGY_COUNT:
- WARN("Invalid PrimitiveTopology value");
- break;
- }
-}
-
-#endif
diff --git a/src/ral/backends/vulkan/backend_vulkan.c b/src/ral/backends/vulkan/backend_vulkan.c
deleted file mode 100644
index e69de29..0000000
--- a/src/ral/backends/vulkan/backend_vulkan.c
+++ /dev/null
diff --git a/src/ral/backends/vulkan/backend_vulkan.h b/src/ral/backends/vulkan/backend_vulkan.h
deleted file mode 100644
index f31bed2..0000000
--- a/src/ral/backends/vulkan/backend_vulkan.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#pragma once
-
-#ifdef CEL_REND_BACKEND_VULKAN
-#include "defines.h"
-#include "maths_types.h"
-#include "ral.h"
-#include "ral_impl.h"
-#include "ral_types.h"
-
-#include <vulkan/vk_platform.h>
-#include <vulkan/vulkan.h>
-#include <vulkan/vulkan_core.h>
-
-// Provide definitions for RAL structs
-
-struct GPU_Swapchain {
- VkSwapchainKHR handle;
-};
-
-struct GPU_Device {
- VkPhysicalDevice physical_device;
- VkDevice logical_device;
-};
-
-struct GPU_PipelineLayout {};
-struct GPU_Pipeline {};
-struct GPU_Renderpass {};
-struct GPU_CmdEncoder {};
-struct GPU_CmdBuffer {};
-struct GPU_Buffer {
- VkBuffer handle;
- VkDeviceMemory memory;
- u64 size;
-};
-struct GPU_Texture {
- VkImage handle;
- VkDeviceMemory memory;
- u64 size;
- VkImageView view;
- VkSampler sampler;
- char* debug_label;
-};
-
-#endif
diff --git a/src/ral/backends/vulkan/vulkan_glossary.md b/src/ral/backends/vulkan/vulkan_glossary.md
deleted file mode 100644
index 4214f9d..0000000
--- a/src/ral/backends/vulkan/vulkan_glossary.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Vulkan Glossary
-
-*from https://vkguide.dev/docs/introduction/vulkan_execution/*
-
-- **VkInstance**: The Vulkan context, used to access drivers.
-- **VkPhysicalDevice**: A GPU. Used to query physical GPU details, like features, capabilities, memory size, etc.
-- **VkDevice**: The “logical” GPU context that you actually execute things on.
-- **VkBuffer**: A chunk of GPU visible memory.
-- **VkImage**: A texture you can write to and read from.
-- **VkPipeline**: Holds the state of the gpu needed to draw. For example: shaders, rasterization options, depth settings.
-- **VkRenderPass**: Holds information about the images you are rendering into. All drawing commands have to be done inside a renderpass. Only used in legacy vkguide.
-- **VkFrameBuffer**: Holds the target images for a renderpass. Only used in legacy vkguide.
-- **VkCommandBuffer**: Encodes GPU commands. All execution that is performed on the GPU itself (not in the driver) has to be encoded in a VkCommandBuffer.
-- **VkQueue**: Execution “port” for commands. GPUs will have a set of queues with different properties. Some allow only graphics commands, others only allow memory commands, etc. Command buffers are executed by submitting them into a queue, which will copy the rendering commands onto the GPU for execution.
-- **VkDescriptorSet**: Holds the binding information that connects shader inputs to data such as VkBuffer resources and VkImage textures. Think of it as a set of gpu-side pointers that you bind once.
-- **VkSwapchainKHR**: Holds the images for the screen. It allows you to render things into a visible window. The KHR suffix shows that it comes from an extension, which in this case is VK_KHR_swapchain.
-- **VkSemaphore**: Synchronizes GPU to GPU execution of commands. Used for syncing multiple command buffer submissions one after another.
-- **VkFence**: Synchronizes GPU to CPU execution of commands. Used to know if a command buffer has finished being executed on the GPU.
diff --git a/src/ral/backends/vulkan/vulkan_helpers.h b/src/ral/backends/vulkan/vulkan_helpers.h
deleted file mode 100644
index 23666c6..0000000
--- a/src/ral/backends/vulkan/vulkan_helpers.h
+++ /dev/null
@@ -1,199 +0,0 @@
-#pragma once
-
-#include <assert.h>
-#include <vulkan/vulkan.h>
-#include <vulkan/vulkan_core.h>
-
-#include "darray.h"
-#include "defines.h"
-#include "log.h"
-#include "str.h"
-
-#define VULKAN_PHYS_DEVICE_MAX_EXTENSION_NAMES 36
-
-DECL_TYPED_ARRAY(const char*, cstr)
-
-static void plat_get_required_extension_names(cstr_darray* extensions) {
-#ifdef CEL_PLATFORM_LINUX
- cstr_darray_push(extensions, "VK_KHR_xcb_surface");
-#endif
-}
-
-// TODO(omni): port to using internal assert functions
-#define VK_CHECK(vulkan_expr) \
- do { \
- VkResult res = vulkan_expr; \
- if (res != VK_SUCCESS) { \
- ERROR_EXIT("Vulkan error: %u (%s:%d)", res, __FILE__, __LINE__); \
- } \
- } while (0)
-
-// TODO: typedef struct vk_debugger {} vk_debugger;
-
-typedef struct vulkan_physical_device_requirements {
- bool graphics;
- bool present;
- bool compute;
- bool transfer;
- str8 device_ext_names[VULKAN_PHYS_DEVICE_MAX_EXTENSION_NAMES];
- size_t device_ext_name_count;
- bool sampler_anistropy;
- bool discrete_gpu;
-} vulkan_physical_device_requirements;
-
-#define VULKAN_MAX_DEFAULT 32
-
-typedef struct vulkan_swapchain_support_info {
- VkSurfaceCapabilitiesKHR capabilities;
- VkSurfaceFormatKHR formats[VULKAN_MAX_DEFAULT];
- u32 format_count;
- VkPresentModeKHR present_modes[VULKAN_MAX_DEFAULT];
- u32 mode_count;
-} vulkan_swapchain_support_info;
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vk_debug_callback(
- VkDebugUtilsMessageSeverityFlagBitsEXT severity, VkDebugUtilsMessageTypeFlagsEXT flags,
- const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data);
-
-static void vulkan_device_query_swapchain_support(VkPhysicalDevice device, VkSurfaceKHR surface,
- vulkan_swapchain_support_info* out_support_info) {
- // TODO: add VK_CHECK to these calls!
-
- // Surface capabilities
- vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &out_support_info->capabilities);
-
- // Surface formats
- vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &out_support_info->format_count,
- 0); // Get number of formats
- if (out_support_info->format_count > 0) {
- vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &out_support_info->format_count,
- out_support_info->formats);
- }
-
- // Present Modes
- vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &out_support_info->mode_count,
- 0); // Get number of formats
- if (out_support_info->mode_count > 0) {
- vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &out_support_info->mode_count,
- out_support_info->present_modes);
- }
-}
-
-static VkSurfaceFormatKHR choose_swapchain_format(
- vulkan_swapchain_support_info* swapchain_support) {
- assert(swapchain_support->format_count > 0);
- // find a format
- for (u32 i = 0; i < swapchain_support->format_count; i++) {
- VkSurfaceFormatKHR format = swapchain_support->formats[i];
- if (format.format == VK_FORMAT_B8G8R8A8_SRGB &&
- format.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) {
- return format;
- }
- }
- return swapchain_support->formats[0];
-}
-
-// static bool physical_device_meets_requirements(
-// VkPhysicalDevice device, VkSurfaceKHR surface, const VkPhysicalDeviceProperties* properties,
-// const VkPhysicalDeviceFeatures* features,
-// const vulkan_physical_device_requirements* requirements,
-// vulkan_physical_device_queue_family_info* out_queue_info,
-// vulkan_swapchain_support_info* out_swapchain_support) {
-// // TODO: pass in an arena
-
-// out_queue_info->graphics_family_index = -1;
-// out_queue_info->present_family_index = -1;
-// out_queue_info->compute_family_index = -1;
-// out_queue_info->transfer_family_index = -1;
-
-// if (requirements->discrete_gpu) {
-// if (properties->deviceType != VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU) {
-// TRACE("Device is not a physical GPU. Skipping.");
-// return false;
-// }
-// }
-
-// u32 queue_family_count = 0;
-// vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_family_count, 0);
-// VkQueueFamilyProperties queue_families[queue_family_count];
-// vkGetPhysicalDeviceQueueFamilyProperties(device, &queue_family_count, queue_families);
-
-// INFO("Graphics | Present | Compute | Transfer | Name");
-// u8 min_transfer_score = 255;
-// for (u32 i = 0; i < queue_family_count; i++) {
-// u8 current_transfer_score = 0;
-
-// // Graphics queue
-// if (queue_families[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) {
-// out_queue_info->graphics_family_index = i;
-// current_transfer_score++;
-// }
-
-// // Compute queue
-// if (queue_families[i].queueFlags & VK_QUEUE_COMPUTE_BIT) {
-// out_queue_info->compute_family_index = i;
-// current_transfer_score++;
-// }
-
-// // Transfer queue
-// if (queue_families[i].queueFlags & VK_QUEUE_TRANSFER_BIT) {
-// // always take the lowest score transfer index
-// if (current_transfer_score <= min_transfer_score) {
-// min_transfer_score = current_transfer_score;
-// out_queue_info->transfer_family_index = i;
-// }
-// }
-
-// // Present Queue
-// VkBool32 supports_present = VK_FALSE;
-// vkGetPhysicalDeviceSurfaceSupportKHR(device, i, surface, &supports_present);
-// if (supports_present) {
-// out_queue_info->present_family_index = i;
-// }
-// }
-
-// INFO(" %d | %d | %d | %d | %s",
-// out_queue_info->graphics_family_index != -1, out_queue_info->present_family_index != -1,
-// out_queue_info->compute_family_index != -1, out_queue_info->transfer_family_index != -1,
-// properties->deviceName);
-// TRACE("Graphics Family queue index: %d", out_queue_info->graphics_family_index);
-// TRACE("Present Family queue index: %d", out_queue_info->present_family_index);
-// TRACE("Compute Family queue index: %d", out_queue_info->compute_family_index);
-// TRACE("Transfer Family queue index: %d", out_queue_info->transfer_family_index);
-
-// if ((!requirements->graphics ||
-// (requirements->graphics && out_queue_info->graphics_family_index != -1))) {
-// INFO("Physical device meets our requirements! Proceed.");
-
-// vulkan_device_query_swapchain_support(
-// device, surface, out_swapchain_support
-
-// // TODO: error handling i.e. format count = 0 or present mode = 0
-
-// );
-// return true;
-// }
-
-// return false;
-// }
-
-VKAPI_ATTR VkBool32 VKAPI_CALL vk_debug_callback(
- VkDebugUtilsMessageSeverityFlagBitsEXT severity, VkDebugUtilsMessageTypeFlagsEXT flags,
- const VkDebugUtilsMessengerCallbackDataEXT* callback_data, void* user_data) {
- switch (severity) {
- default:
- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT:
- ERROR("%s", callback_data->pMessage);
- break;
- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT:
- WARN("%s", callback_data->pMessage);
- break;
- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT:
- INFO("%s", callback_data->pMessage);
- break;
- case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT:
- TRACE("%s", callback_data->pMessage);
- break;
- }
- return VK_FALSE;
-} \ No newline at end of file