[Mesa-dev] [PATCH 23/24] intel: Don't force a batchbuffer flush in readpixels.
Eric Anholt
eric at anholt.net
Fri Oct 28 12:50:13 PDT 2011
Renderbuffer mapping handles flushing the batchbuffer if required, so
all we need to do is make sure any pending rendering has reached the
batchbuffer.
---
src/mesa/drivers/dri/intel/intel_context.c | 10 +++++++++-
src/mesa/drivers/dri/intel/intel_context.h | 1 +
src/mesa/drivers/dri/intel/intel_pixel_read.c | 4 ++--
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c
index 501b00d..5bebac7 100644
--- a/src/mesa/drivers/dri/intel/intel_context.c
+++ b/src/mesa/drivers/dri/intel/intel_context.c
@@ -511,7 +511,7 @@ intelInvalidateState(struct gl_context * ctx, GLuint new_state)
}
void
-intel_flush(struct gl_context *ctx)
+intel_flush_rendering_to_batch(struct gl_context *ctx)
{
struct intel_context *intel = intel_context(ctx);
@@ -520,6 +520,14 @@ intel_flush(struct gl_context *ctx)
if (intel->gen < 4)
INTEL_FIREVERTICES(intel);
+}
+
+void
+intel_flush(struct gl_context *ctx)
+{
+ struct intel_context *intel = intel_context(ctx);
+
+ intel_flush_rendering_to_batch(ctx);
if (intel->batch.used)
intel_batchbuffer_flush(intel);
diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h
index 938112a..9b62435 100644
--- a/src/mesa/drivers/dri/intel/intel_context.h
+++ b/src/mesa/drivers/dri/intel/intel_context.h
@@ -478,6 +478,7 @@ extern bool intelInitContext(struct intel_context *intel,
struct dd_function_table *functions);
extern void intelFinish(struct gl_context * ctx);
+extern void intel_flush_rendering_to_batch(struct gl_context *ctx);
extern void intel_flush(struct gl_context * ctx);
extern void intelInitDriverFunctions(struct dd_function_table *functions);
diff --git a/src/mesa/drivers/dri/intel/intel_pixel_read.c b/src/mesa/drivers/dri/intel/intel_pixel_read.c
index 803d714..a79b69c 100644
--- a/src/mesa/drivers/dri/intel/intel_pixel_read.c
+++ b/src/mesa/drivers/dri/intel/intel_pixel_read.c
@@ -172,14 +172,14 @@ intelReadPixels(struct gl_context * ctx,
struct intel_context *intel = intel_context(ctx);
bool dirty;
+ intel_flush_rendering_to_batch(ctx);
+
DBG("%s\n", __FUNCTION__);
if (do_blit_readpixels
(ctx, x, y, width, height, format, type, pack, pixels))
return;
- intel_flush(ctx);
-
/* glReadPixels() wont dirty the front buffer, so reset the dirty
* flag after calling intel_prepare_render(). */
dirty = intel->front_buffer_dirty;
--
1.7.7
More information about the mesa-dev
mailing list