There exists a long-standing bug with the bindless buffer extension that prevents one from directly offsetting an address for atomic operations, i.e. atomicAdd(buffer + offset, value) will yield a linker error:
So the required OPTION NV_shader_atomic_float is not set. This can be circumvented by assigning buffer + offset to a variable beforehand and using this as parameter for the atomic call. Apparently, the option is then defined and everything works smoothly from there. Funnily enough, once the option is present, you can add offsets directly. A complete compute shader for reproducibility:
#version 450
#extension GL_ARB_gpu_shader5 : enable
#extension GL_NV_shader_buffer_load : enable
#extension GL_NV_shader_atomic_float : enable
layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
uniform float* accumulationBuffer;
void main()
{
//atomicAdd(accumulationBuffer, 1.0); // OK
atomicAdd(accumulationBuffer + 1, 1.0); // Error
//float* b = accumulationBuffer + 1;
//atomicAdd(b, 1.0); // OK
//atomicAdd(accumulationBuffer, 1.0);
//atomicAdd(accumulationBuffer + 1, 1.0); // OK
}
System is Windows 8.1 64 bit, drivers 368.81 (but this bug has been around for years and has been reported before in the Dev Talk)