1 use crate::vk; 2 use crate::{Device, Instance}; 3 use std::ffi::CStr; 4 use std::mem; 5 6 /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_extended_dynamic_state3.html> 7 #[derive(Clone)] 8 pub struct ExtendedDynamicState3 { 9 fp: vk::ExtExtendedDynamicState3Fn, 10 } 11 12 impl ExtendedDynamicState3 { new(instance: &Instance, device: &Device) -> Self13 pub fn new(instance: &Instance, device: &Device) -> Self { 14 let fp = vk::ExtExtendedDynamicState3Fn::load(|name| unsafe { 15 mem::transmute(instance.get_device_proc_addr(device.handle(), name.as_ptr())) 16 }); 17 Self { fp } 18 } 19 20 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetTessellationDomainOriginEXT.html> 21 #[inline] cmd_set_tessellation_domain_origin( &self, command_buffer: vk::CommandBuffer, domain_origin: vk::TessellationDomainOrigin, )22 pub unsafe fn cmd_set_tessellation_domain_origin( 23 &self, 24 command_buffer: vk::CommandBuffer, 25 domain_origin: vk::TessellationDomainOrigin, 26 ) { 27 (self.fp.cmd_set_tessellation_domain_origin_ext)(command_buffer, domain_origin) 28 } 29 30 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClampEnableEXT.html> 31 #[inline] cmd_set_depth_clamp_enable( &self, command_buffer: vk::CommandBuffer, depth_clamp_enable: bool, )32 pub unsafe fn cmd_set_depth_clamp_enable( 33 &self, 34 command_buffer: vk::CommandBuffer, 35 depth_clamp_enable: bool, 36 ) { 37 (self.fp.cmd_set_depth_clamp_enable_ext)(command_buffer, depth_clamp_enable.into()) 38 } 39 40 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetPolygonModeEXT.html> 41 #[inline] cmd_set_polygon_mode( &self, command_buffer: vk::CommandBuffer, polygon_mode: vk::PolygonMode, )42 pub unsafe fn cmd_set_polygon_mode( 43 &self, 44 command_buffer: vk::CommandBuffer, 45 polygon_mode: vk::PolygonMode, 46 ) { 47 (self.fp.cmd_set_polygon_mode_ext)(command_buffer, polygon_mode) 48 } 49 50 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationSamplesEXT.html> 51 #[inline] cmd_set_rasterization_samples( &self, command_buffer: vk::CommandBuffer, rasterization_samples: vk::SampleCountFlags, )52 pub unsafe fn cmd_set_rasterization_samples( 53 &self, 54 command_buffer: vk::CommandBuffer, 55 rasterization_samples: vk::SampleCountFlags, 56 ) { 57 (self.fp.cmd_set_rasterization_samples_ext)(command_buffer, rasterization_samples) 58 } 59 60 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleMaskEXT.html> 61 #[inline] cmd_set_sample_mask( &self, command_buffer: vk::CommandBuffer, samples: vk::SampleCountFlags, sample_mask: &[vk::SampleMask], )62 pub unsafe fn cmd_set_sample_mask( 63 &self, 64 command_buffer: vk::CommandBuffer, 65 samples: vk::SampleCountFlags, 66 sample_mask: &[vk::SampleMask], 67 ) { 68 assert!( 69 samples.as_raw().is_power_of_two(), 70 "Only one SampleCount bit must be set" 71 ); 72 assert_eq!(samples.as_raw() as usize / 32, sample_mask.len()); 73 (self.fp.cmd_set_sample_mask_ext)(command_buffer, samples, sample_mask.as_ptr()) 74 } 75 76 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToCoverageEnableEXT.html> 77 #[inline] cmd_set_alpha_to_coverage_enable( &self, command_buffer: vk::CommandBuffer, alpha_to_coverage_enable: bool, )78 pub unsafe fn cmd_set_alpha_to_coverage_enable( 79 &self, 80 command_buffer: vk::CommandBuffer, 81 alpha_to_coverage_enable: bool, 82 ) { 83 (self.fp.cmd_set_alpha_to_coverage_enable_ext)( 84 command_buffer, 85 alpha_to_coverage_enable.into(), 86 ) 87 } 88 89 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetAlphaToOneEnableEXT.html> 90 #[inline] cmd_set_alpha_to_one_enable( &self, command_buffer: vk::CommandBuffer, alpha_to_one_enable: bool, )91 pub unsafe fn cmd_set_alpha_to_one_enable( 92 &self, 93 command_buffer: vk::CommandBuffer, 94 alpha_to_one_enable: bool, 95 ) { 96 (self.fp.cmd_set_alpha_to_one_enable_ext)(command_buffer, alpha_to_one_enable.into()) 97 } 98 99 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLogicOpEnableEXT.html> 100 #[inline] cmd_set_logic_op_enable( &self, command_buffer: vk::CommandBuffer, logic_op_enable: bool, )101 pub unsafe fn cmd_set_logic_op_enable( 102 &self, 103 command_buffer: vk::CommandBuffer, 104 logic_op_enable: bool, 105 ) { 106 (self.fp.cmd_set_logic_op_enable_ext)(command_buffer, logic_op_enable.into()) 107 } 108 109 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEnableEXT.html> 110 #[inline] cmd_set_color_blend_enable( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_enables: &[vk::Bool32], )111 pub unsafe fn cmd_set_color_blend_enable( 112 &self, 113 command_buffer: vk::CommandBuffer, 114 first_attachment: u32, 115 color_blend_enables: &[vk::Bool32], 116 ) { 117 (self.fp.cmd_set_color_blend_enable_ext)( 118 command_buffer, 119 first_attachment, 120 color_blend_enables.len() as u32, 121 color_blend_enables.as_ptr(), 122 ) 123 } 124 125 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendEquationEXT.html> 126 #[inline] cmd_set_color_blend_equation( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_equations: &[vk::ColorBlendEquationEXT], )127 pub unsafe fn cmd_set_color_blend_equation( 128 &self, 129 command_buffer: vk::CommandBuffer, 130 first_attachment: u32, 131 color_blend_equations: &[vk::ColorBlendEquationEXT], 132 ) { 133 (self.fp.cmd_set_color_blend_equation_ext)( 134 command_buffer, 135 first_attachment, 136 color_blend_equations.len() as u32, 137 color_blend_equations.as_ptr(), 138 ) 139 } 140 141 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorWriteMaskEXT.html> 142 #[inline] cmd_set_color_write_mask( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_write_masks: &[vk::ColorComponentFlags], )143 pub unsafe fn cmd_set_color_write_mask( 144 &self, 145 command_buffer: vk::CommandBuffer, 146 first_attachment: u32, 147 color_write_masks: &[vk::ColorComponentFlags], 148 ) { 149 (self.fp.cmd_set_color_write_mask_ext)( 150 command_buffer, 151 first_attachment, 152 color_write_masks.len() as u32, 153 color_write_masks.as_ptr(), 154 ) 155 } 156 157 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRasterizationStreamEXT.html> 158 #[inline] cmd_set_rasterization_stream( &self, command_buffer: vk::CommandBuffer, rasterization_stream: u32, )159 pub unsafe fn cmd_set_rasterization_stream( 160 &self, 161 command_buffer: vk::CommandBuffer, 162 rasterization_stream: u32, 163 ) { 164 (self.fp.cmd_set_rasterization_stream_ext)(command_buffer, rasterization_stream) 165 } 166 167 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetConservativeRasterizationModeEXT.html> 168 #[inline] cmd_set_conservative_rasterization_mode( &self, command_buffer: vk::CommandBuffer, conservative_rasterization_mode: vk::ConservativeRasterizationModeEXT, )169 pub unsafe fn cmd_set_conservative_rasterization_mode( 170 &self, 171 command_buffer: vk::CommandBuffer, 172 conservative_rasterization_mode: vk::ConservativeRasterizationModeEXT, 173 ) { 174 (self.fp.cmd_set_conservative_rasterization_mode_ext)( 175 command_buffer, 176 conservative_rasterization_mode, 177 ) 178 } 179 180 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetExtraPrimitiveOverestimationSizeEXT.html> 181 #[inline] cmd_set_extra_primitive_overestimation_size( &self, command_buffer: vk::CommandBuffer, extra_primitive_overestimation_size: f32, )182 pub unsafe fn cmd_set_extra_primitive_overestimation_size( 183 &self, 184 command_buffer: vk::CommandBuffer, 185 extra_primitive_overestimation_size: f32, 186 ) { 187 (self.fp.cmd_set_extra_primitive_overestimation_size_ext)( 188 command_buffer, 189 extra_primitive_overestimation_size, 190 ) 191 } 192 193 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipEnableEXT.html> 194 #[inline] cmd_set_depth_clip_enable( &self, command_buffer: vk::CommandBuffer, depth_clip_enable: bool, )195 pub unsafe fn cmd_set_depth_clip_enable( 196 &self, 197 command_buffer: vk::CommandBuffer, 198 depth_clip_enable: bool, 199 ) { 200 (self.fp.cmd_set_depth_clip_enable_ext)(command_buffer, depth_clip_enable.into()) 201 } 202 203 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetSampleLocationsEnableEXT.html> 204 #[inline] cmd_set_sample_locations_enable( &self, command_buffer: vk::CommandBuffer, sample_locations_enable: bool, )205 pub unsafe fn cmd_set_sample_locations_enable( 206 &self, 207 command_buffer: vk::CommandBuffer, 208 sample_locations_enable: bool, 209 ) { 210 (self.fp.cmd_set_sample_locations_enable_ext)( 211 command_buffer, 212 sample_locations_enable.into(), 213 ) 214 } 215 216 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetColorBlendAdvancedEXT.html> 217 #[inline] cmd_set_color_blend_advanced( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, color_blend_advanced: &[vk::ColorBlendAdvancedEXT], )218 pub unsafe fn cmd_set_color_blend_advanced( 219 &self, 220 command_buffer: vk::CommandBuffer, 221 first_attachment: u32, 222 color_blend_advanced: &[vk::ColorBlendAdvancedEXT], 223 ) { 224 (self.fp.cmd_set_color_blend_advanced_ext)( 225 command_buffer, 226 first_attachment, 227 color_blend_advanced.len() as u32, 228 color_blend_advanced.as_ptr(), 229 ) 230 } 231 232 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetProvokingVertexModeEXT.html> 233 #[inline] cmd_set_provoking_vertex_mode( &self, command_buffer: vk::CommandBuffer, provoking_vertex_mode: vk::ProvokingVertexModeEXT, )234 pub unsafe fn cmd_set_provoking_vertex_mode( 235 &self, 236 command_buffer: vk::CommandBuffer, 237 provoking_vertex_mode: vk::ProvokingVertexModeEXT, 238 ) { 239 (self.fp.cmd_set_provoking_vertex_mode_ext)(command_buffer, provoking_vertex_mode) 240 } 241 242 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineRasterizationModeEXT.html> 243 #[inline] cmd_set_line_rasterization_mode( &self, command_buffer: vk::CommandBuffer, line_rasterization_mode: vk::LineRasterizationModeEXT, )244 pub unsafe fn cmd_set_line_rasterization_mode( 245 &self, 246 command_buffer: vk::CommandBuffer, 247 line_rasterization_mode: vk::LineRasterizationModeEXT, 248 ) { 249 (self.fp.cmd_set_line_rasterization_mode_ext)(command_buffer, line_rasterization_mode) 250 } 251 252 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetLineStippleEnableEXT.html> 253 #[inline] cmd_set_line_stipple_enable( &self, command_buffer: vk::CommandBuffer, stippled_line_enable: bool, )254 pub unsafe fn cmd_set_line_stipple_enable( 255 &self, 256 command_buffer: vk::CommandBuffer, 257 stippled_line_enable: bool, 258 ) { 259 (self.fp.cmd_set_line_stipple_enable_ext)(command_buffer, stippled_line_enable.into()) 260 } 261 262 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetDepthClipNegativeOneToOneEXT.html> 263 #[inline] cmd_set_depth_clip_negative_one_to_one( &self, command_buffer: vk::CommandBuffer, negative_one_to_one: bool, )264 pub unsafe fn cmd_set_depth_clip_negative_one_to_one( 265 &self, 266 command_buffer: vk::CommandBuffer, 267 negative_one_to_one: bool, 268 ) { 269 (self.fp.cmd_set_depth_clip_negative_one_to_one_ext)( 270 command_buffer, 271 negative_one_to_one.into(), 272 ) 273 } 274 275 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportWScalingEnableNV.html> 276 #[inline] cmd_set_viewport_w_scaling_enable_nv( &self, command_buffer: vk::CommandBuffer, viewport_w_scaling_enable: bool, )277 pub unsafe fn cmd_set_viewport_w_scaling_enable_nv( 278 &self, 279 command_buffer: vk::CommandBuffer, 280 viewport_w_scaling_enable: bool, 281 ) { 282 (self.fp.cmd_set_viewport_w_scaling_enable_nv)( 283 command_buffer, 284 viewport_w_scaling_enable.into(), 285 ) 286 } 287 288 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetViewportSwizzleNV.html> 289 #[inline] cmd_set_viewport_swizzle_nv( &self, command_buffer: vk::CommandBuffer, first_attachment: u32, viewport_swizzles: &[vk::ViewportSwizzleNV], )290 pub unsafe fn cmd_set_viewport_swizzle_nv( 291 &self, 292 command_buffer: vk::CommandBuffer, 293 first_attachment: u32, 294 viewport_swizzles: &[vk::ViewportSwizzleNV], 295 ) { 296 (self.fp.cmd_set_viewport_swizzle_nv)( 297 command_buffer, 298 first_attachment, 299 viewport_swizzles.len() as u32, 300 viewport_swizzles.as_ptr(), 301 ) 302 } 303 304 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorEnableNV.html> 305 #[inline] cmd_set_coverage_to_color_enable_nv( &self, command_buffer: vk::CommandBuffer, coverage_to_color_enable: bool, )306 pub unsafe fn cmd_set_coverage_to_color_enable_nv( 307 &self, 308 command_buffer: vk::CommandBuffer, 309 coverage_to_color_enable: bool, 310 ) { 311 (self.fp.cmd_set_coverage_to_color_enable_nv)( 312 command_buffer, 313 coverage_to_color_enable.into(), 314 ) 315 } 316 317 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageToColorLocationNV.html> 318 #[inline] cmd_set_coverage_to_color_location_nv( &self, command_buffer: vk::CommandBuffer, coverage_to_color_location: u32, )319 pub unsafe fn cmd_set_coverage_to_color_location_nv( 320 &self, 321 command_buffer: vk::CommandBuffer, 322 coverage_to_color_location: u32, 323 ) { 324 (self.fp.cmd_set_coverage_to_color_location_nv)(command_buffer, coverage_to_color_location) 325 } 326 327 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationModeNV.html> 328 #[inline] cmd_set_coverage_modulation_mode_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_mode: vk::CoverageModulationModeNV, )329 pub unsafe fn cmd_set_coverage_modulation_mode_nv( 330 &self, 331 command_buffer: vk::CommandBuffer, 332 coverage_modulation_mode: vk::CoverageModulationModeNV, 333 ) { 334 (self.fp.cmd_set_coverage_modulation_mode_nv)(command_buffer, coverage_modulation_mode) 335 } 336 337 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableEnableNV.html> 338 #[inline] cmd_set_coverage_modulation_table_enable_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_table_enable: bool, )339 pub unsafe fn cmd_set_coverage_modulation_table_enable_nv( 340 &self, 341 command_buffer: vk::CommandBuffer, 342 coverage_modulation_table_enable: bool, 343 ) { 344 (self.fp.cmd_set_coverage_modulation_table_enable_nv)( 345 command_buffer, 346 coverage_modulation_table_enable.into(), 347 ) 348 } 349 350 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageModulationTableNV.html> 351 #[inline] cmd_set_coverage_modulation_table_nv( &self, command_buffer: vk::CommandBuffer, coverage_modulation_table: &[f32], )352 pub unsafe fn cmd_set_coverage_modulation_table_nv( 353 &self, 354 command_buffer: vk::CommandBuffer, 355 coverage_modulation_table: &[f32], 356 ) { 357 (self.fp.cmd_set_coverage_modulation_table_nv)( 358 command_buffer, 359 coverage_modulation_table.len() as u32, 360 coverage_modulation_table.as_ptr(), 361 ) 362 } 363 364 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetShadingRateImageEnableNV.html> 365 #[inline] cmd_set_shading_rate_image_enable_nv( &self, command_buffer: vk::CommandBuffer, shading_rate_image_enable: bool, )366 pub unsafe fn cmd_set_shading_rate_image_enable_nv( 367 &self, 368 command_buffer: vk::CommandBuffer, 369 shading_rate_image_enable: bool, 370 ) { 371 (self.fp.cmd_set_shading_rate_image_enable_nv)( 372 command_buffer, 373 shading_rate_image_enable.into(), 374 ) 375 } 376 377 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetRepresentativeFragmentTestEnableNV.html> 378 #[inline] cmd_set_representative_fragment_test_enable_nv( &self, command_buffer: vk::CommandBuffer, representative_fragment_test_enable: bool, )379 pub unsafe fn cmd_set_representative_fragment_test_enable_nv( 380 &self, 381 command_buffer: vk::CommandBuffer, 382 representative_fragment_test_enable: bool, 383 ) { 384 (self.fp.cmd_set_representative_fragment_test_enable_nv)( 385 command_buffer, 386 representative_fragment_test_enable.into(), 387 ) 388 } 389 390 /// <https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/vkCmdSetCoverageReductionModeNV.html> 391 #[inline] cmd_set_coverage_reduction_mode_nv( &self, command_buffer: vk::CommandBuffer, coverage_reduction_mode: vk::CoverageReductionModeNV, )392 pub unsafe fn cmd_set_coverage_reduction_mode_nv( 393 &self, 394 command_buffer: vk::CommandBuffer, 395 coverage_reduction_mode: vk::CoverageReductionModeNV, 396 ) { 397 (self.fp.cmd_set_coverage_reduction_mode_nv)(command_buffer, coverage_reduction_mode) 398 } 399 400 #[inline] name() -> &'static CStr401 pub const fn name() -> &'static CStr { 402 vk::ExtExtendedDynamicState3Fn::name() 403 } 404 405 #[inline] fp(&self) -> &vk::ExtExtendedDynamicState3Fn406 pub fn fp(&self) -> &vk::ExtExtendedDynamicState3Fn { 407 &self.fp 408 } 409 } 410