vk: Split the dynamic state binding function into one per state
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 14 Jul 2015 21:26:10 +0000 (14:26 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Tue, 14 Jul 2015 21:26:10 +0000 (14:26 -0700)
include/vulkan/vulkan.h
src/vulkan/device.c
src/vulkan/meta.c

index 2a1e484cd8ead6180ad621cbbcc61de15e2ec07f..a2410d1ff5cde7ebe8e2678c8e6c9be49615a15e 100644 (file)
@@ -831,17 +831,6 @@ typedef enum {
     VK_CMD_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF
 } VkCmdBufferLevel;
 
-typedef enum {
-    VK_STATE_BIND_POINT_VIEWPORT = 0,
-    VK_STATE_BIND_POINT_RASTER = 1,
-    VK_STATE_BIND_POINT_COLOR_BLEND = 2,
-    VK_STATE_BIND_POINT_DEPTH_STENCIL = 3,
-    VK_STATE_BIND_POINT_BEGIN_RANGE = VK_STATE_BIND_POINT_VIEWPORT,
-    VK_STATE_BIND_POINT_END_RANGE = VK_STATE_BIND_POINT_DEPTH_STENCIL,
-    VK_STATE_BIND_POINT_NUM = (VK_STATE_BIND_POINT_DEPTH_STENCIL - VK_STATE_BIND_POINT_VIEWPORT + 1),
-    VK_STATE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF
-} VkStateBindPoint;
-
 typedef enum {
     VK_INDEX_TYPE_UINT16 = 0,
     VK_INDEX_TYPE_UINT32 = 1,
@@ -2118,7 +2107,10 @@ typedef VkResult (VKAPI *PFN_vkBeginCommandBuffer)(VkCmdBuffer cmdBuffer, const
 typedef VkResult (VKAPI *PFN_vkEndCommandBuffer)(VkCmdBuffer cmdBuffer);
 typedef VkResult (VKAPI *PFN_vkResetCommandBuffer)(VkCmdBuffer cmdBuffer);
 typedef void (VKAPI *PFN_vkCmdBindPipeline)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline);
-typedef void (VKAPI *PFN_vkCmdBindDynamicStateObject)(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject dynamicState);
+typedef void (VKAPI *PFN_vkCmdBindDynamicViewportState)(VkCmdBuffer cmdBuffer, VkDynamicViewportState dynamicViewportState);
+typedef void (VKAPI *PFN_vkCmdBindDynamicRasterState)(VkCmdBuffer cmdBuffer, VkDynamicRasterState dynamicRasterState);
+typedef void (VKAPI *PFN_vkCmdBindDynamicColorBlendState)(VkCmdBuffer cmdBuffer, VkDynamicColorBlendState dynamicColorBlendState);
+typedef void (VKAPI *PFN_vkCmdBindDynamicDepthStencilState)(VkCmdBuffer cmdBuffer, VkDynamicDepthStencilState dynamicDepthStencilState);
 typedef void (VKAPI *PFN_vkCmdBindDescriptorSets)(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets);
 typedef void (VKAPI *PFN_vkCmdBindIndexBuffer)(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType);
 typedef void (VKAPI *PFN_vkCmdBindVertexBuffers)(VkCmdBuffer cmdBuffer, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets);
@@ -2652,10 +2644,21 @@ void VKAPI vkCmdBindPipeline(
     VkPipelineBindPoint                         pipelineBindPoint,
     VkPipeline                                  pipeline);
 
-void VKAPI vkCmdBindDynamicStateObject(
+void VKAPI vkCmdBindDynamicViewportState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicViewportState                      dynamicViewportState);
+
+void VKAPI vkCmdBindDynamicRasterState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicRasterState                        dynamicRasterState);
+
+void VKAPI vkCmdBindDynamicColorBlendState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicColorBlendState                    dynamicColorBlendState);
+
+void VKAPI vkCmdBindDynamicDepthStencilState(
     VkCmdBuffer                                 cmdBuffer,
-    VkStateBindPoint                            stateBindPoint,
-    VkDynamicStateObject                        dynamicState);
+    VkDynamicDepthStencilState                  dynamicDepthStencilState);
 
 void VKAPI vkCmdBindDescriptorSets(
     VkCmdBuffer                                 cmdBuffer,
index 90ac956c040bbfcfbcafbcda67266141aa8ec31d..d29e35ba20c44692672088783b948cc2090238c4 100644 (file)
@@ -2882,33 +2882,48 @@ void anv_CmdBindPipeline(
    }
 }
 
-void anv_CmdBindDynamicStateObject(
+void anv_CmdBindDynamicViewportState(
     VkCmdBuffer                                 cmdBuffer,
-    VkStateBindPoint                            stateBindPoint,
-    VkDynamicStateObject                        dynamicState)
+    VkDynamicViewportState                      dynamicViewportState)
 {
    ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer);
+   ANV_FROM_HANDLE(anv_dynamic_vp_state, vp_state, dynamicViewportState);
 
