more isolation work
This commit is contained in:
parent
e5b07e1bb7
commit
8f4099c21c
75
vulkan.d
75
vulkan.d
@ -8,26 +8,6 @@ import core.stdc.stdio : Printf = printf;
|
|||||||
import std.format : sformat;
|
import std.format : sformat;
|
||||||
import std.math.rounding : Ceil = ceil;
|
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 InitRenderer = Init;
|
||||||
alias Renderer = Vulkan;
|
alias Renderer = Vulkan;
|
||||||
alias Shader = VkShaderModule;
|
alias Shader = VkShaderModule;
|
||||||
@ -59,6 +39,12 @@ version(linux)
|
|||||||
"libvulkan.so.1",
|
"libvulkan.so.1",
|
||||||
"libvulkan.so",
|
"libvulkan.so",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
struct PlatformHandles
|
||||||
|
{
|
||||||
|
xcb_connection_t *conn;
|
||||||
|
xcb_window_t window;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
version(Windows)
|
version(Windows)
|
||||||
@ -66,6 +52,12 @@ version(Windows)
|
|||||||
const string[] VULKAN_LIBS = [
|
const string[] VULKAN_LIBS = [
|
||||||
"vulkan-1.dll",
|
"vulkan-1.dll",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
struct PlatformHandles
|
||||||
|
{
|
||||||
|
HINSTANCE hinstance;
|
||||||
|
HWND hwnd;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char*[] VK_INSTANCE_LAYERS = [];
|
const char*[] VK_INSTANCE_LAYERS = [];
|
||||||
@ -292,7 +284,7 @@ struct Vulkan
|
|||||||
|
|
||||||
SLList!(SI) cleanup_list;
|
SLList!(SI) cleanup_list;
|
||||||
|
|
||||||
PlatformWindow* window;
|
PlatformHandles platform_handles;
|
||||||
|
|
||||||
VkDebugUtilsMessengerEXT dbg_msg;
|
VkDebugUtilsMessengerEXT dbg_msg;
|
||||||
VkInstance instance;
|
VkInstance instance;
|
||||||
@ -383,7 +375,7 @@ struct QueueInfo
|
|||||||
}
|
}
|
||||||
|
|
||||||
Vulkan
|
Vulkan
|
||||||
Init(PlatformWindow* window, u64 permanent_mem, u64 frame_mem)
|
Init(PlatformHandles platform_handles, u64 permanent_mem, u64 frame_mem)
|
||||||
{
|
{
|
||||||
bool success = true;
|
bool success = true;
|
||||||
|
|
||||||
@ -393,7 +385,7 @@ Init(PlatformWindow* window, u64 permanent_mem, u64 frame_mem)
|
|||||||
CreateArena(frame_mem),
|
CreateArena(frame_mem),
|
||||||
CreateArena(frame_mem),
|
CreateArena(frame_mem),
|
||||||
],
|
],
|
||||||
window: window,
|
platform_handles: platform_handles,
|
||||||
};
|
};
|
||||||
|
|
||||||
Push(&vk, SI.Renderer);
|
Push(&vk, SI.Renderer);
|
||||||
@ -608,12 +600,6 @@ CreateBuffer(Vulkan* vk, Buffer* buf, BufferType type, u64 size, bool host_visib
|
|||||||
buf.dynamic = dynamic;
|
buf.dynamic = dynamic;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
UpdateIndexBuffer(Vulkan* vk, Model* model)
|
|
||||||
{
|
|
||||||
assert(Transfer(vk, &model.index_buffer, model.indices), "UpdateIndexBuffer failure");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
InitBuffers(Vulkan* vk)
|
InitBuffers(Vulkan* vk)
|
||||||
{
|
{
|
||||||
@ -664,18 +650,6 @@ CurrentImage(Vulkan* vk)
|
|||||||
return vk.present_images[vk.image_index].image;
|
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
|
void
|
||||||
BeginFrame(Vulkan* vk)
|
BeginFrame(Vulkan* vk)
|
||||||
{
|
{
|
||||||
@ -763,10 +737,13 @@ ResizeDrawImageIfNeeded(Vulkan* vk, ImageView* view)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pragma(inline): UVec2
|
pragma(inline): u32[2]
|
||||||
GetExtent(Vulkan* vk)
|
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
|
pragma(inline): f32
|
||||||
@ -1907,7 +1884,7 @@ CreateComputePipeline(Vulkan* vk, CompPipelineInfo* comp_info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ClearColor(Vulkan* vk, ImageView* view, Vec4 color)
|
ClearColor(Vulkan* vk, ImageView* view, f32[4] color)
|
||||||
{
|
{
|
||||||
VkImageSubresourceRange clear_range = {
|
VkImageSubresourceRange clear_range = {
|
||||||
aspectMask: (view.depth_image ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT),
|
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],
|
vk.cmds[vk.frame_index],
|
||||||
view.image,
|
view.image,
|
||||||
view.layout,
|
view.layout,
|
||||||
cast(VkClearColorValue*)color.v,
|
cast(VkClearColorValue*)color,
|
||||||
1,
|
1,
|
||||||
&clear_range
|
&clear_range
|
||||||
);
|
);
|
||||||
@ -3200,8 +3177,8 @@ version(linux)
|
|||||||
{
|
{
|
||||||
VkXcbSurfaceCreateInfoKHR surface_info = {
|
VkXcbSurfaceCreateInfoKHR surface_info = {
|
||||||
sType: VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
|
sType: VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR,
|
||||||
connection: vk.window.conn,
|
connection: vk.platform_handles.conn,
|
||||||
window: vk.window.window,
|
window: vk.platform_handles.window,
|
||||||
};
|
};
|
||||||
|
|
||||||
VkResult result = vkCreateXcbSurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
|
VkResult result = vkCreateXcbSurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
|
||||||
@ -3211,8 +3188,8 @@ version(Windows)
|
|||||||
{
|
{
|
||||||
VkWin32SurfaceCreateInfoKHR surface_info = {
|
VkWin32SurfaceCreateInfoKHR surface_info = {
|
||||||
sType: VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
|
sType: VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,
|
||||||
hinstance: vk.window.instance,
|
hinstance: vk.platform_handles.instance,
|
||||||
hwnd: vk.window.handle,
|
hwnd: vk.platform_handles.handle,
|
||||||
};
|
};
|
||||||
|
|
||||||
VkResult result = vkCreateWin32SurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
|
VkResult result = vkCreateWin32SurfaceKHR(vk.instance, &surface_info, null, &vk.surface);
|
||||||
|
|||||||
@ -1,5 +1,25 @@
|
|||||||
import core.stdc.stdio : Printf = printf;
|
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)
|
version(linux)
|
||||||
{
|
{
|
||||||
import core.sys.posix.sys.mman;
|
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
|
struct Arena
|
||||||
{
|
{
|
||||||
u8* mem;
|
u8* mem;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user