diff --git a/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp b/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp index f60afc9..7d62a40 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp @@ -351,7 +351,9 @@ namespace { emit_bounds_check(const fs_builder &bld, const fs_reg &image, const fs_reg &addr, unsigned dims) { + const brw_device_info *devinfo = bld.shader->devinfo; const fs_reg size = offset(image, bld, BRW_IMAGE_PARAM_SIZE_OFFSET); + const fs_reg stride = offset(image, bld, BRW_IMAGE_PARAM_STRIDE_OFFSET); for (unsigned c = 0; c < dims; ++c) set_predicate(c == 0 ? BRW_PREDICATE_NONE : BRW_PREDICATE_NORMAL, @@ -360,6 +362,11 @@ namespace { offset(size, bld, c), BRW_CONDITIONAL_L)); + if (devinfo->gen == 7 && !devinfo->is_haswell) + set_predicate(BRW_PREDICATE_NORMAL, + bld.CMP(bld.null_reg_ud(), stride, fs_reg(4), + BRW_CONDITIONAL_G)); + return BRW_PREDICATE_NORMAL; } }