Similar to how there are clCreateImage2D (which is also used for 1D) and clCreateImage3D, it would be very useful for linear algebra routines for a clCreateBuffer2D, and by extension a clCreateBuffer3D. In linear algebra, matrices/tensors and sub-matrices/tensors are typically defined by m (height), n (width), and lda (row_pitch), which aren't communicated well using the current clEnqueue{Read, Write}Buffer. The clEnqueue{Read, Write}Image seems to be a better match, but I'm not sure about the internal structure of cl_mem (or * _cl_mem).

Maybe new functions aren't needed if I can accomplish my goal of 2D and 3D buffers using images if there is an appropriate cl_mem_flags value, say channel_order of CL_R or CL_A and channel_data_type of CL_FLOAT or CL_DOUBLE?