- 
                Notifications
    
You must be signed in to change notification settings  - Fork 80
 
add vulkan indirect command structs #34
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
    
  
     Merged
                    Changes from all commits
      Commits
    
    
            Show all changes
          
          
            4 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      86f16a3
              
                indirect command structs: added, mostly copied from ash
              
              
                Firestar99 6ea946e
              
                indirect command structs: fixed doc lints
              
              
                Firestar99 6df3860
              
                project: add optional bytemuck dependency to mark structs as Pod
              
              
                Firestar99 6cc7f95
              
                bless compiletest
              
              
                Firestar99 File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
      
      Oops, something went wrong.
      
    
  
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,187 @@ | ||
| //! Indirect command structs from vulkan | ||
| 
     | 
||
| use glam::UVec3; | ||
| 
     | 
||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceSize.html> | ||
| pub type DeviceSize = u64; | ||
| 
     | 
||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDeviceAddress.html> | ||
| pub type DeviceAddress = u64; | ||
| 
     | 
||
| /// Structure specifying an indirect drawing command | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawIndirectCommand.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] | ||
| pub struct DrawIndirectCommand { | ||
| /// vertexCount is the number of vertices to draw. | ||
| pub vertex_count: u32, | ||
| /// instanceCount is the number of instances to draw. | ||
| pub instance_count: u32, | ||
| /// firstVertex is the index of the first vertex to draw. | ||
| pub first_vertex: u32, | ||
| /// firstInstance is the instance ID of the first instance to draw. | ||
| pub first_instance: u32, | ||
| } | ||
| 
     | 
||
| /// Structure specifying an indexed indirect drawing command | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawIndexedIndirectCommand.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] | ||
| pub struct DrawIndexedIndirectCommand { | ||
| /// indexCount is the number of vertices to draw. | ||
| pub index_count: u32, | ||
| /// instanceCount is the number of instances to draw. | ||
| pub instance_count: u32, | ||
| /// firstIndex is the base index within the index buffer. | ||
| pub first_index: u32, | ||
| /// vertexOffset is the value added to the vertex index before indexing into the vertex buffer. | ||
| pub vertex_offset: i32, | ||
| /// firstInstance is the instance ID of the first instance to draw. | ||
| pub first_instance: u32, | ||
| } | ||
| 
     | 
||
| /// Structure specifying an indirect dispatching command | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDispatchIndirectCommand.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] | ||
| pub struct DispatchIndirectCommand { | ||
| /// x is the number of local workgroups to dispatch in the X dimension. | ||
| pub x: u32, | ||
| /// y is the number of local workgroups to dispatch in the Y dimension. | ||
| pub y: u32, | ||
| /// z is the number of local workgroups to dispatch in the Z dimension. | ||
| pub z: u32, | ||
| } | ||
| 
     | 
