more isolation work

This commit is contained in:
Matthew 2025-08-15 06:26:59 +10:00
parent e5b07e1bb7
commit 8f4099c21c
2 changed files with 80 additions and 49 deletions

View File

@ -8,26 +8,6 @@ import core.stdc.stdio : Printf = printf;
import std.format : sformat;
import std.math.rounding : Ceil = ceil;
alias i8 = byte;
alias i16 = short;
alias i32 = int;
alias i64 = long;
alias u8 = ubyte;
alias u16 = ushort;
alias u32 = uint;
alias u64 = ulong;
alias f32 = float;
alias f64 = double;
alias b32 = uint;
alias intptr = intptr_t;
alias uintptr = uintptr_t;
alias usize = size_t;
alias InitRenderer = Init;
alias Renderer = Vulkan;
alias Shader = VkShaderModule;
@ -59,6 +39,12 @@ version(linux)
"libvulkan.so.1",
"libvulkan.so",
];
struct PlatformHandles
{
xcb_connection_t *conn;
xcb_window_t window;
}
}
version(Windows)
@ -66,6 +52,12 @@ version(Windows)
const string[] VULKAN_LIBS = [
"vulkan-1.dll",
];
struct PlatformHandles
{
HINSTANCE hinstance;
HWND hwnd;
}
}
const char*[] VK_INSTANCE_LAYERS = [];
@ -292,7 +284,7 @@ struct Vulkan
SLList!(SI) cleanup_list;
PlatformWindow* window;
PlatformHandles platform_handles;
VkDebugUtilsMessengerEXT dbg_msg;
VkInstance instance;
@ -383,7 +375,7 @@ struct QueueInfo
}
Vulkan
Init(PlatformWindow* window, u64 permanent_mem, u64 frame_mem)
Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
{
bool success = true;
@ -393,7 +385,7 @@ Init(PlatformWindow* window, u64 permanent_mem, u64 frame_mem)
CreateArena(frame_mem),
CreateArena(frame_mem),
],
window: window,
platform_handles: platform_handles,
};
Push(&vk, SI.Renderer);
@ -608,12 +600,6 @@ CreateBuffer(Vulkan* vk, Buffer* buf, BufferType type, u64 size, bool host_visib
buf.dynamic = dynamic;
}
void
UpdateIndexBuffer(Vulkan* vk, Model* model)
{
assert(Transfer(vk, &model.index_buffer, model.indices), "UpdateIndexBuffer failure");
}
void
InitBuffers(Vulkan* vk)
{
@ -664,18 +650,6 @@ CurrentImage(Vulkan* vk)
return vk.present_images[vk.image_index].image;
}
UIVertex[]
GetUIVertexBuffer(Vulkan* vk)
{
return vk.ui_vert_buf.data;
}
u32[]
GetUIIndexBuffer(Vulkan* vk)
{
return vk.ui_index_buf.data;
}
void
BeginFrame(Vulkan* vk)
{
@ -763,10 +737,13 @@ ResizeDrawImageIfNeeded(Vulkan* vk, ImageView* view)
}
}
pragma(inline): UVec2
pragma(inline): u32[2]
GetExtent(Vulkan* vk)
{
return UVec2(vk.swapchain_extent.width, vk.swapchain_extent.height);
u32[2] extent;
extent[0] = vk.swapchain_extent.width;
extent[1] = vk.swapchain_extent.height;
return extent;
}
pragma(inline): f32
@ -1907,7 +1884,7 @@ CreateComputePipeline(Vulkan* vk, CompPipelineInfo* comp_info)
}
void
ClearColor(Vulkan* vk, ImageView* view, Vec4 color)
ClearColor(Vulkan* vk, ImageView* view, f32[4] color)
{
VkImageSubresourceRange clear_range = {
aspectMask: (view.depth_image ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT),
@ -1919,7 +1896,7 @@ ClearColor(Vulkan* vk, ImageView* view, Vec4 color)
vk.cmds[vk.frame_index],
view.image,
view.layout,
cast(VkClearColorValue*)color.v,
cast(VkClearColorValue*)color,
1,
&clear_range
);
@ -3200,8 +3177,8 @@ version(linux)
{
VkXcbSurfaceCreateInfoKHR surface_info = {
sType: VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
connection: vk.window.conn,
window: vk.window.window,
connection: vk.platform_handles.conn,
window: vk.platform_handles.window,
};
VkResult result = vkCreateXcbSurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
@ -3211,8 +3188,8 @@ version(Windows)
{
VkWin32SurfaceCreateInfoKHR surface_info = {
sType: VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
hinstance: vk.window.instance,
hwnd: vk.window.handle,
hinstance: vk.platform_handles.instance,
hwnd: vk.platform_handles.handle,
};
VkResult result = vkCreateWin32SurfaceKHR(vk.instance, &surface_info, null, &vk.surface);

View File

@ -1,5 +1,25 @@
import core.stdc.stdio : Printf = printf;
alias i8 = byte;
alias i16 = short;
alias i32 = int;
alias i64 = long;
alias u8 = ubyte;
alias u16 = ushort;
alias u32 = uint;
alias u64 = ulong;
alias f32 = float;
alias f64 = double;
alias b32 = uint;
alias intptr = intptr_t;
alias uintptr = uintptr_t;
alias usize = size_t;
version(linux)
{
import core.sys.posix.sys.mman;
@ -18,6 +38,40 @@ MemFree(void* ptr, u64 size)
}
struct Node(T)
{
Node!(T)* next;
T value;
}
struct SLList(T)
{
Node!(T)* first;
Node!(T)* last;
}
pragma(inline): void
Push(T)(SLList!(T)*list, Node!(T)* node, Node!(T)* nil)
{
if (CheckNil(nil, list.first))
{
list.first = list.last = node;
node.next = nil;
}
else
{
list.last.next = node;
list.last = node;
node.next = nil;
}
}
pragma(inline): bool
CheckNil(T)(Node!(T)* nil, Node!(T)* node)
{
return node == null || node == nil;
}
struct Arena
{
u8* mem;