summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/zink/zink_fence.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/zink/zink_fence.c')
-rw-r--r--src/gallium/drivers/zink/zink_fence.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/gallium/drivers/zink/zink_fence.c b/src/gallium/drivers/zink/zink_fence.c
index 72f1b6c5766..86679f2caf7 100644
--- a/src/gallium/drivers/zink/zink_fence.c
+++ b/src/gallium/drivers/zink/zink_fence.c
@@ -21,8 +21,10 @@
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#include "zink_batch.h"
#include "zink_fence.h"
+#include "zink_query.h"
#include "zink_screen.h"
#include "util/u_memory.h"
@@ -36,7 +38,7 @@ destroy_fence(struct zink_screen *screen, struct zink_fence *fence)
}
struct zink_fence *
-zink_create_fence(struct pipe_screen *pscreen)
+zink_create_fence(struct pipe_screen *pscreen, struct zink_batch *batch)
{
struct zink_screen *screen = zink_screen(pscreen);
@@ -53,6 +55,8 @@ zink_create_fence(struct pipe_screen *pscreen)
debug_printf("vkCreateFence failed\n");
goto fail;
}
+ ret->active_queries = batch->active_queries;
+ batch->active_queries = NULL;
pipe_reference_init(&ret->reference, 1);
return ret;
@@ -86,8 +90,11 @@ bool
zink_fence_finish(struct zink_screen *screen, struct zink_fence *fence,
uint64_t timeout_ns)
{
- return vkWaitForFences(screen->dev, 1, &fence->fence, VK_TRUE,
- timeout_ns) == VK_SUCCESS;
+ bool success = vkWaitForFences(screen->dev, 1, &fence->fence, VK_TRUE,
+ timeout_ns) == VK_SUCCESS;
+ if (success && fence->active_queries)
+ zink_prune_queries(screen, fence);
+ return success;
}
static bool