ilo: simplify ilo_flush()

Move fence creation to the new ilo_fence_create().
This commit is contained in:
Chia-I Wu 2014-07-25 10:53:05 +08:00
parent 654fd3e33f
commit 4714c4ec48
3 changed files with 30 additions and 20 deletions

View file

@ -63,28 +63,13 @@ ilo_flush(struct pipe_context *pipe,
{
struct ilo_context *ilo = ilo_context(pipe);
if (f) {
struct ilo_fence *fence;
fence = CALLOC_STRUCT(ilo_fence);
if (fence) {
pipe_reference_init(&fence->reference, 1);
/* reference the batch bo that we want to wait on */
if (ilo_cp_empty(ilo->cp))
fence->bo = ilo->last_cp_bo;
else
fence->bo = ilo->cp->bo;
if (fence->bo)
intel_bo_reference(fence->bo);
}
*f = (struct pipe_fence_handle *) fence;
}
ilo_cp_flush(ilo->cp,
(flags & PIPE_FLUSH_END_OF_FRAME) ? "frame end" : "user request");
if (f) {
*f = (struct pipe_fence_handle *)
ilo_fence_create(pipe->screen, ilo->last_cp_bo);
}
}
static void

View file

@ -575,6 +575,28 @@ ilo_fence_finish(struct pipe_screen *screen,
return true;
}
/**
* Create a fence for \p bo. When \p bo is not NULL, it must be submitted
* before waited on or checked.
*/
struct ilo_fence *
ilo_fence_create(struct pipe_screen *screen, struct intel_bo *bo)
{
struct ilo_fence *fence;
fence = CALLOC_STRUCT(ilo_fence);
if (!fence)
return NULL;
pipe_reference_init(&fence->reference, 1);
if (bo)
intel_bo_reference(bo);
fence->bo = bo;
return fence;
}
static void
ilo_screen_destroy(struct pipe_screen *screen)
{

View file

@ -60,4 +60,7 @@ ilo_fence(struct pipe_fence_handle *fence)
return (struct ilo_fence *) fence;
}
struct ilo_fence *
ilo_fence_create(struct pipe_screen *screen, struct intel_bo *bo);
#endif /* ILO_SCREEN_H */