case GEN_OCL_RNDE:
case GEN_OCL_RNDU:
case GEN_OCL_RNDD:
+ case GEN_OCL_GET_IMAGE_WIDTH:
+ case GEN_OCL_GET_IMAGE_HEIGHT:
// No structure can be returned
this->newRegister(&I);
break;
case GEN_OCL_LBARRIER: ctx.SYNC(ir::syncLocalBarrier); break;
case GEN_OCL_GBARRIER: ctx.SYNC(ir::syncGlobalBarrier); break;
case GEN_OCL_LGBARRIER: ctx.SYNC(ir::syncLocalBarrier | ir::syncGlobalBarrier); break;
+ case GEN_OCL_GET_IMAGE_WIDTH:
+ case GEN_OCL_GET_IMAGE_HEIGHT:
+ {
+ //GBE_ASSERT(AI != AE); const ir::Register surface_id = this->getRegister(*AI); ++AI; break;
+ break;
+ }
case GEN_OCL_READ_IMAGE0:
case GEN_OCL_READ_IMAGE1:
case GEN_OCL_READ_IMAGE2:
DECL_LLVM_GEN_FUNCTION(WRITE_IMAGE14, _Z22__gen_ocl_write_imagefjiiiDv4_f)
DECL_LLVM_GEN_FUNCTION(WRITE_IMAGE15, _Z22__gen_ocl_write_imagefjfffDv4_f)
+// To get image info function
+DECL_LLVM_GEN_FUNCTION(GET_IMAGE_WIDTH, __gen_ocl_get_image_width)
+DECL_LLVM_GEN_FUNCTION(GET_IMAGE_HEIGHT, __gen_ocl_get_image_height)
+
// saturation related functions.
DECL_LLVM_GEN_FUNCTION(SADD_SAT_CHAR, _Z12ocl_sadd_satcc)
DECL_LLVM_GEN_FUNCTION(SADD_SAT_SHORT, _Z12ocl_sadd_satss)
OVERLOADABLE void __gen_ocl_write_imageui(uint surface_id, float u, float v, float w, uint4 color);
OVERLOADABLE void __gen_ocl_write_imagef(uint surface_id, int u, int v, int w, float4 color);
OVERLOADABLE void __gen_ocl_write_imagef(uint surface_id, float u, float v, float w, float4 color);
+int __gen_ocl_get_image_width(uint surface_id);
+int __gen_ocl_get_image_height(uint surface_id);
+//OVERLOADABLE int __gen_ocl_get_image_depth(image3d_t image);
#define GET_IMAGE(cl_image, surface_id) \
uint surface_id = (uint)cl_image
#undef DECL_READ_IMAGE_NOSAMPLER
#undef DECL_WRITE_IMAGE
+#define DECL_IMAGE_INFO(image_type) \
+ INLINE_OVERLOADABLE int get_image_width(image_type image) \
+ { \
+ GET_IMAGE(image, surface_id);\
+ return __gen_ocl_get_image_width(surface_id);\
+ } \
+ INLINE_OVERLOADABLE int get_image_height(image_type image)\
+ { \
+ GET_IMAGE(image, surface_id);\
+ return __gen_ocl_get_image_height(surface_id); \
+ }
+#if 0
+ INLINE_OVERLOADABLE int get_image_channel_data_type(image_type image)\
+ { NOT_IMPLEMENTED; }\
+ INLINE_OVERLOADABLE int get_image_channel_order(image_type image)\
+ { NOT_IMPLEMENTED; }
+#endif
+
+
+DECL_IMAGE_INFO(image2d_t)
+DECL_IMAGE_INFO(image3d_t)
+#if 0
+/* The following functions are not implemented yet. */
+DECL_IMAGE_INFO(image1d_t)
+DECL_IMAGE_INFO(image1d_buffer_t)
+DECL_IMAGE_INFO(image1d_array_t)
+DECL_IMAGE_INFO(image2d_array_t)
+
+INLINE_OVERLOADABLE int get_image_depth(image3d_t image)
+ { return __gen_ocl_get_image_depth(image); }
+
+INLINE_OVERLOADABLE int2 get_image_dim(image2d_t image)
+ { return __gen_ocl_get_image_dim(image); }
+
+INLINE_OVERLOADABLE int2 get_image_dim(image2d_array_t image)
+ { return __gen_ocl_get_image_dim(image); }
+
+INLINE_OVERLOADABLE int4 get_image_dim(image2d_array_t image)
+ { return __gen_ocl_get_image_dim(image); }
+
+INLINE_OVERLOADABLE size_t get_image_array_size(image2d_array_t image)
+ { return __gen_ocl_get_image_array_size(image); }
+
+INLINE_OVERLOADABLE size_t get_image_array_size(image1d_array_t image)
+ { return __gen_ocl_get_image_array_size(image); }
+#endif
+
#define DECL_READ_IMAGE(type, suffix, coord_type) \
INLINE_OVERLOADABLE type read_image ## suffix(image3d_t cl_image, sampler_t sampler, coord_type coord) \
{\