I've been explaining this to entity...
to get ViewSpace position you just need to simply interpolate the view space frustum corners
You need 4 corners of the far plane of the frustum... during the gbuffer render you only save depth of the pixels in range 0-1 LINEARLY (in floating point RTT)
With a simple method you use just the XY texture coords to interpolate between the 4 corners to get a point on the far plane that a ray passing through the pixel from the camera would intersect... then you interpolate that point with the camera position (which just happens to be 0,0,0 in view space, meaning this time you can just scale the point) using the 0-1 depth.
However please fill me in (with some paper reference) on what Light Accumulation pass is?
I can tell you a simple method of how to render light volumes.....
First you have got to be familiar with attenuation in lighting shaders, linear and quadratic (we can skip constant).
the attenuation for a lightsource is give like this 1.f/(distanceToLight*linear+distanceToLightSQ*quadratic)
obviously this means that the light volume is theoretically infinite, but in reality it means that light doesnt contribute to the scene if the attenuation < 1/256.f
We can imagine that the light volume is a sphere and a ray from each pixel passes through the sphere or not. Now depending on the length of the ray through the sphere we will attenuate the brightness of the light volume. First we need the radius for each light volume, we need to solve this equation to get the distance after which no light is added, ofc we dont want the volume bleeding through the walls or being to large. The actual raidus is going to be scaled at least 50 smaller, but with my approach the size of the light volume doesnt impact performance but only the number of volumes does. The equation is
1.f/256.f = 1.f/(x*linear+x^2*quadratic)
x^2*quadratic/256.f+x*linear/256.f-1.f=0
which is a simple quadratic equation.....
x = (-linear/256.f+sqrt(linear^2/256^2+4*quadratic/256))*256.f/(2*quadratic)
or something like that

that x will equal the radius for each light (r)
obviously for each ray from pixel
(x-lightPos.X)^2+(y-lightPos.Y)^2+(z-lightPos.Z)^2=radiusOfLightVolume
obviously you will need to rearrage this equation 3 times in terms of x,y, and z
then using some simultaneous equations you will need to solve intersection of sphere with a ray in the shader. which again turns out to be a quadratic expression, thus returning two intersections. The distance between the two intersections will be the ray length inside the sphere, this distance can be plugged back into the equation
distance*linear+distance*distance*quadratic
which will give an more intense light volume as the ray passes nearer the center of the sphere.
I am not handling spot lights with this equation, a totally different intersection model would be needed.
Also if you plan for SSAO, you should render light volumes AFTER the AO.