diff options
-rw-r--r-- | src/i830.h | 51 | ||||
-rw-r--r-- | src/i830_render.c | 75 | ||||
-rw-r--r-- | src/i830_uxa.c | 58 | ||||
-rw-r--r-- | src/i915_render.c | 113 | ||||
-rw-r--r-- | src/i965_render.c | 107 |
5 files changed, 271 insertions, 133 deletions
@@ -874,27 +874,46 @@ static inline int i830_fb_compression_supported(intel_screen_private *intel) return TRUE; } -#define I830FALLBACK(s, arg...) \ -do { \ - if (intel_get_screen_private(scrn)->fallback_debug) { \ - xf86DrvMsg(scrn->scrnIndex, X_INFO, \ - "fallback: " s "\n", ##arg); \ - } \ - return FALSE; \ -} while(0) +static inline void +intel_debug_fallback(ScrnInfoPtr scrn, char *format, ...) +{ + intel_screen_private *intel = intel_get_screen_private(scrn); + va_list ap; + + va_start(ap, format); + if (intel->fallback_debug) { + xf86DrvMsg(scrn->scrnIndex, X_INFO, "fallback: "); + LogVMessageVerb(X_INFO, 1, format, ap); + } + va_end(ap); +} Bool i830_pixmap_tiled(PixmapPtr p); -#define i830_exa_check_pitch_2d(p) do {\ - uint32_t pitch = intel_get_pixmap_pitch(p);\ - if (pitch > KB(32)) I830FALLBACK("pitch exceeds 2d limit 32K\n");\ -} while(0) +static inline Bool +intel_check_pitch_2d(PixmapPtr pixmap) +{ + uint32_t pitch = intel_get_pixmap_pitch(pixmap); + if (pitch > KB(32)) { + ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum]; + intel_debug_fallback(scrn, "pitch exceeds 2d limit 32K\n"); + return FALSE; + } + return TRUE; +} /* For pre-965 chip only, as they have 8KB limit for 3D */ -#define i830_exa_check_pitch_3d(p) do {\ - uint32_t pitch = intel_get_pixmap_pitch(p);\ - if (pitch > KB(8)) I830FALLBACK("pitch exceeds 3d limit 8K\n");\ -} while(0) +static inline Bool +intel_check_pitch_3d(PixmapPtr pixmap) +{ + uint32_t pitch = intel_get_pixmap_pitch(pixmap); + if (pitch > KB(8)) { + ScrnInfoPtr scrn = xf86Screens[pixmap->drawable.pScreen->myNum]; + intel_debug_fallback(scrn, "pitch exceeds 3d limit 8K\n"); + return FALSE; + } + return TRUE; +} /** * Little wrapper around drm_intel_bo_reloc to return the initial value you diff --git a/src/i830_render.c b/src/i830_render.c index b141ba4d..7fe528e9 100644 --- a/src/i830_render.c +++ b/src/i830_render.c @@ -143,6 +143,8 @@ static struct formatinfo i830_tex_formats[] = { static Bool i830_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) { + ScrnInfoPtr scrn; + switch (dest_picture->format) { case PICT_a8r8g8b8: case PICT_x8r8g8b8: @@ -163,14 +165,10 @@ static Bool i830_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) *dst_format = COLR_BUF_ARGB4444; break; default: - { - ScrnInfoPtr scrn; - - scrn = - xf86Screens[dest_picture->pDrawable->pScreen->myNum]; - I830FALLBACK("Unsupported dest format 0x%x\n", + scrn = xf86Screens[dest_picture->pDrawable->pScreen->myNum]; + intel_debug_fallback(scrn, "Unsupported dest format 0x%x\n", (int)dest_picture->format); - } + return FALSE; } *dst_format |= DSTORG_HORT_BIAS(0x8) | DSTORG_VERT_BIAS(0x8); return TRUE; @@ -225,13 +223,17 @@ static Bool i830_get_blend_cntl(ScrnInfoPtr scrn, int op, PicturePtr mask, static Bool i830_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, int unit) { - if (picture->repeatType > RepeatReflect) - I830FALLBACK("Unsupported picture repeat %d\n", + if (picture->repeatType > RepeatReflect) { + intel_debug_fallback(scrn, "Unsupported picture repeat %d\n", picture->repeatType); + return FALSE; + } if (picture->filter != PictFilterNearest && picture->filter != PictFilterBilinear) { - I830FALLBACK("Unsupported filter 0x%x\n", picture->filter); + intel_debug_fallback(scrn, "Unsupported filter 0x%x\n", + picture->filter); + return FALSE; } if (picture->pDrawable) { @@ -239,8 +241,12 @@ static Bool i830_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, w = picture->pDrawable->width; h = picture->pDrawable->height; - if ((w > 2048) || (h > 2048)) - I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h); + if ((w > 2048) || (h > 2048)) { + intel_debug_fallback(scrn, + "Picture w/h too large (%dx%d)\n", + w, h); + return FALSE; + } for (i = 0; i < sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0]); @@ -249,8 +255,12 @@ static Bool i830_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, break; } if (i == sizeof(i830_tex_formats) / sizeof(i830_tex_formats[0])) - I830FALLBACK("Unsupported picture format 0x%x\n", - (int)picture->format); + { + intel_debug_fallback(scrn, "Unsupported picture format " + "0x%x\n", + (int)picture->format); + return FALSE; + } } return TRUE; @@ -375,8 +385,11 @@ i830_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, uint32_t tmp1; /* Check for unsupported compositing operations. */ - if (op >= sizeof(i830_blend_op) / sizeof(i830_blend_op[0])) - I830FALLBACK("Unsupported Composite op 0x%x\n", op); + if (op >= sizeof(i830_blend_op) / sizeof(i830_blend_op[0])) { + intel_debug_fallback(scrn, "Unsupported Composite op 0x%x\n", + op); + return FALSE; + } if (mask_picture != NULL && mask_picture->componentAlpha && PICT_FORMAT_RGB(mask_picture->format)) { @@ -391,14 +404,20 @@ i830_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, "alpha and source value blending.\n"); } - if (!i830_check_composite_texture(scrn, source_picture, 0)) - I830FALLBACK("Check Src picture texture\n"); + if (!i830_check_composite_texture(scrn, source_picture, 0)) { + intel_debug_fallback(scrn, "Check Src picture texture\n"); + return FALSE; + } if (mask_picture != NULL - && !i830_check_composite_texture(scrn, mask_picture, 1)) - I830FALLBACK("Check Mask picture texture\n"); + && !i830_check_composite_texture(scrn, mask_picture, 1)) { + intel_debug_fallback(scrn, "Check Mask picture texture\n"); + return FALSE; + } - if (!i830_get_dest_format(dest_picture, &tmp1)) - I830FALLBACK("Get Color buffer format\n"); + if (!i830_get_dest_format(dest_picture, &tmp1)) { + intel_debug_fallback(scrn, "Get Color buffer format\n"); + return FALSE; + } return TRUE; } @@ -418,10 +437,14 @@ i830_prepare_composite(int op, PicturePtr source_picture, intel->render_dest_picture = dest_picture; intel->render_dest = dest; - i830_exa_check_pitch_3d(source); - if (mask) - i830_exa_check_pitch_3d(mask); - i830_exa_check_pitch_3d(dest); + if (!intel_check_pitch_3d(source)) + return FALSE; + if (mask) { + if (!intel_check_pitch_3d(mask)) + return FALSE; + } + if (!intel_check_pitch_3d(dest)) + return FALSE; if (!i830_get_dest_format(dest_picture, &intel->render_dest_format)) return FALSE; diff --git a/src/i830_uxa.c b/src/i830_uxa.c index 2b705962..75922cde 100644 --- a/src/i830_uxa.c +++ b/src/i830_uxa.c @@ -123,16 +123,21 @@ i830_get_aperture_space(ScrnInfoPtr scrn, drm_intel_bo ** bo_table, { intel_screen_private *intel = intel_get_screen_private(scrn); - if (intel->batch_bo == NULL) - I830FALLBACK("VT inactive\n"); + if (intel->batch_bo == NULL) { + intel_debug_fallback(scrn, "VT inactive\n"); + return FALSE; + } bo_table[0] = intel->batch_bo; if (drm_intel_bufmgr_check_aperture_space(bo_table, num_bos) != 0) { intel_batch_flush(scrn, FALSE); bo_table[0] = intel->batch_bo; if (drm_intel_bufmgr_check_aperture_space(bo_table, num_bos) != - 0) - I830FALLBACK("Couldn't get aperture space for BOs\n"); + 0) { + intel_debug_fallback(scrn, "Couldn't get aperture " + "space for BOs\n"); + return FALSE; + } } return TRUE; } @@ -165,21 +170,30 @@ i830_uxa_prepare_solid(PixmapPtr pixmap, int alu, Pixel planemask, Pixel fg) i830_get_pixmap_bo(pixmap), }; - if (!UXA_PM_IS_SOLID(&pixmap->drawable, planemask)) - I830FALLBACK("planemask is not solid"); + if (!UXA_PM_IS_SOLID(&pixmap->drawable, planemask)) { + intel_debug_fallback(scrn, "planemask is not solid\n"); + return FALSE; + } - if (pixmap->drawable.bitsPerPixel == 24) - I830FALLBACK("solid 24bpp unsupported!\n"); + if (pixmap->drawable.bitsPerPixel == 24) { + intel_debug_fallback(scrn, "solid 24bpp unsupported!\n"); + return FALSE; + } - if (pixmap->drawable.bitsPerPixel < 8) - I830FALLBACK("under 8bpp pixmaps unsupported\n"); + if (pixmap->drawable.bitsPerPixel < 8) { + intel_debug_fallback(scrn, "under 8bpp pixmaps unsupported\n"); + return FALSE; + } - i830_exa_check_pitch_2d(pixmap); + if (!intel_check_pitch_2d(pixmap)) + return FALSE; pitch = i830_pixmap_pitch(pixmap); - if (!i830_pixmap_pitch_is_aligned(pixmap)) - I830FALLBACK("pixmap pitch not aligned"); + if (!i830_pixmap_pitch_is_aligned(pixmap)) { + intel_debug_fallback(scrn, "pixmap pitch not aligned"); + return FALSE; + } if (!i830_get_aperture_space(scrn, bo_table, ARRAY_SIZE(bo_table))) return FALSE; @@ -260,17 +274,23 @@ i830_uxa_prepare_copy(PixmapPtr source, PixmapPtr dest, int xdir, i830_get_pixmap_bo(dest), }; - if (!UXA_PM_IS_SOLID(&source->drawable, planemask)) - I830FALLBACK("planemask is not solid"); + if (!UXA_PM_IS_SOLID(&source->drawable, planemask)) { + intel_debug_fallback(scrn, "planemask is not solid"); + return FALSE; + } - if (dest->drawable.bitsPerPixel < 8) - I830FALLBACK("under 8bpp pixmaps unsupported\n"); + if (dest->drawable.bitsPerPixel < 8) { + intel_debug_fallback(scrn, "under 8bpp pixmaps unsupported\n"); + return FALSE; + } if (!i830_get_aperture_space(scrn, bo_table, ARRAY_SIZE(bo_table))) return FALSE; - i830_exa_check_pitch_2d(source); - i830_exa_check_pitch_2d(dest); + if (!intel_check_pitch_2d(source)) + return FALSE; + if (!intel_check_pitch_2d(dest)) + return FALSE; intel->render_source = source; diff --git a/src/i915_render.c b/src/i915_render.c index 0a9c1e02..6a936bea 100644 --- a/src/i915_render.c +++ b/src/i915_render.c @@ -137,6 +137,8 @@ static uint32_t i915_get_blend_cntl(int op, PicturePtr mask, static Bool i915_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) { + ScrnInfoPtr scrn; + switch (dest_picture->format) { case PICT_a8r8g8b8: case PICT_x8r8g8b8: @@ -157,14 +159,11 @@ static Bool i915_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) *dst_format = COLR_BUF_ARGB4444; break; default: - { - ScrnInfoPtr scrn; - - scrn = - xf86Screens[dest_picture->pDrawable->pScreen->myNum]; - I830FALLBACK("Unsupported dest format 0x%x\n", + scrn = xf86Screens[dest_picture->pDrawable->pScreen->myNum]; + intel_debug_fallback(scrn, + "Unsupported dest format 0x%x\n", (int)dest_picture->format); - } + return FALSE; } return TRUE; } @@ -172,21 +171,30 @@ static Bool i915_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) static Bool i915_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, int unit) { - if (picture->repeatType > RepeatReflect) - I830FALLBACK("Unsupported picture repeat %d\n", + if (picture->repeatType > RepeatReflect) { + intel_debug_fallback(scrn, "Unsupported picture repeat %d\n", picture->repeatType); + return FALSE; + } if (picture->filter != PictFilterNearest && - picture->filter != PictFilterBilinear) - I830FALLBACK("Unsupported filter 0x%x\n", picture->filter); + picture->filter != PictFilterBilinear) { + intel_debug_fallback(scrn, "Unsupported filter 0x%x\n", + picture->filter); + return FALSE; + } if (picture->pDrawable) { int w, h, i; w = picture->pDrawable->width; h = picture->pDrawable->height; - if ((w > 2048) || (h > 2048)) - I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h); + if ((w > 2048) || (h > 2048)) { + intel_debug_fallback(scrn, + "Picture w/h too large (%dx%d)\n", + w, h); + return FALSE; + } for (i = 0; i < sizeof(i915_tex_formats) / sizeof(i915_tex_formats[0]); @@ -195,8 +203,12 @@ static Bool i915_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, break; } if (i == sizeof(i915_tex_formats) / sizeof(i915_tex_formats[0])) - I830FALLBACK("Unsupported picture format 0x%x\n", - (int)picture->format); + { + intel_debug_fallback(scrn, "Unsupported picture format " + "0x%x\n", + (int)picture->format); + return FALSE; + } } return TRUE; @@ -210,8 +222,11 @@ i915_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, uint32_t tmp1; /* Check for unsupported compositing operations. */ - if (op >= sizeof(i915_blend_op) / sizeof(i915_blend_op[0])) - I830FALLBACK("Unsupported Composite op 0x%x\n", op); + if (op >= sizeof(i915_blend_op) / sizeof(i915_blend_op[0])) { + intel_debug_fallback(scrn, "Unsupported Composite op 0x%x\n", + op); + return FALSE; + } if (mask_picture != NULL && mask_picture->componentAlpha && PICT_FORMAT_RGB(mask_picture->format)) { /* Check if it's component alpha that relies on a source alpha @@ -219,20 +234,29 @@ i915_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, * into the single source value that we get to blend with. */ if (i915_blend_op[op].src_alpha && - (i915_blend_op[op].src_blend != BLENDFACT_ZERO)) - I830FALLBACK("Component alpha not supported with " - "source alpha and source value " - "blending.\n"); + (i915_blend_op[op].src_blend != BLENDFACT_ZERO)) { + intel_debug_fallback(scrn, + "Component alpha not supported " + "with source alpha and source " + "value blending.\n"); + return FALSE; + } } - if (!i915_check_composite_texture(scrn, source_picture, 0)) - I830FALLBACK("Check Src picture texture\n"); + if (!i915_check_composite_texture(scrn, source_picture, 0)) { + intel_debug_fallback(scrn, "Check Src picture texture\n"); + return FALSE; + } if (mask_picture != NULL - && !i915_check_composite_texture(scrn, mask_picture, 1)) - I830FALLBACK("Check Mask picture texture\n"); + && !i915_check_composite_texture(scrn, mask_picture, 1)) { + intel_debug_fallback(scrn, "Check Mask picture texture\n"); + return FALSE; + } - if (!i915_get_dest_format(dest_picture, &tmp1)) - I830FALLBACK("Get Color buffer format\n"); + if (!i915_get_dest_format(dest_picture, &tmp1)) { + intel_debug_fallback(scrn, "Get Color buffer format\n"); + return FALSE; + } return TRUE; } @@ -256,8 +280,10 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit) if (i915_tex_formats[i].fmt == picture->format) break; } - if (i == sizeof(i915_tex_formats) / sizeof(i915_tex_formats[0])) - I830FALLBACK("unknown texture format\n"); + if (i == sizeof(i915_tex_formats) / sizeof(i915_tex_formats[0])) { + intel_debug_fallback(scrn, "unknown texture format\n"); + return FALSE; + } format = i915_tex_formats[i].card_fmt; switch (picture->repeatType) { @@ -288,7 +314,9 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit) break; default: filter = 0; - I830FALLBACK("Bad filter 0x%x\n", picture->filter); + intel_debug_fallback(scrn, "Bad filter 0x%x\n", + picture->filter); + return FALSE; } /* offset filled in at emit time */ @@ -336,10 +364,14 @@ i915_prepare_composite(int op, PicturePtr source_picture, intel->render_dest_picture = dest_picture; intel->render_dest = dest; - i830_exa_check_pitch_3d(source); - if (mask) - i830_exa_check_pitch_3d(mask); - i830_exa_check_pitch_3d(dest); + if (!intel_check_pitch_3d(source)) + return FALSE; + if (mask) { + if (!intel_check_pitch_3d(mask)) + return FALSE; + } + if (!intel_check_pitch_3d(dest)) + return FALSE; if (!i915_get_dest_format(dest_picture, &intel->i915_render_state.dst_format)) @@ -348,8 +380,10 @@ i915_prepare_composite(int op, PicturePtr source_picture, if (!i830_get_aperture_space(scrn, bo_table, ARRAY_SIZE(bo_table))) return FALSE; - if (!i915_texture_setup(source_picture, source, 0)) - I830FALLBACK("fail to setup src texture\n"); + if (!i915_texture_setup(source_picture, source, 0)) { + intel_debug_fallback(scrn, "fail to setup src texture\n"); + return FALSE; + } intel->dst_coord_adjust = 0; intel->src_coord_adjust = 0; @@ -357,8 +391,11 @@ i915_prepare_composite(int op, PicturePtr source_picture, if (source_picture->filter == PictFilterNearest) intel->dst_coord_adjust = -0.125; if (mask != NULL) { - if (!i915_texture_setup(mask_picture, mask, 1)) - I830FALLBACK("fail to setup mask texture\n"); + if (!i915_texture_setup(mask_picture, mask, 1)) { + intel_debug_fallback(scrn, + "fail to setup mask texture\n"); + return FALSE; + } if (mask_picture->filter == PictFilterNearest) intel->dst_coord_adjust = -0.125; diff --git a/src/i965_render.c b/src/i965_render.c index 710bd9db..5e8e8749 100644 --- a/src/i965_render.c +++ b/src/i965_render.c @@ -175,8 +175,9 @@ static Bool i965_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) *dst_format = BRW_SURFACEFORMAT_B4G4R4A4_UNORM; break; default: - I830FALLBACK("Unsupported dest format 0x%x\n", - (int)dest_picture->format); + intel_debug_fallback(scrn, "Unsupported dest format 0x%x\n", + (int)dest_picture->format); + return FALSE; } return TRUE; @@ -185,13 +186,18 @@ static Bool i965_get_dest_format(PicturePtr dest_picture, uint32_t * dst_format) static Bool i965_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, int unit) { - if (picture->repeatType > RepeatReflect) - I830FALLBACK("extended repeat (%d) not supported\n", - picture->repeatType); + if (picture->repeatType > RepeatReflect) { + intel_debug_fallback(scrn, + "extended repeat (%d) not supported\n", + picture->repeatType); + return FALSE; + } if (picture->filter != PictFilterNearest && picture->filter != PictFilterBilinear) { - I830FALLBACK("Unsupported filter 0x%x\n", picture->filter); + intel_debug_fallback(scrn, "Unsupported filter 0x%x\n", + picture->filter); + return FALSE; } if (picture->pDrawable) { @@ -199,8 +205,12 @@ static Bool i965_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, w = picture->pDrawable->width; h = picture->pDrawable->height; - if ((w > 8192) || (h > 8192)) - I830FALLBACK("Picture w/h too large (%dx%d)\n", w, h); + if ((w > 8192) || (h > 8192)) { + intel_debug_fallback(scrn, + "Picture w/h too large (%dx%d)\n", + w, h); + return FALSE; + } for (i = 0; i < sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0]); @@ -209,8 +219,13 @@ static Bool i965_check_composite_texture(ScrnInfoPtr scrn, PicturePtr picture, break; } if (i == sizeof(i965_tex_formats) / sizeof(i965_tex_formats[0])) - I830FALLBACK("Unsupported picture format 0x%x\n", - (int)picture->format); + { + intel_debug_fallback(scrn, + "Unsupported picture format " + "0x%x\n", + (int)picture->format); + return FALSE; + } } return TRUE; @@ -224,8 +239,11 @@ i965_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, uint32_t tmp1; /* Check for unsupported compositing operations. */ - if (op >= sizeof(i965_blend_op) / sizeof(i965_blend_op[0])) - I830FALLBACK("Unsupported Composite op 0x%x\n", op); + if (op >= sizeof(i965_blend_op) / sizeof(i965_blend_op[0])) { + intel_debug_fallback(scrn, + "Unsupported Composite op 0x%x\n", op); + return FALSE; + } if (mask_picture && mask_picture->componentAlpha && PICT_FORMAT_RGB(mask_picture->format)) { @@ -235,20 +253,28 @@ i965_check_composite(int op, PicturePtr source_picture, PicturePtr mask_picture, */ if (i965_blend_op[op].src_alpha && (i965_blend_op[op].src_blend != BRW_BLENDFACTOR_ZERO)) { - I830FALLBACK - ("Component alpha not supported with source " - "alpha and source value blending.\n"); + intel_debug_fallback(scrn, + "Component alpha not supported " + "with source alpha and source " + "value blending.\n"); + return FALSE; } } - if (!i965_check_composite_texture(scrn, source_picture, 0)) - I830FALLBACK("Check Src picture texture\n"); + if (!i965_check_composite_texture(scrn, source_picture, 0)) { + intel_debug_fallback(scrn, "Check Src picture texture\n"); + return FALSE; + } if (mask_picture != NULL - && !i965_check_composite_texture(scrn, mask_picture, 1)) - I830FALLBACK("Check Mask picture texture\n"); + && !i965_check_composite_texture(scrn, mask_picture, 1)) { + intel_debug_fallback(scrn, "Check Mask picture texture\n"); + return FALSE; + } - if (!i965_get_dest_format(dest_picture, &tmp1)) - I830FALLBACK("Get Color buffer format\n"); + if (!i965_get_dest_format(dest_picture, &tmp1)) { + intel_debug_fallback(scrn, "Get Color buffer format\n"); + return FALSE; + } return TRUE; @@ -1444,24 +1470,34 @@ i965_prepare_composite(int op, PicturePtr source_picture, uint32_t *binding_table; drm_intel_bo *binding_table_bo, *surface_state_bo; - if (composite_op->src_filter < 0) - I830FALLBACK("Bad src filter 0x%x\n", source_picture->filter); + if (composite_op->src_filter < 0) { + intel_debug_fallback(scrn, "Bad src filter 0x%x\n", + source_picture->filter); + return FALSE; + } composite_op->src_extend = sampler_state_extend_from_picture(source_picture->repeatType); - if (composite_op->src_extend < 0) - I830FALLBACK("Bad src repeat 0x%x\n", source_picture->repeatType); + if (composite_op->src_extend < 0) { + intel_debug_fallback(scrn, "Bad src repeat 0x%x\n", + source_picture->repeatType); + return FALSE; + } if (mask_picture) { composite_op->mask_filter = sampler_state_filter_from_picture(mask_picture->filter); - if (composite_op->mask_filter < 0) - I830FALLBACK("Bad mask filter 0x%x\n", - mask_picture->filter); + if (composite_op->mask_filter < 0) { + intel_debug_fallback(scrn, "Bad mask filter 0x%x\n", + mask_picture->filter); + return FALSE; + } composite_op->mask_extend = sampler_state_extend_from_picture(mask_picture->repeatType); - if (composite_op->mask_extend < 0) - I830FALLBACK("Bad mask repeat 0x%x\n", - mask_picture->repeatType); + if (composite_op->mask_extend < 0) { + intel_debug_fallback(scrn, "Bad mask repeat 0x%x\n", + mask_picture->repeatType); + return FALSE; + } } else { composite_op->mask_filter = SAMPLER_STATE_FILTER_NEAREST; composite_op->mask_extend = SAMPLER_STATE_EXTEND_NONE; @@ -1593,9 +1629,12 @@ i965_prepare_composite(int op, PicturePtr source_picture, if (!i965_composite_check_aperture(scrn)) { intel_batch_flush(scrn, FALSE); - if (!i965_composite_check_aperture(scrn)) - I830FALLBACK - ("Couldn't fit render operation in aperture\n"); + if (!i965_composite_check_aperture(scrn)) { + intel_debug_fallback(scrn, + "Couldn't fit render operation " + "in aperture\n"); + return FALSE; + } } intel->needs_render_state_emit = TRUE; |