summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--radeondemo.c73
1 files changed, 71 insertions, 2 deletions
diff --git a/radeondemo.c b/radeondemo.c
index 6041f30..48a1bba 100644
--- a/radeondemo.c
+++ b/radeondemo.c
@@ -16,7 +16,7 @@
struct radeon _radeon_ctx;
struct radeon *radeon = &_radeon_ctx;
-int run_test(struct radeon *radeon)
+int run_test1(struct radeon *radeon)
{
struct r600_accel_object test1 = {0};
int size, i;
@@ -60,10 +60,77 @@ int run_test(struct radeon *radeon)
radeon_bo_unmap(test1.bo);
}
+int run_test2(struct radeon *radeon)
+{
+ struct r600_accel_object test1 = {0};
+ int size, i;
+
+ test1.pitch = 1408;
+ test1.width = 1366;
+ test1.height = 768;
+ test1.bpp = 32;
+ test1.domain = RADEON_GEM_DOMAIN_GTT;
+ test1.tiling_flags = 0;
+
+ size = test1.pitch*test1.height*(test1.bpp / 8);
+ test1.bo = radeon_bo_open(radeon->bufmgr, 0, size, 4096, RADEON_GEM_DOMAIN_GTT, 0);
+ if (!test1.bo)
+ return -1;
+
+ radeon_bo_map(test1.bo, 1);
+ {
+ uint32_t *data = test1.bo->ptr;
+ data[0] = 0xdeadbeef;
+ }
+ radeon_bo_unmap(test1.bo);
+
+ do_solid_fill_prepare(radeon, &test1, 0xffff0000);
+ evergreen_solid(radeon, 0, 0, test1.width, test1.height);
+ evergreen_finish_op(radeon, 8);
+
+ radeon_cs_flush_indirect(radeon);
+
+ radeon_bo_map(test1.bo, 0);
+
+ {
+ uint32_t *data = test1.bo->ptr;
+ for (i = 0; i < 32; i++) {
+ fprintf(stderr,"%08x ", data[i]);
+ }
+ fprintf(stderr,"\n");
+
+// fprintf(stderr,"bo1 %08x %08x\n", data[0], data[1]);
+ }
+ radeon_bo_unmap(test1.bo);
+}
+
+bool is_accel_working(struct radeon *radeon)
+{
+struct drm_radeon_info ginfo;
+ int r,tmp;
+ memset(&ginfo, 0, sizeof(ginfo));
+ ginfo.request = RADEON_INFO_ACCEL_WORKING2;
+ r = drmCommandWriteRead(radeon->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
+ if (r) {
+ /* If kernel is too old before 2.6.32 than assume accel is working */
+ if (r == -EINVAL) {
+ ErrorF("Kernel too old missing accel "
+ "information, assuming accel is working\n");
+ return true;
+ }
+ return false;
+ }
+ if (tmp)
+ return true;
+ return false;
+
+}
int radeon_init(struct radeon *radeon, int fd)
{
radeon->fd = fd;
+ is_accel_working(radeon);
+
{
struct drm_radeon_gem_info mminfo;
@@ -153,7 +220,9 @@ int main(int argc, char **argv)
exit(-1);
}
- run_test(radeon);
+ run_test1(radeon);
+
+ run_test2(radeon);
radeon_fini(radeon);
drmClose(drmFD);