intel: Don't force a batchbuffer flush in readpixels.

Renderbuffer mapping handles flushing the batchbuffer if required, so
all we need to do is make sure any pending rendering has reached the
batchbuffer.

Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
Eric Anholt 2011-10-19 10:39:15 -07:00
parent e7349a55f7
commit ac6a376f52
3 changed files with 12 additions and 3 deletions

View File

@ -495,7 +495,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);
@ -504,6 +504,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);

View File

@ -483,6 +483,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);

View File

@ -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;