[Beignet] [PATCH 1/4] GBE: preare for get_image_xxx functions support.
Zhigang Gong
zhigang.gong at linux.intel.com
Fri May 17 01:59:57 PDT 2013
Only create the prototypes and the corresponding __gen_ocl_xxx
intrinsics. After this commit, the get_image_width/height could
pass the build, but will not generate code.
Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
---
backend/src/llvm/llvm_gen_backend.cpp | 8 +++++
backend/src/llvm/llvm_gen_ocl_function.hxx | 4 +++
backend/src/ocl_stdlib.h | 50 ++++++++++++++++++++++++++++++
3 files changed, 62 insertions(+)
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 99fc2ee..93fca4b 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -1660,6 +1660,8 @@ namespace gbe
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;
@@ -1823,6 +1825,12 @@ namespace gbe
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:
diff --git a/backend/src/llvm/llvm_gen_ocl_function.hxx b/backend/src/llvm/llvm_gen_ocl_function.hxx
index 055afa6..2fb33c0 100644
--- a/backend/src/llvm/llvm_gen_ocl_function.hxx
+++ b/backend/src/llvm/llvm_gen_ocl_function.hxx
@@ -70,6 +70,10 @@ DECL_LLVM_GEN_FUNCTION(WRITE_IMAGE13, _Z23__gen_ocl_write_imageuijfffDv4_j)
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)
diff --git a/backend/src/ocl_stdlib.h b/backend/src/ocl_stdlib.h
index f3b9413..92f9ba9 100644
--- a/backend/src/ocl_stdlib.h
+++ b/backend/src/ocl_stdlib.h
@@ -1096,6 +1096,9 @@ OVERLOADABLE void __gen_ocl_write_imageui(uint surface_id, int u, int v, int w,
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
@@ -1137,6 +1140,53 @@ DECL_IMAGE(float4, f)
#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) \
{\
--
1.7.11.7
More information about the Beignet
mailing list