DVI Output Errors

We are using a ramp in the blue color of each pixel in a generated image to verify that we are sending the correct data out and that we are not dropping any frames. When running our code on cards such as a GTX 680, GTX 780, Quadro 5800 or Quadro 6000 and capturing the image using a DVI frame grabber, we see a ramp in the blue color going from 0 to 0xFF and all the values are there in sequential order. However, when we use a GTX 690, Quadro K5000 or the new Quadro K6000, the value of 0xF8 will never appear. Instead we see 0xF7, F9, FA, FB, FC, FD, FE, FF, FF, 0… The correct values of F7, F8, F9, FA, FB, FC, FD, FE, FF, 0 … can be read from the frame buffer on the card, just the output from the DVI or Display Port connector is wrong. Any ideas? I am including a test program we use that is written using OpenSceneGraph. We also use a pixel shader to set the blue values and see the same results.

Thanks.

#include <osg/ArgumentParser>
#include <osgViewer/Viewer>
#include <osg/Geometry>
#include <osg/Array>
#include <osg/Program>

class DrawCallback : public osg::Drawable::DrawCallback
{
public:
DrawCallback() :
blue(0)
{
proj = new osg::RefMatrix;
proj->ref();
}

virtual void drawImplementation(osg::RenderInfo& ri, const osg::Drawable* draw) const
{
    osg::State& state = *ri.getState();

    glColor3ub(0, 0, blue++);

    state.applyModelViewMatrix(osg::Matrix::identity());
    state.applyProjectionMatrix(proj);

    draw->drawImplementation(ri);
}

private:
osg::RefMatrix* proj;
mutable unsigned char blue;
};

osg::Geometry* CreateQuad()
{
osg::Geometry* geom = new osg::Geometry;

osg::Vec3Array* coords = new osg::Vec3Array;

coords->push_back(osg::Vec3(-1, 1, 0));
coords->push_back(osg::Vec3(-1, -1, 0));
coords->push_back(osg::Vec3(1, -1, 0));
coords->push_back(osg::Vec3(1, 1, 0));

geom->setVertexArray(coords);

geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS, 0, 4));

geom->setUseDisplayList(false);
geom->setUseVertexBufferObjects(false);

geom->setDrawCallback(new DrawCallback);

osg::StateSet* ss = geom->getOrCreateStateSet();

ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
ss->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);

return geom;

}

int main(int argc, char* argv)
{
osg::ArgumentParser arguments(&argc, argv);

// construct the viewer.
osgViewer::Viewer viewer;

osg::Group* scene = new osg::Group;

osg::Geometry* g = CreateQuad();

osg::Geode* geode = new osg::Geode;
geode->addDrawable(g);

scene->addChild(geode);

osg::Camera* cam = viewer.getCamera();

cam->setViewMatrix(osg::Matrix::identity());
cam->setProjectionMatrix(osg::Matrix::identity());

// Add a viewport to the viewer and attach the scene graph.
viewer.setSceneData(scene);

while (!view.done())
{
    view.frame();
}

return (0);

}

This issue has been resolved with a new driver from NVIDIA, the linux 64 version is 331.31.