diff options
author | Lionel Landwerlin <[email protected]> | 2019-12-12 01:58:01 +0200 |
---|---|---|
committer | Lionel Landwerlin <[email protected]> | 2019-12-12 10:10:48 +0000 |
commit | 52bc235f2adcae8a3f40c74b15c9aad9e2b5c5b9 (patch) | |
tree | ed88da2e7b32e3d0b32c401ffadd50ced3bafd83 /src/intel | |
parent | 790bc9a17e09496d9a865aae785e6538724b3b57 (diff) |
anv: fix fence underlying primitive checks
We appear to have got lucky that the only type of temporary fence
payload we could have was a syncobj and that would only happen when
the type of the permanent payload was also a syncobj.
This code was broken if that assumption changed and it did in commit
f9a3d9738b12.
Signed-off-by: Lionel Landwerlin <[email protected]>
Cc: <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Ivan Briano <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r-- | src/intel/vulkan/anv_queue.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c index 7ab1d0ac0e8..b7f97b962f5 100644 --- a/src/intel/vulkan/anv_queue.c +++ b/src/intel/vulkan/anv_queue.c @@ -1461,7 +1461,11 @@ anv_wait_for_fences(struct anv_device *device, if (fenceCount <= 1 || waitAll) { for (uint32_t i = 0; i < fenceCount; i++) { ANV_FROM_HANDLE(anv_fence, fence, pFences[i]); - switch (fence->permanent.type) { + struct anv_fence_impl *impl = + fence->temporary.type != ANV_FENCE_TYPE_NONE ? + &fence->temporary : &fence->permanent; + + switch (impl->type) { case ANV_FENCE_TYPE_BO: case ANV_FENCE_TYPE_WSI_BO: result = anv_wait_for_bo_fences(device, 1, &pFences[i], @@ -1497,7 +1501,10 @@ static bool anv_all_fences_syncobj(uint32_t fenceCount, const VkFence *pFences) { for (uint32_t i = 0; i < fenceCount; ++i) { ANV_FROM_HANDLE(anv_fence, fence, pFences[i]); - if (fence->permanent.type != ANV_FENCE_TYPE_SYNCOBJ) + struct anv_fence_impl *impl = + fence->temporary.type != ANV_FENCE_TYPE_NONE ? + &fence->temporary : &fence->permanent; + if (impl->type != ANV_FENCE_TYPE_SYNCOBJ) return false; } return true; @@ -1507,7 +1514,10 @@ static bool anv_all_fences_bo(uint32_t fenceCount, const VkFence *pFences) { for (uint32_t i = 0; i < fenceCount; ++i) { ANV_FROM_HANDLE(anv_fence, fence, pFences[i]); - if (fence->permanent.type != ANV_FENCE_TYPE_BO) + struct anv_fence_impl *impl = + fence->temporary.type != ANV_FENCE_TYPE_NONE ? + &fence->temporary : &fence->permanent; + if (impl->type != ANV_FENCE_TYPE_BO) return false; } return true; |