1) Да, вы можете запустить свой шейдер несколько раз, не читая содержимое буфера, в который вы записываете, и читая их в конце (это очень распространенная практика в алгоритмах итеративной сортировки на GPU)
2) Если вы читаете / записываете данные в один и тот же буфер, да, они будут видны
3) Да, вам нужен барьер, в противном случае дипчек вычислительного шейдера будет запущен без ожидания завершения предыдущего,что приведет к неправильным результатам (как вы обеспокоены), если не сбои.Однако тип барьера будет зависеть от того, что вы делаете в своем шейдере.Вот полный список барьеров
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glMemoryBarrier.xhtml
Скорее всего, если вы сосредоточены на чтении / записи в SSBO, вы должны использовать барьер GL_SHADER_STORAGE_BARRIER_BIT
, но если выне уверен, вы можете просто использовать GL_ALL_BARRIER_BITS
.