# HG changeset patch # User yutaka@localhost.localdomain # Date 1270999954 -32400 # Node ID febf899d004332185d866fc2e6a6b42a5c1b19d0 # Parent b25035e3282d0d36ae62b103117ea61397b9bdb9 mandelbrot diff -r b25035e3282d -r febf899d0043 ppe/Menu.cc --- 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"); diff -r b25035e3282d -r febf899d0043 ppe/fb.cc --- a/ppe/fb.cc Sat Apr 10 16:50:55 2010 +0900 +++ b/ppe/fb.cc Mon Apr 12 00:32:34 2010 +0900 @@ -50,6 +50,7 @@ vbpp = vinfo.bits_per_pixel ; line_len = finfo.line_length ; sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); + sprintf( tmp , "%d(xoffset)x%d(yoffset)",vinfo.xoffset, vinfo.yoffset); send_current_information( tmp ); /* バイト単位でのスクリーンのサイズを計算 */ diff -r b25035e3282d -r febf899d0043 task/Run.cc --- a/task/Run.cc Sat Apr 10 16:50:55 2010 +0900 +++ b/task/Run.cc Mon Apr 12 00:32:34 2010 +0900 @@ -1,4 +1,5 @@ #include +#include #include "Run.h" typedef struct { @@ -11,10 +12,22 @@ } rgb_t; void +mandelbrot(float &za, float &zb, float cx, float cy) { + + float tmp_za = za; + float tmp_zb = zb; + + za = tmp_za * tmp_za - tmp_zb * tmp_zb + cx; + zb = 2 * tmp_za * tmp_zb + cy; + +} + +void set_rgb(rgb_t rgb, int *pixels) { *pixels = (char)rgb.red | ((char)rgb.green) << 8 | ((char)rgb.bule) << 16 | ((char)rgb.alpha) << 24; + //*pixels = 255; } @@ -23,18 +36,45 @@ { int *pixels = (int*)out; - rgb_t rgb; + int *location = (int*)in; + + for (int l = location[0]; l <= location[0] + size_out; l += 4) { + int x = l / 4 % 1920; + int y = l / 4 / 1920; + + float a = 0; + float b = 0; + + float cx = (x - 1200) / 500.f; + float cy = (y - 540) / 500.f; + + int i; + for (i = 0; i < 255; i++) { - rgb.red = 0; - rgb.green = 255; - rgb.bule = 255; - rgb.alpha = 1; + mandelbrot(a, b, cx, cy); + + if( a*a + b*b > 4) { + break; + } + + } - for (int i = 0; i < size_out; i++) { - - set_rgb(rgb, &pixels[i]); + rgb_t rgb; + rgb.red = 255 * sin(i); + rgb.green = 255 * sin(i); + rgb.bule = 255 * cos(i); + rgb.alpha = 1; + set_rgb( rgb, &pixels[(l - location[0]) / 4] ); } + + //printf("location[0] %d\n",location[0]); + //printf("location[1] %d\n",location[1]); + + //rgb.red = 0; + //rgb.green = 255; + //rgb.bule = 255; + //rgb.alpha = 1; }