Rewrote project according to new l1
This commit is contained in:
parent
d2817c7ec6
commit
604cfe1ea8
@ -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)
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
{
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user