summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/evergreen_exa.c3
-rw-r--r--src/r600_exa.c3
-rw-r--r--src/radeon.h1
-rw-r--r--src/radeon_exa.c12
-rw-r--r--src/radeon_exa_render.c9
5 files changed, 28 insertions, 0 deletions
diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
index 89afaff5..19d52d8f 100644
--- a/src/evergreen_exa.c
+++ b/src/evergreen_exa.c
@@ -863,6 +863,9 @@ static Bool EVERGREENCheckCompositeTexture(PicturePtr pPict,
RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
}
+ if (!radeon_transform_is_affine(pPict->transform))
+ RADEON_FALLBACK(("non-affine transforms not supported\n"));
+
return TRUE;
}
diff --git a/src/r600_exa.c b/src/r600_exa.c
index f6cde1db..c4589915 100644
--- a/src/r600_exa.c
+++ b/src/r600_exa.c
@@ -904,6 +904,9 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict,
RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
}
+ if (!radeon_transform_is_affine(pPict->transform))
+ RADEON_FALLBACK(("non-affine transforms not supported\n"));
+
return TRUE;
}
diff --git a/src/radeon.h b/src/radeon.h
index 84d3563b..25d026fd 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -1276,6 +1276,7 @@ extern void RADEONPMFini(ScrnInfoPtr pScrn);
#ifdef USE_EXA
/* radeon_exa.c */
extern Bool RADEONSetupMemEXA(ScreenPtr pScreen);
+extern Bool radeon_transform_is_affine(PictTransformPtr t);
/* radeon_exa_funcs.c */
extern void RADEONCopyCP(PixmapPtr pDst, int srcX, int srcY, int dstX,
diff --git a/src/radeon_exa.c b/src/radeon_exa.c
index 503d569b..9c40da79 100644
--- a/src/radeon_exa.c
+++ b/src/radeon_exa.c
@@ -174,6 +174,18 @@ Bool RADEONGetPixmapOffsetPitch(PixmapPtr pPix, uint32_t *pitch_offset)
return RADEONGetOffsetPitch(pPix, bpp, pitch_offset, offset, pitch);
}
+/**
+ * Returns whether the provided transform is affine.
+ *
+ * transform may be null.
+ */
+Bool radeon_transform_is_affine(PictTransformPtr t)
+{
+ if (t == NULL)
+ return TRUE;
+ return t->matrix[2][0] == 0 && t->matrix[2][1] == 0;
+}
+
#if X_BYTE_ORDER == X_BIG_ENDIAN
static unsigned long swapper_surfaces[6];
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index da724162..2e13b000 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -379,6 +379,9 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict,
RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
}
+ if (!radeon_transform_is_affine(pPict->transform))
+ RADEON_FALLBACK(("non-affine transforms not supported\n"));
+
return TRUE;
}
@@ -778,6 +781,9 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict,
RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
}
+ if (!radeon_transform_is_affine(pPict->transform))
+ RADEON_FALLBACK(("non-affine transforms not supported\n"));
+
return TRUE;
}
@@ -1162,6 +1168,9 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
RADEON_FALLBACK(("REPEAT_NONE unsupported for transformed xRGB source\n"));
}
+ if (!radeon_transform_is_affine(pPict->transform))
+ RADEON_FALLBACK(("non-affine transforms not supported\n"));
+
return TRUE;
}