Module: Mesa
Branch: main
Commit: f60dafb4bdc5dc42fc4ee542364468392363d857
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f60dafb4bdc5dc42fc4ee542364468392363d857

Author: Mike Blumenkrantz <[email protected]>
Date:   Tue Sep 12 15:17:08 2023 -0400

vulkan: add wrappers for descriptor '2' functions

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26849>

---

 src/vulkan/runtime/vk_command_buffer.c | 171 +++++++++++++++++++++++++++++++++
 src/vulkan/runtime/vk_command_buffer.h |   2 +
 2 files changed, 173 insertions(+)

diff --git a/src/vulkan/runtime/vk_command_buffer.c 
b/src/vulkan/runtime/vk_command_buffer.c
index 9b9071792c3..38936d997b2 100644
--- a/src/vulkan/runtime/vk_command_buffer.c
+++ b/src/vulkan/runtime/vk_command_buffer.c
@@ -195,3 +195,174 @@ vk_common_CmdSetDeviceMask(VkCommandBuffer commandBuffer, 
uint32_t deviceMask)
    /* Nothing to do here since we only support a single device */
    assert(deviceMask == 0x1);
 }
+
+VkShaderStageFlags
+vk_shader_stages_from_bind_point(VkPipelineBindPoint pipelineBindPoint)
+{
+   switch (pipelineBindPoint) {
+   case VK_PIPELINE_BIND_POINT_COMPUTE:
+      return VK_SHADER_STAGE_COMPUTE_BIT;
+   case VK_PIPELINE_BIND_POINT_GRAPHICS:
+      return VK_SHADER_STAGE_ALL_GRAPHICS | VK_SHADER_STAGE_TASK_BIT_EXT | 
VK_SHADER_STAGE_MESH_BIT_EXT;
+   case VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR:
+      return VK_SHADER_STAGE_RAYGEN_BIT_KHR |
+             VK_SHADER_STAGE_ANY_HIT_BIT_KHR |
+             VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR |
+             VK_SHADER_STAGE_MISS_BIT_KHR |
+             VK_SHADER_STAGE_INTERSECTION_BIT_KHR |
+             VK_SHADER_STAGE_CALLABLE_BIT_KHR;
+   default:
+      unreachable("unknown bind point!");
+   }
+   return 0;
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdBindDescriptorSets(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    firstSet,
+    uint32_t                                    descriptorSetCount,
+    const VkDescriptorSet*                      pDescriptorSets,
+    uint32_t                                    dynamicOffsetCount,
+    const uint32_t*                             pDynamicOffsets)
+{
+   const VkBindDescriptorSetsInfoKHR two = {
+      .sType = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR,
+      .stageFlags = vk_shader_stages_from_bind_point(pipelineBindPoint),
+      .layout = layout,
+      .firstSet = firstSet,
+      .descriptorSetCount = descriptorSetCount,
+      .pDescriptorSets = pDescriptorSets,
+      .dynamicOffsetCount = dynamicOffsetCount,
+      .pDynamicOffsets = pDynamicOffsets
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdBindDescriptorSets2KHR(commandBuffer, &two);
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdPushConstants(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineLayout                            layout,
+    VkShaderStageFlags                          stageFlags,
+    uint32_t                                    offset,
+    uint32_t                                    size,
+    const void*                                 pValues)
+{
+   const VkPushConstantsInfoKHR two = {
+      .sType = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR,
+      .layout = layout,
+      .stageFlags = stageFlags,
+      .offset = offset,
+      .size = size,
+      .pValues = pValues,
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdPushConstants2KHR(commandBuffer, &two);
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdPushDescriptorSetKHR(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    set,
+    uint32_t                                    descriptorWriteCount,
+    const VkWriteDescriptorSet*                 pDescriptorWrites)
+{
+   const VkPushDescriptorSetInfoKHR two = {
+      .sType = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR,
+      .stageFlags = vk_shader_stages_from_bind_point(pipelineBindPoint),
+      .layout = layout,
+      .set = set,
+      .descriptorWriteCount = descriptorWriteCount,
+      .pDescriptorWrites = pDescriptorWrites,
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdPushDescriptorSet2KHR(commandBuffer, &two);
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdPushDescriptorSetWithTemplateKHR(
+    VkCommandBuffer                             commandBuffer,
+    VkDescriptorUpdateTemplate                  descriptorUpdateTemplate,
+    VkPipelineLayout                            layout,
+    uint32_t                                    set,
+    const void*                                 pData)
+{
+   const VkPushDescriptorSetWithTemplateInfoKHR two = {
+      .sType = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR,
+      .descriptorUpdateTemplate = descriptorUpdateTemplate,
+      .layout = layout,
+      .set = set,
+      .pData = pData,
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdPushDescriptorSetWithTemplate2KHR(commandBuffer, &two);
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdSetDescriptorBufferOffsetsEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    firstSet,
+    uint32_t                                    setCount,
+    const uint32_t*                             pBufferIndices,
+    const VkDeviceSize*                         pOffsets)
+{
+   const VkSetDescriptorBufferOffsetsInfoEXT two = {
+      .sType = VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT,
+      .stageFlags = vk_shader_stages_from_bind_point(pipelineBindPoint),
+      .layout = layout,
+      .firstSet = firstSet,
+      .setCount = setCount,
+      .pBufferIndices = pBufferIndices,
+      .pOffsets = pOffsets
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdSetDescriptorBufferOffsets2EXT(commandBuffer, &two);
+}
+
+VKAPI_ATTR void VKAPI_CALL
+vk_common_CmdBindDescriptorBufferEmbeddedSamplersEXT(
+    VkCommandBuffer                             commandBuffer,
+    VkPipelineBindPoint                         pipelineBindPoint,
+    VkPipelineLayout                            layout,
+    uint32_t                                    set)
+{
+   const VkBindDescriptorBufferEmbeddedSamplersInfoEXT two = {
+      .sType = 
VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT,
+      .stageFlags = vk_shader_stages_from_bind_point(pipelineBindPoint),
+      .layout = layout,
+      .set = set
+   };
+
+   VK_FROM_HANDLE(vk_command_buffer, cmd_buffer, commandBuffer);
+   const struct vk_device_dispatch_table *disp =
+      &cmd_buffer->base.device->dispatch_table;
+
+   disp->CmdBindDescriptorBufferEmbeddedSamplers2EXT(commandBuffer, &two);
+}
diff --git a/src/vulkan/runtime/vk_command_buffer.h 
b/src/vulkan/runtime/vk_command_buffer.h
index 8d6d3eb6c42..c6451ec5d06 100644
--- a/src/vulkan/runtime/vk_command_buffer.h
+++ b/src/vulkan/runtime/vk_command_buffer.h
@@ -98,6 +98,8 @@ enum mesa_vk_command_buffer_state {
    MESA_VK_COMMAND_BUFFER_STATE_PENDING,
 };
 
+VkShaderStageFlags vk_shader_stages_from_bind_point(VkPipelineBindPoint 
pipelineBindPoint);
+
 struct vk_command_buffer {
    struct vk_object_base base;
 

Reply via email to