diff ppe/Menu.cc @ 7:febf899d0043

mandelbrot
author yutaka@localhost.localdomain
date Mon, 12 Apr 2010 00:32:34 +0900
parents 39d405bc46b7
children ec2c1003f9b6
line wrap: on
line diff
--- a/ppe/Menu.cc	Sat Apr 10 16:50:55 2010 +0900
+++ b/ppe/Menu.cc	Mon Apr 12 00:32:34 2010 +0900
@@ -14,27 +14,26 @@
 
   fb_t fb = get_fbdev_addr();
   int max_size = MAX_DMA_SIZE - sizeof(task_head_t);
-  int all_task_num = fb.height;
+  int all_line_num = fb.height;
   int line_size = fb.width * fb.bpp / DIV_BYTE;
 
   // line num per task
   int lnpt = max_size / line_size;
   int out_size = lnpt * line_size;
-  int list_length = (all_task_num / list_num) / lnpt;
+  int list_length = (all_line_num / list_num) / lnpt;
 
   int in_size  = sizeof(int)*4;
   int real_in_size = sizeof(int)*2;
 
   task_head_t *list_head = (task_head_t*)allocate(sizeof(task_head_t)*list_num);
+  task_t **tail = (task_t**)allocate(sizeof(task_t*)*list_num);
 
   int index = 0;
-
   for (int i = 0; i < list_num; i++) {
-
-    task_t *head = entry_head(&list_head[i]);
-
-    for (int j = 0; j < list_length; j++) {
-
+    tail[i] = entry_head(&list_head[i]);
+  }
+  
+  for (int i = 0; i < all_line_num / lnpt; i++) {
       task_t *task = task_allocate(in_size, 0);
       task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
       task->head->size_out = out_size;
@@ -47,13 +46,37 @@
       int pin_out = 0;
 
       set_pin(task, pin_in, pin_out);
-      head = add_list(head, task);
+      tail[i%list_num] = add_list(tail[i%list_num], task);
 
       index++;
 
-    }
+  }
+  
+//   for (int i = 0; i < list_num; i++) {
+
+//     task_t *head = entry_head(&list_head[i]);
+
+//     for (int j = 0; j < list_length; j++) {
+
+//       task_t *task = task_allocate(in_size, 0);
+//       task->head->ea_out = (unsigned long long) (unsigned long) &fb.pixels[index*out_size];
+//       task->head->size_out = out_size;
+//       int *in = (int*)task->input;
 
-  }
+//       in[0] = index*out_size;
+//       in[1] = (index+1)*out_size;
+
+//       int pin_in  = in_size - real_in_size;
+//       int pin_out = 0;
+
+//       set_pin(task, pin_in, pin_out);
+//       head = add_list(head, task);
+
+//       index++;
+
+//     }
+
+//   }
 
   printf("return run\n");