From 6724885f0acf9f2889933d0e086ae034be55fe09 Mon Sep 17 00:00:00 2001 From: hodasemi Date: Mon, 29 Apr 2024 13:40:15 +0200 Subject: [PATCH] Setup dynamic cull mode --- vulkan-rs/src/commandbuffer.rs | 4 + vulkan-rs/src/device.rs | 8 ++ vulkan-sys/src/enums/dynamicstate.rs | 133 ++++++++++++++++++++++-- vulkan-sys/src/functions/core/device.rs | 5 + 4 files changed, 143 insertions(+), 7 deletions(-) diff --git a/vulkan-rs/src/commandbuffer.rs b/vulkan-rs/src/commandbuffer.rs index 31d615d..81cdfeb 100644 --- a/vulkan-rs/src/commandbuffer.rs +++ b/vulkan-rs/src/commandbuffer.rs @@ -505,6 +505,10 @@ impl<'a> CommandBufferRecorder<'a> { self.device.cmd_set_scissor(self.buffer, 0, scissors); } + pub fn set_cull_mode(&self, cull_mode: VkCullModeFlags) { + self.device.cmd_set_cull_mode(self.buffer, cull_mode.into()); + } + pub fn draw( &self, vertex_count: u32, diff --git a/vulkan-rs/src/device.rs b/vulkan-rs/src/device.rs index b6cfbc9..d0f2816 100644 --- a/vulkan-rs/src/device.rs +++ b/vulkan-rs/src/device.rs @@ -1864,6 +1864,14 @@ impl Device { } } + #[inline] + pub fn cmd_set_cull_mode(&self, command_buffer: VkCommandBuffer, cull_mode: VkCullModeFlags) { + unsafe { + self.device_functions + .vkCmdSetCullMode(command_buffer, cull_mode) + } + } + #[inline] pub fn cmd_set_depth_bias( &self, diff --git a/vulkan-sys/src/enums/dynamicstate.rs b/vulkan-sys/src/enums/dynamicstate.rs index 6429727..a32118c 100644 --- a/vulkan-sys/src/enums/dynamicstate.rs +++ b/vulkan-sys/src/enums/dynamicstate.rs @@ -12,11 +12,130 @@ pub enum VkDynamicState { VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, - VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1_000_087_000, - VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1_000_099_000, - VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1_000_143_000, - VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1_000_164_004, - VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1_000_164_006, - VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1_000_205_001, - VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1_000_347_000, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_CULL_MODE = 1000267000, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_FRONT_FACE = 1000267001, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_STENCIL_OP = 1000267011, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, + // Provided by VK_VERSION_1_3 + VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, + // Provided by VK_NV_clip_space_w_scaling + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, + // Provided by VK_EXT_discard_rectangles + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, + // Provided by VK_EXT_discard_rectangles + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT = 1000099001, + // Provided by VK_EXT_discard_rectangles + VK_DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXT = 1000099002, + // Provided by VK_EXT_sample_locations + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, + // Provided by VK_KHR_ray_tracing_pipeline + VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, + // Provided by VK_NV_shading_rate_image + VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, + // Provided by VK_NV_shading_rate_image + VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, + // Provided by VK_NV_scissor_exclusive + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV = 1000205000, + // Provided by VK_NV_scissor_exclusive + VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, + // Provided by VK_KHR_fragment_shading_rate + VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, + // Provided by VK_EXT_vertex_input_dynamic_state + VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, + // Provided by VK_EXT_extended_dynamic_state2 + VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, + // Provided by VK_EXT_extended_dynamic_state2 + VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, + // Provided by VK_EXT_color_write_enable + VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXT = 1000455003, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_POLYGON_MODE_EXT = 1000455004, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT = 1000455005, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_SAMPLE_MASK_EXT = 1000455006, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXT = 1000455007, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT = 1000455008, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_LOGIC_OP_ENABLE_EXT = 1000455009, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT = 1000455010, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT = 1000455011, + // Provided by VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_COLOR_WRITE_MASK_EXT = 1000455012, + // Provided by VK_EXT_extended_dynamic_state3 with VK_KHR_maintenance2 or + VK_DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXT = 1000455002, + // Provided by VK_EXT_extended_dynamic_state3 with VK_EXT_transform_feedback + VK_DYNAMIC_STATE_RASTERIZATION_STREAM_EXT = 1000455013, + // Provided by VK_EXT_conservative_rasterization with VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT = 1000455014, + // Provided by VK_EXT_conservative_rasterization with VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXT = 1000455015, + // Provided by VK_EXT_depth_clip_enable with VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXT = 1000455016, + // Provided by VK_EXT_extended_dynamic_state3 with VK_EXT_sample_locations + VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT = 1000455017, + // Provided by VK_EXT_blend_operation_advanced with VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT = 1000455018, + // Provided by VK_EXT_extended_dynamic_state3 with VK_EXT_provoking_vertex + VK_DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXT = 1000455019, + // Provided by VK_EXT_extended_dynamic_state3 with VK_EXT_line_rasterization + VK_DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT = 1000455020, + // Provided by VK_EXT_extended_dynamic_state3 with VK_EXT_line_rasterization + VK_DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT = 1000455021, + // Provided by VK_EXT_depth_clip_control with VK_EXT_extended_dynamic_state3 + VK_DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXT = 1000455022, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_clip_space_w_scaling + VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NV = 1000455023, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_viewport_swizzle + VK_DYNAMIC_STATE_VIEWPORT_SWIZZLE_NV = 1000455024, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_fragment_coverage_to_color + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV = 1000455025, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_fragment_coverage_to_color + VK_DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NV = 1000455026, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_framebuffer_mixed_samples + VK_DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NV = 1000455027, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_framebuffer_mixed_samples + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NV = 1000455028, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_framebuffer_mixed_samples + VK_DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NV = 1000455029, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_shading_rate_image + VK_DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NV = 1000455030, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_representative_fragment_test + VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV = 1000455031, + // Provided by VK_EXT_extended_dynamic_state3 with VK_NV_coverage_reduction_mode + VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV = 1000455032, + // Provided by VK_EXT_attachment_feedback_loop_dynamic_state + VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT = 1000524000, + // Provided by VK_KHR_line_rasterization + VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = 1000259000, } diff --git a/vulkan-sys/src/functions/core/device.rs b/vulkan-sys/src/functions/core/device.rs index 6c589b6..d5f4876 100644 --- a/vulkan-sys/src/functions/core/device.rs +++ b/vulkan-sys/src/functions/core/device.rs @@ -399,6 +399,11 @@ load_function_ptrs!(DeviceFunctions, { pScissors: *const VkRect2D ) -> (), + vkCmdSetCullMode( + commandBuffer: VkCommandBuffer, + cullMode: VkCullModeFlags + ) -> (), + vkCmdSetLineWidth(commandBuffer: VkCommandBuffer, lineWidth: f32) -> (), vkCmdSetDepthBias(