||
| impl From<UVec3> for DispatchIndirectCommand { | ||
| fn from(v: UVec3) -> Self { | ||
| Self { | ||
| x: v.x, | ||
| y: v.y, | ||
| z: v.z, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| impl From<DispatchIndirectCommand> for UVec3 { | ||
| fn from(v: DispatchIndirectCommand) -> Self { | ||
| Self { | ||
| x: v.x, | ||
| y: v.y, | ||
| z: v.z, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| /// Structure specifying a mesh tasks draw indirect command | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDrawMeshTasksIndirectCommandEXT.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] | ||
| pub struct DrawMeshTasksIndirectCommandEXT { | ||
| /// groupCountX is the number of local workgroups to dispatch in the X dimension. | ||
| pub group_count_x: u32, | ||
| /// groupCountY is the number of local workgroups to dispatch in the Y dimension. | ||
| pub group_count_y: u32, | ||
| /// groupCountZ is the number of local workgroups to dispatch in the Z dimension. | ||
| pub group_count_z: u32, | ||
| } | ||
| 
     | 
||
| impl From<UVec3> for DrawMeshTasksIndirectCommandEXT { | ||
| fn from(v: UVec3) -> Self { | ||
| Self { | ||
| group_count_x: v.x, | ||
| group_count_y: v.y, | ||
| group_count_z: v.z, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| impl From<DrawMeshTasksIndirectCommandEXT> for UVec3 { | ||
| fn from(v: DrawMeshTasksIndirectCommandEXT) -> Self { | ||
| Self { | ||
| x: v.group_count_x, | ||
| y: v.group_count_y, | ||
| z: v.group_count_z, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| /// Structure specifying the parameters of an indirect ray tracing command | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTraceRaysIndirectCommandKHR.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::Zeroable, bytemuck::Pod))] | ||
| pub struct TraceRaysIndirectCommandKHR { | ||
| /// width is the width of the ray trace query dimensions. | ||
| pub width: u32, | ||
| /// height is height of the ray trace query dimensions. | ||
| pub height: u32, | ||
| /// depth is depth of the ray trace query dimensions. | ||
| pub depth: u32, | ||
| } | ||
| 
     | 
||
| impl From<UVec3> for TraceRaysIndirectCommandKHR { | ||
| fn from(v: UVec3) -> Self { | ||
| Self { | ||
| width: v.x, | ||
| height: v.y, | ||
| depth: v.z, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| impl From<TraceRaysIndirectCommandKHR> for UVec3 { | ||
| fn from(v: TraceRaysIndirectCommandKHR) -> Self { | ||
| Self { | ||
| x: v.width, | ||
| y: v.height, | ||
| z: v.depth, | ||
| } | ||
| } | ||
| } | ||
| 
     | 
||
| /// Structure specifying the parameters of an indirect trace ray command with indirect shader binding tables | ||
| /// | ||
| /// <https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkTraceRaysIndirectCommand2KHR.html> | ||
| #[repr(C)] | ||
| #[derive(Copy, Clone, Debug, Default)] | ||
| #[cfg_attr(feature = "bytemuck", derive(bytemuck::AnyBitPattern))] | ||
| pub struct TraceRaysIndirectCommand2KHR { | ||
| /// raygenShaderRecordAddress is a `VkDeviceAddress` of the ray generation shader binding table record used by this command. | ||
| pub raygen_shader_record_address: DeviceAddress, | ||
| /// raygenShaderRecordSize is a `VkDeviceSize` number of bytes corresponding to the ray generation shader binding table record at base address raygenShaderRecordAddress. | ||
| pub raygen_shader_record_size: DeviceSize, | ||
| /// missShaderBindingTableAddress is a `VkDeviceAddress` of the first record in the miss shader binding table used by this command. | ||
| pub miss_shader_binding_table_address: DeviceAddress, | ||
| /// missShaderBindingTableSize is a `VkDeviceSize` number of bytes corresponding to the total size of the miss shader binding table at missShaderBindingTableAddress that may be accessed by this command. | ||
| pub miss_shader_binding_table_size: DeviceSize, | ||
| /// missShaderBindingTableStride is a `VkDeviceSize` number of bytes between records of the miss shader binding table. | ||
| pub miss_shader_binding_table_stride: DeviceSize, | ||
| /// hitShaderBindingTableAddress is a `VkDeviceAddress` of the first record in the hit shader binding table used by this command. | ||
| pub hit_shader_binding_table_address: DeviceAddress, | ||
| /// hitShaderBindingTableSize is a `VkDeviceSize` number of bytes corresponding to the total size of the hit shader binding table at hitShaderBindingTableAddress that may be accessed by this command. | ||
| pub hit_shader_binding_table_size: DeviceSize, | ||
| /// hitShaderBindingTableStride is a `VkDeviceSize` number of bytes between records of the hit shader binding table. | ||
| pub hit_shader_binding_table_stride: DeviceSize, | ||
| /// callableShaderBindingTableAddress is a `VkDeviceAddress` of the first record in the callable shader binding table used by this command. | ||
| pub callable_shader_binding_table_address: DeviceAddress, | ||
| /// callableShaderBindingTableSize is a `VkDeviceSize` number of bytes corresponding to the total size of the callable shader binding table at callableShaderBindingTableAddress that may be accessed by this command. | ||
| pub callable_shader_binding_table_size: DeviceSize, | ||
| /// callableShaderBindingTableStride is a `VkDeviceSize` number of bytes between records of the callable shader binding table. | ||
| pub callable_shader_binding_table_stride: DeviceSize, | ||
| /// width is the width of the ray trace query dimensions. | ||
| pub width: u32, | ||
| /// height is height of the ray trace query dimensions. | ||
| pub height: u32, | ||
| /// depth is depth of the ray trace query dimensions. | ||
| pub depth: u32, | ||
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added bytemuck as an optional dependency to mark all the
*IndirectCommandstructs as Pod, as most graphics APIs will require this. Should we make the bytemuck dependency required, eg. not hidden behind a feature?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think keeping
bytemuckoptional is good. It's true that most graphics projects will have it somewhere in the tree, but I don't think we should be deciding how folks marshal data to the GPU.