I seem to be running into an issue where image units can't be accessed past 1gb (I get zeroes instead of actual data).

gvec4 imageLoad(gimage1D image, int P);

Here, a signed integer is taken for the index, which I would expect limits addressing to 2gb as half the range is lost to negatives.

1. Is it normal to not not be able to address past 1gb, or have I made a mistake elsewhere?
2. If so, why at 1gb and not 2?
3. Is there a workaround that doesn't require two separate buffers? Maybe binding my 1D texture buffer as a 2D image instead?