diff --git a/src/radeon.h b/src/radeon.h index 7fd297e..ec14ae5 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 b745705..c144890 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 c7d9b02..7f116a5 100644 --- a/src/radeon_textured_videofuncs.c +++ b/src/radeon_textured_videofuncs.c @@ -382,7 +382,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. */ @@ -945,7 +945,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. */ @@ -2321,7 +2321,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. */ @@ -2349,8 +2349,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. */