From 78fab5c8dd2d4c6a68d299006148d2dfa480ff39 Mon Sep 17 00:00:00 2001 From: glevand Date: Mon, 26 Nov 2012 19:10:51 +0000 Subject: [PATCH] do not swap half-words in FP --- model_view_proj.c | 7 +------ quad.c | 7 +------ texture.c | 30 ++++-------------------------- triangle.c | 7 +------ util.c | 11 +++++++++++ util.h | 14 ++++++++++++++ vertex_buffer.c | 7 +------ 7 files changed, 33 insertions(+), 50 deletions(-) diff --git a/model_view_proj.c b/model_view_proj.c index 34ef0c2..900efa4 100644 --- a/model_view_proj.c +++ b/model_view_proj.c @@ -287,7 +287,7 @@ main(int argc, char **argv) uint32_t frag_prg[] = { /* MOVR R0, f[1] */ - 0x01003e01, 0x1c9dc801, 0x0001c800, 0x3fe1c800, + 0x3e010100, 0xc8011c9d, 0xc8000001, 0xc8003fe1, }; /* @@ -313,11 +313,6 @@ main(int argc, char **argv) { 0.0f, 0.0f, 1.0f, 1.0f }, }; - /* Swap half-words in fragment program */ - - for (i = 0; i < ARRAY_SIZE(frag_prg); i++) - frag_prg[i] = (frag_prg[i] << 16) | (frag_prg[i] >> 16); - err = setup_control(fd, context_id, fifo_handle, fifo_handle, 0xdeadbabe); if (err < 0) { perror("setup_control"); diff --git a/quad.c b/quad.c index 8b02b27..9c35ccb 100644 --- a/quad.c +++ b/quad.c @@ -279,7 +279,7 @@ main(int argc, char **argv) uint32_t frag_prg[] = { /* MOVR R0, f[1] */ - 0x01003e01, 0x1c9dc801, 0x0001c800, 0x3fe1c800, + 0x3e010100, 0xc8011c9d, 0xc8000001, 0xc8003fe1, }; /* @@ -307,11 +307,6 @@ main(int argc, char **argv) { 1.0f, 1.0f, 0.0f, 1.0f }, }; - /* Swap half-words in fragment program */ - - for (i = 0; i < ARRAY_SIZE(frag_prg); i++) - frag_prg[i] = (frag_prg[i] << 16) | (frag_prg[i] >> 16); - err = setup_control(fd, context_id, fifo_handle, fifo_handle, 0xdeadbabe); if (err < 0) { perror("setup_control"); diff --git a/texture.c b/texture.c index cafd7ae..b37a6fb 100644 --- a/texture.c +++ b/texture.c @@ -302,21 +302,6 @@ main(int argc, char **argv) }, }; - const struct texture_desc default_tex_desc = { - .td_loc = 0x1, - .td_off = 0, - .td_pitch = 8, - .td_w = 8, - .td_h = 8, - .td_fmt = 0x84, - .td_border = 0x1, - .td_depth = 0x1, - .td_dimension = 0x2, - .td_mipmap = 0x1, - .td_cubemap = 0x0, - .td_remap = (0x2 << 14) | (0x2 << 12) | (0x2 << 10) | (0x2 << 8) | - (0x3 << 6) | (0x2 << 4) | (0x1 << 2) | (0x0 << 0), - }; const struct texture_desc tex_desc = { .td_loc = 0x1, .td_off = tex_gaddr, @@ -371,17 +356,12 @@ main(int argc, char **argv) const struct vertex quad_verts[] = { /* xyzuv */ - { 0.5f, -0.5f, -1.0f, 0.0f, 0.0f }, - { -0.5f, -0.5f, -1.0f, 1.0f, 0.0f }, + { 0.5f, -0.5f, -1.0f, 1.0f, 0.0f }, + { -0.5f, -0.5f, -1.0f, 0.0f, 0.0f }, { -0.5f, 0.5f, -1.0f, 0.0f, 1.0f }, { 0.5f, 0.5f, -1.0f, 1.0f, 1.0f }, }; - /* Swap half-words in fragment program */ - - for (i = 0; i < ARRAY_SIZE(frag_prg); i++) - frag_prg[i] = (frag_prg[i] << 16) | (frag_prg[i] >> 16); - err = setup_control(fd, context_id, fifo_handle, fifo_handle, 0xdeadbabe); if (err < 0) { perror("setup_control"); @@ -401,9 +381,6 @@ main(int argc, char **argv) err += transfer_inline(fifo + err, 0xfeed0000, verts_gaddr, (uint32_t *) quad_verts, sizeof(quad_verts) / sizeof(uint32_t)); - for (i = 0; i < 16; i++) - err += set_texture(fifo + err, i, &default_tex_desc); - control[0x10] = fifo_gaddr + err * sizeof(uint32_t); err = wait_fifo_idle(control); @@ -433,6 +410,7 @@ main(int argc, char **argv) err += set_color_mask_mrt(fifo + err, 0x00000000); err += set_clear_color(fifo + err, clear_color[i]); err += set_scissor(fifo + err, 0, 0, 4095, 4095); + err += blend_enable(fifo + err, 0); err += clear_surface(fifo + err, 0x000000f1); err += set_viewport(fifo + err, 0, 0, DISPLAY_WIDTH, DISPLAY_HEIGHT, @@ -444,7 +422,7 @@ main(int argc, char **argv) err += set_texture(fifo + err, 0, &tex_desc); err += texture_ctrl(fifo + err, 0, 1, (0 << 8), (12 << 8), 0); err += set_texture_addr(fifo + err, 0, 0x3, 0x3, 0x3, 0x0, 0x1, 0x0); - err += set_texture_filter(fifo + err, 0, 0, 0x5, 0x2, 0x1); + err += set_texture_filter(fifo + err, 0, 0, 0x2, 0x2, 0x1); /* Compute MVP matrix */ diff --git a/triangle.c b/triangle.c index b029fba..a8c0b08 100644 --- a/triangle.c +++ b/triangle.c @@ -279,7 +279,7 @@ main(int argc, char **argv) uint32_t frag_prg[] = { /* MOVR R0, f[1] */ - 0x01003e01, 0x1c9dc801, 0x0001c800, 0x3fe1c800, + 0x3e010100, 0xc8011c9d, 0xc8000001, 0xc8003fe1, }; /* @@ -305,11 +305,6 @@ main(int argc, char **argv) { 0.0f, 0.0f, 1.0f, 1.0f }, }; - /* Swap half-words in fragment program */ - - for (i = 0; i < ARRAY_SIZE(frag_prg); i++) - frag_prg[i] = (frag_prg[i] << 16) | (frag_prg[i] >> 16); - err = setup_control(fd, context_id, fifo_handle, fifo_handle, 0xdeadbabe); if (err < 0) { perror("setup_control"); diff --git a/util.c b/util.c index 05d0e98..5f70745 100644 --- a/util.c +++ b/util.c @@ -359,6 +359,17 @@ set_shade_mode(uint32_t *fifo, uint32_t mode) } int +blend_enable(uint32_t *fifo, uint32_t enable) +{ + int i = 0; + + fifo[i++] = PS3GPU_MTH_HDR(1, 0, 0x310); + fifo[i++] = enable; + + return (i); +} + +int clear_surface(uint32_t *fifo, uint32_t mask) { int i = 0; diff --git a/util.h b/util.h index 7cde5ee..8996677 100644 --- a/util.h +++ b/util.h @@ -78,6 +78,18 @@ get_channel_id(const volatile void *driver_info) return (*(uint32_t *) ((uint8_t *) driver_info + 0xc)); } +static inline uint32_t +get_label_area_offset(const volatile void *driver_info) +{ + return (*(uint32_t *) ((uint8_t *) driver_info + 0x30)); +} + +static inline uint32_t +get_report_data_area_offset(const volatile void *driver_info) +{ + return (*(uint32_t *) ((uint8_t *) driver_info + 0x34)); +} + static inline int get_flip_status(const volatile void *driver_info, uint8_t head) { @@ -161,6 +173,8 @@ int set_front_poly_mode(uint32_t *fifo, uint32_t mode); int set_shade_mode(uint32_t *fifo, uint32_t mode); +int blend_enable(uint32_t *fifo, uint32_t enable); + int clear_surface(uint32_t *fifo, uint32_t mask); int set_surface(uint32_t *fifo, const struct surface_desc *sd); diff --git a/vertex_buffer.c b/vertex_buffer.c index 1eb5fa5..bc9befa 100644 --- a/vertex_buffer.c +++ b/vertex_buffer.c @@ -297,7 +297,7 @@ main(int argc, char **argv) uint32_t frag_prg[] = { /* MOVR R0, f[1] */ - 0x01003e01, 0x1c9dc801, 0x0001c800, 0x3fe1c800, + 0x3e010100, 0xc8011c9d, 0xc8000001, 0xc8003fe1, }; /* @@ -316,11 +316,6 @@ main(int argc, char **argv) { 0.5f, 0.5f, -1.0f, 0x0000ffff }, }; - /* Swap half-words in fragment program */ - - for (i = 0; i < ARRAY_SIZE(frag_prg); i++) - frag_prg[i] = (frag_prg[i] << 16) | (frag_prg[i] >> 16); - err = setup_control(fd, context_id, fifo_handle, fifo_handle, 0xdeadbabe); if (err < 0) { perror("setup_control"); -- 2.11.4.GIT