diff options
-rw-r--r-- | src/radeon.h | 6 | ||||
-rw-r--r-- | src/radeon_exa_render.c | 9 | ||||
-rw-r--r-- | src/radeon_textured_videofuncs.c | 15 |
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. */ |