I am not claiming that this is for current GL4 hardware, but for “next version of GL” which could mean for GL5.
There’s been no suggestion that I’m aware of from the IHVs that there’s going to be a new generation of hardware coming out soon. At least, not a new generation that offers any significant functionality differences.
This is not just early z + write whatever to gl_FragDepth. I really want the depth test to be against the value from the rasterizer, but the depth buffer updated to a different value that may or may not pass the depth test.
That’s exactly what that would be. The early depth test tests against gl_FragCoord.z. If it passes, the fragment shader executes. And if gl_FragDepth is honored after the test, then the value written to the Z buffer will necessarily be the changed value.
How is that not what you’re asking for?
As to why, I think the reason is barbarically simple: no version of D3D has this feature or anything really like it, so no hardware has the feature.
I think you have that backwards. Microsoft doesn’t dictate from on high what goes into D3D without consultation with IHVs. They get together, and Microsoft probably pushes for things. But stuff doesn’t go into D3D unless the IHVs agree to it. Just look at the D3D10 debacle as evidence of that.
Originally, a form of tessellation was going to be in D3D10, which is why AMD_vertex_shader_tessellator exists. Note that this is a pre-vertex shader tessellation stage. But NVIDIA didn’t want to do it. Maybe for good reason, maybe not. But because of that, Microsoft couldn’t put it in. This also is what led to D3D10.1, which was just D3D10 with minor bits of stuff. Minor bits of stuff that notably NVIDIA did not implement until their D3D11 hardware, while virtually all AMD hardware was D3D10.1 capable.
So I don’t think it’s that D3D doesn’t have the feature. It’s more likely that the IHVs don’t want the feature, and that’s why D3D doesn’t have it.
But now, the grapevine is like, there will be no D3D12, so… makes me wonder…
What grapevine is that exactly?
Also, that’s not terribly surprising. With shader_image_load_store, there’s really just not very much left to add. Oh sure, you might want blending in shaders, but unless there’s some specialized hardware for it, you can cover that with load/store.
The most you might get is some form of streaming textures or whatever.