summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorChia-I Wu <olvaffe@gmail.com>2014-07-25 10:53:05 +0800
committerChia-I Wu <olvaffe@gmail.com>2014-07-26 12:30:39 +0800
commit4714c4ec48fcb17b8484cd1c44918fcedc3ce28e (patch)
treeaa8f04a7b99001e33e1587cb3309115765e15299 /src/gallium
parent654fd3e33f71702aa487b5b5249847bee73d4823 (diff)
ilo: simplify ilo_flush()
Move fence creation to the new ilo_fence_create().
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/ilo/ilo_context.c25
-rw-r--r--src/gallium/drivers/ilo/ilo_screen.c22
-rw-r--r--src/gallium/drivers/ilo/ilo_screen.h3
3 files changed, 30 insertions, 20 deletions
diff --git a/src/gallium/drivers/ilo/ilo_context.c b/src/gallium/drivers/ilo/ilo_context.c
index 2de0ed7b04c..ab750acd24c 100644
--- a/src/gallium/drivers/ilo/ilo_context.c
+++ b/src/gallium/drivers/ilo/ilo_context.c
@@ -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
diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
index e2a0e239600..f4968f9bc3c 100644
--- a/src/gallium/drivers/ilo/ilo_screen.c
+++ b/src/gallium/drivers/ilo/ilo_screen.c
@@ -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)
{
diff --git a/src/gallium/drivers/ilo/ilo_screen.h b/src/gallium/drivers/ilo/ilo_screen.h
index 4c403f042f2..7e1ce72052e 100644
--- a/src/gallium/drivers/ilo/ilo_screen.h
+++ b/src/gallium/drivers/ilo/ilo_screen.h
@@ -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 */