-   switch (stateBindPoint) {
-   case VK_STATE_BIND_POINT_VIEWPORT:
-      cmd_buffer->vp_state = anv_dynamic_vp_state_from_handle(dynamicState);
-      cmd_buffer->dirty |= ANV_CMD_BUFFER_VP_DIRTY;
-      break;
-   case VK_STATE_BIND_POINT_RASTER:
-      cmd_buffer->rs_state = anv_dynamic_rs_state_from_handle(dynamicState);
-      cmd_buffer->dirty |= ANV_CMD_BUFFER_RS_DIRTY;
-      break;
-   case VK_STATE_BIND_POINT_COLOR_BLEND:
-      cmd_buffer->cb_state = anv_dynamic_cb_state_from_handle(dynamicState);
-      cmd_buffer->dirty |= ANV_CMD_BUFFER_CB_DIRTY;
-      break;
-   case VK_STATE_BIND_POINT_DEPTH_STENCIL:
-      cmd_buffer->ds_state = anv_dynamic_ds_state_from_handle(dynamicState);
-      cmd_buffer->dirty |= ANV_CMD_BUFFER_DS_DIRTY;
-      break;
-   default:
-      break;
-   };
+   cmd_buffer->vp_state = vp_state;
+   cmd_buffer->dirty |= ANV_CMD_BUFFER_VP_DIRTY;
+}
+
+void anv_CmdBindDynamicRasterState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicRasterState                        dynamicRasterState)
+{
+   ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer);
+   ANV_FROM_HANDLE(anv_dynamic_rs_state, rs_state, dynamicRasterState);
+
+   cmd_buffer->rs_state = rs_state;
+   cmd_buffer->dirty |= ANV_CMD_BUFFER_RS_DIRTY;
+}
+
+void anv_CmdBindDynamicColorBlendState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicColorBlendState                    dynamicColorBlendState)
+{
+   ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer);
+   ANV_FROM_HANDLE(anv_dynamic_cb_state, cb_state, dynamicColorBlendState);
+
+   cmd_buffer->cb_state = cb_state;
+   cmd_buffer->dirty |= ANV_CMD_BUFFER_CB_DIRTY;
+}
+
+void anv_CmdBindDynamicDepthStencilState(
+    VkCmdBuffer                                 cmdBuffer,
+    VkDynamicDepthStencilState                  dynamicDepthStencilState)
+{
+   ANV_FROM_HANDLE(anv_cmd_buffer, cmd_buffer, cmdBuffer);
+   ANV_FROM_HANDLE(anv_dynamic_ds_state, ds_state, dynamicDepthStencilState);
+
+   cmd_buffer->ds_state = ds_state;
+   cmd_buffer->dirty |= ANV_CMD_BUFFER_DS_DIRTY;
 }
 
 static struct anv_state
index 0844565a99650b2d15108088613254c9caad9b18..140b64183772e6c448ea532fcdefb7a0739933b9 100644 (file)
@@ -240,24 +240,20 @@ meta_emit_clear(struct anv_cmd_buffer *cmd_buffer,
 
    /* We don't need anything here, only set if not already set. */
    if (cmd_buffer->rs_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_RASTER,
+      anv_CmdBindDynamicRasterState(anv_cmd_buffer_to_handle(cmd_buffer),
                                     device->meta_state.shared.rs_state);
 
    if (cmd_buffer->vp_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_VIEWPORT,
-                                    cmd_buffer->framebuffer->vp_state);
+      anv_CmdBindDynamicViewportState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                      cmd_buffer->framebuffer->vp_state);
 
    if (cmd_buffer->ds_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_DEPTH_STENCIL,
-                                    device->meta_state.shared.ds_state);
+      anv_CmdBindDynamicDepthStencilState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                          device->meta_state.shared.ds_state);
 
    if (cmd_buffer->cb_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_COLOR_BLEND,
-                                    device->meta_state.shared.cb_state);
+      anv_CmdBindDynamicColorBlendState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                        device->meta_state.shared.cb_state);
 
    anv_CmdDraw(anv_cmd_buffer_to_handle(cmd_buffer), 0, 3, 0, num_instances);
 }
@@ -499,18 +495,15 @@ meta_prepare_blit(struct anv_cmd_buffer *cmd_buffer,
 
    /* We don't need anything here, only set if not already set. */
    if (cmd_buffer->rs_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_RASTER,
+      anv_CmdBindDynamicRasterState(anv_cmd_buffer_to_handle(cmd_buffer),
                                     device->meta_state.shared.rs_state);
    if (cmd_buffer->ds_state == NULL)
-      anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                    VK_STATE_BIND_POINT_DEPTH_STENCIL,
-                                    device->meta_state.shared.ds_state);
+      anv_CmdBindDynamicDepthStencilState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                          device->meta_state.shared.ds_state);
 
    saved_state->cb_state = anv_dynamic_cb_state_to_handle(cmd_buffer->cb_state);
-   anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                 VK_STATE_BIND_POINT_COLOR_BLEND,
-                                 device->meta_state.shared.cb_state);
+   anv_CmdBindDynamicColorBlendState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                     device->meta_state.shared.cb_state);
 }
 
 struct blit_region {
@@ -683,9 +676,8 @@ meta_emit_blit(struct anv_cmd_buffer *cmd_buffer,
          .pAttachmentClearValues = NULL,
       }, VK_RENDER_PASS_CONTENTS_INLINE);
 
-   anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                 VK_STATE_BIND_POINT_VIEWPORT,
-                                 anv_framebuffer_from_handle(fb)->vp_state);
+   anv_CmdBindDynamicViewportState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                   anv_framebuffer_from_handle(fb)->vp_state);
 
    anv_CmdBindDescriptorSets(anv_cmd_buffer_to_handle(cmd_buffer),
                              VK_PIPELINE_BIND_POINT_GRAPHICS,
@@ -712,9 +704,8 @@ meta_finish_blit(struct anv_cmd_buffer *cmd_buffer,
                  const struct anv_saved_state *saved_state)
 {
    anv_cmd_buffer_restore(cmd_buffer, saved_state);
-   anv_CmdBindDynamicStateObject(anv_cmd_buffer_to_handle(cmd_buffer),
-                                 VK_STATE_BIND_POINT_COLOR_BLEND,
-                                 saved_state->cb_state);
+   anv_CmdBindDynamicColorBlendState(anv_cmd_buffer_to_handle(cmd_buffer),
+                                     saved_state->cb_state);
 }
 
 static VkFormat