Explorar o código

Framebuffer depth fixes

luboslenco hai 2 semanas
pai
achega
d092352f1a
Modificáronse 2 ficheiros con 5 adicións e 4 borrados
  1. 3 3
      base/sources/backends/vulkan_gpu.c
  2. 2 1
      base/sources/iron_gpu.c

+ 3 - 3
base/sources/backends/vulkan_gpu.c

@@ -552,7 +552,7 @@ static void create_swapchain() {
 		VkImageCreateInfo image = {
 			.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
 			.imageType = VK_IMAGE_TYPE_2D,
-			.format = VK_FORMAT_D16_UNORM,
+			.format = VK_FORMAT_D32_SFLOAT,
 			.extent.width = iron_window_width(),
 			.extent.height = iron_window_height(),
 			.extent.depth = 1,
@@ -560,7 +560,7 @@ static void create_swapchain() {
 			.arrayLayers = 1,
 			.samples = VK_SAMPLE_COUNT_1_BIT,
 			.tiling = VK_IMAGE_TILING_OPTIMAL,
-			.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
+			.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
 			.flags = 0,
 		};
 
@@ -580,7 +580,7 @@ static void create_swapchain() {
 		VkImageViewCreateInfo view = {
 			.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,
 			.image = framebuffer_depth.impl.image,
-			.format = VK_FORMAT_D16_UNORM,
+			.format = VK_FORMAT_D32_SFLOAT,
 			.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT,
 			.subresourceRange.baseMipLevel = 0,
 			.subresourceRange.levelCount = 1,

+ 2 - 1
base/sources/iron_gpu.c

@@ -46,14 +46,15 @@ void gpu_begin(gpu_texture_t **targets, int count, gpu_texture_t *depth_buffer,
 	if (targets == NULL) {
 		current_render_targets[0] = &framebuffers[framebuffer_index];
 		current_render_targets_count = 1;
+		current_depth_buffer = framebuffer_depth.width > 0 ? &framebuffer_depth : NULL;
 	}
 	else {
 		for (int i = 0; i < count; ++i) {
 			current_render_targets[i] = targets[i];
 		}
 		current_render_targets_count = count;
+		current_depth_buffer = depth_buffer;
 	}
-	current_depth_buffer = depth_buffer;
 
 	for (int i = 0; i < current_render_targets_count; ++i) {
 		gpu_barrier(current_render_targets[i], GPU_TEXTURE_STATE_RENDER_TARGET);