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.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);
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user