[i915] Remove old frontbuffer rotation hack.
This was replaced in previous releases of xserver/dri/libGL by reporting the damage to the frontbuffer so that the server and driver could handle it appropriately.
This commit is contained in:
@@ -46,7 +46,6 @@ DRIVER_SOURCES = \
|
||||
intel_context.c \
|
||||
intel_decode.c \
|
||||
intel_ioctl.c \
|
||||
intel_rotate.c \
|
||||
intel_screen.c \
|
||||
intel_span.c \
|
||||
intel_state.c \
|
||||
|
||||
@@ -196,10 +196,6 @@ extern void i830InitState(struct i830_context *i830);
|
||||
*/
|
||||
extern void i830InitMetaFuncs(struct i830_context *i830);
|
||||
|
||||
extern void
|
||||
i830RotateWindow(struct intel_context *intel, __DRIdrawablePrivate * dPriv,
|
||||
GLuint srcBuf);
|
||||
|
||||
/*======================================================================
|
||||
* Inline conversion functions. These are better-typed than the
|
||||
* macros used previously:
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
#include "intel_batchbuffer.h"
|
||||
#include "intel_ioctl.h"
|
||||
#include "intel_regions.h"
|
||||
#include "intel_rotate.h"
|
||||
|
||||
#include "i915_context.h"
|
||||
#include "i915_reg.h"
|
||||
|
||||
@@ -278,37 +278,6 @@ intelFlush(GLcontext * ctx)
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if we need to rotate/warp the front color buffer to the
|
||||
* rotated screen. We generally need to do this when we get a glFlush
|
||||
* or glFinish after drawing to the front color buffer.
|
||||
*/
|
||||
static void
|
||||
intelCheckFrontRotate(GLcontext * ctx)
|
||||
{
|
||||
struct intel_context *intel = intel_context(ctx);
|
||||
if (intel->ctx.DrawBuffer->_ColorDrawBufferMask[0] ==
|
||||
BUFFER_BIT_FRONT_LEFT) {
|
||||
intelScreenPrivate *screen = intel->intelScreen;
|
||||
if (screen->current_rotation != 0) {
|
||||
__DRIdrawablePrivate *dPriv = intel->driDrawable;
|
||||
intelRotateWindow(intel, dPriv, BUFFER_BIT_FRONT_LEFT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via glFlush.
|
||||
*/
|
||||
static void
|
||||
intelglFlush(GLcontext * ctx)
|
||||
{
|
||||
intelFlush(ctx);
|
||||
intelCheckFrontRotate(ctx);
|
||||
}
|
||||
|
||||
void
|
||||
intelFinish(GLcontext * ctx)
|
||||
{
|
||||
@@ -319,7 +288,6 @@ intelFinish(GLcontext * ctx)
|
||||
dri_fence_unreference(intel->batch->last_fence);
|
||||
intel->batch->last_fence = NULL;
|
||||
}
|
||||
intelCheckFrontRotate(ctx);
|
||||
}
|
||||
|
||||
|
||||
@@ -328,7 +296,7 @@ intelInitDriverFunctions(struct dd_function_table *functions)
|
||||
{
|
||||
_mesa_init_driver_functions(functions);
|
||||
|
||||
functions->Flush = intelglFlush;
|
||||
functions->Flush = intelFlush;
|
||||
functions->Finish = intelFinish;
|
||||
functions->GetString = intelGetString;
|
||||
functions->UpdateState = intelInvalidateState;
|
||||
@@ -371,7 +339,6 @@ intelInitContext(struct intel_context *intel,
|
||||
|
||||
intel->width = intelScreen->width;
|
||||
intel->height = intelScreen->height;
|
||||
intel->current_rotation = intelScreen->current_rotation;
|
||||
|
||||
if (!lockMutexInit) {
|
||||
lockMutexInit = GL_TRUE;
|
||||
@@ -676,16 +643,8 @@ intelContendedLock(struct intel_context *intel, GLuint flags)
|
||||
intel_decode_context_reset();
|
||||
}
|
||||
|
||||
if (sarea->width != intelScreen->width ||
|
||||
sarea->height != intelScreen->height ||
|
||||
sarea->rotation != intelScreen->current_rotation) {
|
||||
|
||||
intelUpdateScreenRotation(sPriv, sarea);
|
||||
}
|
||||
|
||||
if (sarea->width != intel->width ||
|
||||
sarea->height != intel->height ||
|
||||
sarea->rotation != intel->current_rotation) {
|
||||
sarea->height != intel->height) {
|
||||
int numClipRects = intel->numClipRects;
|
||||
|
||||
/*
|
||||
@@ -713,7 +672,6 @@ intelContendedLock(struct intel_context *intel, GLuint flags)
|
||||
|
||||
intel->width = sarea->width;
|
||||
intel->height = sarea->height;
|
||||
intel->current_rotation = sarea->rotation;
|
||||
}
|
||||
|
||||
/* Drawable changed?
|
||||
|
||||
@@ -174,8 +174,6 @@ struct intel_context
|
||||
GLuint pitch,
|
||||
GLuint height,
|
||||
GLenum format, GLenum type);
|
||||
void (*rotate_window) (struct intel_context * intel,
|
||||
__DRIdrawablePrivate * dPriv, GLuint srcBuf);
|
||||
|
||||
void (*assert_not_dirty) (struct intel_context *intel);
|
||||
|
||||
@@ -229,14 +227,6 @@ struct intel_context
|
||||
GLuint vertex_size;
|
||||
GLubyte *verts; /* points to tnl->clipspace.vertex_buf */
|
||||
|
||||
#if 0
|
||||
struct intel_region *front_region; /* XXX FBO: obsolete */
|
||||
struct intel_region *rotated_region; /* XXX FBO: obsolete */
|
||||
struct intel_region *back_region; /* XXX FBO: obsolete */
|
||||
struct intel_region *draw_region; /* XXX FBO: rename to color_region */
|
||||
struct intel_region *depth_region; /**< currently bound depth/Z region */
|
||||
#endif
|
||||
|
||||
/* Fallback rasterization functions
|
||||
*/
|
||||
intel_point_func draw_point;
|
||||
@@ -272,13 +262,9 @@ struct intel_context
|
||||
*/
|
||||
driOptionCache optionCache;
|
||||
|
||||
/* Rotation. Need to match that of the
|
||||
* current screen.
|
||||
*/
|
||||
|
||||
int width;
|
||||
int height;
|
||||
int current_rotation;
|
||||
/* Last seen width/height of the screen */
|
||||
int width;
|
||||
int height;
|
||||
};
|
||||
|
||||
/* These are functions now:
|
||||
|
||||
@@ -1,237 +0,0 @@
|
||||
|
||||
/**
|
||||
* Routines for simple 2D->2D transformations for rotated, flipped screens.
|
||||
*
|
||||
* XXX This code is not intel-specific. Move it into a common/utility
|
||||
* someday.
|
||||
*/
|
||||
|
||||
#include "intel_rotate.h"
|
||||
|
||||
#define MIN2(A, B) ( ((A) < (B)) ? (A) : (B) )
|
||||
|
||||
#define ABS(A) ( ((A) < 0) ? -(A) : (A) )
|
||||
|
||||
|
||||
void
|
||||
matrix23Set(struct matrix23 *m,
|
||||
int m00, int m01, int m02, int m10, int m11, int m12)
|
||||
{
|
||||
m->m00 = m00;
|
||||
m->m01 = m01;
|
||||
m->m02 = m02;
|
||||
m->m10 = m10;
|
||||
m->m11 = m11;
|
||||
m->m12 = m12;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Transform (x,y) coordinate by the given matrix.
|
||||
*/
|
||||
void
|
||||
matrix23TransformCoordf(const struct matrix23 *m, float *x, float *y)
|
||||
{
|
||||
const float x0 = *x;
|
||||
const float y0 = *y;
|
||||
|
||||
*x = m->m00 * x0 + m->m01 * y0 + m->m02;
|
||||
*y = m->m10 * x0 + m->m11 * y0 + m->m12;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
matrix23TransformCoordi(const struct matrix23 *m, int *x, int *y)
|
||||
{
|
||||
const int x0 = *x;
|
||||
const int y0 = *y;
|
||||
|
||||
*x = m->m00 * x0 + m->m01 * y0 + m->m02;
|
||||
*y = m->m10 * x0 + m->m11 * y0 + m->m12;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Transform a width and height by the given matrix.
|
||||
* XXX this could be optimized quite a bit.
|
||||
*/
|
||||
void
|
||||
matrix23TransformDistance(const struct matrix23 *m, int *xDist, int *yDist)
|
||||
{
|
||||
int x0 = 0, y0 = 0;
|
||||
int x1 = *xDist, y1 = 0;
|
||||
int x2 = 0, y2 = *yDist;
|
||||
matrix23TransformCoordi(m, &x0, &y0);
|
||||
matrix23TransformCoordi(m, &x1, &y1);
|
||||
matrix23TransformCoordi(m, &x2, &y2);
|
||||
|
||||
*xDist = (x1 - x0) + (x2 - x0);
|
||||
*yDist = (y1 - y0) + (y2 - y0);
|
||||
|
||||
if (*xDist < 0)
|
||||
*xDist = -*xDist;
|
||||
if (*yDist < 0)
|
||||
*yDist = -*yDist;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Transform the rect defined by (x, y, w, h) by m.
|
||||
*/
|
||||
void
|
||||
matrix23TransformRect(const struct matrix23 *m, int *x, int *y, int *w,
|
||||
int *h)
|
||||
{
|
||||
int x0 = *x, y0 = *y;
|
||||
int x1 = *x + *w, y1 = *y;
|
||||
int x2 = *x + *w, y2 = *y + *h;
|
||||
int x3 = *x, y3 = *y + *h;
|
||||
matrix23TransformCoordi(m, &x0, &y0);
|
||||
matrix23TransformCoordi(m, &x1, &y1);
|
||||
matrix23TransformCoordi(m, &x2, &y2);
|
||||
matrix23TransformCoordi(m, &x3, &y3);
|
||||
*w = ABS(x1 - x0) + ABS(x2 - x1);
|
||||
/**w = ABS(*w);*/
|
||||
*h = ABS(y1 - y0) + ABS(y2 - y1);
|
||||
/**h = ABS(*h);*/
|
||||
*x = MIN2(x0, x1);
|
||||
*x = MIN2(*x, x2);
|
||||
*y = MIN2(y0, y1);
|
||||
*y = MIN2(*y, y2);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Make rotation matrix for width X height screen.
|
||||
*/
|
||||
void
|
||||
matrix23Rotate(struct matrix23 *m, int width, int height, int angle)
|
||||
{
|
||||
switch (angle) {
|
||||
case 0:
|
||||
matrix23Set(m, 1, 0, 0, 0, 1, 0);
|
||||
break;
|
||||
case 90:
|
||||
matrix23Set(m, 0, 1, 0, -1, 0, width);
|
||||
break;
|
||||
case 180:
|
||||
matrix23Set(m, -1, 0, width, 0, -1, height);
|
||||
break;
|
||||
case 270:
|
||||
matrix23Set(m, 0, -1, height, 1, 0, 0);
|
||||
break;
|
||||
default:
|
||||
/*abort() */ ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Make flip/reflection matrix for width X height screen.
|
||||
*/
|
||||
void
|
||||
matrix23Flip(struct matrix23 *m, int width, int height, int xflip, int yflip)
|
||||
{
|
||||
if (xflip) {
|
||||
m->m00 = -1;
|
||||
m->m01 = 0;
|
||||
m->m02 = width - 1;
|
||||
}
|
||||
else {
|
||||
m->m00 = 1;
|
||||
m->m01 = 0;
|
||||
m->m02 = 0;
|
||||
}
|
||||
if (yflip) {
|
||||
m->m10 = 0;
|
||||
m->m11 = -1;
|
||||
m->m12 = height - 1;
|
||||
}
|
||||
else {
|
||||
m->m10 = 0;
|
||||
m->m11 = 1;
|
||||
m->m12 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* result = a * b
|
||||
*/
|
||||
void
|
||||
matrix23Multiply(struct matrix23 *result,
|
||||
const struct matrix23 *a, const struct matrix23 *b)
|
||||
{
|
||||
result->m00 = a->m00 * b->m00 + a->m01 * b->m10;
|
||||
result->m01 = a->m00 * b->m01 + a->m01 * b->m11;
|
||||
result->m02 = a->m00 * b->m02 + a->m01 * b->m12 + a->m02;
|
||||
|
||||
result->m10 = a->m10 * b->m00 + a->m11 * b->m10;
|
||||
result->m11 = a->m10 * b->m01 + a->m11 * b->m11;
|
||||
result->m12 = a->m10 * b->m02 + a->m11 * b->m12 + a->m12;
|
||||
}
|
||||
|
||||
|
||||
#if 000
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int width = 500, height = 400;
|
||||
int rot;
|
||||
int fx = 0, fy = 0; /* flip x and/or y ? */
|
||||
int coords[4][2];
|
||||
|
||||
/* four corner coords to test with */
|
||||
coords[0][0] = 0;
|
||||
coords[0][1] = 0;
|
||||
coords[1][0] = width - 1;
|
||||
coords[1][1] = 0;
|
||||
coords[2][0] = width - 1;
|
||||
coords[2][1] = height - 1;
|
||||
coords[3][0] = 0;
|
||||
coords[3][1] = height - 1;
|
||||
|
||||
|
||||
for (rot = 0; rot < 360; rot += 90) {
|
||||
struct matrix23 rotate, flip, m;
|
||||
int i;
|
||||
|
||||
printf("Rot %d, xFlip %d, yFlip %d:\n", rot, fx, fy);
|
||||
|
||||
/* make transformation matrix 'm' */
|
||||
matrix23Rotate(&rotate, width, height, rot);
|
||||
matrix23Flip(&flip, width, height, fx, fy);
|
||||
matrix23Multiply(&m, &rotate, &flip);
|
||||
|
||||
/* xform four coords */
|
||||
for (i = 0; i < 4; i++) {
|
||||
int x = coords[i][0];
|
||||
int y = coords[i][1];
|
||||
matrix23TransformCoordi(&m, &x, &y);
|
||||
printf(" %d, %d -> %d %d\n", coords[i][0], coords[i][1], x, y);
|
||||
}
|
||||
|
||||
/* xform width, height */
|
||||
{
|
||||
int x = width;
|
||||
int y = height;
|
||||
matrix23TransformDistance(&m, &x, &y);
|
||||
printf(" %d x %d -> %d x %d\n", width, height, x, y);
|
||||
}
|
||||
|
||||
/* xform rect */
|
||||
{
|
||||
int x = 50, y = 10, w = 200, h = 100;
|
||||
matrix23TransformRect(&m, &x, &y, &w, &h);
|
||||
printf(" %d,%d %d x %d -> %d, %d %d x %d\n", 50, 10, 200, 100,
|
||||
x, y, w, h);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
@@ -1,39 +0,0 @@
|
||||
#ifndef INTEL_ROTATE_H
|
||||
#define INTEL_ROTATE_H 1
|
||||
|
||||
struct matrix23
|
||||
{
|
||||
int m00, m01, m02;
|
||||
int m10, m11, m12;
|
||||
};
|
||||
|
||||
|
||||
|
||||
extern void
|
||||
matrix23Set(struct matrix23 *m,
|
||||
int m00, int m01, int m02, int m10, int m11, int m12);
|
||||
|
||||
extern void matrix23TransformCoordi(const struct matrix23 *m, int *x, int *y);
|
||||
|
||||
extern void
|
||||
matrix23TransformCoordf(const struct matrix23 *m, float *x, float *y);
|
||||
|
||||
extern void
|
||||
matrix23TransformDistance(const struct matrix23 *m, int *xDist, int *yDist);
|
||||
|
||||
extern void
|
||||
matrix23TransformRect(const struct matrix23 *m,
|
||||
int *x, int *y, int *w, int *h);
|
||||
|
||||
extern void
|
||||
matrix23Rotate(struct matrix23 *m, int width, int height, int angle);
|
||||
|
||||
extern void
|
||||
matrix23Flip(struct matrix23 *m, int width, int height, int xflip, int yflip);
|
||||
|
||||
extern void
|
||||
matrix23Multiply(struct matrix23 *result,
|
||||
const struct matrix23 *a, const struct matrix23 *b);
|
||||
|
||||
|
||||
#endif /* INTEL_ROTATE_H */
|
||||
@@ -485,156 +485,6 @@ intelClearWithTris(struct intel_context *intel, GLbitfield mask)
|
||||
UNLOCK_HARDWARE(intel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Copy the window contents named by dPriv to the rotated (or reflected)
|
||||
* color buffer.
|
||||
* srcBuf is BUFFER_BIT_FRONT_LEFT or BUFFER_BIT_BACK_LEFT to indicate the source.
|
||||
*/
|
||||
void
|
||||
intelRotateWindow(struct intel_context *intel,
|
||||
__DRIdrawablePrivate * dPriv, GLuint srcBuf)
|
||||
{
|
||||
intelScreenPrivate *screen = intel->intelScreen;
|
||||
drm_clip_rect_t fullRect;
|
||||
struct intel_framebuffer *intel_fb;
|
||||
struct intel_region *src;
|
||||
const drm_clip_rect_t *clipRects;
|
||||
int numClipRects;
|
||||
int i;
|
||||
GLenum format, type;
|
||||
|
||||
int xOrig, yOrig;
|
||||
int origNumClipRects;
|
||||
drm_clip_rect_t *origRects;
|
||||
|
||||
/*
|
||||
* set up hardware state
|
||||
*/
|
||||
intelFlush(&intel->ctx);
|
||||
|
||||
LOCK_HARDWARE(intel);
|
||||
|
||||
if (!intel->numClipRects) {
|
||||
UNLOCK_HARDWARE(intel);
|
||||
return;
|
||||
}
|
||||
|
||||
intel->vtbl.install_meta_state(intel);
|
||||
|
||||
intel->vtbl.meta_no_depth_write(intel);
|
||||
intel->vtbl.meta_no_stencil_write(intel);
|
||||
intel->vtbl.meta_color_mask(intel, GL_FALSE);
|
||||
|
||||
|
||||
/* save current drawing origin and cliprects (restored at end) */
|
||||
xOrig = intel->drawX;
|
||||
yOrig = intel->drawY;
|
||||
origNumClipRects = intel->numClipRects;
|
||||
origRects = intel->pClipRects;
|
||||
|
||||
/*
|
||||
* set drawing origin, cliprects for full-screen access to rotated screen
|
||||
*/
|
||||
fullRect.x1 = 0;
|
||||
fullRect.y1 = 0;
|
||||
fullRect.x2 = screen->rotatedWidth;
|
||||
fullRect.y2 = screen->rotatedHeight;
|
||||
intel->drawX = 0;
|
||||
intel->drawY = 0;
|
||||
intel->numClipRects = 1;
|
||||
intel->pClipRects = &fullRect;
|
||||
|
||||
intel->vtbl.meta_draw_region(intel, screen->rotated_region, NULL); /* ? */
|
||||
|
||||
intel_fb = dPriv->driverPrivate;
|
||||
|
||||
if ((srcBuf == BUFFER_BIT_BACK_LEFT && !intel_fb->pf_active)) {
|
||||
src = intel_get_rb_region(&intel_fb->Base, BUFFER_BACK_LEFT);
|
||||
clipRects = dPriv->pBackClipRects;
|
||||
numClipRects = dPriv->numBackClipRects;
|
||||
}
|
||||
else {
|
||||
src = intel_get_rb_region(&intel_fb->Base, BUFFER_FRONT_LEFT);
|
||||
clipRects = dPriv->pClipRects;
|
||||
numClipRects = dPriv->numClipRects;
|
||||
}
|
||||
|
||||
if (src->cpp == 4) {
|
||||
format = GL_BGRA;
|
||||
type = GL_UNSIGNED_BYTE;
|
||||
}
|
||||
else {
|
||||
format = GL_BGR;
|
||||
type = GL_UNSIGNED_SHORT_5_6_5_REV;
|
||||
}
|
||||
|
||||
/* set the whole screen up as a texture to avoid alignment issues */
|
||||
intel->vtbl.meta_tex_rect_source(intel,
|
||||
src->buffer,
|
||||
screen->width,
|
||||
screen->height, src->pitch, format, type);
|
||||
|
||||
intel->vtbl.meta_texture_blend_replace(intel);
|
||||
|
||||
/*
|
||||
* loop over the source window's cliprects
|
||||
*/
|
||||
for (i = 0; i < numClipRects; i++) {
|
||||
int srcX0 = clipRects[i].x1;
|
||||
int srcY0 = clipRects[i].y1;
|
||||
int srcX1 = clipRects[i].x2;
|
||||
int srcY1 = clipRects[i].y2;
|
||||
GLfloat verts[4][2], tex[4][2];
|
||||
int j;
|
||||
|
||||
/* build vertices for four corners of clip rect */
|
||||
verts[0][0] = srcX0;
|
||||
verts[0][1] = srcY0;
|
||||
verts[1][0] = srcX1;
|
||||
verts[1][1] = srcY0;
|
||||
verts[2][0] = srcX1;
|
||||
verts[2][1] = srcY1;
|
||||
verts[3][0] = srcX0;
|
||||
verts[3][1] = srcY1;
|
||||
|
||||
/* .. and texcoords */
|
||||
tex[0][0] = srcX0;
|
||||
tex[0][1] = srcY0;
|
||||
tex[1][0] = srcX1;
|
||||
tex[1][1] = srcY0;
|
||||
tex[2][0] = srcX1;
|
||||
tex[2][1] = srcY1;
|
||||
tex[3][0] = srcX0;
|
||||
tex[3][1] = srcY1;
|
||||
|
||||
/* transform coords to rotated screen coords */
|
||||
|
||||
for (j = 0; j < 4; j++) {
|
||||
matrix23TransformCoordf(&screen->rotMatrix,
|
||||
&verts[j][0], &verts[j][1]);
|
||||
}
|
||||
|
||||
/* draw polygon to map source image to dest region */
|
||||
intel_meta_draw_poly(intel, 4, verts, 0, 0, tex);
|
||||
|
||||
} /* cliprect loop */
|
||||
|
||||
intel->vtbl.leave_meta_state(intel);
|
||||
intel_batchbuffer_flush(intel->batch);
|
||||
|
||||
/* restore original drawing origin and cliprects */
|
||||
intel->drawX = xOrig;
|
||||
intel->drawY = yOrig;
|
||||
intel->numClipRects = origNumClipRects;
|
||||
intel->pClipRects = origRects;
|
||||
|
||||
UNLOCK_HARDWARE(intel);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called by ctx->Driver.Clear.
|
||||
*/
|
||||
@@ -848,7 +698,6 @@ intelScheduleSwap(__DRIdrawablePrivate * dPriv, GLboolean *missed_target)
|
||||
|
||||
if (!dPriv->vblFlags ||
|
||||
(dPriv->vblFlags & VBLANK_FLAG_NO_IRQ) ||
|
||||
intelScreen->current_rotation != 0 ||
|
||||
intelScreen->drmMinor < (intel_fb->pf_active ? 9 : 6))
|
||||
return GL_FALSE;
|
||||
|
||||
@@ -933,17 +782,12 @@ intelSwapBuffers(__DRIdrawablePrivate * dPriv)
|
||||
|
||||
_mesa_notifySwapBuffers(ctx); /* flush pending rendering comands */
|
||||
|
||||
if (screen->current_rotation != 0 ||
|
||||
!intelScheduleSwap(dPriv, &missed_target)) {
|
||||
if (!intelScheduleSwap(dPriv, &missed_target)) {
|
||||
driWaitForVBlank(dPriv, &missed_target);
|
||||
|
||||
if (screen->current_rotation != 0 || !intelPageFlip(dPriv)) {
|
||||
if (!intelPageFlip(dPriv)) {
|
||||
intelCopyBuffer(dPriv, NULL);
|
||||
}
|
||||
|
||||
if (screen->current_rotation != 0) {
|
||||
intelRotateWindow(intel, dPriv, BUFFER_BIT_FRONT_LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
intel_fb->swap_count++;
|
||||
|
||||
@@ -52,8 +52,4 @@ extern void intel_draw_buffer(GLcontext * ctx, struct gl_framebuffer *fb);
|
||||
|
||||
extern void intelInitBufferFuncs(struct dd_function_table *functions);
|
||||
|
||||
extern void
|
||||
intelRotateWindow(struct intel_context *intel,
|
||||
__DRIdrawablePrivate * dPriv, GLuint srcBuf);
|
||||
|
||||
#endif /* INTEL_BUFFERS_H */
|
||||
|
||||
@@ -202,8 +202,7 @@ intel_recreate_static(intelScreenPrivate *intelScreen,
|
||||
*
|
||||
* Although FBO's mean we now no longer use these as render targets in
|
||||
* all circumstances, they won't go away until the back and depth
|
||||
* buffers become private, and the front and rotated buffers will
|
||||
* remain even then.
|
||||
* buffers become private, and the front buffer will remain even then.
|
||||
*
|
||||
* Note that these don't allocate video memory, just describe
|
||||
* allocations alread made by the X server.
|
||||
@@ -217,17 +216,6 @@ intel_recreate_static_regions(intelScreenPrivate *intelScreen)
|
||||
&intelScreen->front,
|
||||
DRM_BO_FLAG_MEM_TT);
|
||||
|
||||
/* The rotated region is only used for old DDXes that didn't handle rotation
|
||||
\ * on their own.
|
||||
*/
|
||||
if (intelScreen->driScrnPriv->ddx_version.minor < 8) {
|
||||
intelScreen->rotated_region =
|
||||
intel_recreate_static(intelScreen,
|
||||
intelScreen->rotated_region,
|
||||
&intelScreen->rotated,
|
||||
DRM_BO_FLAG_MEM_TT);
|
||||
}
|
||||
|
||||
intelScreen->back_region =
|
||||
intel_recreate_static(intelScreen,
|
||||
intelScreen->back_region,
|
||||
@@ -252,24 +240,6 @@ intel_recreate_static_regions(intelScreenPrivate *intelScreen)
|
||||
DRM_BO_FLAG_MEM_TT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the information in the sarea to update the screen parameters
|
||||
* related to screen rotation. Needs to be called locked.
|
||||
*/
|
||||
void
|
||||
intelUpdateScreenRotation(__DRIscreenPrivate * sPriv, drmI830Sarea * sarea)
|
||||
{
|
||||
intelScreenPrivate *intelScreen = (intelScreenPrivate *) sPriv->private;
|
||||
|
||||
intelUnmapScreenRegions(intelScreen);
|
||||
intelUpdateScreenFromSAREA(intelScreen, sarea);
|
||||
if (!intelMapScreenRegions(sPriv)) {
|
||||
fprintf(stderr, "ERROR Remapping screen regions!!!\n");
|
||||
}
|
||||
intel_recreate_static_regions(intelScreen);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
intelUnmapScreenRegions(intelScreenPrivate * intelScreen)
|
||||
{
|
||||
@@ -323,9 +293,6 @@ intelPrintDRIInfo(intelScreenPrivate * intelScreen,
|
||||
fprintf(stderr, "*** Depth size: 0x%x offset: 0x%x pitch: %d\n",
|
||||
intelScreen->depth.size, intelScreen->depth.offset,
|
||||
intelScreen->depth.pitch);
|
||||
fprintf(stderr, "*** Rotated size: 0x%x offset: 0x%x pitch: %d\n",
|
||||
intelScreen->rotated.size, intelScreen->rotated.offset,
|
||||
intelScreen->rotated.pitch);
|
||||
fprintf(stderr, "*** Texture size: 0x%x offset: 0x%x\n",
|
||||
intelScreen->tex.size, intelScreen->tex.offset);
|
||||
fprintf(stderr, "*** Memory : 0x%x\n", gDRIPriv->mem);
|
||||
@@ -351,11 +318,6 @@ intelPrintSAREA(const drmI830Sarea * sarea)
|
||||
(unsigned) sarea->depth_handle);
|
||||
fprintf(stderr, "SAREA: tex offset: 0x%08x size: 0x%x handle: 0x%x\n",
|
||||
sarea->tex_offset, sarea->tex_size, (unsigned) sarea->tex_handle);
|
||||
fprintf(stderr, "SAREA: rotation: %d\n", sarea->rotation);
|
||||
fprintf(stderr,
|
||||
"SAREA: rotated offset: 0x%08x size: 0x%x\n",
|
||||
sarea->rotated_offset, sarea->rotated_size);
|
||||
fprintf(stderr, "SAREA: rotated pitch: %d\n", sarea->rotated_pitch);
|
||||
}
|
||||
|
||||
|
||||
@@ -409,15 +371,6 @@ intelUpdateScreenFromSAREA(intelScreenPrivate * intelScreen,
|
||||
intelScreen->tex.handle = sarea->tex_handle;
|
||||
intelScreen->tex.size = sarea->tex_size;
|
||||
|
||||
intelScreen->rotated.offset = sarea->rotated_offset;
|
||||
intelScreen->rotated.pitch = sarea->rotated_pitch * intelScreen->cpp;
|
||||
intelScreen->rotated.size = sarea->rotated_size;
|
||||
intelScreen->current_rotation = sarea->rotation;
|
||||
matrix23Rotate(&intelScreen->rotMatrix,
|
||||
sarea->width, sarea->height, sarea->rotation);
|
||||
intelScreen->rotatedWidth = sarea->virtualX;
|
||||
intelScreen->rotatedHeight = sarea->virtualY;
|
||||
|
||||
if (0)
|
||||
intelPrintSAREA(sarea);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
|
||||
#include <sys/time.h>
|
||||
#include "dri_util.h"
|
||||
#include "intel_rotate.h"
|
||||
#include "i830_common.h"
|
||||
#include "xmlconfig.h"
|
||||
#include "dri_bufmgr.h"
|
||||
@@ -53,7 +52,6 @@ typedef struct
|
||||
intelRegion front;
|
||||
intelRegion back;
|
||||
intelRegion third;
|
||||
intelRegion rotated;
|
||||
intelRegion depth;
|
||||
intelRegion tex;
|
||||
|
||||
@@ -61,7 +59,6 @@ typedef struct
|
||||
struct intel_region *back_region;
|
||||
struct intel_region *third_region;
|
||||
struct intel_region *depth_region;
|
||||
struct intel_region *rotated_region;
|
||||
|
||||
int deviceID;
|
||||
int width;
|
||||
@@ -82,11 +79,6 @@ typedef struct
|
||||
int irq_active;
|
||||
int allow_batchbuffer;
|
||||
|
||||
struct matrix23 rotMatrix;
|
||||
|
||||
int current_rotation; /* 0, 90, 180 or 270 */
|
||||
int rotatedWidth, rotatedHeight;
|
||||
|
||||
/**
|
||||
* Configuration cache with default values for all contexts
|
||||
*/
|
||||
@@ -128,7 +120,4 @@ intelCopySubBuffer(__DRIdrawablePrivate * dPriv, int x, int y, int w, int h);
|
||||
|
||||
extern struct intel_context *intelScreenContext(intelScreenPrivate *intelScreen);
|
||||
|
||||
extern void
|
||||
intelUpdateScreenRotation(__DRIscreenPrivate * sPriv, drmI830Sarea * sarea);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user