From: Josh Simmons Date: Sat, 5 Apr 2025 21:07:56 +0000 (+0200) Subject: shark-shaders: Omit image format in uniform bindings X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=6bf72e777b1ea95ebe7ea01ab046b4172789b310;p=josh%2Fnarcissus shark-shaders: Omit image format in uniform bindings Avoids a validation issue when binding a swapchain image in a different format. --- diff --git a/engine/narcissus-gpu/src/backend/vulkan/mod.rs b/engine/narcissus-gpu/src/backend/vulkan/mod.rs index 9ef4522..7477cdc 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/mod.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/mod.rs @@ -591,16 +591,18 @@ impl VulkanDevice { let mut enabled_features: Box = default(); - enabled_features.set_dynamic_rendering(true); - enabled_features.set_synchronization2(true); - enabled_features.set_subgroup_size_control(true); - enabled_features.set_compute_full_subgroups(true); - enabled_features.set_maintenance4(true); enabled_features.set_buffer_device_address(true); - enabled_features.set_timeline_semaphore(true); - enabled_features.set_descriptor_indexing(true); + enabled_features.set_compute_full_subgroups(true); enabled_features.set_descriptor_binding_partially_bound(true); + enabled_features.set_descriptor_indexing(true); enabled_features.set_draw_indirect_count(true); + enabled_features.set_dynamic_rendering(true); + enabled_features.set_maintenance4(true); + enabled_features.set_shader_storage_image_read_without_format(true); + enabled_features.set_shader_storage_image_write_without_format(true); + enabled_features.set_subgroup_size_control(true); + enabled_features.set_synchronization2(true); + enabled_features.set_timeline_semaphore(true); enabled_features.set_uniform_buffer_standard_layout(true); if wsi_support.swapchain_maintenance1() { diff --git a/engine/narcissus-gpu/src/backend/vulkan/physical_device_features.rs b/engine/narcissus-gpu/src/backend/vulkan/physical_device_features.rs index 66f3299..0fb71b7 100644 --- a/engine/narcissus-gpu/src/backend/vulkan/physical_device_features.rs +++ b/engine/narcissus-gpu/src/backend/vulkan/physical_device_features.rs @@ -10,6 +10,22 @@ pub struct VulkanPhysicalDeviceFeatures { } impl VulkanPhysicalDeviceFeatures { + pub fn compute_full_subgroups(&self) -> bool { + self.features_13.compute_full_subgroups == vk::Bool32::True + } + + pub fn descriptor_binding_partially_bound(&self) -> bool { + self.features_12.descriptor_binding_partially_bound == vk::Bool32::True + } + + pub fn descriptor_indexing(&self) -> bool { + self.features_12.descriptor_indexing == vk::Bool32::True + } + + pub fn draw_indirect_count(&self) -> bool { + self.features_12.draw_indirect_count == vk::Bool32::True + } + pub fn dynamic_rendering(&self) -> bool { self.features_13.dynamic_rendering == vk::Bool32::True } @@ -22,76 +38,72 @@ impl VulkanPhysicalDeviceFeatures { self.features_13.maintenance4 == vk::Bool32::True } - pub fn compute_full_subgroups(&self) -> bool { - self.features_13.compute_full_subgroups == vk::Bool32::True - } - pub fn timeline_semaphore(&self) -> bool { self.features_12.timeline_semaphore == vk::Bool32::True } - pub fn descriptor_indexing(&self) -> bool { - self.features_12.descriptor_indexing == vk::Bool32::True - } - - pub fn descriptor_binding_partially_bound(&self) -> bool { - self.features_12.descriptor_binding_partially_bound == vk::Bool32::True + pub fn uniform_buffer_standard_layout(&self) -> bool { + self.features_12.uniform_buffer_standard_layout == vk::Bool32::True } - pub fn draw_indirect_count(&self) -> bool { - self.features_12.draw_indirect_count == vk::Bool32::True + pub fn set_buffer_device_address(&mut self, arg: bool) { + self.features_12.buffer_device_address = vk::Bool32::from(arg) } - pub fn uniform_buffer_standard_layout(&self) -> bool { - self.features_12.uniform_buffer_standard_layout == vk::Bool32::True + pub fn set_compute_full_subgroups(&mut self, arg: bool) { + self.features_13.compute_full_subgroups = vk::Bool32::from(arg) } - pub fn set_dynamic_rendering(&mut self, arg: bool) { - self.features_13.dynamic_rendering = vk::Bool32::from(arg) + pub fn set_descriptor_binding_partially_bound(&mut self, arg: bool) { + self.features_12.descriptor_binding_partially_bound = vk::Bool32::from(arg) } - pub fn set_synchronization2(&mut self, arg: bool) { - self.features_13.synchronization2 = vk::Bool32::from(arg) + pub fn set_descriptor_indexing(&mut self, arg: bool) { + self.features_12.descriptor_indexing = vk::Bool32::from(arg) } - pub fn set_subgroup_size_control(&mut self, arg: bool) { - self.features_13.subgroup_size_control = vk::Bool32::from(arg) + pub fn set_draw_indirect_count(&mut self, arg: bool) { + self.features_12.draw_indirect_count = vk::Bool32::from(arg) } - pub fn set_compute_full_subgroups(&mut self, arg: bool) { - self.features_13.compute_full_subgroups = vk::Bool32::from(arg) + pub fn set_dynamic_rendering(&mut self, arg: bool) { + self.features_13.dynamic_rendering = vk::Bool32::from(arg) } pub fn set_maintenance4(&mut self, arg: bool) { self.features_13.maintenance4 = vk::Bool32::from(arg) } - pub fn set_buffer_device_address(&mut self, arg: bool) { - self.features_12.buffer_device_address = vk::Bool32::from(arg) + pub fn set_shader_storage_image_read_without_format(&mut self, arg: bool) { + self.features + .features + .shader_storage_image_read_without_format = vk::Bool32::from(arg) } - pub fn set_timeline_semaphore(&mut self, arg: bool) { - self.features_12.timeline_semaphore = vk::Bool32::from(arg) + pub fn set_shader_storage_image_write_without_format(&mut self, arg: bool) { + self.features + .features + .shader_storage_image_write_without_format = vk::Bool32::from(arg) } - pub fn set_descriptor_indexing(&mut self, arg: bool) { - self.features_12.descriptor_indexing = vk::Bool32::from(arg) + pub fn set_subgroup_size_control(&mut self, arg: bool) { + self.features_13.subgroup_size_control = vk::Bool32::from(arg) } - pub fn set_descriptor_binding_partially_bound(&mut self, arg: bool) { - self.features_12.descriptor_binding_partially_bound = vk::Bool32::from(arg) + pub fn set_swapchain_maintenance1(&mut self, arg: bool) { + self.features_swapchain_maintenance1.swapchain_maintenance1 = vk::Bool32::from(arg) } - pub fn set_draw_indirect_count(&mut self, arg: bool) { - self.features_12.draw_indirect_count = vk::Bool32::from(arg) + pub fn set_synchronization2(&mut self, arg: bool) { + self.features_13.synchronization2 = vk::Bool32::from(arg) } - pub fn set_uniform_buffer_standard_layout(&mut self, arg: bool) { - self.features_12.uniform_buffer_standard_layout = vk::Bool32::from(arg) + pub fn set_timeline_semaphore(&mut self, arg: bool) { + self.features_12.timeline_semaphore = vk::Bool32::from(arg) } - pub fn set_swapchain_maintenance1(&mut self, arg: bool) { - self.features_swapchain_maintenance1.swapchain_maintenance1 = vk::Bool32::from(arg) + pub fn set_uniform_buffer_standard_layout(&mut self, arg: bool) { + self.features_12.uniform_buffer_standard_layout = vk::Bool32::from(arg) } pub fn link(&mut self) -> &mut vk::PhysicalDeviceFeatures2 { diff --git a/title/shark-shaders/shaders/bindings_compute.h b/title/shark-shaders/shaders/bindings_compute.h index 5792348..1eb1fd3 100644 --- a/title/shark-shaders/shaders/bindings_compute.h +++ b/title/shark-shaders/shaders/bindings_compute.h @@ -8,9 +8,9 @@ const uint SAMPLER_COUNT = 2; layout (set = 0, binding = 0) uniform sampler samplers[SAMPLER_COUNT]; layout (set = 0, binding = 1) uniform texture3D tony_mc_mapface_lut; layout (set = 0, binding = 2) uniform texture2D glyph_atlas; -layout (set = 0, binding = 3, rgba16f) uniform writeonly image2D ui_layer_write; -layout (set = 0, binding = 3, rgba16f) uniform readonly image2D ui_layer_read; -layout (set = 0, binding = 4, rgba16f) uniform readonly image2D color_layer; -layout (set = 0, binding = 5, rgba16f) uniform writeonly image2D composited_output; +layout (set = 0, binding = 3) uniform writeonly image2D ui_layer_write; +layout (set = 0, binding = 3) uniform readonly image2D ui_layer_read; +layout (set = 0, binding = 4) uniform readonly image2D color_layer; +layout (set = 0, binding = 5) uniform writeonly image2D composited_output; #endif diff --git a/title/shark-shaders/shaders/composite.comp b/title/shark-shaders/shaders/composite.comp index 8c153c8..e5319a2 100644 --- a/title/shark-shaders/shaders/composite.comp +++ b/title/shark-shaders/shaders/composite.comp @@ -5,6 +5,7 @@ #extension GL_EXT_buffer_reference : require #extension GL_EXT_buffer_reference2 : require #extension GL_EXT_scalar_block_layout : require +#extension GL_EXT_shader_image_load_formatted : require #include "bindings_compute.h" #include "draw_2d.h" diff --git a/title/shark-shaders/shaders/draw_2d_rasterize.comp b/title/shark-shaders/shaders/draw_2d_rasterize.comp index a88124e..09a7930 100644 --- a/title/shark-shaders/shaders/draw_2d_rasterize.comp +++ b/title/shark-shaders/shaders/draw_2d_rasterize.comp @@ -2,10 +2,11 @@ #extension GL_GOOGLE_include_directive : require +#extension GL_EXT_control_flow_attributes : require #extension GL_EXT_buffer_reference : require #extension GL_EXT_buffer_reference2 : require #extension GL_EXT_scalar_block_layout : require -#extension GL_EXT_control_flow_attributes : require +#extension GL_EXT_shader_image_load_formatted : require #extension GL_KHR_shader_subgroup_vote : require #extension GL_KHR_shader_subgroup_ballot : require