aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlan Hourihane <alanh@tungstengraphics.com>2008-02-05 15:18:05 +0000
committerAlan Hourihane <alanh@tungstengraphics.com>2008-02-05 15:18:05 +0000
commit936e32b08c05c9658cc51cd8fe118e0342733a79 (patch)
tree47b6e2efbf046a182b6854e0296b31237b546432 /tests
parent5997e10ca75ac87fd54b3bc0035938e1a9ad7929 (diff)
make modefb/modedemo match each others test output.
Diffstat (limited to 'tests')
-rw-r--r--tests/mode/modetest.c5
-rw-r--r--tests/modedemo/demo.c23
-rw-r--r--tests/modefb/demo.c83
3 files changed, 82 insertions, 29 deletions
diff --git a/tests/mode/modetest.c b/tests/mode/modetest.c
index eeb4b258..ab0cdc9c 100644
--- a/tests/mode/modetest.c
+++ b/tests/mode/modetest.c
@@ -347,15 +347,14 @@ int testDPMS(int fd, drmModeResPtr res)
int main(int argc, char **argv)
{
int fd;
- const char *driver = "i915"; /* hardcoded for now */
drmModeResPtr res;
printf("Starting test\n");
- fd = drmOpen(driver, NULL);
+ fd = drmOpenControl(0);
if (fd < 0) {
- printf("Failed to open the card fb\n");
+ printf("Failed to open the card fb (%d)\n",fd);
return 1;
}
diff --git a/tests/modedemo/demo.c b/tests/modedemo/demo.c
index de31e7a6..48a4f1f1 100644
--- a/tests/modedemo/demo.c
+++ b/tests/modedemo/demo.c
@@ -18,7 +18,7 @@
drmModeFBPtr createFB(int fd, drmModeResPtr res);
void testCursor(int fd, uint32_t crtc);
void prettyColors(int fd, unsigned int handle);
-void prettyCursor(int fd, unsigned int handle);
+void prettyCursor(int fd, unsigned int handle, unsigned int color);
/* structs for the demo_driver */
@@ -57,7 +57,7 @@ struct demo_driver
struct demo_screen screens[DEMO_MAX_SCREENS];
};
-struct demo_driver* demoCreateDriver(const char *name);
+struct demo_driver* demoCreateDriver(void);
void demoUpdateRes(struct demo_driver *driver);
int demoCreateScreens(struct demo_driver *driver);
void demoTakeDownScreen(struct demo_screen *screen);
@@ -87,14 +87,13 @@ static struct drm_mode_modeinfo mode = {
int main(int argc, char **argv)
{
- const char *driver_name = "i915"; /* hardcoded for now */
struct demo_driver *driver;
int num;
int i;
printf("starting demo\n");
- driver = demoCreateDriver(driver_name);
+ driver = demoCreateDriver();
if (!driver) {
printf("failed to create driver\n");
@@ -237,13 +236,13 @@ drmModeCrtcPtr demoFindFreeCrtc(struct demo_driver *driver, drmModeOutputPtr out
return crtc;
}
-struct demo_driver* demoCreateDriver(const char *name)
+struct demo_driver* demoCreateDriver(void)
{
struct demo_driver* driver = malloc(sizeof(struct demo_driver));
memset(driver, 0, sizeof(struct demo_driver));
- driver->fd = drmOpen(name, NULL);
+ driver->fd = drmOpenControl(0);
if (driver->fd < 0) {
printf("Failed to open the card fb\n");
@@ -328,8 +327,10 @@ drmModeFBPtr createFB(int fd, drmModeResPtr res)
DRM_BO_FLAG_NO_EVICT,
DRM_BO_HINT_DONT_FENCE, &bo);
- if (ret)
+ if (ret) {
+ printf("failed to create framebuffer (ret %d)\n",ret);
goto err;
+ }
ret = drmModeAddFB(fd, SIZE_X, SIZE_Y, 32, 32, PITCH * 4, &bo, &fb);
@@ -392,13 +393,13 @@ void testCursor(int fd, uint32_t crtc)
DRM_BO_FLAG_NO_EVICT,
DRM_BO_HINT_DONT_FENCE, &bo);
- prettyCursor(fd, bo.handle);
-
+ prettyCursor(fd, bo.handle, 0xFFFF00FF);
printf("set cursor\n");
drmModeSetCursor(fd, crtc, &bo, 64, 64);
printf("move cursor 0, 0\n");
drmModeMoveCursor(fd, crtc, 0, 0);
sleep(1);
+ prettyCursor(fd, bo.handle, 0xFFFF0000);
printf("move cursor 40, 40\n");
drmModeMoveCursor(fd, crtc, 40, 40);
sleep(1);
@@ -408,7 +409,7 @@ void testCursor(int fd, uint32_t crtc)
drmModeSetCursor(fd, crtc, NULL, 0, 0);
}
-void prettyCursor(int fd, unsigned int handle)
+void prettyCursor(int fd, unsigned int handle, unsigned int color)
{
drmBO bo;
unsigned int *ptr;
@@ -418,7 +419,7 @@ void prettyCursor(int fd, unsigned int handle)
drmBOMap(fd, &bo, DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, (void**)&ptr);
for (i = 0; i < (64 * 64); i++)
- ptr[i] = 0xFFFF00FF;
+ ptr[i] = color;
drmBOUnmap(fd, &bo);
drmBOUnreference(fd, &bo);
diff --git a/tests/modefb/demo.c b/tests/modefb/demo.c
index 9af369c2..f80753cf 100644
--- a/tests/modefb/demo.c
+++ b/tests/modefb/demo.c
@@ -4,6 +4,7 @@
#include <fcntl.h>
#include <string.h>
#include "linux/fb.h"
+#include <sys/mman.h>
#include "sys/ioctl.h"
#include "xf86drm.h"
#include "xf86drmMode.h"
@@ -12,19 +13,20 @@ void pretty(int fd);
void setMode(struct fb_var_screeninfo *var);
void pan(int fd, struct fb_var_screeninfo *var, int x, int y);
void cursor(int fd, int drmfd);
+void prettyColors(int fd);
void prettyCursor(int fd, unsigned int handle, unsigned int color);
extern void sleep(int);
+struct fb_var_screeninfo var;
+struct fb_fix_screeninfo fix;
+
int main(int argc, char **argv)
{
- struct fb_var_screeninfo var;
- struct fb_fix_screeninfo fix;
- const char* driver = "i915";
- const char* name = "/dev/fb0";
-
- int fd = open(name, O_RDONLY);
- int drmfd = drmOpen(driver, NULL);
+ const char* name = "/dev/fb1";
+ int i;
+ int fd = open(name, O_RDWR);
+ int drmfd = drmOpenControl(0);
if (fd == -1) {
printf("open %s : %s\n", name, strerror(errno));
@@ -32,7 +34,7 @@ int main(int argc, char **argv)
}
if (drmfd < 0) {
- printf("drmOpen failed\n");
+ printf("drmOpenControl failed\n");
return 1;
}
@@ -45,6 +47,15 @@ int main(int argc, char **argv)
printf("fix %s\n", strerror(errno));
setMode(&var);
+
+ if (ioctl(fd, FBIOPUT_VSCREENINFO, &var))
+ printf("var %s\n", strerror(errno));
+
+ for (i = 0; i < 1; i++) {
+ prettyColors(fd);
+ }
+ sleep(1);
+
printf("pan: 0, 0\n");
pan(fd, &var, 0, 0);
sleep(2);
@@ -71,12 +82,51 @@ void pan(int fd, struct fb_var_screeninfo *var, int x, int y)
var->xoffset = x;
var->yoffset = y;
- var->activate = FB_ACTIVATE_NOW;
-
- if (ioctl(fd, FBIOPUT_VSCREENINFO, var))
+ if (ioctl(fd, FBIOPAN_DISPLAY, var))
printf("pan error: %s\n", strerror(errno));
}
+void draw(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int v, unsigned int *ptr)
+{
+ int i, j;
+
+ for (i = x; i < x + w; i++)
+ for(j = y; j < y + h; j++)
+ ptr[(i * var.xres_virtual) + j] = v;
+}
+
+void prettyColors(int fd)
+{
+ unsigned int *ptr, *newptr;
+ int i,w,h;
+ int size = var.xres * var.yres * var.bits_per_pixel;
+
+ ptr = (unsigned int *)mmap(NULL, size,
+ PROT_READ|PROT_WRITE, MAP_SHARED, fd,
+ 0);
+ if (ptr < 0) {
+ printf("FAILED MMAP %d\n",errno);
+ exit(1);
+ }
+
+ newptr = ptr;
+ for (h = 0; h < var.yres; h++) {
+ for (w = 0; w < var.xres; w++) {
+ newptr[w] = 0xFFFFFFFF;
+ }
+ newptr += var.xres_virtual;
+ }
+
+ for (i = 0; i < 8; i++)
+ draw(i * 40, i * 40, 40, 40, 0, ptr);
+
+
+ draw(200, 100, 40, 40, 0xff00ff, ptr);
+ draw(100, 200, 40, 40, 0xff00ff, ptr);
+
+ munmap(ptr, size);
+}
+
/*
* Cursor support removed from the fb kernel interface
* using drm instead.
@@ -102,11 +152,13 @@ void cursor(int fd, int drmfd)
prettyCursor(drmfd, bo.handle, 0xFFFF00FF);
drmModeSetCursor(drmfd, crtc, &bo, 64, 64);
drmModeMoveCursor(drmfd, crtc, 0, 0);
- sleep(2);
- drmModeMoveCursor(drmfd, crtc, 40, 40);
+ sleep(1);
prettyCursor(drmfd, bo.handle, 0xFFFF0000);
- sleep(2);
- drmModeSetCursor(drmfd, crtc, 0, 0, 0);
+ drmModeMoveCursor(drmfd, crtc, 40, 40);
+ sleep(1);
+ drmModeMoveCursor(drmfd, crtc, 100, 100);
+ sleep(1);
+ drmModeSetCursor(drmfd, crtc, NULL, 0, 0);
drmBOUnreference(drmfd, &bo);
}
@@ -173,4 +225,5 @@ void setMode(struct fb_var_screeninfo *var) {
var->pixclock = 10000000 / mode.htotal * 1000 / mode.vtotal * 100;
/* avoid overflow */
var->pixclock = var->pixclock * 1000 / mode.vrefresh;
+ var->bits_per_pixel = 32;
}