Signed-off-by: Zhigang Gong <zhigang.g...@linux.intel.com> --- backend/src/ocl_stdlib.tmpl.h | 30 ++++++++++++++++++------------ src/intel/intel_gpgpu.c | 2 +- 2 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h index 4dc3bd8..735fc60 100644 --- a/backend/src/ocl_stdlib.tmpl.h +++ b/backend/src/ocl_stdlib.tmpl.h @@ -2295,7 +2295,8 @@ ushort __gen_ocl_get_sampler_info(uint sampler_id); FIXUP_FLOAT_COORD(tmpCoord); \ } \ if (int_clamping_fix) { \ - if (OUT_OF_BOX(tmpCoord, surface_id)) { \ + if (OUT_OF_BOX(tmpCoord, surface_id, \ + (samplerValue & CLK_NORMALIZED_COORDS_TRUE))) { \ unsigned int border_alpha; \ int order = __gen_ocl_get_image_channel_order(surface_id); \ if (!CLK_HAS_ALPHA(order)) { \ @@ -2309,8 +2310,8 @@ ushort __gen_ocl_get_sampler_info(uint sampler_id); } \ } \ } \ - return __gen_ocl_read_image ##suffix(EXPEND_READ_COORD(surface_id, \ - sampler, tmpCoord), 0); \ + return __gen_ocl_read_image ##suffix( \ + EXPEND_READ_COORD(surface_id, sampler, tmpCoord), 0);\ } #define DECL_READ_IMAGE_NOSAMPLER(image_type, type, suffix, coord_type) \ @@ -2335,10 +2336,12 @@ ushort __gen_ocl_get_sampler_info(uint sampler_id); #define EXPEND_READ_COORD(id, sampler, coord) id, sampler, coord.s0, coord.s1 #define EXPEND_WRITE_COORD(id, coord, color) id, coord.s0, coord.s1, color -#define OUT_OF_BOX(coord, surface) \ - (coord.s0 < 0 || coord.s1 < 0 \ - || coord.s0 >= __gen_ocl_get_image_width(surface) \ - || coord.s1 >= __gen_ocl_get_image_height(surface)) +#define OUT_OF_BOX(coord, surface, normalized) \ + (coord.s0 < 0 || coord.s1 < 0 || \ + ((normalized == 0) \ + && (coord.s0 >= __gen_ocl_get_image_width(surface) \ + || coord.s1 >= __gen_ocl_get_image_height(surface))) \ + || ((normalized != 0) && (coord.s0 > 0x1p0 || coord.s1 > 0x1p0))) #define FIXUP_FLOAT_COORD(tmpCoord) \ { \ @@ -2366,11 +2369,14 @@ DECL_IMAGE(0, image2d_t, float4, f, 2) #define EXPEND_READ_COORD(id, sampler, coord) id, sampler, coord.s0, coord.s1, coord.s2 #define EXPEND_WRITE_COORD(id, coord, color) id, coord.s0, coord.s1, coord.s2, color -#define OUT_OF_BOX(coord, surface) \ - (coord.s0 < 0 || coord.s1 < 0 || coord.s2 < 0 \ - || coord.s0 >= __gen_ocl_get_image_width(surface) \ - || coord.s1 >= __gen_ocl_get_image_height(surface) \ - || coord.s2 >= __gen_ocl_get_image_depth(surface)) +#define OUT_OF_BOX(coord, surface, normalized) \ + (coord.s0 < 0 || coord.s1 < 0 || coord.s2 < 0 || \ + ((normalized == 0) \ + && (coord.s0 >= __gen_ocl_get_image_width(surface) \ + || coord.s1 >= __gen_ocl_get_image_height(surface) \ + || coord.s2 >= __gen_ocl_get_image_depth(surface))) \ + || ((normalized != 0) \ + &&(coord.s0 > 1 || coord.s1 > 1 || coord.s2 > 1))) #define FIXUP_FLOAT_COORD(tmpCoord) \ { \ diff --git a/src/intel/intel_gpgpu.c b/src/intel/intel_gpgpu.c index ae0a3fa..bc7b44c 100644 --- a/src/intel/intel_gpgpu.c +++ b/src/intel/intel_gpgpu.c @@ -844,7 +844,7 @@ intel_gpgpu_bind_sampler(intel_gpgpu_t *gpgpu, uint32_t *samplers, size_t sample * to repeat.*/ if ((samplers[index] & __CLK_ADDRESS_MASK) == CLK_ADDRESS_CLAMP) { intel_gpgpu_insert_sampler(gpgpu, index + 8, - (samplers[index] & ~__CLK_ADDRESS_MASK) | CLK_ADDRESS_REPEAT); + (samplers[index] & ~__CLK_ADDRESS_MASK) | CLK_ADDRESS_CLAMP_TO_EDGE); } #endif } -- 1.7.9.5 _______________________________________________ Beignet mailing list Beignet@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/beignet