Got rid of Xorg completely! Plus fixed some bugs. Yay!!!

This commit is contained in:
Андреев Григорий 2025-08-30 16:14:15 +03:00
parent a4eed941e1
commit 7158a15b5b
20 changed files with 886 additions and 688 deletions

View File

@ -34,8 +34,8 @@ add_executable(1_test src/l1/tests/t1.c)
add_executable(codegen_l2 src/l2/codegen/codegen.c)
add_executable(0_render_test src/l2/tests/r0/r0.c)
target_link_libraries(0_render_test -lvulkan -lX11 -lm)
add_executable(0_render_test src/l2/tests/r0/r0.c gen/l_wl_protocols/xdg-shell-private.c)
target_link_libraries(0_render_test -lvulkan -lwayland-client -lm -lxkbcommon)
add_executable(0_render_test_tex_init_prep src/l2/tests/r0/r0_tex_init_prep.c)
target_link_libraries(0_render_test_tex_init_prep -lm)

View File

@ -53,9 +53,10 @@ gen/l_wl_protocols/xdg-shell-private.c: $(wl_protocols)/stable/xdg-shell/xdg-she
l_wl_protocols := gen/l_wl_protocols/xdg-shell-client.h gen/l_wl_protocols/xdg-shell-private.c
out/l2/r0: src/l2/tests/r0/r0.c $(HEADERS_gen_l2) $(HEADERS_src_l2) $(HEADERS_gen_l1) $(HEADERS_src_l1)
out/l2/r0: src/l2/tests/r0/r0.c $(HEADERS_gen_l2) $(HEADERS_src_l2) $(HEADERS_gen_l1) $(HEADERS_src_l1) \
$(l_wl_protocols)
mkdir -p out/l2
$(cc) $(cflags) -o $@ $< -lvulkan -lX11 -lm
$(cc) $(cflags) -o $@ $< gen/l_wl_protocols/xdg-shell-private.c -lvulkan -lm -lxkbcommon -lwayland-client
out/l2/r1: src/l2/tests/r1/r1.c $(HEADERS_gen_l2) $(HEADERS_src_l2) $(HEADERS_gen_l1) $(HEADERS_src_l1) \
$(l_wl_protocols)

View File

@ -15,6 +15,8 @@
#define NORETURN [[noreturn]]
#define NODISCARD [[nodiscard]]
typedef const char* CSTR;
typedef enum {
Option_Some, Option_None
} Option_variant;

View File

@ -24,9 +24,8 @@ void eve_of_l2() {
generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("MarieTriangleAttr"), true, false);
/* Needed in r0_scene.h */
generate_eve_span_garden_for_primitive(cstr("l2"), cstr("r0"), cstr("ModelOnScene"), true, false);
generate_eve_span_garden_for_primitive(cstr("l2"), cstr("r0"), cstr("UsedModelOnScene"), true, false);
generate_eve_span_garden_for_non_primitive_clonable(cstr("l2"), cstr("r0"), cstr("UsedModelOnScene"), true, false);
/* Needed in margaret/vulkan.h */
generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("Xlib_Event"), true, false); // todo: get rid of this crap
generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("CSTR"), true, false);
// generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("MargaretChosenQueueFamilies"), true, false);
generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkQueueFamilyProperties"), true, false);

View File

