From 604cfe1ea8b3a3b399c3eba05b2dd1cc2911ffc9 Mon Sep 17 00:00:00 2001 From: Andreev Gregory Date: Sun, 17 Aug 2025 20:48:56 +0300 Subject: [PATCH] Rewrote project according to new l1 --- CMakeLists.txt | 4 +- src/l2/codegen/codegen.c | 17 ++++- src/l2/margaret/margaret.h | 109 ++++++----------------------- src/l2/tests/r0/r0.c | 62 ++++++++-------- src/l2/tests/r0/r0_tex_init_prep.c | 6 +- src/l3/fun_machine/fun_machine.h | 31 ++++---- src/l3/tests/p0.c | 2 + 7 files changed, 90 insertions(+), 141 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b8d7fc..88c76d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,8 +20,8 @@ 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_tex_init_prep src/l2/tests/r0/r0_tex_init_prep.c) -#target_link_libraries(0_render_test_tex_init_prep -lm) +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) # #add_executable(1_render_test src/l2/tests/r1/r1.c gen/l_wl_protocols/xdg-shell-private.c) #target_link_libraries(1_render_test -lwayland-client -lrt -lm -lxkbcommon) diff --git a/src/l2/codegen/codegen.c b/src/l2/codegen/codegen.c index e763b63..bf92f58 100644 --- a/src/l2/codegen/codegen.c +++ b/src/l2/codegen/codegen.c @@ -25,7 +25,7 @@ void eve_of_l2() { /* 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); - /* Needed in r0.c */ + /* Needed in margaret.h */ 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); @@ -40,6 +40,21 @@ void eve_of_l2() { (util_templates_instantiation_options){ .t_primitive = true, .vec = true, .span = true, .mut_span = true, .collab_vec_span = true, .span_sort = true}); generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkPhysicalDevice"), true, false); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkImage"), true, false); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkImageView"), true, false); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkFramebuffer"), true, false); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("MargaretBufferInMemoryInfo"), true, false); + generate_eve_header(cstr("l2"), cstr(""), cstr("PtrMargaretBufferInMemoryInfo"), + (util_templates_instantiation_options){ .t_primitive = true, .vec = true, .span = true, .mut_span = true, + .collab_vec_span = true}); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("MargaretImageInMemoryInfo"), true, false); + generate_eve_header(cstr("l2"), cstr(""), cstr("PtrMargaretImageInMemoryInfo"), + (util_templates_instantiation_options){ .t_primitive = true, .vec = true, .span = true, .mut_span = true, + .collab_vec_span = true}); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkDescriptorPoolSize"), true, false); + generate_eve_span_garden_for_primitive(cstr("l2"), cstr(""), cstr("VkBufferCopy"), true, false); + // todo: move vectors of vulkan handlers to some other place, away from margaret header + /* Needed in r0.c */ } void generate_Vec_cvec_header() { diff --git a/src/l2/margaret/margaret.h b/src/l2/margaret/margaret.h index 301ddbd..9b2b9f3 100644 --- a/src/l2/margaret/margaret.h +++ b/src/l2/margaret/margaret.h @@ -573,13 +573,11 @@ VecMargaretScoredPhysicalDevice margaret_get_physical_devices_scored( abortf("vkEnumeratePhysicalDevices"); VecMargaretScoredPhysicalDevice scored_devices = VecMargaretScoredPhysicalDevice_new_zeroinit(physical_device_count); for (uint32_t i = 0; i < physical_device_count; i++) { - // todo: 17th. CONTINUE FROM HERE - *VecMargaretScoredPhysicalDevice_at(&scored_devices, i) = margaret_score_physical_device( - *VecVkPhysicalDevice_at(&physical_devices, i), surface, - VecU8_from_span(favourite_word), VecU8_from_span(forbidden_word) + *VecMargaretScoredPhysicalDevice_mat(&scored_devices, i) = margaret_score_physical_device( + *VecVkPhysicalDevice_at(&physical_devices, i), surface, favourite_word, forbidden_word ); } - SpanMargaretScoredPhysicalDevice_sort(VecMargaretScoredPhysicalDevice_to_SpanMargaretScoredPhysicalDevice(&scored_devices)); + MutSpanMargaretScoredPhysicalDevice_sort(VecMargaretScoredPhysicalDevice_to_mspan(&scored_devices)); return scored_devices; } @@ -648,28 +646,9 @@ VkSwapchainKHR margaret_create_swapchain ( return swapchain; } -#define VkImage_drop(v) {} -#define VkImage_clone(vp) (*(vp)) - -VecT_trivmove_struct_Definition(VkImage) -VecT_trivmove_method_Definition(VkImage) -VecT_primitive_zeroinit_method_Definition(VkImage) - -// We don't do it automatically (we have to manually destroy image views when needed) -#define VkImageView_drop(d) {} -#define VkImageView_clone(p) (*(p)) - -VecT_trivmove_struct_Definition(VkImageView) -VecT_trivmove_method_Definition(VkImageView) -VecT_primitive_zeroinit_method_Definition(VkImageView) - -// I can collect my garbage myself -#define VkFramebuffer_drop(d) {} -#define VkFramebuffer_clone(p) (*(p)) - -VecT_trivmove_struct_Definition(VkFramebuffer) -VecT_trivmove_method_Definition(VkFramebuffer) -VecT_primitive_zeroinit_method_Definition(VkFramebuffer) +#include "../../../gen/l2/eve/VecVkImage.h" +#include "../../../gen/l2/eve/VecVkImageView.h" +#include "../../../gen/l2/eve/VecVkFramebuffer.h" VecVkImageView margaret_create_swapchain_image_views( VkDevice device, VkSwapchainKHR swapchain, @@ -699,7 +678,7 @@ VecVkImageView margaret_create_swapchain_image_views( .subresourceRange.baseArrayLayer = 0, .subresourceRange.layerCount = 1, }; - if (vkCreateImageView(device, &imageview_crinfo, NULL, VecVkImageView_at(&swapchain_image_views, i)) != VK_SUCCESS) + if (vkCreateImageView(device, &imageview_crinfo, NULL, VecVkImageView_mat(&swapchain_image_views, i)) != VK_SUCCESS) abortf("vkCreateImageView"); } return swapchain_image_views; @@ -722,7 +701,7 @@ VecVkFramebuffer margaret_create_swapchain_framebuffers( .layers = 1, }; - if (vkCreateFramebuffer(device, &framebuffer_crinfo, NULL, VecVkFramebuffer_at(& swapchain_framebuffers, i)) != VK_SUCCESS) + if (vkCreateFramebuffer(device, &framebuffer_crinfo, NULL, VecVkFramebuffer_mat(& swapchain_framebuffers, i)) != VK_SUCCESS) abortf("vkCreateFramebuffer"); } return swapchain_framebuffers; @@ -748,6 +727,7 @@ VkFence margaret_create_fence(VkDevice device, bool create_signaled) { } //todo: strip synchronization lines out of here, pls PLS DO IT ADGASDHH HDJHFHFDKKF DFKDKDK THIS IS SO STUPID +// todo: kill myself typedef struct { VkSwapchainKHR swapchain; VecVkImageView image_views; @@ -901,13 +881,6 @@ VkSurfaceKHR margaret_create_surface(VkInstance instance, const MargaretSingleWi return surface; } -#define VkCommandBuffer_drop(vp) {} -#define VkCommandBuffer_clone(vp) (*(vp)) - -VecT_trivmove_struct_Definition(VkCommandBuffer) -VecT_trivmove_method_Definition(VkCommandBuffer) -VecT_primitive_zeroinit_method_Definition(VkCommandBuffer) - // type_filter is a set of memory types (bit set) and we return one of its elements. // Result must satisfy `properties` // Bit index in `type_filter` is an index in VkPhysicalDeviceMemoryProperties::memoryTypes for that physical_device @@ -943,24 +916,7 @@ typedef struct { VkBuffer buffer; } MargaretBufferInMemoryInfo; -#define MargaretBufferInMemoryInfo_drop(self) {} -#define MargaretBufferInMemoryInfo_clone(self) (*(self)) - -VecT_trivmove_struct_Definition(MargaretBufferInMemoryInfo); -VecT_trivmove_method_Definition(MargaretBufferInMemoryInfo); -VecT_primitive_zeroinit_method_Definition(MargaretBufferInMemoryInfo); - -typedef MargaretBufferInMemoryInfo* MargaretBufferInMemoryInfo_Ptr; - -#define MargaretBufferInMemoryInfo_Ptr_drop(self) {} -#define MargaretBufferInMemoryInfo_Ptr_clone(self) (*(self)) - -VecT_trivmove_struct_Definition(MargaretBufferInMemoryInfo_Ptr); -VecT_trivmove_method_Definition(MargaretBufferInMemoryInfo_Ptr); -VecT_primitive_zeroinit_method_Definition(MargaretBufferInMemoryInfo_Ptr); -SpanT_struct_Definition(MargaretBufferInMemoryInfo_Ptr) -SpanT_method_Definition(MargaretBufferInMemoryInfo_Ptr) -SpanT_VecT_method_Definition(MargaretBufferInMemoryInfo_Ptr) +typedef MargaretBufferInMemoryInfo* PtrMargaretBufferInMemoryInfo; // Used in autogenerated code typedef struct { @@ -974,35 +930,23 @@ typedef struct { VkImage image; } MargaretImageInMemoryInfo; -#define MargaretImageInMemoryInfo_drop(self) {} -#define MargaretImageInMemoryInfo_clone(self) (*(self)) +typedef MargaretImageInMemoryInfo* PtrMargaretImageInMemoryInfo; -VecT_trivmove_struct_Definition(MargaretImageInMemoryInfo); -VecT_trivmove_method_Definition(MargaretImageInMemoryInfo); -VecT_primitive_zeroinit_method_Definition(MargaretImageInMemoryInfo); - -typedef MargaretImageInMemoryInfo* MargaretImageInMemoryInfo_Ptr; - -#define MargaretImageInMemoryInfo_Ptr_drop(self) {} -#define MargaretImageInMemoryInfo_Ptr_clone(self) (*(self)) - -VecT_trivmove_struct_Definition(MargaretImageInMemoryInfo_Ptr); -VecT_trivmove_method_Definition(MargaretImageInMemoryInfo_Ptr); -VecT_primitive_zeroinit_method_Definition(MargaretImageInMemoryInfo_Ptr); -SpanT_struct_Definition(MargaretImageInMemoryInfo_Ptr) -SpanT_method_Definition(MargaretImageInMemoryInfo_Ptr) -SpanT_VecT_method_Definition(MargaretImageInMemoryInfo_Ptr) +#include "../../../gen/l2/eve/VecMargaretBufferInMemoryInfo.h" +#include "../../../gen/l2/eve/VecAndSpan_PtrMargaretBufferInMemoryInfo.h" +#include "../../../gen/l2/eve/VecMargaretImageInMemoryInfo.h" +#include "../../../gen/l2/eve/VecAndSpan_PtrMargaretImageInMemoryInfo.h" // A handy function to initialize buffers and images (attaching them to allocated memory) VkDeviceMemory margaret_initialize_buffers_and_images( VkPhysicalDevice physical_device, VkDevice device, - SpanMargaretBufferInMemoryInfo_Ptr buffer_hands, SpanMargaretImageInMemoryInfo_Ptr image_hands, + MutSpanPtrMargaretBufferInMemoryInfo buffer_hands, MutSpanPtrMargaretImageInMemoryInfo image_hands, VkMemoryPropertyFlags properties ) { uint32_t memory_types_allowed = -1; VkDeviceSize offset = 0; for (size_t i = 0; i < buffer_hands.len; i++) { - MargaretBufferInMemoryInfo* buf_hand = *SpanMargaretBufferInMemoryInfo_Ptr_at(buffer_hands, i); + MargaretBufferInMemoryInfo* buf_hand = *MutSpanPtrMargaretBufferInMemoryInfo_at(buffer_hands, i); VkBufferCreateInfo create_info = { .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, .size = buf_hand->sz, @@ -1022,7 +966,7 @@ VkDeviceMemory margaret_initialize_buffers_and_images( } for (size_t i = 0; i < image_hands.len; i++) { - MargaretImageInMemoryInfo* img_hand = *SpanMargaretImageInMemoryInfo_Ptr_at(image_hands, i); + MargaretImageInMemoryInfo* img_hand = *MutSpanPtrMargaretImageInMemoryInfo_at(image_hands, i); VkImageCreateInfo crinfo = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, .imageType = VK_IMAGE_TYPE_2D, @@ -1063,13 +1007,13 @@ VkDeviceMemory margaret_initialize_buffers_and_images( } for (size_t i = 0; i < buffer_hands.len; i++) { - MargaretBufferInMemoryInfo* buf_hand = *SpanMargaretBufferInMemoryInfo_Ptr_at(buffer_hands, i); + MargaretBufferInMemoryInfo* buf_hand = *MutSpanPtrMargaretBufferInMemoryInfo_at(buffer_hands, i); if (vkBindBufferMemory(device, buf_hand->buffer, memory, buf_hand->offset) != VK_SUCCESS) abortf("vkBindBufferMemory"); } for (size_t i = 0; i < image_hands.len; i++) { - MargaretImageInMemoryInfo* img_hand = *SpanMargaretImageInMemoryInfo_Ptr_at(image_hands, i); + MargaretImageInMemoryInfo* img_hand = *MutSpanPtrMargaretImageInMemoryInfo_at(image_hands, i); if (vkBindImageMemory(device, img_hand->image, memory, img_hand->offset) != VK_SUCCESS) abortf("vkBindImageMemory"); } @@ -1319,11 +1263,7 @@ VkSampler margaret_create_sampler(VkPhysicalDevice physical_device, VkDevice dev return sampler; } -#define VkDescriptorPoolSize_drop(v) {} -#define VkDescriptorPoolSize_clone(p) (*(p)) - -VecT_trivmove_struct_Definition(VkDescriptorPoolSize) -VecT_trivmove_method_Definition(VkDescriptorPoolSize) +#include "../../../gen/l2/eve/VecVkDescriptorPoolSize.h" VkDescriptorPool margaret_create_descriptor_set_pool(VkDevice device, uint32_t ubo_descriptor_count, uint32_t image_sampler_descriptor_count, uint32_t max_sets @@ -1378,11 +1318,6 @@ VkDescriptorSet margaret_allocate_descriptor_set(VkDevice device, VkDescriptorPo return descriptor_set; } -#define VkBufferCopy_drop(x) {} -#define VkBufferCopy_clone(xp) (*(xp)) - -VecT_trivmove_struct_Definition(VkBufferCopy) -VecT_trivmove_method_Definition(VkBufferCopy) -VecT_primitive_zeroinit_method_Definition(VkBufferCopy) +#include "../../../gen/l2/eve/VecVkBufferCopy.h" #endif diff --git a/src/l2/tests/r0/r0.c b/src/l2/tests/r0/r0.c index 0cfcd5c..490baa8 100644 --- a/src/l2/tests/r0/r0.c +++ b/src/l2/tests/r0/r0.c @@ -581,7 +581,7 @@ void reset_and_record_command_buffer_0( vkCmdPushConstants(command_buffer, pipeline_and_layout->pipeline_layout, VK_SHADER_STAGE_FRAGMENT_BIT, sizeof(mat4), sizeof(vec3), &camera_pos); for (size_t i = 0; i < scene->models.len; i++) { - const UsedModelOnScene* model = VecUsedModelOnScene_cat(&scene->models, i); + const UsedModelOnScene* model = VecUsedModelOnScene_at(&scene->models, i); VkBuffer attached_buffers[2] = { model->model.vbo, model->instance_attr_buf }; // We use our whole buffer, no need for offset VkDeviceSize offsets_in_buffers[2] = {0, model->instance_attr_buf_offset}; @@ -707,7 +707,7 @@ void copy_scene_info_to_buffer_and_rerecord_full_copy_command_buffer( size_t offset_in_mesh_instance_buf = 0; VecVkBufferCopy regions_to_copy_A = VecVkBufferCopy_new(); for (size_t mi = 0; mi < scene->models.len; mi++) { - const UsedModelOnScene* model = VecUsedModelOnScene_cat(&scene->models, mi); + const UsedModelOnScene* model = VecUsedModelOnScene_at(&scene->models, mi); assert(model->instances.len <= model->limit_max_instance_count); size_t all = model->instances.len * sizeof(GenericMeshInstance); memcpy(host_mem_buffer_mem + offset_here, model->instances.buf, all); @@ -764,7 +764,7 @@ void recreate_swapchain( vkDeviceWaitIdle(device); VkSwapchainKHR old_swapchain = MargaretSwapchainBundle_pop_swapchain_drop_rest(device, *swfb); // old swfb is 83% dropped - ResultMargaretChosenSwapchainDetailsOrConstSpanU8 swapchain_details_res = margaret_choose_swapchain_details(physical_device, surface); + ResultMargaretChosenSwapchainDetailsOrSpanU8 swapchain_details_res = margaret_choose_swapchain_details(physical_device, surface); if (swapchain_details_res.variant != Result_Ok) abortf("swapchain_details_res.variant != Result_Ok"); MargaretChosenSwapchainDetails swapchain_details = swapchain_details_res.ok; @@ -794,8 +794,8 @@ typedef struct { int main() { prepare_shaders(); - ConstSpanU8 GPU = cstr("nvidia"); - ConstSpanU8 bugged_GPU = cstr("nothere"); + SpanU8 GPU = cstr("nvidia"); + SpanU8 bugged_GPU = cstr("nothere"); bool ENABLE_VALIDATION_LAYERS = true; const U32 MAX_WIN_WIDTH = 1920; const U32 MAX_WIN_HEIGHT = 1080; @@ -816,7 +816,7 @@ int main() { // print_physical_device_available_extensions(physical_device); - ResultMargaretChosenQueueFamiliesOrConstSpanU8 queue_fam_res = margaret_choose_good_queue_families(physical_device, surface); + ResultMargaretChosenQueueFamiliesOrSpanU8 queue_fam_res = margaret_choose_good_queue_families(physical_device, surface); if (queue_fam_res.variant != Result_Ok) abortf("queue_fam_res.variant != Result_Ok"); MargaretChosenQueueFamilies queue_fam = queue_fam_res.ok; @@ -828,7 +828,7 @@ int main() { VkQueue presentation_queue; vkGetDeviceQueue(device, queue_fam.for_graphics, 0, &presentation_queue); - ResultMargaretChosenSwapchainDetailsOrConstSpanU8 swapchain_details_res = margaret_choose_swapchain_details(physical_device, surface); + ResultMargaretChosenSwapchainDetailsOrSpanU8 swapchain_details_res = margaret_choose_swapchain_details(physical_device, surface); if (swapchain_details_res.variant != Result_Ok) abortf("swapchain_details_res.variant != Result_Ok"); MargaretChosenSwapchainDetails swapchain_details = swapchain_details_res.ok; @@ -874,16 +874,16 @@ int main() { MAX_U64(TextureDataR8G8B8A8_get_size_in_bytes(&cyl_1_diffuse_tex), MAX_U64(TextureDataR8G8B8A8_get_size_in_bytes(&cyl_1_normal_tex), 0)))) , .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT }; - MargaretBufferInMemoryInfo_Ptr host_mem_buffer_SPAN[1] = {&host_mem_buffer}; + PtrMargaretBufferInMemoryInfo host_mem_buffer_SPAN[1] = {&host_mem_buffer}; VkDeviceMemory host_mem = margaret_initialize_buffers_and_images(physical_device, device, - (SpanMargaretBufferInMemoryInfo_Ptr){.data = host_mem_buffer_SPAN, .len = 1}, - (SpanMargaretImageInMemoryInfo_Ptr){ 0 }, + (MutSpanPtrMargaretBufferInMemoryInfo){.data = host_mem_buffer_SPAN, .len = 1}, + (MutSpanPtrMargaretImageInMemoryInfo){ 0 }, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT); // todo: split this in two (or maybe even better: merge it all into one/two buffer and use offsets VecMargaretBufferInMemoryInfo device_ebo_and_vbo_buffers_for_generic_meshes = VecMargaretBufferInMemoryInfo_new(); for (size_t mi = 0; mi < scene_template.models.len; mi++) { - const ModelInSceneTemplate* M = VecModelInSceneTemplate_cat(&scene_template.models, mi); + const ModelInSceneTemplate* M = VecModelInSceneTemplate_at(&scene_template.models, mi); VecMargaretBufferInMemoryInfo_append(&device_ebo_and_vbo_buffers_for_generic_meshes, GenericMeshVertex_buffer_crinfo_of_gpu_vbo(M->topology.vertices.len)); VecMargaretBufferInMemoryInfo_append(&device_ebo_and_vbo_buffers_for_generic_meshes, @@ -895,13 +895,13 @@ int main() { .usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT }; - VecMargaretBufferInMemoryInfo_Ptr device_mem_buffers_SPAN = VecMargaretBufferInMemoryInfo_Ptr_new(); + VecPtrMargaretBufferInMemoryInfo device_mem_buffers_SPAN = VecPtrMargaretBufferInMemoryInfo_new(); for (size_t i = 0; i < device_ebo_and_vbo_buffers_for_generic_meshes.len; i++) { - VecMargaretBufferInMemoryInfo_Ptr_append(&device_mem_buffers_SPAN, - VecMargaretBufferInMemoryInfo_at(&device_ebo_and_vbo_buffers_for_generic_meshes, i)); + VecPtrMargaretBufferInMemoryInfo_append(&device_mem_buffers_SPAN, + VecMargaretBufferInMemoryInfo_mat(&device_ebo_and_vbo_buffers_for_generic_meshes, i)); } - VecMargaretBufferInMemoryInfo_Ptr_append(&device_mem_buffers_SPAN, &device_lighting_ubo); - VecMargaretBufferInMemoryInfo_Ptr_append(&device_mem_buffers_SPAN, &device_instance_attrs_for_all_generic_meshes); + VecPtrMargaretBufferInMemoryInfo_append(&device_mem_buffers_SPAN, &device_lighting_ubo); + VecPtrMargaretBufferInMemoryInfo_append(&device_mem_buffers_SPAN, &device_instance_attrs_for_all_generic_meshes); printf("Buffers: %lu\n", device_mem_buffers_SPAN.len); MargaretImageInMemoryInfo device_IT1_image = margaret_prep_image_mem_info_of_colorbuffer(MAX_WIN_WIDTH, MAX_WIN_HEIGHT, IT1_format.some); @@ -911,12 +911,12 @@ int main() { MargaretImageInMemoryInfo device_cyl_1_normal_texture = margaret_prep_image_mem_info_of_gpu_texture_srgba(cyl_1_normal_tex.width, TextureDataR8G8B8A8_get_height(&cyl_1_normal_tex)); - MargaretImageInMemoryInfo_Ptr device_mem_images_SPAN[] = { + PtrMargaretImageInMemoryInfo device_mem_images_SPAN[] = { &device_IT1_image, &device_zbuffer_image, &device_cyl_1_diffuse_texture, &device_cyl_1_normal_texture }; VkDeviceMemory device_mem = margaret_initialize_buffers_and_images(physical_device, device, - VecMargaretBufferInMemoryInfo_Ptr_to_SpanMargaretBufferInMemoryInfo_Ptr(&device_mem_buffers_SPAN), - (SpanMargaretImageInMemoryInfo_Ptr){ .data = device_mem_images_SPAN, .len = ARRAY_SIZE(device_mem_images_SPAN) }, + VecPtrMargaretBufferInMemoryInfo_to_mspan(&device_mem_buffers_SPAN), + (MutSpanPtrMargaretImageInMemoryInfo){ .data = device_mem_images_SPAN, .len = ARRAY_SIZE(device_mem_images_SPAN) }, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); VkCommandPool command_pool = margaret_create_resettable_command_pool(device, queue_fam.for_graphics); @@ -929,12 +929,12 @@ int main() { size_t offset_in_attr_buffer = 0; for (size_t mi = 0; mi < scene_template.models.len; mi++) { // UsedModelOnScene* ptb = VecUsedModelOnScene_cat() - const ModelInSceneTemplate* M = VecModelInSceneTemplate_cat(&scene_template.models, mi); + const ModelInSceneTemplate* M = VecModelInSceneTemplate_at(&scene_template.models, mi); VecUsedModelOnScene_append(&scene.models, (UsedModelOnScene){ .model = (ModelOnScene){ - .vbo = VecMargaretBufferInMemoryInfo_cat(&device_ebo_and_vbo_buffers_for_generic_meshes, + .vbo = VecMargaretBufferInMemoryInfo_at(&device_ebo_and_vbo_buffers_for_generic_meshes, 2 * mi + 0)->buffer, - .ebo = VecMargaretBufferInMemoryInfo_cat(&device_ebo_and_vbo_buffers_for_generic_meshes, + .ebo = VecMargaretBufferInMemoryInfo_at(&device_ebo_and_vbo_buffers_for_generic_meshes, 2 * mi + 1)->buffer, .indexes = M->topology.indexes.len, }, @@ -949,11 +949,11 @@ int main() { for (int X = 0; X < 10; X++) { for (int Z = 0; Z < 10; Z++) { - VecGenericMeshInstance_append(&VecUsedModelOnScene_at(&scene.models, 0)->instances, + VecGenericMeshInstance_append(&VecUsedModelOnScene_mat(&scene.models, 0)->instances, (GenericMeshInstance){ .model_t = marie_translation_mat4((vec3){11.f * (float)X, -6, 4.f * (float)Z}) }); } } - VecGenericMeshInstance_append(&VecUsedModelOnScene_at(&scene.models, 1)->instances, (GenericMeshInstance){ + VecGenericMeshInstance_append(&VecUsedModelOnScene_mat(&scene.models, 1)->instances, (GenericMeshInstance){ .model_t = mat4_E }); @@ -1100,7 +1100,7 @@ int main() { if (wep.should_stop) break; for (size_t i = 0; i < events.len; i++) { - Xlib_Event* ev = VecXlib_Event_at(&events, i); + Xlib_Event* ev = VecXlib_Event_mat(&events, i); if (ev->xany.window != wep.win) continue; Margaret_WEP_update_with_new_event(&wep, ev); @@ -1118,7 +1118,7 @@ int main() { pressed_first_0x80[keysym] = false; if (keysym == XK_1) { vec3 p = my_cam_control_info.pos; - VecPipeline0PointLight_at(&scene.point_lights, 0)->pos = p; + VecPipeline0PointLight_mat(&scene.point_lights, 0)->pos = p; printf("Point light source pos set to %f %f %f\n", p.x, p.y, p.z); dt_transfer_required = true; } else if (keysym == XK_2) { @@ -1145,25 +1145,25 @@ int main() { if (pressed_first_0x80[XK_j]) {\ Buba_control_info.x -= fl; - VecGenericMeshInstance_at(&VecUsedModelOnScene_at(&scene.models, 1)->instances, 0)->model_t = + VecGenericMeshInstance_mat(&VecUsedModelOnScene_mat(&scene.models, 1)->instances, 0)->model_t = marie_translation_mat4(Buba_control_info); dt_transfer_required = true; } if (pressed_first_0x80[XK_k]) {\ Buba_control_info.z -= fl; - VecGenericMeshInstance_at(&VecUsedModelOnScene_at(&scene.models, 1)->instances, 0)->model_t = + VecGenericMeshInstance_mat(&VecUsedModelOnScene_mat(&scene.models, 1)->instances, 0)->model_t = marie_translation_mat4(Buba_control_info); dt_transfer_required = true; } if (pressed_first_0x80[XK_l]) {\ Buba_control_info.z += fl; - VecGenericMeshInstance_at(&VecUsedModelOnScene_at(&scene.models, 1)->instances, 0)->model_t = + VecGenericMeshInstance_mat(&VecUsedModelOnScene_mat(&scene.models, 1)->instances, 0)->model_t = marie_translation_mat4(Buba_control_info); dt_transfer_required = true; } if (pressed_first_0x80[XK_semicolon]) {\ Buba_control_info.x += fl; - VecGenericMeshInstance_at(&VecUsedModelOnScene_at(&scene.models, 1)->instances, 0)->model_t = + VecGenericMeshInstance_mat(&VecUsedModelOnScene_mat(&scene.models, 1)->instances, 0)->model_t = marie_translation_mat4(Buba_control_info); dt_transfer_required = true; } @@ -1225,7 +1225,7 @@ int main() { descriptor_set_for_pipeline_0, t_mat, my_cam_control_info.pos); reset_and_record_command_buffer_1(rendering_command_buffer_1, render_pass_1, &pipeline_hands_1, - *VecVkFramebuffer_cat(&swfb.framebuffers, ij), + *VecVkFramebuffer_at(&swfb.framebuffers, ij), swfb.extent, (VkExtent2D){.width = MAX_WIN_WIDTH, .height = MAX_WIN_HEIGHT}, &scene, descriptor_set_for_pipeline_1); { diff --git a/src/l2/tests/r0/r0_tex_init_prep.c b/src/l2/tests/r0/r0_tex_init_prep.c index e7853d1..196ec1c 100644 --- a/src/l2/tests/r0/r0_tex_init_prep.c +++ b/src/l2/tests/r0/r0_tex_init_prep.c @@ -1,10 +1,10 @@ -#include "r0_assets.h" +s#include "r0_assets.h" #include "../../marie/rasterization.h" void draw_cool_triangle_h_frag(void* ug, S32 x, S32 y, MarieVertAttr attr_col) { TextureDataR8G8B8* tex = (TextureDataR8G8B8*)ug; if (TextureDataR8G8B8_is_inside(tex, x, y)) { - *TextureDataR8G8B8_at(tex, x, y) = (cvec3){255, (S32)roundf(attr_col.x * 255), (S32)roundf(attr_col.y * 255)}; + *TextureDataR8G8B8_mat(tex, x, y) = (cvec3){255, (S32)roundf(attr_col.x * 255), (S32)roundf(attr_col.y * 255)}; } } @@ -23,7 +23,7 @@ int main() { TextureDataR8G8B8A8 tex_2_big = TextureDataR8G8B8A8_new(tex_2.width, TextureDataR8G8B8_get_height(&tex_2)); for (size_t i = 0; i < tex_2.pixels.len; i++) { cvec3 rgb = *Veccvec3_at(&tex_2.pixels, i); - *Veccvec4_at(&tex_2_big.pixels, i) = (cvec4){rgb.x, rgb.y, rgb.z, 255}; + *Veccvec4_mat(&tex_2_big.pixels, i) = (cvec4){rgb.x, rgb.y, rgb.z, 255}; } TextureDataR8G8B8A8_write_to_file(&tex_2_big, "log_10_2_6_NORMAL.r8g8b8a8"); TextureDataR8G8B8A8_drop(tex_2_big); diff --git a/src/l3/fun_machine/fun_machine.h b/src/l3/fun_machine/fun_machine.h index a6fd41b..bcbd77f 100644 --- a/src/l3/fun_machine/fun_machine.h +++ b/src/l3/fun_machine/fun_machine.h @@ -1,8 +1,7 @@ #ifndef PROTOTYPE1_SRC_L3_FUN_MACHINE_STATE_H #define PROTOTYPE1_SRC_L3_FUN_MACHINE_STATE_H -#include "../../l1/core/util.h" -#include "../../l1/core/VecSpan_int_primitives.h" +#include "../../../gen/l1/VecAndSpan_int_primitives.h" // todo: recheck this structure const U8 FunMachine_LRU_states[24][4] ={ @@ -33,18 +32,16 @@ const U8 FunMachine_LRU_states[24][4] ={ { 7, 15, 23, 20} }; -const int FunMachine_levers_count = 16; -const int FunMachine_keys_count = 50; - -const int FunMachine_cache_banks_count = 4; -const int FunMachine_cache_sets_count = 32; -const int FunMachine_cache_sets_pow = 5; -const int FunMachine_cache_line_size = 16; -const int FunMachine_cache_line_pow = 4; - -const int FunMachine_disk_drives = 2; -const int FunMachine_disk_io_block_pow = 7; -const int FunMachine_disk_io_block_size = 128; +#define FunMachine_levers_count 16 +#define FunMachine_keys_count 50 +#define FunMachine_cache_banks_count 4 +#define FunMachine_cache_sets_count 32 +#define FunMachine_cache_sets_pow 5 +#define FunMachine_cache_line_size 16 +#define FunMachine_cache_line_pow 4 +#define FunMachine_disk_drives 2 +#define FunMachine_disk_io_block_pow 7 +#define FunMachine_disk_io_block_size 128 typedef struct { U64 timeout_remaining; @@ -52,7 +49,7 @@ typedef struct { U16 levers; bool keys[FunMachine_keys_count]; // History of cache bank usage (from 0 to 23) - U8 lru = 0; + U8 lru; // Our simulation acknowledges complete cache consistency and does not separate cache storage from // memory storage // We have 4 banks and memory blocks of size 2^4 (we have 2^12) of them are separated into @@ -76,7 +73,7 @@ typedef struct { VecU16 memory; } FunMachineState; -FunMachineState FunMachineState_from_image(ConstSpanU16 image) { +FunMachineState FunMachineState_from_image(SpanU16 image) { assert(image.len <= UINT16_MAX); FunMachineState res = (FunMachineState){ .timeout_remaining = UINT64_MAX, @@ -144,7 +141,7 @@ typedef struct { // 80K TPS const U64 tick_time = 12500; -void FunMachine_boot(FunMachineState* self, ConstSpanU16 image) { +void FunMachine_boot(FunMachineState* self, SpanU16 image) { assert(image.len <= UINT16_MAX); self->powered = true; self->AX = self->BX = self->CX = self->DX = self->EX = self->FX = self->IP = self->flags = 0; diff --git a/src/l3/tests/p0.c b/src/l3/tests/p0.c index 6fee0dd..db61280 100644 --- a/src/l3/tests/p0.c +++ b/src/l3/tests/p0.c @@ -1,5 +1,7 @@ /* This shit was written by chatgpt */ +// todo: remove this crap. Rewrite it in wayland. Get rid of ncurses client + #include "../fun_machine/fun_machine.h" #include #include