Rewrote project according to new l1

This commit is contained in:
Андреев Григорий 2025-08-17 20:48:56 +03:00
parent d2817c7ec6
commit 604cfe1ea8
7 changed files with 90 additions and 141 deletions

View File

@ -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)

View File

@ -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() {

View File

@ -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

View File

@ -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);
{

View File

@ -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);

View File

@ -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;

View File

@ -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 <ncurses.h>
#include <stdlib.h>