@ -44,8 +44,6 @@ static VKAPI_ATTR VkBool32 VKAPI_CALL margaret_static_debug_callback(
return VK_FALSE;
}
typedef const char* CSTR;
#include "../../../gen/l2/eve/VecCSTR.h"
typedef struct {
@ -114,7 +112,8 @@ NODISCARD MargaretInstanceAndItsDebug MargaretInstanceAndItsDebug_new(bool enabl
};
margaret_create_debug_utils_messenger_EXT(instance, &debug_messenger_crinfo, NULL, &debug_messenger);
}
VecCSTR_drop(needed_layers); /* needed_layers invalidated */
VecCSTR_drop(needed_extensions); /* needed_extensions invalidated */
return (MargaretInstanceAndItsDebug){.instance = instance, .debug_messenger = debug_messenger};
}
@ -508,6 +507,7 @@ VecMargaretScoredPhysicalDevice margaret_get_physical_devices_scored(
);
}
MutSpanMargaretScoredPhysicalDevice_sort(VecMargaretScoredPhysicalDevice_to_mspan(&scored_devices));
VecVkPhysicalDevice_drop(physical_devices);
return scored_devices;
}
@ -535,7 +535,9 @@ VkPhysicalDevice margaret_select_one_physical_device(
const MargaretScoredPhysicalDevice* best_dev = VecMargaretScoredPhysicalDevice_at(&scored_devices, scored_devices.len - 1);
if (best_dev->score < 0)
abortf("No suitable vulkan devices");
return best_dev->physical_device;
VkPhysicalDevice result = best_dev->physical_device;
VecMargaretScoredPhysicalDevice_drop(scored_devices); /* best_dev, scored_devices invalidated */
return result;
}
VkSwapchainKHR margaret_create_swapchain (
@ -613,6 +615,7 @@ VecVkImageView margaret_create_swapchain_image_views(
if (vkCreateImageView(device, &imageview_crinfo, NULL, VecVkImageView_mat(&swapchain_image_views, i)) != VK_SUCCESS)
abortf("vkCreateImageView");
}
VecVkImage_drop(swapchain_images);
return swapchain_image_views;
}
@ -685,12 +688,15 @@ MargaretSwapchainBundle MargaretSwapchainBundle_new(
VkSwapchainKHR MargaretSwapchainBundle_pop_swapchain_drop_rest(VkDevice device, MargaretSwapchainBundle swfb) {
for (size_t i = 0; i < swfb.rendering_finished_here_semaphores.len; i++)
vkDestroySemaphore(device, *VecVkSemaphore_at(&swfb.rendering_finished_here_semaphores, i), NULL);
VecVkSemaphore_drop(swfb.rendering_finished_here_semaphores);
for (size_t i = 0; i < swfb.framebuffers.len; i++) {
vkDestroyFramebuffer(device, *VecVkFramebuffer_at(&swfb.framebuffers, i), NULL);
}
VecVkFramebuffer_drop(swfb.framebuffers);
for (size_t i = 0; i < swfb.image_views.len; i++) {
vkDestroyImageView(device, *VecVkImageView_at(&swfb.image_views, i), NULL);
}
VecVkImageView_drop(swfb.image_views);
// Old swapchain bundle is 83% dropped
return swfb.swapchain;
}

File diff suppressed because it is too large Load Diff

View File

@ -105,6 +105,10 @@ typedef struct {
size_t spotlights_max_count;
} SceneTemplate;
void SceneTemplate_drop(SceneTemplate self) {
VecModelInSceneTemplate_drop(self.models);
}
size_t SceneTemplate_get_space_needed_for_all_instance_attributes(const SceneTemplate* self) {
size_t s = 0;
for (size_t mi = 0; mi < self->models.len; mi++) {

View File

@ -104,6 +104,8 @@ Scene Scene_new() {
void Scene_drop(Scene self) {
VecUsedModelOnScene_drop(self.models);
VecPipeline0Spotlight_drop(self.spotlights);
VecPipeline0PointLight_drop(self.point_lights);
}
void SceneTemplate_copy_initial_model_topology_and_rerecord_transfer_cmd(

View File

@ -1,15 +0,0 @@
#!/usr/bin/env bash
set +x
cd test_shaders
function compile(){
mkdir -p "spv/$1"
glslc -o "spv/$1/vert.spv" "glsl/$1/$1.vert"
glslc -o "spv/$1/frag.spv" "glsl/$1/$1.frag"
}
compile 0
compile 1
compile 0b

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -288,10 +288,6 @@ static void main_h_xdg_surface_configure(void *data, struct xdg_surface *xdg_sur
xdg_surface_ack_configure(xdg_surface, serial);
vulkano_frame_drawing(state);
// printf("Damaged\n");
// wl_surface_damage_buffer(state->wl_surface, 0, 0, INT32_MAX, INT32_MAX);
// printf("Commited\n");
// wl_surface_commit(state->wl_surface);
}
static const struct xdg_surface_listener xdg_surface_listener = {
@ -528,10 +524,7 @@ static void main_h_wl_surface_frame_done(void *data, struct wl_callback *cb, uin
update_state(state, time - state->last_frame_time);
}
vulkano_frame_drawing(state);
// printf("Damaged\n");
// wl_surface_damage(state->wl_surface, 0, 0, state->width, state->height);
// printf("Commited\n");
// wl_surface_commit(state->wl_surface);
state->last_frame_time = time;
}
@ -542,8 +535,8 @@ static const struct wl_callback_listener main_h_wl_surface_frame_listener = {
int main() {
state_t state = { .sane_image_extent_limit = {1000, 700}, .width = 800, .height = 480 };
state.wl_display = wl_display_connect(NULL);
state.wl_display = wl_display_connect(NULL);
if (!state.wl_display)
abortf("Could not connect");
state.wl_registry = wl_display_get_registry(state.wl_display);
@ -579,10 +572,6 @@ int main() {
abortf("wl_surface_frame\n");
wl_callback_add_listener(state.wl_callback, &main_h_wl_surface_frame_listener, &state);
// wl_surface_commit(state.wl_surface);
// wl_display_roundtrip(state.wl_display);
// wl_surface_commit(state.wl_surface);
state.vk_instance_and_debug = MargaretInstanceAndItsDebug_new(true);
VkInstance vk_instance = state.vk_instance_and_debug.instance;
state.vk_surface = margaret_create_surface(vk_instance, state.wl_display, state.wl_surface);

View File

@ -1,12 +0,0 @@
#!/usr/bin/env bash
set +x
cd test_shaders
function compile(){
mkdir -p "spv/$1"
glslc -o "spv/$1/vert.spv" "glsl/$1/$1.vert"
glslc -o "spv/$1/frag.spv" "glsl/$1/$1.frag"
}
compile 0