|
|
|
@ -152,6 +152,25 @@ typedef struct VulkanContextStruct {
|
|
|
|
|
VkDevice device;
|
|
|
|
|
Queues queues;
|
|
|
|
|
|
|
|
|
|
// G Buffer
|
|
|
|
|
GPUPage* g_buffer_page;
|
|
|
|
|
VkRenderPass g_renderpass;
|
|
|
|
|
VkFramebuffer g_framebuffer;
|
|
|
|
|
|
|
|
|
|
GPUImage g_image_position;
|
|
|
|
|
GPUImage g_image_normal;
|
|
|
|
|
GPUImage g_image_depth;
|
|
|
|
|
|
|
|
|
|
VkImageView g_image_view_position;
|
|
|
|
|
VkImageView g_image_view_normal;
|
|
|
|
|
VkImageView g_image_view_depth;
|
|
|
|
|
|
|
|
|
|
VkFormat g_image_format_position;
|
|
|
|
|
VkFormat g_image_format_normal;
|
|
|
|
|
VkFormat g_image_format_depth;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Present Swapchain
|
|
|
|
|
VkSurfaceKHR surface;
|
|
|
|
|
|
|
|
|
|
SwapchainDetails swapchain_details;
|
|
|
|
@ -2375,6 +2394,47 @@ VulkanContext* init_vulkan(GLFWwindow* window, uint32_t max_frames_in_flight) {
|
|
|
|
|
context->in_flight_fences = if_fences;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = gpu_page_allocate(context->device, context->memories, 1000000, 0xFFFFFFFF, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT, &context->g_buffer_page);
|
|
|
|
|
if(result != VK_SUCCESS) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VkImageCreateInfo g_pos_info = {
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
|
|
|
|
|
.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
|
|
|
|
|
.imageType = VK_IMAGE_TYPE_2D,
|
|
|
|
|
.extent = {
|
|
|
|
|
.width = context->swapchain_extent.width,
|
|
|
|
|
.height = context->swapchain_extent.height,
|
|
|
|
|
.depth = 1,
|
|
|
|
|
},
|
|
|
|
|
.mipLevels = 1,
|
|
|
|
|
.arrayLayers = 1,
|
|
|
|
|
.samples = VK_SAMPLE_COUNT_1_BIT,
|
|
|
|
|
.tiling = VK_IMAGE_TILING_OPTIMAL,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
result = gpu_image_malloc(context->device, context->g_buffer_page, &g_pos_info, &context->g_image_position);
|
|
|
|
|
if(result != VK_SUCCESS) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VkImageViewCreateInfo g_pos_view_info = {
|
|
|
|
|
.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
|
|
|
|
|
.image = context->g_image_position.handle,
|
|
|
|
|
.viewType = VK_IMAGE_VIEW_TYPE_2D,
|
|
|
|
|
.format = VK_FORMAT_R16G16B16A16_SFLOAT,
|
|
|
|
|
.subresourceRange = {
|
|
|
|
|
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
|
|
|
|
.baseMipLevel = 0,
|
|
|
|
|
.levelCount = 1,
|
|
|
|
|
.baseArrayLayer = 0,
|
|
|
|
|
.layerCount = 1,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
result = vkCreateImageView(context->device, &g_pos_view_info, 0, &context->g_image_view_position);
|
|
|
|
|
|
|
|
|
|
return context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|