October 28, 2016

problems with framebuffer and graphics driver

Hello,

i have a problem with the linux-framebuffer and this code:

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <unistd.h>
#include <stdio.h>
 
int main(int argc, char **argv) {
    int row, col, width, height, bitspp, bytespp;
    unsigned int *data;
 
       int fd = open("/dev/fb0", O_RDWR);
 
    struct fb_var_screeninfo screeninfo;
    ioctl(fd, FBIOGET_VSCREENINFO, &screeninfo);
 
    bitspp = screeninfo.bits_per_pixel;
    if(bitspp != 32) {
        printf("Farbaufloesung = %i Bits pro Pixel\n", bitspp);
        printf("Bitte aendern Sie die Farbtiefe auf 32 Bits pro Pixel\n");
        close(fd);
        return 1;
    }
 
    width  = screeninfo.xres;
    height = screeninfo.yres;
    bytespp = bitspp/8;
    if(sizeof(unsigned int) != bytespp) {
        close(fd);
        return 1;
    }
     
     
    data = (unsigned int*) mmap(0, width * height * bytespp, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
     
    int x=0;
    int i=1;
    while(1){
        for(row = 0; row < height; row++){
            for(col = 0; col < width; col++){
                data[row * width + col] = 0xFFFFFF;
                if(col == x){
                    data[row * width + col] = 0x0;
                }
            }
        }
        x+=i;
        if(x==width || x == 0){
            i*=-1;
        }
    }
    munmap(data, width * height * bytespp);
     
    close(fd);
    return 0;
}

if i am running this program with the NVIDIA binary driver version 367.57 it looks like this:

but if i am running the code with the xorg nouveaudriver it looks like this:

the "framerate" of the NVIDIA driver is really bad worse than the xorg-driver.
i ran this program a time ago with another driver that i dont know and there it ran faster (like the xorg-driver).
why runs the program different with different drivers and how can i solve this?
my system looks like this:

System:    Host: S5520 Kernel: 4.8.0-26-generic x86_64 (64 bit) Desktop: Unity 7.5.0  Distro: Ubuntu 16.10
Machine:   System: Intel product: TERRA Server v: ....................
           Mobo: Intel model: S5520HC v: E26045-454
           BIOS: Intel v: S5500.86B.01.00.0064.050520141428 date: 05/05/2014
CPU(s):    2 Hexa core Intel Xeon X5650s (-HT-MCP-SMP-) cache: 24576 KB 
           clock speeds: max: 2661 MHz 1: 1596 MHz 2: 1596 MHz 3: 1596 MHz 4: 1596 MHz 5: 1596 MHz 6: 1596 MHz
           7: 1596 MHz 8: 1596 MHz 9: 1596 MHz 10: 1596 MHz 11: 1596 MHz 12: 1596 MHz 13: 1596 MHz 14: 1596 MHz
           15: 1596 MHz 16: 1596 MHz 17: 1596 MHz 18: 1596 MHz 19: 1596 MHz 20: 1596 MHz 21: 1596 MHz
           22: 1596 MHz 23: 1596 MHz 24: 1596 MHz
Graphics:  Card: NVIDIA GK106 [GeForce GTX 650 Ti]
           Display Server: X.Org 1.18.4 drivers: nouveau (unloaded: fbdev,vesa) Resolution: 1440x900@59.89hz
           GLX Renderer: Gallium 0.4 on NVE6 GLX Version: 3.0 Mesa 12.0.3

 

Click Here!