OpenCL on GPUs...

I have what might be a difficult question regarding the functionality of openCL on GPUs.
My previous experience writing code for GPUs has been in openGL and GLSL, but now I’m looking into openCL, and there is one thing that remains fairly unclear:
If it is not possible to write working code for an average GPU to do a specific task using openGL, GLSL, DirectX, etc, would it be possible for the same task to be performed on the same GPU with openCL. Does openCL have the capability to bring out any more functionality from a GPU than any of the GPU-specific coding languages mentioned, and if so, does anyone know how this is possible?? Any insight would be greatly appreciated.

Now for most tasks there is usually some way to execute it, even on a GPU, but it might be horribly inefficient. If there is an efficient way to execute a task, it seems that it should be possible to write it in GLSL or the like. So then, is it ever possible for openCL code written for only a GPU device to perform better than if it was written in a GPU-specific code for the same device, or is openCL’s advantage mainly in systems with multiple processors working together? Has anyone done any tests or investigations about this? Thanks in advance for any help to clear this up.

OpenCL can do things that are not possible with OpenGL/GLSL because it is not that much narrowed (or specialized on graphics). CL does not require the rendering pipeline at all (and thus does not suffer from its overhead). Also I am not aware of the possibility to pass structs to shaders in a platform independent way.