vulkan.h: Bug 14181 - Barriers need to be more precise
diff --git a/icd/intel/cmd_barrier.c b/icd/intel/cmd_barrier.c
index 2fe3cc2..5bf4059 100644
--- a/icd/intel/cmd_barrier.c
+++ b/icd/intel/cmd_barrier.c
@@ -274,16 +274,17 @@
ICD_EXPORT void VKAPI vkCmdWaitEvents(
VkCmdBuffer cmdBuffer,
- VkWaitEvent waitEvent,
uint32_t eventCount,
const VkEvent* pEvents,
+ VkPipelineStageFlags sourceStageMask,
+ VkPipelineStageFlags destStageMask,
uint32_t memBarrierCount,
const void** ppMemBarriers)
{
struct intel_cmd *cmd = intel_cmd(cmdBuffer);
- /* This hardware will always wait at VK_WAIT_EVENT_TOP_OF_PIPE.
- * Passing a pWaitInfo->waitEvent of VK_WAIT_EVENT_BEFORE_FRAGMENT_PROCESSING
+ /* This hardware will always wait at VK_PIPELINE_STAGE_TOP_OF_PIPE.
+ * Passing a stageMask specifying other stages
* does not change that.
*/
@@ -301,18 +302,17 @@
ICD_EXPORT void VKAPI vkCmdPipelineBarrier(
VkCmdBuffer cmdBuffer,
- VkWaitEvent waitEvent,
- uint32_t pipeEventCount,
- const VkPipeEvent* pPipeEvents,
+ VkPipelineStageFlags sourceStageMask,
+ VkPipelineStageFlags destStageMask,
+ bool32_t byRegion,
uint32_t memBarrierCount,
const void** ppMemBarriers)
{
struct intel_cmd *cmd = intel_cmd(cmdBuffer);
uint32_t pipe_control_flags = 0;
- uint32_t i;
/* This hardware will always wait at VK_WAIT_EVENT_TOP_OF_PIPE.
- * Passing a pBarrier->waitEvent of VK_WAIT_EVENT_BEFORE_FRAGMENT_PROCESSING
+ * Passing a stageMask specifying other stages
* does not change that.
*/
@@ -320,25 +320,10 @@
* With no GEN6_PIPE_CONTROL_CS_STALL flag set, it behaves as VK_PIPE_EVENT_TOP_OF_PIPE.
* All other pEvents values will behave as VK_PIPE_EVENT_COMMANDS_COMPLETE.
*/
- for (i = 0; i < pipeEventCount; i++) {
- switch(pPipeEvents[i])
- {
- case VK_PIPE_EVENT_TOP_OF_PIPE:
- break;
- case VK_PIPE_EVENT_VERTEX_PROCESSING_COMPLETE:
- case VK_PIPE_EVENT_LOCAL_FRAGMENT_PROCESSING_COMPLETE:
- case VK_PIPE_EVENT_FRAGMENT_PROCESSING_COMPLETE:
- case VK_PIPE_EVENT_GRAPHICS_PIPELINE_COMPLETE:
- case VK_PIPE_EVENT_COMPUTE_PIPELINE_COMPLETE:
- case VK_PIPE_EVENT_TRANSFER_COMPLETE:
- case VK_PIPE_EVENT_COMMANDS_COMPLETE:
- pipe_control_flags |= GEN6_PIPE_CONTROL_CS_STALL;
- break;
- default:
- cmd_fail(cmd, VK_ERROR_UNKNOWN);
- return;
- break;
- }
+
+ if ((sourceStageMask & VK_PIPELINE_STAGE_ALL_GRAPHICS) ||
+ (destStageMask & VK_PIPELINE_STAGE_ALL_GRAPHICS)){
+ pipe_control_flags = GEN6_PIPE_CONTROL_CS_STALL;
}
/* cmd_memory_barriers can wait for GEN6_PIPE_CONTROL_CS_STALL and perform