Fixes gears being upside down on the box in demos/gearbox.
static void
cell_surface_copy(struct pipe_context *pipe,
+ unsigned do_flip,
struct pipe_surface *dst,
unsigned dstx, unsigned dsty,
struct pipe_surface *src,
dstx, dsty,
width, height,
pipe_surface_map(src),
- src->pitch,
- srcx, srcy);
+ do_flip ? -src->pitch : src->pitch,
+ srcx, do_flip ? 1 - srcy - height : srcy);
pipe_surface_unmap(src);
pipe_surface_unmap(dst);
void
i915_copy_blit( struct i915_context *i915,
+ unsigned do_flip,
unsigned cpp,
short src_pitch,
struct pipe_buffer *src_buffer,
#include "i915_context.h"
extern void i915_copy_blit(struct i915_context *i915,
+ unsigned do_flip,
unsigned cpp,
short src_pitch,
struct pipe_buffer *src_buffer,
*/
static void
i915_surface_copy(struct pipe_context *pipe,
+ unsigned do_flip,
struct pipe_surface *dst,
unsigned dstx, unsigned dsty,
struct pipe_surface *src,
dstx, dsty,
width, height,
pipe_surface_map(src),
- src->pitch,
- srcx, srcy);
+ do_flip ? -src->pitch : src->pitch,
+ srcx, do_flip ? 1 - srcy - height : srcy);
pipe_surface_unmap(src);
pipe_surface_unmap(dst);
}
else {
i915_copy_blit( i915_context(pipe),
+ do_flip,
dst->cpp,
(short) src->pitch, src->buffer, src->offset,
(short) dst->pitch, dst->buffer, dst->offset,
/* Copy BitBlt
*/
void brw_copy_blit(struct brw_context *brw,
+ unsigned do_flip,
unsigned cpp,
short src_pitch,
struct pipe_buffer *src_buffer,
short w, short h,
unsigned color);
void brw_copy_blit(struct brw_context *intel,
+ unsigned do_flip,
unsigned cpp,
short src_pitch,
struct pipe_buffer *src_buffer,
*/
static void
brw_surface_copy(struct pipe_context *pipe,
+ unsigned do_flip,
struct pipe_surface *dst,
unsigned dstx, unsigned dsty,
struct pipe_surface *src,
dstx, dsty,
width, height,
pipe_surface_map(src) + src->offset,
- src->pitch,
- srcx, srcy);
+ do_flip ? -src->pitch : src->pitch,
+ srcx, do_flip ? 1 - srcy - height : srcy);
pipe_surface_unmap(src);
pipe_surface_unmap(dst);
}
else {
brw_copy_blit(brw_context(pipe),
+ do_flip,
dst->cpp,
(short) src->pitch, src->buffer, src->offset, FALSE,
(short) dst->pitch, dst->buffer, dst->offset, FALSE,
*/
void (*surface_copy)(struct pipe_context *pipe,
+ unsigned do_flip, /*<< flip surface contents vertically */
struct pipe_surface *dest,
unsigned destx, unsigned desty,
struct pipe_surface *src, /* don't make this const -
extern void pipe_copy_rect(ubyte * dst, unsigned cpp, unsigned dst_pitch,
unsigned dst_x, unsigned dst_y, unsigned width,
unsigned height, const ubyte * src,
- unsigned src_pitch, unsigned src_x, unsigned src_y);
+ int src_pitch, unsigned src_x, int src_y);
#endif
*/
static void
sp_surface_copy(struct pipe_context *pipe,
+ unsigned do_flip,
struct pipe_surface *dst,
unsigned dstx, unsigned dsty,
struct pipe_surface *src,
dstx, dsty,
width, height,
pipe_surface_map(src),
- src->pitch,
- srcx, srcy);
+ do_flip ? -src->pitch : src->pitch,
+ srcx, do_flip ? 1 - srcy - height : srcy);
pipe_surface_unmap(src);
pipe_surface_unmap(dst);
unsigned width,
unsigned height,
const ubyte * src,
- unsigned src_pitch,
+ int src_pitch,
unsigned src_x,
- unsigned src_y)
+ int src_y)
{
unsigned i;
return;
pipe->surface_copy(pipe,
+ FALSE,
surf_front, x, y, /* dest */
surf_back, x, y, /* src */
width, height);
if (st->haveFramebufferSurfaces) {
/* copy source framebuffer surface into mipmap/texture */
pipe->surface_copy(pipe,
+ FALSE,
psTex, /* dest */
0, 0, /* destx/y */
psRead,
struct pipe_context *pipe = ctx->st->pipe;
struct pipe_surface *dest_surface;
uint dest_format, src_format;
+ uint do_flip = FALSE;
(void) texImage;
if (st_fb_orientation(ctx->ReadBuffer) == Y_0_TOP) {
srcY = strb->Base.Height - srcY - height;
+ do_flip = TRUE;
}
src_format = strb->surface->format;
#else
pipe->surface_copy(pipe,
+ do_flip,
/* dest */
dest_surface,
destX, destY,
src_surface = pipe->get_tex_surface(pipe, src, face, srcLevel, i);
pipe->surface_copy(pipe,
+ FALSE,
dst_surface,
0, 0, /* destX, Y */
src_surface,