@@ -1929,6 +1929,78 @@ DEF_INTEL_SUB_GROUP_BLOCK_WRITE_IMAGE(ulong4, v4i64, __builtin_IB_simd_media_blo
1929
1929
DEF_INTEL_SUB_GROUP_BLOCK_WRITE_IMAGE (ulong8 , v8i64 , __builtin_IB_simd_media_block_write_8_l )
1930
1930
#endif // cl_intel_subgroups_long
1931
1931
1932
+ // OpSubgroupImageMediaBlockReadINTEL
1933
+ //
1934
+ // Reads a block of data from a 2D region of the specified 'Image'.
1935
+
1936
+ #define DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (TYPE , TYPE_ABBR ) \
1937
+ TYPE SPIRV_OVERLOADABLE SPIRV_BUILTIN(SubgroupImageMediaBlockReadINTEL, _##TYPE_ABBR##_img2d_ro_v2i32_i32_i32, _R##TYPE)( \
1938
+ global Img2d_ro* image, int2 coord, int width, int height) \
1939
+ { \
1940
+ int id = (int)__builtin_astype(image, global void*); \
1941
+ return as_##TYPE(__builtin_IB_media_block_read_u##TYPE(id, coord, width, height)); \
1942
+ } \
1943
+ TYPE SPIRV_OVERLOADABLE SPIRV_BUILTIN(SubgroupImageMediaBlockReadINTEL, _##TYPE_ABBR##_img2d_rw_v2i32_i32_i32, _R##TYPE)( \
1944
+ global Img2d_rw* image, int2 coord, int width, int height) \
1945
+ { \
1946
+ int id = (int)__builtin_astype(image, global void*); \
1947
+ return as_##TYPE(__builtin_IB_media_block_read_u##TYPE(id, coord, width, height)); \
1948
+ }
1949
+
1950
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (char , i8 )
1951
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (char2 , v2i8 )
1952
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (char4 , v4i8 )
1953
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (char8 , v8i8 )
1954
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (char16 , v16i8 )
1955
+
1956
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (short , i16 )
1957
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (short2 , v2i16 )
1958
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (short4 , v4i16 )
1959
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (short8 , v8i16 )
1960
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (short16 , v16i16 )
1961
+
1962
+ // Integer block reads don't have 16 element version.
1963
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (int , i32 )
1964
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (int2 , v2i32 )
1965
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (int4 , v4i32 )
1966
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_READ_IMAGE (int8 , v8i32 )
1967
+
1968
+ // OpSubgroupImageMediaBlockWriteINTEL
1969
+ //
1970
+ // Writes a block of data into a 2D region of the specified 'Image'.
1971
+
1972
+ #define DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (TYPE , TYPE_ABBR ) \
1973
+ void SPIRV_OVERLOADABLE SPIRV_BUILTIN(SubgroupImageMediaBlockWriteINTEL, _img2d_wo_v2i32_i32_i32_##TYPE_ABBR, )( \
1974
+ global Img2d_wo* image, int2 coord, int width, int height, TYPE data) \
1975
+ { \
1976
+ int id = (int)__builtin_astype(image, global void*); \
1977
+ __builtin_IB_media_block_write_u##TYPE(id, coord, width, height, as_u##TYPE(data)); \
1978
+ } \
1979
+ void SPIRV_OVERLOADABLE SPIRV_BUILTIN(SubgroupImageMediaBlockWriteINTEL, _img2d_rw_v2i32_i32_i32_##TYPE_ABBR, )( \
1980
+ global Img2d_rw* image, int2 coord, int width, int height, TYPE data) \
1981
+ { \
1982
+ int id = (int)__builtin_astype(image, global void*); \
1983
+ __builtin_IB_media_block_write_u##TYPE(id, coord, width, height, as_u##TYPE(data)); \
1984
+ }
1985
+
1986
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (char , i8 )
1987
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (char2 , v2i8 )
1988
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (char4 , v4i8 )
1989
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (char8 , v8i8 )
1990
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (char16 , v16i8 )
1991
+
1992
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (short , i16 )
1993
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (short2 , v2i16 )
1994
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (short4 , v4i16 )
1995
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (short8 , v8i16 )
1996
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (short16 , v16i16 )
1997
+
1998
+ // Integer block writes don't have 16 element version.
1999
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (int , i32 )
2000
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (int2 , v2i32 )
2001
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (int4 , v4i32 )
2002
+ DEF_INTEL_SUB_GROUP_MEDIA_BLOCK_WRITE_IMAGE (int8 , v8i32 )
2003
+
1932
2004
// Ballot Functions
1933
2005
1934
2006
uint intel_sub_group_ballot (bool p )
0 commit comments