These 3 are fairly simple, pipes, workgroups and subgroups.
We had a discussion with @azabaznov around features that are aliasing each other and we have discussed to use one feature macro for those. Clang should already ensure that both are set/unset simultaneously? And for those that are not set in clang we can set them correctly here in the header directly.
I think that here guarding the OpenCL version is correct?
Yeah, I we did. Note that this is applicable to fp64 and 3d image writes, while __openc_c_subgroups and cl_khr_subgroups are not equivalent as extension requires subgroup-independent forward progress but subgroup-independent forward progress is optional in OpenCL C 3.0. I'll try submit a patch for 3d image writes feature macro support this week.
Ok, I see so while the functions are identical they are not entirely equivalent extensions so vendors might support one but not the other? In this case I think we should keep checking both but it would be good to add a comment explaining why we are checking both macros here.
Btw do you happen to have spec reference? I can't find anything relevant.