GeForce 6 Series OpenGL extensions posted

We just posted the specifications for some new OpenGL extensions. These allow access to the new functionality of the GeForce 6 series GPUs, including vertex texturing (NV_vertex_program3), fragment program branching (NV_fragment_program2) and floating point texture filtering and blending.

http://developer.nvidia.com/object/nvidia_opengl_specs.html

Thanks,

Simon Green
NVIDIA Developer Relations

Now if you’d only post some cards in stores, we’d all be set :slight_smile:

In actuality, I’m quite exceited that we’re getting to the land of real-time procedural shading. I grew up on POV-ray version 1 and 2 shading language.

>floating point texture filtering and blending

These functions correspond to any extension?

I would assume that would apply to the ATI float extensions, since those don’t restrict that functionality.

No NV_conditional_render ? It´s such a promising extension.

Jan.

Thanks!

Will vertex texturing be available in GLSL or Cg?

Yes, the floating point features are exposed using the ATI float extensions. Eventually these will be replaced with the new ARB float extension.

http://www.nvidia.com/dev_content/nvopenglspecs/GL_ATI_texture_float.txt
http://www.nvidia.com/dev_content/nvopenglspecs/WGL_EXT_pixel_format.txt

Originally posted by NitroGL:
I would assume that would apply to the ATI float extensions, since those don’t restrict that functionality.

Will vertex texturing be available in GLSL or Cg?
Glslang already exposes it.

Interesting extensions, but what I really need is NVEmulate that supports NV40 emulation. Why can’t we download this on the dev site?

-SirKnight

The new NVEmulate tool supports NV40 emulation with the 60 series drivers.

  • Klaus

Yes, and I have the 60.72 drivers but I can’t find where to download the NVEmulate program itself. There is a screenshot of it in one of the GDC04 presentations but no word on where to download it.

-SirKnight

Originally posted by simongreen:
[b]Yes, the floating point features are exposed using the ATI float extensions. Eventually these will be replaced with the new ARB float extension.

http://www.nvidia.com/dev_content/nvopenglspecs/GL_ATI_texture_float.txt
http://www.nvidia.com/dev_content/nvopenglspecs/WGL_EXT_pixel_format.txt

[/b]
Thanks, NitroGL and Simon.

Yes, and I have the 60.72 drivers but I can’t find where to download the NVEmulate program itself. There is a screenshot of it in one of the GDC04 presentations but no word on where to download it.
I read that Rivatuner allows to switch NV40 emulation on. I did not try it, but it should only be a registry key anyway …

  • Klaus

Question about vertex texture numbering of NV_vertex_program3.
Below code is correct?

// C++ code
// (GL_TEXTURE0_ARB to GL_TEXTURE15_ARB reserved for fragment texture image unit of GeForce6)
glActiveTextureARB( GL_TEXTURE16_ARB ); // for vertex texture image unit 0
glActiveTextureARB( GL_TEXTURE17_ARB ); // for vertex texture image unit 1
glActiveTextureARB( GL_TEXTURE18_ARB ); // for vertex texture image unit 2
glActiveTextureARB( GL_TEXTURE19_ARB ); // for vertex texture image unit 3

// NV_vertex_program3 code
ATTRIB VertexTexCoord = vertex.texcoord; // vertex texture coordinate
TEMP VertexTexel; // dummy result
TEX VertexTexel, VertexTexCoord, texture[0], 2D; // vertex texture image unit 0
TEX VertexTexel, VertexTexCoord, texture[1], 2D; // vertex texture image unit 1
TEX VertexTexel, VertexTexCoord, texture[2], 2D; // vertex texture image unit 2
TEX VertexTexel, VertexTexCoord, texture[3], 2D; // vertex texture image unit 3

NV_vertex_program3 BNF says “<texTargetType> ::= “1D” | “2D” | “3D” | “CUBE” | “RECT””.
GeForce6 also supports “3D” and “CUBE” as vertex texture target?

moichi,

No, vertex textures share the same texture image units as normal textures.

The extension supports all texture types, but the GeForce 6 series hardware only supports 2D textures.

I’ve copied some example code below.

-Simon.

GLuint vertex_texture;
glGenTextures(1, &vertex_texture);
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, vertex_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE_FLOAT32_ATI, width, height, 0, GL_LUMINANCE, GL_FLOAT, data);

!!ARBvp1.0
OPTION NV_vertex_program3;
PARAM mvp[4] = { state.matrix.mvp };
PARAM texmat[4] = { state.matrix.texture };
PARAM scale = program.local[0];
TEMP pos, displace;
// vertex texture lookup
TEX displace, texcoord, vertex.texcoord, 2D;
// try and do as much work here as possible that isn’t
// dependent on the texture lookup, to cover latency
MOV result.texcoord[0], texcoord;
MOV pos.w, 1.0;
// scale vertex along normal
MUL displace.x, displace.x, scale;
MAD pos.xyz, vertex.normal, displace.x, vertex.position;
// transform position to clip space
DP4 result.position.x, mvp[0], pos;
DP4 result.position.y, mvp[1], pos;
DP4 result.position.z, mvp[2], pos;
DP4 result.position.w, mvp[3], pos;
END;

Thanks, Simon.

It seems that conflict will occur between vertex texture image unit setting and fragment texture image unit setting.
(At DirectX, pixel shader sampler number is from 0, vertex shader sampler number is from 257.)

>// vertex texture lookup
>TEX displace, texcoord, vertex.texcoord, 2D;

I think this line should be “TEX displace, vertex.texcoord, texture[0], 2D;”.

I’m looking forward to see new samples includes vertex texturing and ForceWare 60.
(GeForce 6800 Ultra on sale yesterday in Japan though, very limited availability)

The option method is pretty neat.

PS: I thought NV_evaluators was dead