Trying to get compute shader happening

I am attempting to run a compute shader, but cannot get any evidence that it activates.
To debug it, I am attempting to write to a texture image. I am using nvidia 32 bit driver 330.41

The compute shader source is:

#version 440
layout( local_size_x = 16, local_size_y = 16) in;
layout (rgba8ui, binding=3) uniform uimage2D debugTex;
void main()
        ivec2 texelcoords_2d = ivec2(gl_GlobalInvocationID.xy);
        uvec4 pixel;
        pixel = ivec4(0x60,0x71,0x52,0x7f);
        imageStore(debugTex, texelcoords_2d, pixel);

To compile it:

                                        p->fb_copy_shader_prog = glCreateShaderProgramv(GL_COMPUTE_SHADER, 1,
                                                        (const GLchar **)&shader_src);
                                        glGetProgramiv(p->fb_copy_shader_prog, GL_LINK_STATUS, &status);
                                                  /* report error and exit. */
                                        glGetProgramiv(p->fb_copy_shader_prog, GL_COMPUTE_WORK_GROUP_SIZE, p->work_group_size);

Create a debug texture for it to write to.

                                glGenTextures(1, (GLuint *)&p->debug_texture);
                                glBindTexture(GL_TEXTURE_2D, p->debug_texture);
                                glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8UI, p->glv.width, p->glv.height);
                                    int i;for(i = 0; i < length/4;i++)((int *)(p->debug_buffer))[i] = 0xdeadbeef;
                                    glTexSubImage2D(GL_TEXTURE_2D, 0, 0,0, p->glv.width,p->glv.height,  GL_RGBA_INTEGER_EXT, 
                                           GL_UNSIGNED_INT_8_8_8_8, p->debug_buffer);
                                glBindTexture(GL_TEXTURE_2D, 0);

Run the shader at a certain point in the render cycle.

                        glBindImageTexture(3, p->debug_texture, 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8UI);
                        glDispatchCompute(p->width/p->work_group_size[0], p->height/p->work_group_size[1], 1);
                        p->fbcapture_complete = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);

Then sometime later, after bufferswap and more rendering,

                                GLenum rtn;
                                rtn = glClientWaitSync(p->fbcapture_complete, GL_SYNC_FLUSH_COMMANDS_BIT, 50*1000000);
                                assert(rtn != GL_WAIT_FAILED);
                                assert(rtn != GL_TIMEOUT_EXPIRED);
                                glMemoryBarrier(GL_TEXTURE_UPDATE_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
                                glBindTexture(GL_TEXTURE_2D, p->debug_texture);
                                glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA_INTEGER_EXT, GL_UNSIGNED_INT_8_8_8_8, p->debug_buffer);
                                glBindTexture(GL_TEXTURE_2D, 0);

The data in the p->debug_buffer array is no different to what was written at texture creation time. I would like it to be the constant value set in the shader program, to prove that it is actually running, so I can start developing what I wish it to do.
If any kind person can point out errors or lines of attack, would be grateful.

The problem turns out to be non-opengl related. The glDispatchCompute call is being invoked with args 0,0,1, so does nothing. Embarrassing.