summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/radeon.h6
-rw-r--r--src/radeon_exa_render.c9
-rw-r--r--src/radeon_textured_videofuncs.c15
3 files changed, 23 insertions, 7 deletions
diff --git a/src/radeon.h b/src/radeon.h
index 5cdc3dbb..1e479f4e 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -382,6 +382,12 @@ typedef enum {
(info->ChipFamily == CHIP_FAMILY_RV560) || \
(info->ChipFamily == CHIP_FAMILY_RV570))
+#define IS_R400_3D ((info->ChipFamily == CHIP_FAMILY_R420) || \
+ (info->ChipFamily == CHIP_FAMILY_RV410) || \
+ (info->ChipFamily == CHIP_FAMILY_RS690) || \
+ (info->ChipFamily == CHIP_FAMILY_RS600) || \
+ (info->ChipFamily == CHIP_FAMILY_RS740))
+
#define IS_R300_3D ((info->ChipFamily == CHIP_FAMILY_R300) || \
(info->ChipFamily == CHIP_FAMILY_RV350) || \
(info->ChipFamily == CHIP_FAMILY_R350) || \
diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
index b7457057..c1448900 100644
--- a/src/radeon_exa_render.c
+++ b/src/radeon_exa_render.c
@@ -1348,8 +1348,13 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
} else {
max_tex_w = 2048;
max_tex_h = 2048;
- max_dst_w = 4021;
- max_dst_h = 4021;
+ if (IS_R400_3D) {
+ max_dst_w = 4021;
+ max_dst_h = 4021;
+ } else {
+ max_dst_w = 2560;
+ max_dst_h = 2560;
+ }
}
if (pSrcPixmap->drawable.width > max_tex_w ||
diff --git a/src/radeon_textured_videofuncs.c b/src/radeon_textured_videofuncs.c
index 6ac2d6ea..bd3fa174 100644
--- a/src/radeon_textured_videofuncs.c
+++ b/src/radeon_textured_videofuncs.c
@@ -387,7 +387,7 @@ FUNC_NAME(RADEONDisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv
* We render a single, large triangle and use the scissor
* functionality to restrict it to the desired rectangle.
* Due to guardband limits on r3xx/r4xx, we can only use
- * the single triangle up to 4021 pixels; above that we
+ * the single triangle up to 2560/4021 pixels; above that we
* render as a quad.
*/
@@ -955,7 +955,7 @@ FUNC_NAME(R200DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
* We render a single, large triangle and use the scissor
* functionality to restrict it to the desired rectangle.
* Due to guardband limits on r3xx/r4xx, we can only use
- * the single triangle up to 4021 pixels; above that we
+ * the single triangle up to 2560/4021 pixels; above that we
* render as a quad.
*/
@@ -2331,7 +2331,7 @@ FUNC_NAME(R300DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
* We render a single, large triangle and use the scissor
* functionality to restrict it to the desired rectangle.
* Due to guardband limits on r3xx/r4xx, we can only use
- * the single triangle up to 4021 pixels; above that we
+ * the single triangle up to 2560/4021 pixels; above that we
* render as a quad.
*/
@@ -2359,8 +2359,13 @@ FUNC_NAME(R300DisplayTexturedVideo)(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv)
ErrorF("src: %d, %d, %d, %d\n", srcX, srcY, srcw, srch);
#endif
- if ((dstw+dsth) > 4021)
- use_quad = TRUE;
+ if (IS_R400_3D) {
+ if ((dstw+dsth) > 4021)
+ use_quad = TRUE;
+ } else {
+ if ((dstw+dsth) > 2560)
+ use_quad = TRUE;
+ }
/*
* Set up the scissor area to that of the output size.
*/