[Mesa-dev] [PATCH v5 1/2] i965: Return the last fence if the batch buffer is empty
yogesh.marathe at intel.com
yogesh.marathe at intel.com
Wed Aug 2 19:01:04 UTC 2017
From: Zhongmin Wu <zhongmin.wu at intel.com>
Always save the last fence in the brw context when flushing
buffer. If there is nothing to be flushed, return the last
fence if asked for. Nothing to be flushed when
_intel_batchbuffer_flush_fence.
Signed-off-by: Zhongmin Wu <zhongmin.wu at intel.com>
Signed-off-by: Yogesh Marathe <yogesh.marathe at intel.com>
---
src/mesa/drivers/dri/i965/brw_context.c | 5 +++++
src/mesa/drivers/dri/i965/brw_context.h | 1 +
src/mesa/drivers/dri/i965/intel_batchbuffer.c | 16 ++++++++++++++--
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index d0b22d4..869287d 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -984,6 +984,8 @@ brwCreateContext(gl_api api,
ctx->VertexProgram._MaintainTnlProgram = true;
ctx->FragmentProgram._MaintainTexEnvProgram = true;
+ brw->out_fence_fd = -1;
+
brw_draw_init( brw );
if ((flags & __DRI_CTX_FLAG_DEBUG) != 0) {
@@ -1067,6 +1069,9 @@ intelDestroyContext(__DRIcontext * driContextPriv)
brw->throttle_batch[1] = NULL;
brw->throttle_batch[0] = NULL;
+ if (brw->out_fence_fd >= 0)
+ close(brw->out_fence_fd);
+
driDestroyOptionCache(&brw->optionCache);
/* free the Mesa context */
diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
index a4a04da..1fea5d8 100644
--- a/src/mesa/drivers/dri/i965/brw_context.h
+++ b/src/mesa/drivers/dri/i965/brw_context.h
@@ -1235,6 +1235,7 @@ struct brw_context
__DRIcontext *driContext;
struct intel_screen *screen;
+ int out_fence_fd;
};
/* brw_clear.c */
diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
index e2f208a..e779bd1 100644
--- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c
@@ -642,9 +642,18 @@ do_flush_locked(struct brw_context *brw, int in_fence_fd, int *out_fence_fd)
/* Add the batch itself to the end of the validation list */
add_exec_bo(batch, batch->bo);
+ if (brw->out_fence_fd >= 0) {
+ close(brw->out_fence_fd);
+ brw->out_fence_fd = -1;
+ }
+
+ int fd = -1;
ret = execbuffer(dri_screen->fd, batch, hw_ctx,
4 * USED_BATCH(*batch),
- in_fence_fd, out_fence_fd, flags);
+ in_fence_fd, &fd, flags);
+ brw->out_fence_fd = fd;
+ if (out_fence_fd)
+ *out_fence_fd = (fd >=0) ? dup(fd) : -1;
}
throttle(brw);
@@ -678,8 +687,11 @@ _intel_batchbuffer_flush_fence(struct brw_context *brw,
{
int ret;
- if (USED_BATCH(brw->batch) == 0)
+ if (USED_BATCH(brw->batch) == 0) {
+ if (out_fence_fd && brw->out_fence_fd >= 0)
+ *out_fence_fd = dup(brw->out_fence_fd);
return 0;
+ }
if (brw->throttle_batch[0] == NULL) {
brw->throttle_batch[0] = brw->batch.bo;
--
2.7.4
More information about the mesa-dev
mailing list