diff --git a/Makefile.wiiu b/Makefile.wiiu index 453d22a9be..78b0137d0b 100644 --- a/Makefile.wiiu +++ b/Makefile.wiiu @@ -75,10 +75,15 @@ else OBJ += wiiu/system/missing_libc_functions.o OBJ += wiiu/shader_utils.o - OBJ += wiiu/tex_shader.o - OBJ += wiiu/sprite_shader.o - OBJ += wiiu/frame_shader.o - OBJ += wiiu/ribbon_shader.o + OBJ += gfx/drivers/gx2_shaders/tex.o + OBJ += gfx/drivers/gx2_shaders/sprite.o + OBJ += gfx/drivers/gx2_shaders/frame.o + OBJ += gfx/drivers/gx2_shaders/ribbon.o + OBJ += gfx/drivers/gx2_shaders/ribbon_simple.o + OBJ += gfx/drivers/gx2_shaders/bokeh.o + OBJ += gfx/drivers/gx2_shaders/snow.o + OBJ += gfx/drivers/gx2_shaders/snow_simple.o + OBJ += gfx/drivers/gx2_shaders/snowflake.o OBJ += gfx/drivers_shader/slang_preprocess.o OBJ += gfx/drivers_shader/glslang_util.o @@ -124,7 +129,7 @@ else BLACKLIST := $(LIBRETRO_COMM_DIR)/net/net_ifinfo.o OBJ := $(filter-out $(BLACKLIST),$(OBJ)) - OBJ += gfx/drivers/wiiu_gfx.o + OBJ += gfx/drivers/gx2_gfx.o OBJ += gfx/drivers_font/wiiu_font.o OBJ += menu/drivers_display/menu_display_wiiu.o OBJ += input/drivers/wiiu_input.o diff --git a/gfx/common/gx2_common.h b/gfx/common/gx2_common.h index 6412870379..3ab9d9eefe 100644 --- a/gfx/common/gx2_common.h +++ b/gfx/common/gx2_common.h @@ -2,10 +2,10 @@ #include -#include "wiiu/frame_shader.h" -#include "wiiu/tex_shader.h" -#include "wiiu/sprite_shader.h" -#include "wiiu/ribbon_shader.h" +#include "gfx/drivers/gx2_shaders/frame.h" +#include "gfx/drivers/gx2_shaders/tex.h" +#include "gfx/drivers/gx2_shaders/sprite.h" +#include "gfx/drivers/gx2_shaders/menu_shaders.h" #include "gfx/video_shader_parse.h" #undef _X @@ -74,8 +74,8 @@ typedef struct int width; int height; - float* menu_display_coord_array; - ribbon_uniform_t* ribbon_ubo; + float* menu_shader_vbo; + menu_shader_uniform_t* menu_shader_ubo; struct { diff --git a/gfx/drivers/wiiu_gfx.c b/gfx/drivers/gx2_gfx.c similarity index 99% rename from gfx/drivers/wiiu_gfx.c rename to gfx/drivers/gx2_gfx.c index 0f0c3d3389..4743c9fc8b 100644 --- a/gfx/drivers/wiiu_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -286,7 +286,13 @@ static void *wiiu_gfx_init(const video_info_t *video, GX2InitShader(&frame_shader); GX2InitShader(&tex_shader); GX2InitShader(&sprite_shader); + GX2InitShader(&ribbon_simple_shader); GX2InitShader(&ribbon_shader); + GX2InitShader(&bokeh_shader); + GX2InitShader(&snow_shader); + GX2InitShader(&snow_simple_shader); + GX2InitShader(&snowflake_shader); + GX2SetShader(&frame_shader); wiiu->ubo_vp = MEM1_alloc(sizeof(*wiiu->ubo_vp), GX2_UNIFORM_BLOCK_ALIGNMENT); @@ -665,7 +671,13 @@ static void wiiu_gfx_free(void *data) GX2DestroyShader(&frame_shader); GX2DestroyShader(&tex_shader); GX2DestroyShader(&sprite_shader); + GX2DestroyShader(&ribbon_simple_shader); GX2DestroyShader(&ribbon_shader); + GX2DestroyShader(&bokeh_shader); + GX2DestroyShader(&snow_shader); + GX2DestroyShader(&snow_simple_shader); + GX2DestroyShader(&snowflake_shader); + wiiu_free_shader_preset(wiiu); #ifdef HAVE_OVERLAY @@ -680,8 +692,8 @@ static void wiiu_gfx_free(void *data) MEM2_free(wiiu->menu.v); MEM2_free(wiiu->vertex_cache.v); MEM2_free(wiiu->vertex_cache_tex.v); - MEM2_free(wiiu->menu_display_coord_array); - MEM2_free(wiiu->ribbon_ubo); + MEM2_free(wiiu->menu_shader_vbo); + MEM2_free(wiiu->menu_shader_ubo); MEM1_free(wiiu->color_buffer.surface.image); MEM1_free(wiiu->ubo_vp); diff --git a/gfx/drivers/gx2_shaders/bokeh.c b/gfx/drivers/gx2_shaders/bokeh.c new file mode 100644 index 0000000000..5790f4d688 --- /dev/null +++ b/gfx/drivers/gx2_shaders/bokeh.c @@ -0,0 +1,801 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2014-2018 - Ali Bouhlel + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "gx2_shader_inl.h" +#include "menu_shaders.h" + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[16]; +} vs_program = +{ + { + CALL_FS NO_BARRIER, + ALU(32,16) KCACHE0(CB1, _0_15), + EXP_DONE(POS0, _R1,_x,_y,_z,_w), + EXP_DONE(PARAM0, _R0,_m,_m,_m,_m) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_x, _R1,_w, KC0(3),_w), + ALU_MUL(__,_y, _R1,_w, KC0(3),_z), + ALU_MUL(__,_z, _R1,_w, KC0(3),_y), + ALU_MUL(__,_w, _R1,_w, KC0(3),_x) + ALU_LAST, + /* 1 */ + ALU_MULADD(_R123,_x, _R1,_z, KC0(2),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_z, KC0(2),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_z, KC0(2),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_z, KC0(2),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 2 */ + ALU_MULADD(_R123,_x, _R1,_y, KC0(1),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_y, KC0(1),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_y, KC0(1),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_y, KC0(1),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 3 */ + ALU_MULADD(_R1,_x, _R1,_x, KC0(0),_x, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_y, _R1,_x, KC0(0),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R1,_z, _R1,_x, KC0(0),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R1,_w, _R1,_x, KC0(0),_w, ALU_SRC_PV,_x) + ALU_LAST, + }, +}; + + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[70]; + u64 alu1[19]; + u64 alu2[31]; + u64 alu3[25]; + u64 alu4[31]; + u64 alu5[25]; + u64 alu6[31]; + u64 alu7[25]; + u64 alu8[31]; + u64 alu9[25]; + u64 alu10[31]; + u64 alu11[25]; + u64 alu12[17]; +} ps_program = +{ + { + ALU_PUSH_BEFORE(32,70) KCACHE0(CB1, _0_15), + JUMP(1, 3) VALID_PIX, + ALU_POP_AFTER(102,19), + ALU_PUSH_BEFORE(121,31) KCACHE0(CB1, _0_15), + JUMP(1, 6) VALID_PIX, + ALU_POP_AFTER(152,25), + ALU_PUSH_BEFORE(177,31) KCACHE0(CB1, _0_15), + JUMP(1, 9) VALID_PIX, + ALU_POP_AFTER(208,25), + ALU_PUSH_BEFORE(233,31) KCACHE0(CB1, _0_15), + JUMP(1, 12) VALID_PIX, + ALU_POP_AFTER(264,25), + ALU_PUSH_BEFORE(289,31) KCACHE0(CB1, _0_15), + JUMP(1, 15) VALID_PIX, + ALU_POP_AFTER(320,25), + ALU_PUSH_BEFORE(345,31) KCACHE0(CB1, _0_15), + JUMP(1, 18) VALID_PIX, + ALU_POP_AFTER(376,25), + ALU(401,17), + EXP_DONE(PIX0, _R0,_x,_y,_z,_w) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MOV_x2(__,_x, _R0,_x), + ALU_MOV_x4(__,_y, KC0(5),_x), + ALU_MUL(_R127,_z, KC0(4),_x, ALU_SRC_LITERAL,_x), + ALU_MOV_x2(_R127,_w, _R0,_y), + ALU_RECIP_IEEE(__,_x, KC0(4),_x) SCL_210 + ALU_LAST, + ALU_LITERAL(0xBF517A97), + /* 1 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_MUL_IEEE(__,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z), + ALU_MUL_IEEE(_R1,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_w), + ALU_MUL_IEEE(_R127,_x, ALU_SRC_PV,_x, ALU_SRC_PS,_x) + ALU_LAST, + ALU_LITERAL4(0x3DE38E39, 0x3E124925, 0x3E2AAAAB, 0x3D888889), + /* 2 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_ADD(__,_y, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_w), + ALU_MUL(_R2,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z), + ALU_MULADD(_R126,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_RECIP_IEEE(__,_x, KC0(4),_y) SCL_210 + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0x3F6BB554, 0x3E99999A), + /* 3 */ + ALU_MUL_IEEE(_R126,_x, _R127,_w, ALU_SRC_PS,_x), + ALU_FRACT(_R127,_y, ALU_SRC_PV,_x), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_y), + ALU_MULADD(_R127,_w, ALU_SRC_LITERAL,_z, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y), + ALU_RECIP_IEEE(_R3,_z, KC0(4),_y) SCL_210 + ALU_LAST, + ALU_LITERAL3(0x343F0981, 0x3F6BB554, 0x3E4CCCD7), + /* 4 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MUL_IEEE(_R126,_y, ALU_SRC_PS,_x, _R127,_z), + ALU_FRACT(_R127,_z, _R126,_w), + ALU_MUL_IEEE(__,_w, KC0(4),_x, ALU_SRC_PS,_x), + ALU_ADD(_R0,_x, _R127,_x, ALU_SRC_1 _NEG,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 5 */ + ALU_MUL(_R0,_x, ALU_SRC_PS,_x, ALU_SRC_PV,_w), + ALU_FRACT(__,_y, _R127,_w), + ALU_MULADD(_R126,_z, _R127,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_FRACT(__,_w, ALU_SRC_PV,_x), + ALU_ADD(_R2,_y, _R126,_x, ALU_SRC_1 _NEG,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 6 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_w, ALU_SRC_LITERAL,_z), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_MULADD(_R123,_w, _R127,_z, ALU_SRC_LITERAL,_w, ALU_SRC_LITERAL,_z), + ALU_MOV(_R4,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL4(0xBFA64605, 0x40264605, 0xC0490FDB, 0x40C90FDB), + /* 7 */ + ALU_MUL(_R126,_x, _R126,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_x), + ALU_MUL(__,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MUL(_R127,_w, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MOV(_R4,_y, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 8 */ + ALU_MOV(_R4,_z, ALU_SRC_0,_x), + ALU_SIN(__,_z, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 9 */ + ALU_ADD(__,_z, _R126,_y, ALU_SRC_PS,_x), + ALU_SIN(_R126,_w, _R126,_x) SCL_210 + ALU_LAST, + /* 10 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z), + ALU_SIN(_R126,_z, _R127,_w) SCL_210 + ALU_LAST, + /* 11 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x), + ALU_MULADD(_R1,_x, _R126,_w, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x80000000, 0x3E99999A, 0x3E46A7F0), + /* 12 */ + ALU_MULADD(_R2,_x, _R126,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_SQRT_IEEE(_R0,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + ALU_LITERAL2(0x3E99999A, 0x3F8CCCCD), + /* 13 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_y) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3E991815), + }, + { + /* 14 */ + ALU_ADD_D2(_R127,_x, _R2,_x, _R1,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_y, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x3E8D6CCC, 0xBD37B680, 0x3E3C9110), + /* 15 */ + ALU_ADD_D2(_R127,_y, ALU_SRC_PS,_x, ALU_SRC_PV,_y), + ALU_MUL_IEEE(__,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x407BCF50, 0x3ECCCCCD), + /* 16 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_PV,_z), + ALU_ADD_D2(_R127,_z, ALU_SRC_PS,_x, _R0,_z) + ALU_LAST, + ALU_LITERAL2(0x40400000, 0xC0000000), + /* 17 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + /* 18 */ + ALU_MULADD(_R4,_x, _R127,_z, ALU_SRC_PV,_w, ALU_SRC_0,_x), + ALU_MULADD(_R4,_y, _R127,_y, ALU_SRC_PV,_w, ALU_SRC_0,_x), + ALU_MULADD(_R4,_z, _R127,_x, ALU_SRC_PV,_w, ALU_SRC_0,_x) + ALU_LAST, + }, + { + /* 19 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, KC0(4),_x, ALU_SRC_LITERAL,_z), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_ADD(__,_w, ALU_SRC_LITERAL,_x, _R1,_w) + ALU_LAST, + ALU_LITERAL3(0x3F3C8F80, 0x3E67F55C, 0xBF614144), + /* 20 */ + ALU_MUL_IEEE(_R127,_x, _R3,_z, ALU_SRC_PV,_y), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_w), + ALU_FRACT(__,_w, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3D07CACC), + /* 21 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL3(0xBFA5310B, 0x4025310B, 0x3E22F983), + /* 22 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 23 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 24 */ + ALU_MUL(__,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 25 */ + ALU_SIN(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 26 */ + ALU_ADD(__,_z, _R127,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 27 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 28 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 29 */ + ALU_SQRT_IEEE(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 30 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_w) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3E94C42C), + }, + { + /* 31 */ + ALU_ADD(__,_x, _R1 _NEG,_x, _R2,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_w, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x3E6245CD, 0xBD328502, 0x3E16D933), + /* 32 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_PS,_x), + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, _R1,_x) + ALU_LAST, + ALU_LITERAL3(0x4081914F, 0x3ECCCCCD, 0x3F6BB554), + /* 33 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, _R0,_y), + ALU_ADD(__,_w, _R0 _NEG,_z, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x40400000, 0xC0000000, 0x3F6BB554), + /* 34 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, _R0,_z), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL(0x3F6BB554), + /* 35 */ + ALU_MULADD(_R4,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_w, _R4,_x), + ALU_MULADD(_R4,_y, _R127,_z, ALU_SRC_PV,_w, _R4,_y), + ALU_MULADD(_R4,_z, _R127,_w, ALU_SRC_PV,_w, _R4,_z) + ALU_LAST, + }, + { + /* 36 */ + ALU_MUL(__,_x, KC0(4),_x, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, ALU_SRC_LITERAL,_y, _R1,_w), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_MULADD(_R123,_w, ALU_SRC_LITERAL,_z, _R2,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3D025A9D, 0x3EFC57D8, 0x3F7FFDB3), + /* 37 */ + ALU_FRACT(__,_y, ALU_SRC_PV,_w), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_y), + ALU_MUL_IEEE(_R127,_w, _R3,_z, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3F7FFD20), + /* 38 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0xBFECB330, 0x406CB330), + /* 39 */ + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_w), + ALU_FRACT(__,_w, ALU_SRC_PV,_x) + ALU_LAST, + /* 40 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 41 */ + ALU_MUL(__,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 42 */ + ALU_SIN(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 43 */ + ALU_ADD(__,_z, _R127,_w, ALU_SRC_PS,_x) + ALU_LAST, + /* 44 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 45 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 46 */ + ALU_SQRT_IEEE(_R0,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 47 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_y) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3F59665F), + }, + { + /* 48 */ + ALU_ADD(__,_x, _R1 _NEG,_x, _R2,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_y, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x3E1767E8, 0xBE0270A0, 0x3DC9DFE0), + /* 49 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_PS,_x), + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, _R1,_x) + ALU_LAST, + ALU_LITERAL3(0x3FB15362, 0x3ECCCCCD, 0x3F7463DB), + /* 50 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, _R0,_y), + ALU_ADD(__,_w, _R0 _NEG,_z, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x40400000, 0xC0000000, 0x3F7463DB), + /* 51 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, _R0,_z), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL(0x3F7463DB), + /* 52 */ + ALU_MULADD(_R4,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_w, _R4,_x), + ALU_MULADD(_R4,_y, _R127,_z, ALU_SRC_PV,_w, _R4,_y), + ALU_MULADD(_R4,_z, _R127,_w, ALU_SRC_PV,_w, _R4,_z) + ALU_LAST, + }, + { + /* 53 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, KC0(4),_x, ALU_SRC_LITERAL,_z), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_ADD(__,_w, ALU_SRC_LITERAL,_x, _R1,_w) + ALU_LAST, + ALU_LITERAL3(0x3E807F0A, 0x3E69ABCD, 0x3F688ACD), + /* 54 */ + ALU_MUL_IEEE(_R127,_x, _R3,_z, ALU_SRC_PV,_y), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_w), + ALU_FRACT(__,_w, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3D105B00), + /* 55 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL3(0xBF9816FE, 0x401816FE, 0x3E22F983), + /* 56 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 57 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 58 */ + ALU_MUL(__,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 59 */ + ALU_SIN(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 60 */ + ALU_ADD(__,_z, _R127,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 61 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 62 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 63 */ + ALU_SQRT_IEEE(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 64 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_w) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3E40B7F0), + }, + { + /* 65 */ + ALU_ADD(__,_x, _R1 _NEG,_x, _R2,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_w, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x3D9A320C, 0xBCE74321, 0x3D4D9810), + /* 66 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_PS,_x), + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, _R1,_x) + ALU_LAST, + ALU_LITERAL3(0x40C80926, 0x3ECCCCCD, 0x3F12103A), + /* 67 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, _R0,_y), + ALU_ADD(__,_w, _R0 _NEG,_z, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x40400000, 0xC0000000, 0x3F12103A), + /* 68 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, _R0,_z), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL(0x3F12103A), + /* 69 */ + ALU_MULADD(_R4,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_w, _R4,_x), + ALU_MULADD(_R4,_y, _R127,_z, ALU_SRC_PV,_w, _R4,_y), + ALU_MULADD(_R4,_z, _R127,_w, ALU_SRC_PV,_w, _R4,_z) + ALU_LAST, + }, + { + /* 70 */ + ALU_MUL(__,_x, KC0(4),_x, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, ALU_SRC_LITERAL,_y, _R1,_w), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_MULADD(_R123,_w, ALU_SRC_LITERAL,_z, _R2,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3F47AF3F, 0x3D92E648, 0x3E4CCCD4), + /* 71 */ + ALU_FRACT(__,_y, ALU_SRC_PV,_w), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_y), + ALU_MUL_IEEE(_R127,_w, _R3,_z, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x34036F48), + /* 72 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0xBF8F17E6, 0x400F17E6), + /* 73 */ + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_w), + ALU_FRACT(__,_w, ALU_SRC_PV,_x) + ALU_LAST, + /* 74 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 75 */ + ALU_MUL(__,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 76 */ + ALU_SIN(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 77 */ + ALU_ADD(__,_z, _R127,_w, ALU_SRC_PS,_x) + ALU_LAST, + /* 78 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 79 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 80 */ + ALU_SQRT_IEEE(_R0,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 81 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_y) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3DF17E5E), + }, + { + /* 82 */ + ALU_ADD(__,_x, _R1 _NEG,_x, _R2,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_y, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x3CB0478A, 0xBC90E56C, 0x3C6B0A0D), + /* 83 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_PS,_x), + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, _R1,_x) + ALU_LAST, + ALU_LITERAL3(0x411FA24D, 0x3ECCCCCD, 0x3DF908C0), + /* 84 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, _R0,_y), + ALU_ADD(__,_w, _R0 _NEG,_z, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x40400000, 0xC0000000, 0x3DF908C0), + /* 85 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, _R0,_z), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL(0x3DF908C0), + /* 86 */ + ALU_MULADD(_R4,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_w, _R4,_x), + ALU_MULADD(_R4,_y, _R127,_z, ALU_SRC_PV,_w, _R4,_y), + ALU_MULADD(_R4,_z, _R127,_w, ALU_SRC_PV,_w, _R4,_z) + ALU_LAST, + }, + { + /* 87 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, KC0(4),_x, ALU_SRC_LITERAL,_z), + ALU_MOV(_R127,_z, ALU_SRC_0,_x), + ALU_ADD(__,_w, ALU_SRC_LITERAL,_x, _R1,_w) + ALU_LAST, + ALU_LITERAL3(0x399F9C00, 0x3EC9A118, 0xBE584E5C), + /* 88 */ + ALU_MUL_IEEE(_R127,_x, _R3,_z, ALU_SRC_PV,_y), + ALU_ADD(__,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_w), + ALU_FRACT(__,_w, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3E7812BA), + /* 89 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL3(0xBFA3FD9F, 0x4023FD9F, 0x3E22F983), + /* 90 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(_R127,_y, _R2,_y, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 91 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 92 */ + ALU_MUL(__,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 93 */ + ALU_SIN(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 94 */ + ALU_ADD(__,_z, _R127,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 95 */ + ALU_ADD(__,_x, _R0,_x, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 96 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_DOT4(__,_y, _R127,_y, _R127,_y), + ALU_DOT4(__,_z, _R127,_z, _R127,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 97 */ + ALU_SQRT_IEEE(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 98 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_w) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3E8FF67B), + }, + { + /* 99 */ + ALU_ADD(__,_x, _R1 _NEG,_x, _R2,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_w, ALU_SRC_LITERAL,_z), + ALU_MOV(_R1,_y, ALU_SRC_LITERAL,_w) + ALU_LAST, + ALU_LITERAL4(0x3E4CCCCD, 0x38BF8800, 0xBD2CC161, 0x387F6000), + /* 100 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) CLAMP, + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_PS,_x), + ALU_MOV(_R1,_z, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, _R1,_x) + ALU_LAST, + ALU_LITERAL3(0x4085E40A, 0x3ECCCCCD, 0x3CA83EF0), + /* 101 */ + ALU_MULADD(_R123,_x, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, _R0,_y), + ALU_ADD(__,_w, _R0 _NEG,_z, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x40400000, 0xC0000000, 0x3CA83EF0), + /* 102 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, _R0,_z), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL(0x3CA83EF0), + /* 103 */ + ALU_MULADD(_R4,_x, ALU_SRC_PV,_x, ALU_SRC_PV,_w, _R4,_x), + ALU_MULADD(_R4,_y, _R127,_z, ALU_SRC_PV,_w, _R4,_y), + ALU_MULADD(_R4,_z, _R127,_w, ALU_SRC_PV,_w, _R4,_z) + ALU_LAST, + }, + { + /* 104 */ + ALU_MOV(_R0,_z, ALU_SRC_0,_x), + ALU_MOV(_R0,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3F000000), + /* 105 */ + ALU_DOT4(__,_x, _R0,_x, _R0,_x), + ALU_DOT4(__,_y, _R2,_y, _R2,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_z, ALU_SRC_PV,_z), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x80000000), + /* 106 */ + ALU_SQRT_IEEE_D2(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 107 */ + ALU_ADD(__,_w, ALU_SRC_PS _NEG,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC00000), + /* 108 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 109 */ + ALU_MUL(__,_x, _R4,_z, ALU_SRC_PS,_x), + ALU_MUL(__,_y, _R4,_y, ALU_SRC_PS,_x), + ALU_MUL(_R0,_x, _R4,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 110 */ + ALU_MOV(_R0,_y, ALU_SRC_PV,_y), + ALU_MOV(_R0,_z, ALU_SRC_PV,_x) + ALU_LAST, + }, +}; + +static GX2AttribVar attributes[] = +{ + { "Position", GX2_SHADER_VAR_TYPE_FLOAT4, 0, 0}, + { "TexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 1}, +}; + +static GX2AttribStream attribute_stream[] = +{ + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT}, + {1, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _0), GX2_ENDIAN_SWAP_DEFAULT}, +}; + +static GX2SamplerVar samplers[] = +{ + { "Source", GX2_SAMPLER_VAR_TYPE_SAMPLER_2D, 0 }, +}; + +static GX2UniformBlock uniform_blocks[] = { + {"UBO", 1, 96} +}; + +static GX2UniformVar uniform_vars[] = { + {"global.MVP", GX2_SHADER_VAR_TYPE_FLOAT, 1, 0, 0}, + {"global.OutputSize", GX2_SHADER_VAR_TYPE_FLOAT, 1, 16, 0}, + {"global.time", GX2_SHADER_VAR_TYPE_FLOAT, 1, 20, 0}, +}; + + +GX2Shader bokeh_shader = +{ + { + { + .sq_pgm_resources_vs.num_gprs = 2, + .sq_pgm_resources_vs.stack_size = 1, + .spi_vs_out_config.vs_export_count = 0, + .num_spi_vs_out_id = 1, + { + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + }, + .sq_vtx_semantic_clear = ~0x1, + .num_sq_vtx_semantic = 1, + { + 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + .vgt_vertex_reuse_block_cntl.vtx_reuse_depth = 0xE, + .vgt_hos_reuse_depth.reuse_depth = 0x10, + }, /* regs */ + .size = sizeof(vs_program), + .program = (uint8_t*)&vs_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .attribVarCount = countof(attributes), attributes, + }, + { + { + .sq_pgm_resources_ps.num_gprs = 5, + .sq_pgm_resources_ps.stack_size = 1, + .sq_pgm_exports_ps.export_mode = 0x2, + .spi_ps_in_control_0.num_interp = 1, + .spi_ps_in_control_0.position_ena = TRUE, + .spi_ps_in_control_0.persp_gradient_ena = FALSE, + .spi_ps_in_control_0.baryc_sample_cntl = spi_baryc_cntl_centers_only, + .num_spi_ps_input_cntl = 1, {{.semantic = 0, .default_val = 1}}, + .cb_shader_mask.output0_enable = 0xF, + .cb_shader_control.rt0_enable = TRUE, + .db_shader_control.z_order = db_z_order_early_z_then_late_z, + }, /* regs */ + .size = sizeof(ps_program), + .program = (uint8_t*)&ps_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .samplerVarCount = countof(samplers), samplers, + }, + .attribute_stream = attribute_stream, +}; diff --git a/gfx/drivers/gx2_shaders/bokeh.frag b/gfx/drivers/gx2_shaders/bokeh.frag new file mode 100644 index 0000000000..8ca96ef8eb --- /dev/null +++ b/gfx/drivers/gx2_shaders/bokeh.frag @@ -0,0 +1,38 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) out vec4 FragColor; + +void main(void) +{ + + float speed = global.time * 4.0; + vec2 uv = -1.0 + 2.0 * gl_FragCoord.xy / global.OutputSize; + uv.x *= global.OutputSize.x / global.OutputSize.y; + vec3 color = vec3(0.0); + +for( int i=0; i < 6; i++ ) + { + float pha = sin(float(i) * 546.13 + 1.0) * 0.5 + 0.5; + float siz = pow(sin(float(i) * 651.74 + 5.0) * 0.5 + 0.5, 4.0); + float pox = sin(float(i) * 321.55 + 4.1) * global.OutputSize.x / global.OutputSize.y; + float rad = 0.1 + 0.5 * siz + sin(pha + siz) / 4.0; + vec2 pos = vec2(pox + sin(speed / 15. + pha + siz), - 1.0 - rad + (2.0 + 2.0 * rad) * fract(pha + 0.3 * (speed / 7.) * (0.2 + 0.8 * siz))); + float dis = length(uv - pos); + if(dis < rad) + { + vec3 col = mix(vec3(0.194 * sin(speed / 6.0) + 0.3, 0.2, 0.3 * pha), vec3(1.1 * sin(speed / 9.0) + 0.3, 0.2 * pha, 0.4), 0.5 + 0.5 * sin(float(i))); + color += col.zyx * (1.0 - smoothstep(rad * 0.15, rad, dis)); + } + } + color *= sqrt(1.5 - 0.5 * length(uv)); + FragColor = vec4(color.r, color.g, color.b , 0.5); +} + + diff --git a/gfx/drivers/gx2_shaders/bokeh.vert b/gfx/drivers/gx2_shaders/bokeh.vert new file mode 100644 index 0000000000..c42c71e205 --- /dev/null +++ b/gfx/drivers/gx2_shaders/bokeh.vert @@ -0,0 +1,18 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} diff --git a/wiiu/frame_shader.c b/gfx/drivers/gx2_shaders/frame.c similarity index 99% rename from wiiu/frame_shader.c rename to gfx/drivers/gx2_shaders/frame.c index a442238b8f..b82fe5033c 100644 --- a/wiiu/frame_shader.c +++ b/gfx/drivers/gx2_shaders/frame.c @@ -17,8 +17,8 @@ #include #include #include -#include "frame_shader.h" #include "gx2_shader_inl.h" +#include "frame.h" __attribute__((aligned(GX2_SHADER_ALIGNMENT))) static struct diff --git a/wiiu/frame_shader.h b/gfx/drivers/gx2_shaders/frame.h similarity index 100% rename from wiiu/frame_shader.h rename to gfx/drivers/gx2_shaders/frame.h diff --git a/wiiu/ribbon_shader.h b/gfx/drivers/gx2_shaders/menu_shaders.h similarity index 80% rename from wiiu/ribbon_shader.h rename to gfx/drivers/gx2_shaders/menu_shaders.h index c83fa9d1f4..e3bd531e57 100644 --- a/wiiu/ribbon_shader.h +++ b/gfx/drivers/gx2_shaders/menu_shaders.h @@ -21,25 +21,22 @@ extern "C" { #endif -typedef struct -{ - struct - { - float x; - float y; - float z; - }pos; -}ribbon_vertex_t; - typedef struct __attribute__((scalar_storage_order ("little-endian"))) __attribute__((aligned (16))) { + GX2_mat4x4 mvp; + GX2_vec2 OutputSize; float time; -}ribbon_uniform_t; +}menu_shader_uniform_t; extern GX2Shader ribbon_shader; +extern GX2Shader ribbon_simple_shader; +extern GX2Shader snow_simple_shader; +extern GX2Shader snow_shader; +extern GX2Shader bokeh_shader; +extern GX2Shader snowflake_shader; #ifdef __cplusplus } diff --git a/wiiu/ribbon_shader.c b/gfx/drivers/gx2_shaders/ribbon.c similarity index 97% rename from wiiu/ribbon_shader.c rename to gfx/drivers/gx2_shaders/ribbon.c index a5d768f481..e65aab8b70 100644 --- a/wiiu/ribbon_shader.c +++ b/gfx/drivers/gx2_shaders/ribbon.c @@ -17,8 +17,8 @@ #include #include #include -#include "frame_shader.h" #include "gx2_shader_inl.h" +#include "menu_shaders.h" __attribute__((aligned(GX2_SHADER_ALIGNMENT))) static struct @@ -38,10 +38,10 @@ static struct }, { ALU_MOV(_R7,_x, _R1,_x), - ALU_MUL_IEEE(__,_y, KC0(0),_x, ALU_SRC_LITERAL,_x), - ALU_MUL_IEEE(__,_z, KC0(0),_x, ALU_SRC_LITERAL,_y), - ALU_MUL_IEEE(__,_w, KC0(0),_x, ALU_SRC_LITERAL,_z), - ALU_MUL_IEEE(_R127,_w, KC0(0),_x, ALU_SRC_0_5,_x) + ALU_MUL_IEEE(__,_y, KC0(5),_x, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(__,_z, KC0(5),_x, ALU_SRC_LITERAL,_y), + ALU_MUL_IEEE(__,_w, KC0(5),_x, ALU_SRC_LITERAL,_z), + ALU_MUL_IEEE(_R127,_w, KC0(5),_x, ALU_SRC_0_5,_x) ALU_LAST, ALU_LITERAL3(0x3E4CCCCD,0x3C23D70A,0x3DCCCCCD), ALU_ADD(__,_x, ALU_SRC_PV _NEG,_z, ALU_SRC_0, _x), @@ -309,12 +309,12 @@ ps_program = static GX2AttribVar attributes[] = { - { "VertexCoord", GX2_SHADER_VAR_TYPE_FLOAT3, 0, 0}, + { "VertexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 0}, }; static GX2AttribStream attribute_stream[] = { - {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32_32, + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT} }; diff --git a/wiiu/shaders/ribbon.frag b/gfx/drivers/gx2_shaders/ribbon.frag similarity index 90% rename from wiiu/shaders/ribbon.frag rename to gfx/drivers/gx2_shaders/ribbon.frag index 8c7aac21c1..95f35932b5 100644 --- a/wiiu/shaders/ribbon.frag +++ b/gfx/drivers/gx2_shaders/ribbon.frag @@ -2,8 +2,10 @@ uniform UBO { + mat4 MVP; + vec2 OutputSize; float time; -} constants; +} global; layout(location = 0) in vec3 vEC; layout(location = 0) out vec4 FragColor; diff --git a/wiiu/shaders/ribbon.vert b/gfx/drivers/gx2_shaders/ribbon.vert similarity index 71% rename from wiiu/shaders/ribbon.vert rename to gfx/drivers/gx2_shaders/ribbon.vert index f2bb7fb042..d658209963 100644 --- a/wiiu/shaders/ribbon.vert +++ b/gfx/drivers/gx2_shaders/ribbon.vert @@ -1,12 +1,14 @@ #version 150 -layout(location = 0) in vec3 VertexCoord; -layout(location = 0) out vec3 vEC; - uniform UBO { + mat4 MVP; + vec2 OutputSize; float time; -} constants; +} global; + +layout(location = 0) in vec2 VertexCoord; +layout(location = 0) out vec3 vEC; float iqhash(float n) { @@ -27,7 +29,7 @@ float noise(vec3 x) float xmb_noise2(vec3 x) { - return cos(x.z * 4.0) * cos(x.z + constants.time / 10.0 + x.x); + return cos(x.z * 4.0) * cos(x.z + global.time / 10.0 + x.x); } void main() @@ -38,14 +40,14 @@ void main() v.y = xmb_noise2(v2) / 8.0; - v3.x -= constants.time / 5.0; + v3.x -= global.time / 5.0; v3.x /= 4.0; - v3.z -= constants.time / 10.0; - v3.y -= constants.time / 100.0; + v3.z -= global.time / 10.0; + v3.y -= global.time / 100.0; v.z -= noise(v3 * 7.0) / 15.0; - v.y -= noise(v3 * 7.0) / 15.0 + cos(v.x * 2.0 - constants.time / 2.0) / 5.0 - 0.3; + v.y -= noise(v3 * 7.0) / 15.0 + cos(v.x * 2.0 - global.time / 2.0) / 5.0 - 0.3; v.y = -v.y; vEC = v; diff --git a/gfx/drivers/gx2_shaders/ribbon_simple.c b/gfx/drivers/gx2_shaders/ribbon_simple.c new file mode 100644 index 0000000000..e5d90f1de7 --- /dev/null +++ b/gfx/drivers/gx2_shaders/ribbon_simple.c @@ -0,0 +1,277 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2014-2018 - Ali Bouhlel + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "gx2_shader_inl.h" +#include "menu_shaders.h" + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[88]; +} vs_program = +{ + { + CALL_FS NO_BARRIER, + ALU(32,88) KCACHE0(CB1, _0_15), + EXP_DONE(POS0, _R1,_x,_y,_z,_w), + EXP_DONE(PARAM0, _R0,_m,_m,_m,_m) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL_IEEE(__,_x, _R1,_y, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(__,_z, KC0(5),_x, ALU_SRC_0_5,_x), + ALU_MUL(__,_w, _R1,_y, ALU_SRC_LITERAL,_y), + ALU_MOV(_R1,_z, _R1,_y) + ALU_LAST, + ALU_LITERAL2(0x3EAAAAAB, 0x40400000), + /* 1 */ + ALU_ADD(__,_x, _R1,_x, ALU_SRC_PV,_z), + ALU_ADD(__,_y, _R1,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_z, ALU_SRC_PV,_w), + ALU_FRACT(_R127,_w, ALU_SRC_PV,_w), + ALU_MOV(_R1,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 2 */ + ALU_MUL(_R127,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_x), + ALU_FRACT(__,_z, ALU_SRC_PV,_x), + ALU_ADD_x2(__,_w, KC0(5),_x, ALU_SRC_PV,_y), + ALU_MOV_x2(__,_x, ALU_SRC_PV,_w) + ALU_LAST, + ALU_LITERAL(0x42E20000), + /* 3 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MOV_x2(__,_y, ALU_SRC_PV,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_MUL(_R126,_w, ALU_SRC_PV,_z, ALU_SRC_PV,_z), + ALU_ADD(_R125,_w, ALU_SRC_PS _NEG,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E22F983, 0x40400000), + /* 4 */ + ALU_ADD(__,_x, _R127,_x, ALU_SRC_PV,_z), + ALU_ADD(__,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x), + ALU_FRACT(_R127,_z, ALU_SRC_PV,_x), + ALU_MUL(_R127,_w, _R127,_w, _R127,_w) + ALU_LAST, + ALU_LITERAL(0x40400000), + /* 5 */ + ALU_ADD(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_1,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x), + ALU_MUL(_R126,_x, ALU_SRC_PV,_y, _R126,_w) + ALU_LAST, + ALU_LITERAL3(0x42E40000, 0x42E20000, 0x3E22F983), + /* 6 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_FRACT(__,_y, ALU_SRC_PV,_w), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_MULADD(_R127,_x, _R127,_z, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0xC0490FDB, 0x40C90FDB), + /* 7 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_z), + ALU_FRACT(__,_y, ALU_SRC_PV,_x), + ALU_FRACT(__,_z, ALU_SRC_PV,_w), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MUL(_R126,_w, _R125,_w, _R127,_w) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 8 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_z), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MUL(_R127,_w, _R127,_x, ALU_SRC_LITERAL,_z) + ALU_LAST, + ALU_LITERAL3(0xC0490FDB, 0x40C90FDB, 0x3E22F983), + /* 9 */ + ALU_MUL(_R127,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_MUL(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL(_R127,_z, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_SIN(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 10 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_SIN(__,_y, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 11 */ + ALU_MUL(__,_x, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_FRACT(_R126,_z, ALU_SRC_PV,_y), + ALU_SIN(__,_x, _R127,_x) SCL_210 + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 12 */ + ALU_MUL(__,_x, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_FRACT(_R125,_w, ALU_SRC_PV,_x), + ALU_SIN(__,_x, _R127,_z) SCL_210 + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 13 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_FRACT(__,_w, ALU_SRC_PV,_x), + ALU_COS(__,_y, _R127,_w) SCL_210 + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 14 */ + ALU_MUL_IEEE(_R127,_x, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R125 _NEG,_w, ALU_SRC_PV,_w), + ALU_FRACT(__,_z, ALU_SRC_PV,_y) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCD), + /* 15 */ + ALU_ADD(__,_x, _R126 _NEG,_z, ALU_SRC_PV,_z), + ALU_MULADD(_R127,_z, ALU_SRC_PV,_y, _R126,_x, _R125,_w) + ALU_LAST, + /* 16 */ + ALU_MULADD(_R125,_w, ALU_SRC_PV,_x, _R126,_x, _R126,_z) + ALU_LAST, + /* 17 */ + ALU_ADD(__,_x, ALU_SRC_PV _NEG,_w, _R127,_z) + ALU_LAST, + /* 18 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, _R126,_w, _R125,_w) + ALU_LAST, + /* 19 */ + ALU_MUL_IEEE(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 20 */ + ALU_ADD(__,_x, ALU_SRC_PV,_y, _R127,_x) + ALU_LAST, + /* 21 */ + ALU_MOV(_R1,_y, ALU_SRC_PV _NEG,_x) + ALU_LAST, + }, +}; + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[3]; +} ps_program = +{ + { + ALU(32,3), + EXP_DONE(PIX0, _R0,_x,_x,_x,_w) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MOV(_R0,_x, ALU_SRC_LITERAL,_x), + ALU_MOV(_R0,_w, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3D4CCCCD, 0x3F800000), + }, +}; + +static GX2AttribVar attributes[] = +{ + { "Position", GX2_SHADER_VAR_TYPE_FLOAT4, 0, 0}, + { "TexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 1}, +}; + +static GX2AttribStream attribute_stream[] = +{ + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT}, + {1, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _0), GX2_ENDIAN_SWAP_DEFAULT}, +}; + +static GX2SamplerVar samplers[] = +{ + { "Source", GX2_SAMPLER_VAR_TYPE_SAMPLER_2D, 0 }, +}; + +static GX2UniformBlock uniform_blocks[] = { + {"UBO", 1, 96} +}; + +static GX2UniformVar uniform_vars[] = { + {"global.MVP", GX2_SHADER_VAR_TYPE_FLOAT, 1, 0, 0}, + {"global.OutputSize", GX2_SHADER_VAR_TYPE_FLOAT, 1, 16, 0}, + {"global.time", GX2_SHADER_VAR_TYPE_FLOAT, 1, 20, 0}, +}; + + +GX2Shader ribbon_simple_shader = +{ + { + { + .sq_pgm_resources_vs.num_gprs = 2, + .sq_pgm_resources_vs.stack_size = 1, + .spi_vs_out_config.vs_export_count = 0, + .num_spi_vs_out_id = 1, + { + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + }, + .sq_vtx_semantic_clear = ~0x1, + .num_sq_vtx_semantic = 1, + { + 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + .vgt_vertex_reuse_block_cntl.vtx_reuse_depth = 0xE, + .vgt_hos_reuse_depth.reuse_depth = 0x10, + }, /* regs */ + .size = sizeof(vs_program), + .program = (uint8_t*)&vs_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .attribVarCount = countof(attributes), attributes, + }, + { + { + .sq_pgm_resources_ps.num_gprs = 1, + .sq_pgm_resources_ps.stack_size = 0, + .sq_pgm_exports_ps.export_mode = 0x2, + .spi_ps_in_control_0.num_interp = 0, + .spi_ps_in_control_0.position_ena = FALSE, + .spi_ps_in_control_0.persp_gradient_ena = FALSE, + .spi_ps_in_control_0.baryc_sample_cntl = spi_baryc_cntl_centers_only, + .num_spi_ps_input_cntl = 0, + .cb_shader_mask.output0_enable = 0xF, + .cb_shader_control.rt0_enable = TRUE, + .db_shader_control.z_order = db_z_order_early_z_then_late_z, + }, /* regs */ + .size = sizeof(ps_program), + .program = (uint8_t*)&ps_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .samplerVarCount = countof(samplers), samplers, + }, + .attribute_stream = attribute_stream, +}; diff --git a/gfx/drivers/gx2_shaders/ribbon_simple.frag b/gfx/drivers/gx2_shaders/ribbon_simple.frag new file mode 100644 index 0000000000..5889533966 --- /dev/null +++ b/gfx/drivers/gx2_shaders/ribbon_simple.frag @@ -0,0 +1,14 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) out vec4 FragColor; +void main() +{ + FragColor = vec4(0.05, 0.05, 0.05, 1.0); +} diff --git a/gfx/drivers/gx2_shaders/ribbon_simple.vert b/gfx/drivers/gx2_shaders/ribbon_simple.vert new file mode 100644 index 0000000000..ffc79cfb00 --- /dev/null +++ b/gfx/drivers/gx2_shaders/ribbon_simple.vert @@ -0,0 +1,38 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) in vec2 VertexCoord; + +float iqhash(float n) +{ + return fract(sin(n) * 43758.5453); +} + +float noise(vec3 x) +{ + vec3 p = floor(x); + vec3 f = fract(x); + f = f * f * (3.0 - 2.0 * f); + float n = p.x + p.y * 57.0 + 113.0 * p.z; + return mix(mix(mix(iqhash(n), iqhash(n + 1.0), f.x), + mix(iqhash(n + 57.0), iqhash(n + 58.0), f.x), f.y), + mix(mix(iqhash(n + 113.0), iqhash(n + 114.0), f.x), + mix(iqhash(n + 170.0), iqhash(n + 171.0), f.x), f.y), f.z); +} + +void main() +{ + vec3 v = vec3(VertexCoord.x, 0.0, VertexCoord.y); + vec3 v2 = v; + v2.x = v2.x + global.time / 2.0; + v2.z = v.z * 3.0; + v.y = cos((v.x + v.z / 3.0 + global.time) * 2.0) / 10.0 + noise(v2.xyz) / 4.0; + v.y = -v.y; + gl_Position = vec4(v, 1.0); +} diff --git a/gfx/drivers/gx2_shaders/snow.c b/gfx/drivers/gx2_shaders/snow.c new file mode 100644 index 0000000000..f89c76defa --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow.c @@ -0,0 +1,1464 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2014-2018 - Ali Bouhlel + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "gx2_shader_inl.h" +#include "menu_shaders.h" + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[16]; +} vs_program = +{ + { + CALL_FS NO_BARRIER, + ALU(32,16) KCACHE0(CB1, _0_15), + EXP_DONE(POS0, _R1,_x,_y,_z,_w), + EXP_DONE(PARAM0, _R0,_m,_m,_m,_m) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_x, _R1,_w, KC0(3),_w), + ALU_MUL(__,_y, _R1,_w, KC0(3),_z), + ALU_MUL(__,_z, _R1,_w, KC0(3),_y), + ALU_MUL(__,_w, _R1,_w, KC0(3),_x) + ALU_LAST, + /* 1 */ + ALU_MULADD(_R123,_x, _R1,_z, KC0(2),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_z, KC0(2),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_z, KC0(2),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_z, KC0(2),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 2 */ + ALU_MULADD(_R123,_x, _R1,_y, KC0(1),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_y, KC0(1),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_y, KC0(1),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_y, KC0(1),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 3 */ + ALU_MULADD(_R1,_x, _R1,_x, KC0(0),_x, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_y, _R1,_x, KC0(0),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R1,_z, _R1,_x, KC0(0),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R1,_w, _R1,_x, KC0(0),_w, ALU_SRC_PV,_x) + ALU_LAST, + }, +}; + + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[56]; + u64 alu1[27]; + u64 alu2[51]; + u64 alu3[27]; + u64 alu4[52]; + u64 alu5[27]; + u64 alu6[51]; + u64 alu7[27]; + u64 alu8[52]; + u64 alu9[27]; + u64 alu10[52]; + u64 alu11[27]; + u64 alu12[52]; + u64 alu13[27]; + u64 alu14[52]; + u64 alu15[27]; + u64 alu16[6]; +} ps_program = +{ + { + ALU_PUSH_BEFORE(32,56) KCACHE0(CB1, _0_15), + JUMP(1, 3) VALID_PIX, + ALU_POP_AFTER(88,27), + ALU_PUSH_BEFORE(115,51), + JUMP(1, 6) VALID_PIX, + ALU_POP_AFTER(166,27), + ALU_PUSH_BEFORE(193,52), + JUMP(1, 9) VALID_PIX, + ALU_POP_AFTER(245,27), + ALU_PUSH_BEFORE(272,51), + JUMP(1, 12) VALID_PIX, + ALU_POP_AFTER(323,27), + ALU_PUSH_BEFORE(350,52), + JUMP(1, 15) VALID_PIX, + ALU_POP_AFTER(402,27), + ALU_PUSH_BEFORE(429,52), + JUMP(1, 18) VALID_PIX, + ALU_POP_AFTER(481,27), + ALU_PUSH_BEFORE(508,52), + JUMP(1, 21) VALID_PIX, + ALU_POP_AFTER(560,27), + ALU_PUSH_BEFORE(587,52), + JUMP(1, 24) VALID_PIX, + ALU_POP_AFTER(639,27), + ALU(666,6), + EXP_DONE(PIX0, _R0,_y,_y,_y,_w) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_w, KC0(5),_x, ALU_SRC_LITERAL,_x), + ALU_RECIP_IEEE(__,_w, KC0(4),_x) SCL_210 + ALU_LAST, + ALU_LITERAL(0x3ECCCCCD), + /* 1 */ + ALU_MUL_IEEE(_R1,_x, _R0,_x, ALU_SRC_PS,_x), + ALU_MUL_IEEE(_R0,_y, _R0,_y, ALU_SRC_PS,_x), + ALU_MUL(_R2,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 2 */ + ALU_MUL_x2(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(_R1,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_1,_x), + ALU_MOV_x2(_R127,_z, ALU_SRC_PV _NEG,_z), + ALU_MOV_x4(__,_w, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL(0x40490FD0), + /* 3 */ + ALU_ADD(_R126,_z, ALU_SRC_PV,_y, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3F99999A), + /* 4 */ + ALU_ADD(__,_z, ALU_SRC_PV,_w, ALU_SRC_1,_x) + ALU_LAST, + /* 5 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 6 */ + ALU_FRACT(__,_w, ALU_SRC_PV,_y) + ALU_LAST, + /* 7 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 8 */ + ALU_MUL(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 9 */ + ALU_COS(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 10 */ + ALU_MUL_IEEE_x4(__,_w, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E000000), + /* 11 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 12 */ + ALU_ADD(__,_w, ALU_SRC_PV,_x, _R127,_z) + ALU_LAST, + /* 13 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 14 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 15 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 16 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 17 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 18 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 19 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 20 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 21 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 22 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 23 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 24 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 25 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 26 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 27 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 28 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 29 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 30 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 31 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 32 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 33 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 34 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 35 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 36 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 37 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 38 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 39 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 40 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_1,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL2(0x3F333333, 0x3FB6DB6E), + /* 41 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 42 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 43 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3FB6DB6E, 0xC0490FDB, 0x40C90FDB), + /* 44 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 45 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 46 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DB33333), + /* 47 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 48 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 49 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FB6DB6E), + /* 50 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 51 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 52 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 53 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 54 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 55 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 56 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 57 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 58 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 59 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 60 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 61 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 62 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 63 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 64 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 65 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 66 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 67 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 68 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 69 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 70 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 71 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 72 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 73 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 74 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 75 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 76 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 77 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3F19999A, 0x3FD55555, 0x3F59999A), + /* 78 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 79 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 80 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3FD55555, 0xC0490FDB, 0x40C90FDB), + /* 81 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 82 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 83 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D99999A), + /* 84 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 85 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 86 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FD55555), + /* 87 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 88 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 89 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 90 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 91 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 92 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 93 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 94 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 95 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 96 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 97 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 98 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 99 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 100 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 101 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 102 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 103 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 104 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 105 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 106 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 107 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 108 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 109 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 110 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 111 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 112 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 113 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 114 */ + ALU_MOV_D2(__,_x, _R2,_z), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_y, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL2(0x40000000, 0x3F4CCCCD), + /* 115 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MUL_x4(__,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 116 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 117 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40000000, 0xC0490FDB, 0x40C90FDB), + /* 118 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 119 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 120 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D800000), + /* 121 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 122 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 123 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 124 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 125 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 126 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 127 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 128 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 129 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 130 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 131 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 132 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 133 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 134 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 135 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 136 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 137 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 138 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 139 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 140 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 141 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 142 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 143 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 144 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 145 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 146 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 147 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 148 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 149 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 150 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 151 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3ECCCCCD, 0x40200000, 0x3F400000), + /* 152 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 153 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 154 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40200000, 0xC0490FDB, 0x40C90FDB), + /* 155 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 156 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 157 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D4CCCCD), + /* 158 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 159 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 160 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40200000), + /* 161 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 162 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 163 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 164 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 165 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 166 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 167 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 168 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 169 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 170 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 171 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 172 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 173 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 174 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 175 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 176 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 177 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 178 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 179 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 180 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 181 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 182 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 183 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 184 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 185 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 186 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 187 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 188 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E99999A, 0x40555555, 0x3F333333), + /* 189 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 190 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 191 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40555555, 0xC0490FDB, 0x40C90FDB), + /* 192 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 193 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 194 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D19999A), + /* 195 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 196 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 197 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40555555), + /* 198 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 199 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 200 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 201 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 202 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 203 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 204 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 205 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 206 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 207 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 208 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 209 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 210 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 211 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 212 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 213 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 214 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 215 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 216 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 217 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 218 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 219 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 220 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 221 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 222 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 223 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 224 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 225 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E800000, 0x40800000, 0x3F266666), + /* 226 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 227 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 228 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40800000, 0xC0490FDB, 0x40C90FDB), + /* 229 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 230 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 231 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D000000), + /* 232 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 233 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 234 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40800000), + /* 235 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 236 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 237 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 238 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 239 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 240 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 241 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 242 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 243 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 244 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 245 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 246 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 247 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 248 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 249 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 250 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 251 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 252 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 253 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 254 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 255 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 256 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 257 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 258 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 259 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 260 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 261 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 262 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R0,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E000000, 0x41000000, 0x3F200000), + /* 263 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 264 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 265 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x41000000, 0xC0490FDB, 0x40C90FDB), + /* 266 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 267 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 268 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3C800000), + /* 269 */ + ALU_ADD(_R1,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 270 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 271 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41000000), + /* 272 */ + ALU_MUL_IEEE(_R1,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 273 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 274 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 275 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 276 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 277 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 278 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 279 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 280 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 281 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 282 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E0F5C29), + /* 283 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 284 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 285 */ + ALU_FRACT(_R127,_x, _R1,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 286 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 287 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 288 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 289 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 290 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 291 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 292 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x4136DB6E), + /* 293 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 294 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 295 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 296 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 297 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 298 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 299 */ + ALU_MULADD(_R127,_x, _R0,_w, ALU_SRC_LITERAL,_x, _R0,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_y), + ALU_MOV_x4(__,_z, _R1,_y) + ALU_LAST, + ALU_LITERAL2(0x3F100000, 0x3F800000), + /* 300 */ + ALU_MIN(__,_y, ALU_SRC_PV,_z, ALU_SRC_1,_x) + ALU_LAST, + /* 301 */ + ALU_MUL(_R0,_w, _R127,_x, ALU_SRC_PV,_y) + ALU_LAST, + }, +}; + +static GX2AttribVar attributes[] = +{ + { "Position", GX2_SHADER_VAR_TYPE_FLOAT4, 0, 0}, + { "TexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 1}, +}; + +static GX2AttribStream attribute_stream[] = +{ + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT}, + {1, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _0), GX2_ENDIAN_SWAP_DEFAULT}, +}; + +static GX2SamplerVar samplers[] = +{ + { "Source", GX2_SAMPLER_VAR_TYPE_SAMPLER_2D, 0 }, +}; + +static GX2UniformBlock uniform_blocks[] = { + {"UBO", 1, 96} +}; + +static GX2UniformVar uniform_vars[] = { + {"global.MVP", GX2_SHADER_VAR_TYPE_FLOAT, 1, 0, 0}, + {"global.OutputSize", GX2_SHADER_VAR_TYPE_FLOAT, 1, 16, 0}, + {"global.time", GX2_SHADER_VAR_TYPE_FLOAT, 1, 20, 0}, +}; + + +GX2Shader snow_shader = +{ + { + { + .sq_pgm_resources_vs.num_gprs = 2, + .sq_pgm_resources_vs.stack_size = 1, + .spi_vs_out_config.vs_export_count = 0, + .num_spi_vs_out_id = 1, + { + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + }, + .sq_vtx_semantic_clear = ~0x1, + .num_sq_vtx_semantic = 1, + { + 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + .vgt_vertex_reuse_block_cntl.vtx_reuse_depth = 0xE, + .vgt_hos_reuse_depth.reuse_depth = 0x10, + }, /* regs */ + .size = sizeof(vs_program), + .program = (uint8_t*)&vs_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .attribVarCount = countof(attributes), attributes, + }, + { + { + .sq_pgm_resources_ps.num_gprs = 3, + .sq_pgm_resources_ps.stack_size = 1, + .sq_pgm_exports_ps.export_mode = 0x2, + .spi_ps_in_control_0.num_interp = 1, + .spi_ps_in_control_0.position_ena = TRUE, + .spi_ps_in_control_0.persp_gradient_ena = FALSE, + .spi_ps_in_control_0.baryc_sample_cntl = spi_baryc_cntl_centers_only, + .num_spi_ps_input_cntl = 1, {{.semantic = 0, .default_val = 1}}, + .cb_shader_mask.output0_enable = 0xF, + .cb_shader_control.rt0_enable = TRUE, + .db_shader_control.z_order = db_z_order_early_z_then_late_z, + }, /* regs */ + .size = sizeof(ps_program), + .program = (uint8_t*)&ps_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .samplerVarCount = countof(samplers), samplers, + }, + .attribute_stream = attribute_stream, +}; diff --git a/gfx/drivers/gx2_shaders/snow.frag b/gfx/drivers/gx2_shaders/snow.frag new file mode 100644 index 0000000000..424021a0cd --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow.frag @@ -0,0 +1,75 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) out vec4 FragColor; + +const float baseScale = 3.5; // [1.0 .. 10.0] +const float density = 0.7; // [0.01 .. 1.0] +const float speed = 0.25; // [0.1 .. 1.0] + +float rand(vec2 co) +{ + return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); +} + +float dist_func(vec2 distv) +{ + float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale); + dist = clamp(dist, 0.0, 1.0); + return cos(dist * (3.14159265358 * 0.5)) * 0.5; +} + +float random_dots(vec2 co) +{ + float part = 1.0 / 20.0; + vec2 cd = floor(co / part); + float p = rand(cd); + + if (p > 0.005 * (density * 40.0)) + return 0.0; + + vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25; + + vec2 cellpos = fract(co / part); + vec2 distv = (cellpos - dpos); + + return dist_func(distv); +} + +float snow(vec2 pos, float time, float scale) +{ + // add wobble + pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0; + // add gravity + pos += time * scale * vec2(-0.5, 1.0) * 4.0; + return random_dots(pos / scale) * (scale * 0.5 + 0.5); +} + +void main(void) +{ + float tim = global.time * 0.4 * speed; + vec2 pos = gl_FragCoord.xy / global.OutputSize.xx; + pos.y = 1.0 - pos.y; // Flip Y + float a = 0.0; + // Each of these is a layer of snow + // Remove some for better performance + // Changing the scale (3rd value) will mess with the looping + a += snow(pos, tim, 1.0); + a += snow(pos, tim, 0.7); + a += snow(pos, tim, 0.6); + a += snow(pos, tim, 0.5); + a += snow(pos, tim, 0.4); + a += snow(pos, tim, 0.3); + a += snow(pos, tim, 0.25); + a += snow(pos, tim, 0.125); + a = a * min(pos.y * 4.0, 1.0); + FragColor = vec4(1.0, 1.0, 1.0, a); +} + + diff --git a/gfx/drivers/gx2_shaders/snow.vert b/gfx/drivers/gx2_shaders/snow.vert new file mode 100644 index 0000000000..c42c71e205 --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow.vert @@ -0,0 +1,18 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} diff --git a/gfx/drivers/gx2_shaders/snow_simple.c b/gfx/drivers/gx2_shaders/snow_simple.c new file mode 100644 index 0000000000..a7dfc1dbc0 --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow_simple.c @@ -0,0 +1,1464 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2014-2018 - Ali Bouhlel + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "gx2_shader_inl.h" +#include "menu_shaders.h" + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[16]; +} vs_program = +{ + { + CALL_FS NO_BARRIER, + ALU(32,16) KCACHE0(CB1, _0_15), + EXP_DONE(POS0, _R1,_x,_y,_z,_w), + EXP_DONE(PARAM0, _R0,_m,_m,_m,_m) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_x, _R1,_w, KC0(3),_w), + ALU_MUL(__,_y, _R1,_w, KC0(3),_z), + ALU_MUL(__,_z, _R1,_w, KC0(3),_y), + ALU_MUL(__,_w, _R1,_w, KC0(3),_x) + ALU_LAST, + /* 1 */ + ALU_MULADD(_R123,_x, _R1,_z, KC0(2),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_z, KC0(2),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_z, KC0(2),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_z, KC0(2),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 2 */ + ALU_MULADD(_R123,_x, _R1,_y, KC0(1),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_y, KC0(1),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_y, KC0(1),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_y, KC0(1),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 3 */ + ALU_MULADD(_R1,_x, _R1,_x, KC0(0),_x, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_y, _R1,_x, KC0(0),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R1,_z, _R1,_x, KC0(0),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R1,_w, _R1,_x, KC0(0),_w, ALU_SRC_PV,_x) + ALU_LAST, + }, +}; + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[56]; + u64 alu1[27]; + u64 alu2[51]; + u64 alu3[27]; + u64 alu4[52]; + u64 alu5[27]; + u64 alu6[51]; + u64 alu7[27]; + u64 alu8[52]; + u64 alu9[27]; + u64 alu10[52]; + u64 alu11[27]; + u64 alu12[52]; + u64 alu13[27]; + u64 alu14[52]; + u64 alu15[27]; + u64 alu16[6]; +} ps_program = +{ + { + ALU_PUSH_BEFORE(32,56) KCACHE0(CB1, _0_15), + JUMP(1, 3) VALID_PIX, + ALU_POP_AFTER(88,27), + ALU_PUSH_BEFORE(115,51), + JUMP(1, 6) VALID_PIX, + ALU_POP_AFTER(166,27), + ALU_PUSH_BEFORE(193,52), + JUMP(1, 9) VALID_PIX, + ALU_POP_AFTER(245,27), + ALU_PUSH_BEFORE(272,51), + JUMP(1, 12) VALID_PIX, + ALU_POP_AFTER(323,27), + ALU_PUSH_BEFORE(350,52), + JUMP(1, 15) VALID_PIX, + ALU_POP_AFTER(402,27), + ALU_PUSH_BEFORE(429,52), + JUMP(1, 18) VALID_PIX, + ALU_POP_AFTER(481,27), + ALU_PUSH_BEFORE(508,52), + JUMP(1, 21) VALID_PIX, + ALU_POP_AFTER(560,27), + ALU_PUSH_BEFORE(587,52), + JUMP(1, 24) VALID_PIX, + ALU_POP_AFTER(639,27), + ALU(666,6), + EXP_DONE(PIX0, _R0,_y,_y,_y,_w) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_w, KC0(5),_x, ALU_SRC_LITERAL,_x), + ALU_RECIP_IEEE(__,_w, KC0(4),_x) SCL_210 + ALU_LAST, + ALU_LITERAL(0x3ECCCCCD), + /* 1 */ + ALU_MUL_IEEE(_R1,_x, _R0,_x, ALU_SRC_PS,_x), + ALU_MUL_IEEE(_R0,_y, _R0,_y, ALU_SRC_PS,_x), + ALU_MUL(_R2,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E19999A), + /* 2 */ + ALU_MUL_x2(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(_R1,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_1,_x), + ALU_MOV_x2(_R127,_z, ALU_SRC_PV _NEG,_z), + ALU_MOV_x4(__,_w, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL(0x40490FD0), + /* 3 */ + ALU_ADD(_R126,_z, ALU_SRC_PV,_y, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3F99999A), + /* 4 */ + ALU_ADD(__,_z, ALU_SRC_PV,_w, ALU_SRC_1,_x) + ALU_LAST, + /* 5 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 6 */ + ALU_FRACT(__,_w, ALU_SRC_PV,_y) + ALU_LAST, + /* 7 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 8 */ + ALU_MUL(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 9 */ + ALU_COS(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 10 */ + ALU_MUL_IEEE_x4(__,_w, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E000000), + /* 11 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 12 */ + ALU_ADD(__,_w, ALU_SRC_PV,_x, _R127,_z) + ALU_LAST, + /* 13 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 14 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 15 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 16 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 17 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 18 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 19 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 20 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 21 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 22 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 23 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 24 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 25 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 26 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 27 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 28 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 29 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 30 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 31 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 32 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 33 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 34 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 35 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 36 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 37 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 38 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 39 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 40 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_1,_x, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL2(0x3F333333, 0x3FB6DB6E), + /* 41 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 42 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 43 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3FB6DB6E, 0xC0490FDB, 0x40C90FDB), + /* 44 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 45 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 46 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DB33333), + /* 47 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 48 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 49 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FB6DB6E), + /* 50 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 51 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 52 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 53 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 54 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 55 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 56 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 57 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 58 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 59 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 60 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 61 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 62 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 63 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 64 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 65 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 66 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 67 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 68 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 69 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 70 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 71 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 72 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 73 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 74 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 75 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 76 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 77 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3F19999A, 0x3FD55555, 0x3F59999A), + /* 78 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 79 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 80 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3FD55555, 0xC0490FDB, 0x40C90FDB), + /* 81 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 82 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 83 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D99999A), + /* 84 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 85 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 86 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FD55555), + /* 87 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 88 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 89 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 90 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 91 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 92 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 93 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 94 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 95 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 96 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 97 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 98 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 99 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 100 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 101 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 102 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 103 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 104 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 105 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 106 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 107 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 108 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 109 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 110 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 111 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 112 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 113 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 114 */ + ALU_MOV_D2(__,_x, _R2,_z), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_y, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL2(0x40000000, 0x3F4CCCCD), + /* 115 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MUL_x4(__,_y, ALU_SRC_PV,_x, ALU_SRC_1,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 116 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 117 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40000000, 0xC0490FDB, 0x40C90FDB), + /* 118 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 119 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 120 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D800000), + /* 121 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 122 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 123 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 124 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 125 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 126 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 127 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 128 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 129 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 130 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 131 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 132 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 133 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 134 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 135 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 136 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 137 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 138 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 139 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 140 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 141 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 142 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 143 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 144 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 145 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 146 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 147 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 148 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 149 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 150 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 151 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3ECCCCCD, 0x40200000, 0x3F400000), + /* 152 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 153 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 154 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40200000, 0xC0490FDB, 0x40C90FDB), + /* 155 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 156 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 157 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D4CCCCD), + /* 158 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 159 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 160 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40200000), + /* 161 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 162 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 163 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 164 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 165 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 166 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 167 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 168 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 169 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 170 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 171 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 172 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 173 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 174 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 175 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 176 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 177 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 178 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 179 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 180 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 181 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 182 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 183 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 184 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 185 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 186 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 187 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 188 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E99999A, 0x40555555, 0x3F333333), + /* 189 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 190 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 191 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40555555, 0xC0490FDB, 0x40C90FDB), + /* 192 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 193 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 194 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D19999A), + /* 195 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 196 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 197 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40555555), + /* 198 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 199 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 200 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 201 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 202 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 203 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 204 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 205 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 206 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 207 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 208 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 209 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 210 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 211 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 212 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 213 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 214 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 215 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 216 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 217 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 218 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 219 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 220 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 221 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 222 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 223 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 224 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 225 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R2,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E800000, 0x40800000, 0x3F266666), + /* 226 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 227 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 228 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x40800000, 0xC0490FDB, 0x40C90FDB), + /* 229 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 230 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 231 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3D000000), + /* 232 */ + ALU_ADD(_R0,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 233 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 234 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40800000), + /* 235 */ + ALU_MUL_IEEE(_R0,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 236 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 237 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 238 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 239 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 240 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 241 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 242 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 243 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 244 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 245 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 246 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 247 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 248 */ + ALU_FRACT(_R127,_x, _R0,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 249 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 250 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 251 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 252 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 253 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 254 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 255 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 256 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 257 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 258 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 259 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 260 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 261 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 262 */ + ALU_MUL(__,_x, _R2,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_y, _R1,_w, ALU_SRC_LITERAL,_y), + ALU_MULADD(_R0,_x, _R0,_w, ALU_SRC_LITERAL,_z, _R2,_x) VEC_021 + ALU_LAST, + ALU_LITERAL3(0x3E000000, 0x41000000, 0x3F200000), + /* 263 */ + ALU_MOV_x2(_R127,_x, ALU_SRC_PV _NEG,_x), + ALU_MOV_x4(__,_y, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 264 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_w), + ALU_ADD(__,_y, _R1,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 265 */ + ALU_MUL_IEEE(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x41000000, 0xC0490FDB, 0x40C90FDB), + /* 266 */ + ALU_MUL(__,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 267 */ + ALU_COS(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 268 */ + ALU_MUL_IEEE_x4(__,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3C800000), + /* 269 */ + ALU_ADD(_R1,_x, _R1,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 270 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, _R127,_x) + ALU_LAST, + /* 271 */ + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41000000), + /* 272 */ + ALU_MUL_IEEE(_R1,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R0,_y, _R126,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x41A00000), + /* 273 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_x), + ALU_FLOOR(__,_y, ALU_SRC_PV,_y) + ALU_LAST, + /* 274 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 275 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 276 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 277 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 278 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 279 */ + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 280 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 281 */ + ALU_FRACT(_R0,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 282 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3DCCCCCC), + /* 283 */ + ALU_CNDE_INT(_R1,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R0,_w, ALU_SRC_PV,_x, _R0,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 284 */ + ALU_PRED_SETE_INT(__,_x, _R1,_z, ALU_SRC_0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + }, + { + /* 285 */ + ALU_FRACT(_R127,_x, _R1,_x), + ALU_MOV_x2(__,_y, _R0,_z), + ALU_FRACT(_R127,_z, _R0,_y), + ALU_MOV(__,_w, _R0,_z) + ALU_LAST, + /* 286 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y), + ALU_ADD(__,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40000000), + /* 287 */ + ALU_MULADD(_R127,_y, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R127,_z), + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3E800000, 0x40000000), + /* 288 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R127,_x) + ALU_LAST, + ALU_LITERAL(0x3E800000), + /* 289 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 290 */ + ALU_MULADD(_R123,_w, _R127,_y, _R127,_y, ALU_SRC_PV,_x) + ALU_LAST, + /* 291 */ + ALU_SQRT_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 292 */ + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x) CLAMP + ALU_LAST, + ALU_LITERAL(0x42000000), + /* 293 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 294 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 295 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_w) + ALU_LAST, + /* 296 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 297 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 298 */ + ALU_COS_D2(_R0,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + }, + { + /* 299 */ + ALU_MULADD(_R127,_x, _R0,_w, ALU_SRC_LITERAL,_x, _R0,_x), + ALU_MOV(_R0,_y, ALU_SRC_LITERAL,_y), + ALU_MOV_x4(__,_z, _R1,_y) + ALU_LAST, + ALU_LITERAL2(0x3F100000, 0x3F800000), + /* 300 */ + ALU_MIN(__,_y, ALU_SRC_PV,_z, ALU_SRC_1,_x) + ALU_LAST, + /* 301 */ + ALU_MUL(_R0,_w, _R127,_x, ALU_SRC_PV,_y) + ALU_LAST, + }, +}; + + +static GX2AttribVar attributes[] = +{ + { "Position", GX2_SHADER_VAR_TYPE_FLOAT4, 0, 0}, + { "TexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 1}, +}; + +static GX2AttribStream attribute_stream[] = +{ + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT}, + {1, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _0), GX2_ENDIAN_SWAP_DEFAULT}, +}; + +static GX2SamplerVar samplers[] = +{ + { "Source", GX2_SAMPLER_VAR_TYPE_SAMPLER_2D, 0 }, +}; + +static GX2UniformBlock uniform_blocks[] = { + {"UBO", 1, 96} +}; + +static GX2UniformVar uniform_vars[] = { + {"global.MVP", GX2_SHADER_VAR_TYPE_FLOAT, 1, 0, 0}, + {"global.OutputSize", GX2_SHADER_VAR_TYPE_FLOAT, 1, 16, 0}, + {"global.time", GX2_SHADER_VAR_TYPE_FLOAT, 1, 20, 0}, +}; + + +GX2Shader snow_simple_shader = +{ + { + { + .sq_pgm_resources_vs.num_gprs = 2, + .sq_pgm_resources_vs.stack_size = 1, + .spi_vs_out_config.vs_export_count = 0, + .num_spi_vs_out_id = 1, + { + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + }, + .sq_vtx_semantic_clear = ~0x1, + .num_sq_vtx_semantic = 1, + { + 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + .vgt_vertex_reuse_block_cntl.vtx_reuse_depth = 0xE, + .vgt_hos_reuse_depth.reuse_depth = 0x10, + }, /* regs */ + .size = sizeof(vs_program), + .program = (uint8_t*)&vs_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .attribVarCount = countof(attributes), attributes, + }, + { + { + .sq_pgm_resources_ps.num_gprs = 3, + .sq_pgm_resources_ps.stack_size = 1, + .sq_pgm_exports_ps.export_mode = 0x2, + .spi_ps_in_control_0.num_interp = 1, + .spi_ps_in_control_0.position_ena = TRUE, + .spi_ps_in_control_0.persp_gradient_ena = FALSE, + .spi_ps_in_control_0.baryc_sample_cntl = spi_baryc_cntl_centers_only, + .num_spi_ps_input_cntl = 1, {{.semantic = 0, .default_val = 1}}, + .cb_shader_mask.output0_enable = 0xF, + .cb_shader_control.rt0_enable = TRUE, + .db_shader_control.z_order = db_z_order_early_z_then_late_z, + }, /* regs */ + .size = sizeof(ps_program), + .program = (uint8_t*)&ps_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .samplerVarCount = countof(samplers), samplers, + }, + .attribute_stream = attribute_stream, +}; diff --git a/gfx/drivers/gx2_shaders/snow_simple.frag b/gfx/drivers/gx2_shaders/snow_simple.frag new file mode 100644 index 0000000000..45a9d06ddd --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow_simple.frag @@ -0,0 +1,75 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) out vec4 FragColor; + +const float baseScale = 1.25; // [1.0 .. 10.0] +const float density = 0.5; // [0.01 .. 1.0] +const float speed = 0.15; // [0.1 .. 1.0] + +float rand(vec2 co) +{ + return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); +} + +float dist_func(vec2 distv) +{ + float dist = sqrt((distv.x * distv.x) + (distv.y * distv.y)) * (40.0 / baseScale); + dist = clamp(dist, 0.0, 1.0); + return cos(dist * (3.14159265358 * 0.5)) * 0.5; +} + +float random_dots(vec2 co) +{ + float part = 1.0 / 20.0; + vec2 cd = floor(co / part); + float p = rand(cd); + + if (p > 0.005 * (density * 40.0)) + return 0.0; + + vec2 dpos = (vec2(fract(p * 2.0) , p) + vec2(2.0, 2.0)) * 0.25; + + vec2 cellpos = fract(co / part); + vec2 distv = (cellpos - dpos); + + return dist_func(distv); +} + +float snow(vec2 pos, float time, float scale) +{ + // add wobble + pos.x += cos(pos.y * 1.2 + time * 3.14159 * 2.0 + 1.0 / scale) / (8.0 / scale) * 4.0; + // add gravity + pos += time * scale * vec2(-0.5, 1.0) * 4.0; + return random_dots(pos / scale) * (scale * 0.5 + 0.5); +} + +void main(void) +{ + float tim = global.time * 0.4 * speed; + vec2 pos = gl_FragCoord.xy / global.OutputSize.xx; + pos.y = 1.0 - pos.y; // Flip Y + float a = 0.0; + // Each of these is a layer of snow + // Remove some for better performance + // Changing the scale (3rd value) will mess with the looping + a += snow(pos, tim, 1.0); + a += snow(pos, tim, 0.7); + a += snow(pos, tim, 0.6); + a += snow(pos, tim, 0.5); + a += snow(pos, tim, 0.4); + a += snow(pos, tim, 0.3); + a += snow(pos, tim, 0.25); + a += snow(pos, tim, 0.125); + a = a * min(pos.y * 4.0, 1.0); + FragColor = vec4(1.0, 1.0, 1.0, a); +} + + diff --git a/gfx/drivers/gx2_shaders/snow_simple.vert b/gfx/drivers/gx2_shaders/snow_simple.vert new file mode 100644 index 0000000000..c42c71e205 --- /dev/null +++ b/gfx/drivers/gx2_shaders/snow_simple.vert @@ -0,0 +1,18 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} diff --git a/gfx/drivers/gx2_shaders/snowflake.c b/gfx/drivers/gx2_shaders/snowflake.c new file mode 100644 index 0000000000..6312e625ce --- /dev/null +++ b/gfx/drivers/gx2_shaders/snowflake.c @@ -0,0 +1,645 @@ +/* RetroArch - A frontend for libretro. + * Copyright (C) 2014-2018 - Ali Bouhlel + * + * RetroArch is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with RetroArch. + * If not, see . + */ + +#include +#include +#include +#include +#include "gx2_shader_inl.h" +#include "menu_shaders.h" + + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[16]; +} vs_program = +{ + { + CALL_FS NO_BARRIER, + ALU(32,16) KCACHE0(CB1, _0_15), + EXP_DONE(POS0, _R1,_x,_y,_z,_w), + EXP_DONE(PARAM0, _R0,_m,_m,_m,_m) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MUL(__,_x, _R1,_w, KC0(3),_w), + ALU_MUL(__,_y, _R1,_w, KC0(3),_z), + ALU_MUL(__,_z, _R1,_w, KC0(3),_y), + ALU_MUL(__,_w, _R1,_w, KC0(3),_x) + ALU_LAST, + /* 1 */ + ALU_MULADD(_R123,_x, _R1,_z, KC0(2),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_z, KC0(2),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_z, KC0(2),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_z, KC0(2),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 2 */ + ALU_MULADD(_R123,_x, _R1,_y, KC0(1),_w, ALU_SRC_PV,_x), + ALU_MULADD(_R123,_y, _R1,_y, KC0(1),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R123,_z, _R1,_y, KC0(1),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_w, _R1,_y, KC0(1),_x, ALU_SRC_PV,_w) + ALU_LAST, + /* 3 */ + ALU_MULADD(_R1,_x, _R1,_x, KC0(0),_x, ALU_SRC_PV,_w), + ALU_MULADD(_R1,_y, _R1,_x, KC0(0),_y, ALU_SRC_PV,_z), + ALU_MULADD(_R1,_z, _R1,_x, KC0(0),_z, ALU_SRC_PV,_y), + ALU_MULADD(_R1,_w, _R1,_x, KC0(0),_w, ALU_SRC_PV,_x) + ALU_LAST, + }, +}; + +__attribute__((aligned(GX2_SHADER_ALIGNMENT))) +static struct +{ + u64 cf[32]; + u64 alu[120]; + u64 alu1[19]; + u64 alu2[1]; + u64 alu3[106]; + u64 alu4[19]; + u64 alu5[2]; +} ps_program = +{ + { + ALU_PUSH_BEFORE(32,120) KCACHE0(CB1, _0_15), + JUMP(0,3) VALID_PIX, + ALU(152,19), + ELSE(1, 5) VALID_PIX, + ALU_POP_AFTER(171,1), + ALU_PUSH_BEFORE(172,106) KCACHE0(CB1, _0_15), + JUMP(1, 8) VALID_PIX, + ALU_POP_AFTER(278,19), + ALU(297,2), + EXP_DONE(PIX0, _R0,_x,_x,_x,_x) + END_OF_PROGRAM + }, + { + /* 0 */ + ALU_MOV(_R127,_x, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R124,_y, KC0(5),_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y), + ALU_MUL(__,_z, KC0(5),_x, ALU_SRC_LITERAL,_y), + ALU_ADD(_R127,_w, KC0(5),_x, ALU_SRC_1,_x), + ALU_RECIP_IEEE(__,_x, KC0(4),_x) SCL_210 + ALU_LAST, + ALU_LITERAL3(0x3F800000, 0x414E4000, 0x3F52C000), + /* 1 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE_x2(_R126,_y, _R0,_x, ALU_SRC_PS,_x), + ALU_ADD(__,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y), + ALU_MUL_IEEE(__,_w, ALU_SRC_PV,_y, ALU_SRC_0_5,_x), + ALU_RECIP_IEEE(__,_x, KC0(4),_y) SCL_210 + ALU_LAST, + ALU_LITERAL2(0x3A83126F, 0xC0000000), + /* 2 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_w), + ALU_MUL_IEEE(_R127,_y, ALU_SRC_PV,_z, ALU_SRC_0_5,_x), + ALU_MUL_IEEE_x2(_R127,_z, _R0,_y, ALU_SRC_PS,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_RECIP_IEEE(_R125,_y, KC0(4),_y) SCL_210 + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 3 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, _R127,_x, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, _R127,_x, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x), + ALU_FRACT(__,_x, ALU_SRC_PV,_w) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 4 */ + ALU_ADD(_R0,_x, _R126,_y, ALU_SRC_1 _NEG,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x), + ALU_ADD(__,_w, _R127,_y, ALU_SRC_1,_x) VEC_201, + ALU_MUL_IEEE(_R127,_x, KC0(4),_x, _R125,_y) + ALU_LAST, + ALU_LITERAL3(0xC0490FDB, 0x40C90FDB, 0x3E22F983), + /* 5 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_FRACT(__,_y, ALU_SRC_PV,_z), + ALU_FLOOR(__,_z, ALU_SRC_PV,_w), + ALU_MOV(_R1,_w, ALU_SRC_0,_x), + ALU_ADD(_R0,_y, _R127,_z, ALU_SRC_1 _NEG,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 6 */ + ALU_MUL(_R0,_x, _R0,_x, _R127,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_x, _R124,_y), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y), + ALU_SIN(__,_x, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + ALU_LITERAL3(0x40000000, 0xC0490FDB, 0x40C90FDB), + /* 7 */ + ALU_MUL(__,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x), + ALU_MUL_IEEE(_R127,_z, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, ALU_SRC_PV _NEG,_z, ALU_SRC_1,_x), + ALU_MUL_IEEE(_R0,_z, _R127,_w, ALU_SRC_LITERAL,_z) + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0x3DCCCCCD, 0x3E800000), + /* 8 */ + ALU_ADD(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_ADD(_R126,_z, _R0 _NEG,_y, ALU_SRC_PV,_w), + ALU_MOV(_R2,_w, ALU_SRC_1,_x), + ALU_SIN(__,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + ALU_LITERAL(0x414E4000), + /* 9 */ + ALU_SETGT(__,_x, ALU_SRC_0,_x, ALU_SRC_PV,_z), + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_0_5,_x), + ALU_SETGT(__,_w, ALU_SRC_PV,_z, ALU_SRC_0,_x), + ALU_SETE_DX10(_R124,_y, ALU_SRC_PV,_z, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL2(0x472AEE8C, 0x3E22F983), + /* 10 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_z), + ALU_ADD(_R125,_z, ALU_SRC_PV,_w, ALU_SRC_PV _NEG,_x), + ALU_FRACT(__,_w, ALU_SRC_PV,_y) + ALU_LAST, + /* 11 */ + ALU_ADD(__,_x, _R127,_z, ALU_SRC_PV,_w), + ALU_MUL(_R127,_y, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3FC90FDB, 0xC0490FDB, 0x40C90FDB), + /* 12 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV _NEG,_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3E22F983, 0x3FE66666, 0x40666666), + /* 13 */ + ALU_ADD(__,_x, _R0 _NEG,_x, ALU_SRC_PV,_y), + ALU_SIN(_R126,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 14 */ + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_SETE_DX10(_R124,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x), + ALU_SETGT_DX10(__,_w, ALU_SRC_0,_x, ALU_SRC_PV,_x), + ALU_RECIP_IEEE(__,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 15 */ + ALU_MUL(_R126,_x, _R124,_y, ALU_SRC_PV,_w), + ALU_MUL_IEEE(__,_z, _R126,_z, ALU_SRC_PS,_x), + ALU_MULADD(_R2,_x, _R126,_z, _R126,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 16 */ + ALU_SETGT(__,_y, ALU_SRC_PV,_z, ALU_SRC_0,_x), + ALU_MAX_DX10(_R126,_z, ALU_SRC_PV,_z, ALU_SRC_PV _NEG,_z), + ALU_SETGT(__,_w, ALU_SRC_0,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 17 */ + ALU_ADD(__,_x, ALU_SRC_PV,_y, ALU_SRC_PV _NEG,_w), + ALU_SETGT_DX10(_R124,_y, ALU_SRC_PV,_z, ALU_SRC_1,_x), + ALU_RECIP_IEEE(__,_x, ALU_SRC_PV,_z) SCL_210 + ALU_LAST, + /* 18 */ + ALU_MUL(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R123,_y, ALU_SRC_PV,_y, _R126,_z, ALU_SRC_PS,_x), + ALU_CNDE_INT(_R127,_z, ALU_SRC_PV,_y, ALU_SRC_PV,_x, ALU_SRC_PV _NEG,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 19 */ + ALU_MIN(__,_x, ALU_SRC_PV,_y, ALU_SRC_1,_x), + ALU_CNDE_INT(_R127,_w, _R124,_y, ALU_SRC_0,_x, ALU_SRC_PV,_x) + ALU_LAST, + /* 20 */ + ALU_MAX(_R126,_z, ALU_SRC_PV,_x, ALU_SRC_1 _NEG,_x) + ALU_LAST, + /* 21 */ + ALU_MUL(_R124,_y, ALU_SRC_PV,_z, ALU_SRC_PV,_z) + ALU_LAST, + /* 22 */ + ALU_MULADD(_R123,_z, ALU_SRC_LITERAL,_y, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_w, ALU_SRC_LITERAL,_z, ALU_SRC_PV,_y, ALU_SRC_1,_x) + ALU_LAST, + ALU_LITERAL3(0x3F43B24E, 0x3D6EE04D, 0x3EDCF805), + /* 23 */ + ALU_MUL(_R127,_x, _R126 _ABS,_z, ALU_SRC_PV,_w), + ALU_MULADD(_R123,_y, _R124,_y, ALU_SRC_PV,_z, ALU_SRC_1,_x) + ALU_LAST, + /* 24 */ + ALU_RECIP_IEEE(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 25 */ + ALU_MUL(__,_x, _R127,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 26 */ + ALU_CNDGT(_R123,_z, _R126,_z, ALU_SRC_PV,_x, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 27 */ + ALU_MULADD(_R124,_y, _R127,_z, ALU_SRC_PV,_z, _R127,_w) + ALU_LAST, + /* 28 */ + ALU_SETGT(__,_y, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_SETGT(__,_w, ALU_SRC_0,_x, ALU_SRC_PV,_y) + ALU_LAST, + /* 29 */ + ALU_ADD(__,_x, ALU_SRC_PV,_y, ALU_SRC_PV _NEG,_w) + ALU_LAST, + /* 30 */ + ALU_ADD(__,_y, _R125 _NEG,_z, ALU_SRC_PV,_x) + ALU_LAST, + /* 31 */ + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R124,_y) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 32 */ + ALU_CNDE_INT(_R123,_x, _R126,_x, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40490FDB), + /* 33 */ + ALU_CNDE_INT(_R123,_z, _R124,_z, ALU_SRC_PV,_x, _R127,_y) + ALU_LAST, + /* 34 */ + ALU_MULADD(_R0,_w, _R126,_w, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL(0x41200000), + /* 35 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R2,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3AD3D70A), + }, + { + /* 36 */ + ALU_SETGT_DX10(_R127,_x, ALU_SRC_LITERAL,_x, _R2,_x), + ALU_MUL(__,_w, _R0,_w, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x3A53D70A, 0x41000000), + /* 37 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 38 */ + ALU_FRACT(__,_y, ALU_SRC_PV,_z) + ALU_LAST, + /* 39 */ + ALU_MULADD(_R123,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 40 */ + ALU_MUL(__,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 41 */ + ALU_SIN(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 42 */ + ALU_SETGT_DX10(__,_y, ALU_SRC_0,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 43 */ + ALU_CNDE_INT(_R126,_x, ALU_SRC_PV,_y, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 44 */ + ALU_ADD(__,_z, ALU_SRC_PV,_x, ALU_SRC_1,_x) + ALU_LAST, + /* 45 */ + ALU_CNDE_INT(_R123,_y, _R127,_x, _R126,_x, ALU_SRC_PV,_z) + ALU_LAST, + /* 46 */ + ALU_MUL(_R1,_x, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_y) + ALU_LAST, + ALU_LITERAL(0x3F258000), + /* 47 */ + ALU_MOV(_R0,_w, _R2,_w) + ALU_LAST, + }, + { + /* 48 */ + ALU_MOV(_R0,_w, _R1,_w) + ALU_LAST, + }, + { + /* 49 */ + ALU_CNDE_INT(_R1,_z, _R0,_w, ALU_SRC_0,_x, _R1,_x) + ALU_LAST, + /* 50 */ + ALU_MOV(_R127,_x, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R126,_y, KC0(5),_x, ALU_SRC_LITERAL,_z, ALU_SRC_LITERAL,_y), + ALU_MUL(__,_z, KC0(5),_x, ALU_SRC_LITERAL,_y), + ALU_ADD(__,_w, _R0,_z, ALU_SRC_LITERAL,_y), + ALU_ADD(_R1,_y, ALU_SRC_0,_x, _R1,_z) + ALU_LAST, + ALU_LITERAL3(0x3F800000, 0x411F6000, 0x3F1AA000), + /* 51 */ + ALU_MUL_IEEE(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_y, ALU_SRC_0_5,_x), + ALU_MUL_IEEE(__,_z, ALU_SRC_PV,_y, ALU_SRC_0_5,_x), + ALU_ADD(__,_w, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_z) + ALU_LAST, + ALU_LITERAL3(0x3A83126F, 0x3E22F983, 0xC0000000), + /* 52 */ + ALU_FLOOR(__,_x, ALU_SRC_PV,_z), + ALU_MUL_IEEE(_R127,_y, ALU_SRC_PV,_w, ALU_SRC_0_5,_x), + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x), + ALU_FRACT(_R127,_w, ALU_SRC_PV,_y) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 53 */ + ALU_DOT4(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_DOT4(__,_y, _R127,_x, ALU_SRC_LITERAL,_y), + ALU_DOT4(__,_z, _R127,_x, ALU_SRC_0,_x), + ALU_DOT4(__,_w, ALU_SRC_LITERAL,_z, ALU_SRC_0,_x), + ALU_FRACT(__,_x, ALU_SRC_PV,_z) + ALU_LAST, + ALU_LITERAL3(0x414FD639, 0x429C774C, 0x80000000), + /* 54 */ + ALU_MULADD(_R123,_x, _R127,_w, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_z, _R127,_y, ALU_SRC_1,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_z, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL3(0xC0490FDB, 0x40C90FDB, 0x3E22F983), + /* 55 */ + ALU_MUL(__,_x, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_x), + ALU_FRACT(__,_y, ALU_SRC_PV,_w), + ALU_FLOOR(__,_z, ALU_SRC_PV,_z), + ALU_MUL(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 56 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x), + ALU_MULADD(_R123,_w, ALU_SRC_PV _NEG,_z, ALU_SRC_LITERAL,_z, _R126,_y), + ALU_SIN(__,_z, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + ALU_LITERAL3(0xC0490FDB, 0x40C90FDB, 0x40000000), + /* 57 */ + ALU_MUL(__,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x), + ALU_ADD(__,_z, ALU_SRC_PV _NEG,_w, ALU_SRC_1,_x), + ALU_MUL_IEEE(_R127,_w, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_y), + ALU_SIN(_R126,_z, _R127,_w) SCL_210 + ALU_LAST, + ALU_LITERAL2(0x3E22F983, 0x3DCCCCCD), + /* 58 */ + ALU_ADD(_R125,_w, _R0 _NEG,_y, ALU_SRC_PV,_z), + ALU_SIN(__,_w, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 59 */ + ALU_SETGT(__,_x, ALU_SRC_0,_x, ALU_SRC_PV,_w), + ALU_MUL(__,_y, ALU_SRC_PS,_x, ALU_SRC_LITERAL,_x), + ALU_SETGT(__,_z, ALU_SRC_PV,_w, ALU_SRC_0,_x), + ALU_SETE_DX10(_R126,_w, ALU_SRC_PV,_w, ALU_SRC_0,_x) + ALU_LAST, + ALU_LITERAL(0x472AEE8C), + /* 60 */ + ALU_FRACT(__,_z, ALU_SRC_PV,_y), + ALU_ADD(_R124,_w, ALU_SRC_PV,_z, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 61 */ + ALU_ADD(__,_x, _R127,_w, ALU_SRC_PV,_z), + ALU_MUL(_R0,_w, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 62 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV _NEG,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0x3FE66666, 0x40666666), + /* 63 */ + ALU_ADD(__,_x, _R0 _NEG,_x, ALU_SRC_PV,_y) + ALU_LAST, + /* 64 */ + ALU_MUL(__,_y, ALU_SRC_PV,_x, ALU_SRC_PV,_x), + ALU_SETGT_DX10(__,_z, ALU_SRC_0,_x, ALU_SRC_PV,_x), + ALU_SETE_DX10(_R127,_w, ALU_SRC_PV,_x, ALU_SRC_0,_x), + ALU_RECIP_IEEE(__,_y, ALU_SRC_PV,_x) SCL_210 + ALU_LAST, + /* 65 */ + ALU_MUL(_R126,_x, _R126,_w, ALU_SRC_PV,_z), + ALU_MUL_IEEE(__,_w, _R125,_w, ALU_SRC_PS,_x) VEC_120, + ALU_MULADD(_R0,_x, _R125,_w, _R125,_w, ALU_SRC_PV,_y) + ALU_LAST, + /* 66 */ + ALU_SETGT(__,_y, ALU_SRC_PV,_w, ALU_SRC_0,_x), + ALU_SETGT(__,_z, ALU_SRC_0,_x, ALU_SRC_PV,_w), + ALU_MAX_DX10(_R126,_w, ALU_SRC_PV,_w, ALU_SRC_PV _NEG,_w) + ALU_LAST, + /* 67 */ + ALU_ADD(__,_x, ALU_SRC_PV,_y, ALU_SRC_PV _NEG,_z), + ALU_SETGT_DX10(_R126,_y, ALU_SRC_PV,_w, ALU_SRC_1,_x), + ALU_RECIP_IEEE(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 68 */ + ALU_MUL(__,_x, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_x), + ALU_CNDE_INT(_R123,_y, ALU_SRC_PV,_y, _R126,_w, ALU_SRC_PS,_x), + ALU_CNDE_INT(_R125,_w, ALU_SRC_PV,_y, ALU_SRC_PV,_x, ALU_SRC_PV _NEG,_x) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 69 */ + ALU_MIN(__,_x, ALU_SRC_PV,_y, ALU_SRC_1,_x), + ALU_CNDE_INT(_R127,_z, _R126,_y, ALU_SRC_0,_x, ALU_SRC_PV,_x) + ALU_LAST, + /* 70 */ + ALU_MAX(_R126,_w, ALU_SRC_PV,_x, ALU_SRC_1 _NEG,_x) + ALU_LAST, + /* 71 */ + ALU_MUL(_R126,_y, ALU_SRC_PV,_w, ALU_SRC_PV,_w) + ALU_LAST, + /* 72 */ + ALU_MULADD(_R123,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_y, ALU_SRC_1,_x), + ALU_MULADD(_R123,_w, ALU_SRC_LITERAL,_z, ALU_SRC_PV,_y, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL3(0x3EDCF805, 0x3F43B24E, 0x3D6EE04D), + /* 73 */ + ALU_MUL(_R127,_x, _R126 _ABS,_w, ALU_SRC_PV,_z), + ALU_MULADD(_R123,_y, _R126,_y, ALU_SRC_PV,_w, ALU_SRC_1,_x) + ALU_LAST, + /* 74 */ + ALU_RECIP_IEEE(__,_x, ALU_SRC_PV,_y) SCL_210 + ALU_LAST, + /* 75 */ + ALU_MUL(__,_x, _R127,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 76 */ + ALU_CNDGT(_R123,_w, _R126,_w, ALU_SRC_PV,_x, ALU_SRC_PV _NEG,_x) + ALU_LAST, + /* 77 */ + ALU_MULADD(_R126,_y, _R125,_w, ALU_SRC_PV,_w, _R127,_z) + ALU_LAST, + /* 78 */ + ALU_SETGT(__,_y, ALU_SRC_PV,_y, ALU_SRC_0,_x), + ALU_SETGT(__,_z, ALU_SRC_0,_x, ALU_SRC_PV,_y) + ALU_LAST, + /* 79 */ + ALU_ADD(__,_x, ALU_SRC_PV,_y, ALU_SRC_PV _NEG,_z) + ALU_LAST, + /* 80 */ + ALU_ADD(__,_y, _R124 _NEG,_w, ALU_SRC_PV,_x) + ALU_LAST, + /* 81 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV _NEG,_y, ALU_SRC_LITERAL,_x, _R126,_y) + ALU_LAST, + ALU_LITERAL(0x3FC90FDB), + /* 82 */ + ALU_CNDE_INT(_R123,_x, _R126,_x, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x40490FDB), + /* 83 */ + ALU_CNDE_INT(_R123,_w, _R127,_w, ALU_SRC_PV,_x, _R0,_w) + ALU_LAST, + /* 84 */ + ALU_MULADD(_R0,_z, _R126,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_w) + ALU_LAST, + ALU_LITERAL(0x41200000), + /* 85 */ + ALU_PRED_SETGT(__,_x, ALU_SRC_LITERAL,_x, _R0,_x) UPDATE_EXEC_MASK(DEACTIVATE) UPDATE_PRED + ALU_LAST, + ALU_LITERAL(0x3A0851EB), + }, + { + /* 86 */ + ALU_SETGT_DX10(_R127,_x, ALU_SRC_LITERAL,_x, _R0,_x), + ALU_MUL(__,_w, _R0,_z, ALU_SRC_LITERAL,_y) + ALU_LAST, + ALU_LITERAL2(0x398851EB, 0x41000000), + /* 87 */ + ALU_MULADD(_R123,_y, ALU_SRC_PV,_w, ALU_SRC_LITERAL,_x, ALU_SRC_0_5,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 88 */ + ALU_FRACT(__,_x, ALU_SRC_PV,_y) + ALU_LAST, + /* 89 */ + ALU_MULADD(_R123,_z, ALU_SRC_PV,_x, ALU_SRC_LITERAL,_y, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL2(0xC0490FDB, 0x40C90FDB), + /* 90 */ + ALU_MUL(__,_w, ALU_SRC_PV,_z, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3E22F983), + /* 91 */ + ALU_SIN(__,_x, ALU_SRC_PV,_w) SCL_210 + ALU_LAST, + /* 92 */ + ALU_SETGT_DX10(__,_x, ALU_SRC_0,_x, ALU_SRC_PS,_x) + ALU_LAST, + /* 93 */ + ALU_CNDE_INT(_R127,_z, ALU_SRC_PV,_x, ALU_SRC_0,_x, ALU_SRC_LITERAL,_x) + ALU_LAST, + ALU_LITERAL(0x3F800000), + /* 94 */ + ALU_ADD(__,_y, ALU_SRC_PV,_z, ALU_SRC_1,_x) + ALU_LAST, + /* 95 */ + ALU_CNDE_INT(_R123,_x, _R127,_x, _R127,_z, ALU_SRC_PV,_y) + ALU_LAST, + /* 96 */ + ALU_MUL(_R1,_z, ALU_SRC_LITERAL,_x, ALU_SRC_PV,_x) + ALU_LAST, + ALU_LITERAL(0x3E550000), + /* 97 */ + ALU_MOV(_R1,_w, _R2,_w) + ALU_LAST, + }, + { + /* 98 */ + ALU_CNDE_INT(_R0,_w, _R1,_w, ALU_SRC_0,_x, _R1,_z) + ALU_LAST, + /* 99 */ + ALU_ADD(_R0,_x, _R1,_y, _R0,_w) + ALU_LAST, + }, +}; + + +static GX2AttribVar attributes[] = +{ + { "Position", GX2_SHADER_VAR_TYPE_FLOAT4, 0, 0}, + { "TexCoord", GX2_SHADER_VAR_TYPE_FLOAT2, 0, 1}, +}; + +static GX2AttribStream attribute_stream[] = +{ + {0, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _1), GX2_ENDIAN_SWAP_DEFAULT}, + {1, 0, 0, GX2_ATTRIB_FORMAT_FLOAT_32_32, + GX2_ATTRIB_INDEX_PER_VERTEX, 0, GX2_COMP_SEL(_x, _y, _0, _0), GX2_ENDIAN_SWAP_DEFAULT}, +}; + +static GX2SamplerVar samplers[] = +{ + { "Source", GX2_SAMPLER_VAR_TYPE_SAMPLER_2D, 0 }, +}; + +static GX2UniformBlock uniform_blocks[] = { + {"UBO", 1, 96} +}; + +static GX2UniformVar uniform_vars[] = { + {"global.MVP", GX2_SHADER_VAR_TYPE_FLOAT, 1, 0, 0}, + {"global.OutputSize", GX2_SHADER_VAR_TYPE_FLOAT, 1, 16, 0}, + {"global.time", GX2_SHADER_VAR_TYPE_FLOAT, 1, 20, 0}, +}; + + +GX2Shader snowflake_shader = +{ + { + { + .sq_pgm_resources_vs.num_gprs = 2, + .sq_pgm_resources_vs.stack_size = 1, + .spi_vs_out_config.vs_export_count = 0, + .num_spi_vs_out_id = 1, + { + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + {.semantic_0 = 0xFF, .semantic_1 = 0xFF, .semantic_2 = 0xFF, .semantic_3 = 0xFF}, + }, + .sq_vtx_semantic_clear = ~0x1, + .num_sq_vtx_semantic = 1, + { + 0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + }, + .vgt_vertex_reuse_block_cntl.vtx_reuse_depth = 0xE, + .vgt_hos_reuse_depth.reuse_depth = 0x10, + }, /* regs */ + .size = sizeof(vs_program), + .program = (uint8_t*)&vs_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .uniformBlockCount = countof(uniform_blocks), uniform_blocks, + .uniformVarCount = countof(uniform_vars), uniform_vars, + .attribVarCount = countof(attributes), attributes, + }, + { + { + .sq_pgm_resources_ps.num_gprs = 3, + .sq_pgm_resources_ps.stack_size = 1, + .sq_pgm_exports_ps.export_mode = 0x2, + .spi_ps_in_control_0.num_interp = 1, + .spi_ps_in_control_0.position_ena = TRUE, + .spi_ps_in_control_0.persp_gradient_ena = FALSE, + .spi_ps_in_control_0.baryc_sample_cntl = spi_baryc_cntl_centers_only, + .num_spi_ps_input_cntl = 1, {{.semantic = 0, .default_val = 1}}, + .cb_shader_mask.output0_enable = 0xF, + .cb_shader_control.rt0_enable = TRUE, + .db_shader_control.z_order = db_z_order_early_z_then_late_z, + }, /* regs */ + .size = sizeof(ps_program), + .program = (uint8_t*)&ps_program, + .mode = GX2_SHADER_MODE_UNIFORM_BLOCK, + .samplerVarCount = countof(samplers), samplers, + }, + .attribute_stream = attribute_stream, +}; diff --git a/gfx/drivers/gx2_shaders/snowflake.frag b/gfx/drivers/gx2_shaders/snowflake.frag new file mode 100644 index 0000000000..3cbcecf8c0 --- /dev/null +++ b/gfx/drivers/gx2_shaders/snowflake.frag @@ -0,0 +1,76 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) out vec4 FragColor; + +vec2 uv; +float atime; + +float rand(vec2 co) +{ + return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453); +} + +float rand_float(float x) +{ + return rand(vec2(x, 1.0)); +} + +float snow(vec3 pos, vec2 uv, float o) +{ + vec2 d = (pos.xy - uv); + float a = atan(d.y,d.x) + sin(atime*1.0 + o) * 10.0; + + float dist = d.x*d.x + d.y*d.y; + + if(dist < pos.z/400.0) + { + float col = 0.0; + if(sin(a * 8.0) < 0.0) + { + col=1.0; + } + if(dist < pos.z/800.0) + { + col+=1.0; + } + return col * pos.z; + } + + return 0.0; +} + +float col(vec2 c) +{ + float color = 0.0; + for (int i = 1; i < 3; i++) + { + float o = rand_float(float(i) / 3.0) * 15.0; + float z = rand_float(float(i) + 13.0); + float x = 1.8 - (3.6) * (rand_float(floor((global.time*((z + 1.0) / 2.0) +o) / 2.0)) + sin(global.time * o /1000.0) / 10.0); + float y = 1.0 - mod((global.time * ((z + 1.0)/2.0)) + o, 2.0); + + color += snow(vec3(x,y,z), c, o); + } + + return color; +} + +void main(void) +{ + uv = gl_FragCoord.xy / global.OutputSize.xy; + uv = uv * 2.0 - 1.0; + vec2 p = uv; + p.x *= global.OutputSize.x / global.OutputSize.y; + + atime = (global.time + 1.0) / 4.0; + + FragColor = vec4(col(p)); +} + diff --git a/gfx/drivers/gx2_shaders/snowflake.vert b/gfx/drivers/gx2_shaders/snowflake.vert new file mode 100644 index 0000000000..c42c71e205 --- /dev/null +++ b/gfx/drivers/gx2_shaders/snowflake.vert @@ -0,0 +1,18 @@ +#version 150 + +uniform UBO +{ + mat4 MVP; + vec2 OutputSize; + float time; +} global; + +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; +} diff --git a/wiiu/sprite_shader.c b/gfx/drivers/gx2_shaders/sprite.c similarity index 99% rename from wiiu/sprite_shader.c rename to gfx/drivers/gx2_shaders/sprite.c index b34c48d222..9cb406d272 100644 --- a/wiiu/sprite_shader.c +++ b/gfx/drivers/gx2_shaders/sprite.c @@ -17,8 +17,8 @@ #include #include #include -#include "sprite_shader.h" #include "gx2_shader_inl.h" +#include "sprite.h" __attribute__((aligned(GX2_SHADER_ALIGNMENT))) static struct diff --git a/wiiu/sprite_shader.h b/gfx/drivers/gx2_shaders/sprite.h similarity index 100% rename from wiiu/sprite_shader.h rename to gfx/drivers/gx2_shaders/sprite.h diff --git a/wiiu/tex_shader.c b/gfx/drivers/gx2_shaders/tex.c similarity index 99% rename from wiiu/tex_shader.c rename to gfx/drivers/gx2_shaders/tex.c index 248559d48e..7a13e79075 100644 --- a/wiiu/tex_shader.c +++ b/gfx/drivers/gx2_shaders/tex.c @@ -17,8 +17,8 @@ #include #include #include -#include "tex_shader.h" #include "gx2_shader_inl.h" +#include "tex.h" __attribute__((aligned(GX2_SHADER_ALIGNMENT))) static struct diff --git a/wiiu/tex_shader.h b/gfx/drivers/gx2_shaders/tex.h similarity index 100% rename from wiiu/tex_shader.h rename to gfx/drivers/gx2_shaders/tex.h diff --git a/griffin/griffin.c b/griffin/griffin.c index d758de28fa..254c513daf 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -353,7 +353,7 @@ VIDEO DRIVER #endif #if defined(__wiiu__) -#include "../gfx/drivers/wiiu_gfx.c" +#include "../gfx/drivers/gx2_gfx.c" #endif #ifdef HAVE_SDL2 diff --git a/menu/drivers_display/menu_display_wiiu.c b/menu/drivers_display/menu_display_wiiu.c index c62c7ba430..f20c00a8c4 100644 --- a/menu/drivers_display/menu_display_wiiu.c +++ b/menu/drivers_display/menu_display_wiiu.c @@ -71,24 +71,50 @@ static void menu_display_wiiu_draw(void *data) if(draw->pipeline.id) { - if(draw->pipeline.id != VIDEO_SHADER_MENU) - return; - GX2SetShaderMode(GX2_SHADER_MODE_UNIFORM_BLOCK); - GX2SetShader(&ribbon_shader); - GX2SetVertexUniformBlock(ribbon_shader.vs.uniformBlocks[0].offset, - ribbon_shader.vs.uniformBlocks[0].size, - wiiu->ribbon_ubo); - GX2SetAttribBuffer(0, draw->coords->vertices * 2 * sizeof(float), 2 * sizeof(float), wiiu->menu_display_coord_array); - GX2SetBlendControl(GX2_RENDER_TARGET_0, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_ONE, - GX2_BLEND_COMBINE_MODE_ADD, GX2_DISABLE, 0, 0, 0); - GX2DrawEx(GX2_PRIMITIVE_MODE_TRIANGLE_STRIP, draw->coords->vertices, 0, 1); + switch(draw->pipeline.id) + { + case VIDEO_SHADER_MENU: + GX2SetShader(&ribbon_shader); + break; + case VIDEO_SHADER_MENU_2: + GX2SetShader(&ribbon_simple_shader); + break; + case VIDEO_SHADER_MENU_3: + GX2SetShader(&snow_simple_shader); + break; + case VIDEO_SHADER_MENU_4: + GX2SetShader(&snow_shader); + break; + case VIDEO_SHADER_MENU_5: + GX2SetShader(&bokeh_shader); + break; + case VIDEO_SHADER_MENU_6: + GX2SetShader(&snowflake_shader); + break; + default: + break; + } + + switch(draw->pipeline.id) + { + case VIDEO_SHADER_MENU: + case VIDEO_SHADER_MENU_2: + GX2DrawEx(GX2_PRIMITIVE_MODE_TRIANGLE_STRIP, draw->coords->vertices, 0, 1); + GX2SetBlendControl(GX2_RENDER_TARGET_0, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_INV_SRC_ALPHA, + GX2_BLEND_COMBINE_MODE_ADD, + GX2_ENABLE, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_INV_SRC_ALPHA, + GX2_BLEND_COMBINE_MODE_ADD); + case VIDEO_SHADER_MENU_3: + case VIDEO_SHADER_MENU_4: + case VIDEO_SHADER_MENU_5: + case VIDEO_SHADER_MENU_6: + GX2DrawEx(GX2_PRIMITIVE_MODE_QUADS, 4, 0, 1); + break; + } + - GX2SetBlendControl(GX2_RENDER_TARGET_0, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_INV_SRC_ALPHA, - GX2_BLEND_COMBINE_MODE_ADD, - GX2_ENABLE, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_INV_SRC_ALPHA, - GX2_BLEND_COMBINE_MODE_ADD); } else if(draw->coords->vertex || draw->coords->color[0] != draw->coords->color[12]) { @@ -218,24 +244,52 @@ static void menu_display_wiiu_draw_pipeline(void *data) video_coord_array_t *ca = NULL; - if (!wiiu || !draw || draw->pipeline.id != VIDEO_SHADER_MENU) + if (!wiiu || !draw) return; - ca = menu_display_get_coords_array(); - if(!wiiu->menu_display_coord_array) + switch(draw->pipeline.id) { - wiiu->menu_display_coord_array = MEM2_alloc(ca->coords.vertices * 2 * sizeof(float), GX2_VERTEX_BUFFER_ALIGNMENT); - memcpy(wiiu->menu_display_coord_array, ca->coords.vertex, ca->coords.vertices * 2 * sizeof(float)); - wiiu->ribbon_ubo = MEM2_alloc(sizeof(*wiiu->ribbon_ubo), GX2_UNIFORM_BLOCK_ALIGNMENT); - wiiu->ribbon_ubo->time = 0.0f; - GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, wiiu->menu_display_coord_array, ca->coords.vertices * 2 * sizeof(float)); + case VIDEO_SHADER_MENU: + case VIDEO_SHADER_MENU_2: + ca = menu_display_get_coords_array(); + if(!wiiu->menu_shader_vbo) + { + wiiu->menu_shader_vbo = MEM2_alloc(ca->coords.vertices * 2 * sizeof(float), GX2_VERTEX_BUFFER_ALIGNMENT); + memcpy(wiiu->menu_shader_vbo, ca->coords.vertex, ca->coords.vertices * 2 * sizeof(float)); + GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, wiiu->menu_shader_vbo, ca->coords.vertices * 2 * sizeof(float)); + } + + draw->coords->vertex = wiiu->menu_shader_vbo; + draw->coords->vertices = ca->coords.vertices; + GX2SetAttribBuffer(0, draw->coords->vertices * 2 * sizeof(float), 2 * sizeof(float), wiiu->menu_shader_vbo); + GX2SetBlendControl(GX2_RENDER_TARGET_0, GX2_BLEND_MODE_SRC_ALPHA, GX2_BLEND_MODE_ONE, + GX2_BLEND_COMBINE_MODE_ADD, GX2_DISABLE, 0, 0, 0); + + break; + case VIDEO_SHADER_MENU_3: + case VIDEO_SHADER_MENU_4: + case VIDEO_SHADER_MENU_5: + case VIDEO_SHADER_MENU_6: + GX2SetAttribBuffer(0, 4 * sizeof(*wiiu->v), sizeof(*wiiu->v), wiiu->v); + break; + default: + return; } - draw->coords->vertex = wiiu->menu_display_coord_array; - draw->coords->vertices = ca->coords.vertices; + if(!wiiu->menu_shader_ubo) + { + wiiu->menu_shader_ubo = MEM2_alloc(sizeof(*wiiu->menu_shader_ubo), GX2_UNIFORM_BLOCK_ALIGNMENT); + matrix_4x4_ortho(wiiu->menu_shader_ubo->mvp, 0, 1, 1, 0, -1, 1); + wiiu->menu_shader_ubo->OutputSize.width = wiiu->color_buffer.surface.width; + wiiu->menu_shader_ubo->OutputSize.height = wiiu->color_buffer.surface.height; + wiiu->menu_shader_ubo->time = 0.0f; + } + else + wiiu->menu_shader_ubo->time += 0.01f; - wiiu->ribbon_ubo->time += 0.01; - GX2Invalidate(GX2_INVALIDATE_MODE_CPU_UNIFORM_BLOCK, wiiu->ribbon_ubo, sizeof(*wiiu->ribbon_ubo)); + GX2Invalidate(GX2_INVALIDATE_MODE_CPU_UNIFORM_BLOCK, wiiu->menu_shader_ubo, sizeof(*wiiu->menu_shader_ubo)); + GX2SetVertexUniformBlock(1, sizeof(*wiiu->menu_shader_ubo), wiiu->menu_shader_ubo); + GX2SetPixelUniformBlock(1, sizeof(*wiiu->menu_shader_ubo), wiiu->menu_shader_ubo); } static void menu_display_wiiu_restore_clear_color(void) diff --git a/wiiu/gx2_shader_inl.h b/wiiu/gx2_shader_inl.h index 8fce718ab9..d788777068 100644 --- a/wiiu/gx2_shader_inl.h +++ b/wiiu/gx2_shader_inl.h @@ -69,7 +69,12 @@ #define KCACHE0(bank, mode) | to_QWORD(CF_ALU_WORD0(0, bank, 0, mode), 0) #define KCACHE1(bank, mode) | to_QWORD(CF_ALU_WORD0(0, 0, bank, 0), CF_ALU_WORD1(mode,0, 0, 0, 0, 0)) -#define ALU_LAST | to_QWORD(to_LE(1ull << 31), 0) + +#define DEACTIVATE 1 +#define UPDATE_EXEC_MASK(mode) | to_QWORD(0, to_LE(mode << 2)) +#define UPDATE_PRED | to_QWORD(0, to_LE(1ull << 3)) +#define CLAMP | to_QWORD(0, to_LE(1ull << 31)) +#define ALU_LAST | to_QWORD(to_LE(1ull << 31), 0) /* ALU */ @@ -139,6 +144,7 @@ #define ALU_SRC_PS 0xFF #define _NEG | (1 << 12) +#define _ABS | (1 << 13) #define ALU_OMOD_OFF 0x0 #define ALU_OMOD_M2 0x1 @@ -193,26 +199,43 @@ /* instructions */ /* CF */ -#define CF_INST_TEX 0x01 -#define CF_INST_VTX 0x02 -#define CF_INST_ALU 0x08 -#define CF_INST_CALL_FS 0x13 -#define CF_INST_EMIT_VERTEX 0x15 -#define CF_INST_MEM_RING 0x26 +#define CF_INST_TEX 0x01 +#define CF_INST_VTX 0x02 +#define CF_INST_JUMP 0x0A +#define CF_INST_ELSE 0x0D +#define CF_INST_CALL_FS 0x13 +#define CF_INST_EMIT_VERTEX 0x15 +#define CF_INST_MEM_RING 0x26 + +#define CF_INST_ALU 0x08 +#define CF_INST_ALU_PUSH_BEFORE 0x09 +#define CF_INST_ALU_POP_AFTER 0x0A /* ALU */ #define OP2_INST_ADD 0x0 #define OP2_INST_MUL 0x1 #define OP2_INST_MUL_IEEE 0x2 +#define OP2_INST_MIN 0x04 +#define OP2_INST_MAX 0x03 +#define OP2_INST_MAX_DX10 0x05 #define OP2_INST_FRACT 0x10 +#define OP2_INST_SETGT 0x09 +#define OP2_INST_SETE_DX10 0x0C +#define OP2_INST_SETGT_DX10 0x0D #define OP2_INST_FLOOR 0x14 #define OP2_INST_MOV 0x19 +#define OP2_INST_PRED_SETGT 0x21 +#define OP2_INST_PRED_SETE_INT 0x42 +#define OP2_INST_DOT4 0x50 #define OP2_INST_DOT4_IEEE 0x51 #define OP2_INST_RECIP_IEEE 0x66 #define OP2_INST_RECIPSQRT_IEEE 0x69 +#define OP2_INST_SQRT_IEEE 0x6A #define OP2_INST_SIN 0x6E #define OP2_INST_COS 0x6F -#define OP3_INST_MULADD 0x10 +#define OP3_INST_MULADD 0x10 +#define OP3_INST_CNDGT 0x19 +#define OP3_INST_CNDE_INT 0x1C /* EXP */ #define CF_INST_EXP 0x27 #define CF_INST_EXP_DONE 0x28 @@ -288,8 +311,12 @@ #define TEX(addr, cnt) to_QWORD(CF_DWORD0(addr), CF_DWORD1(0x0, 0x0, CF_COND_ACTIVE, (cnt - 1), 0x0, CF_INST_TEX)) #define VTX(addr, cnt) to_QWORD(CF_DWORD0(addr), CF_DWORD1(0x0, 0x0, CF_COND_ACTIVE, (cnt - 1), 0x0, CF_INST_VTX)) +#define JUMP(popCount, addr) to_QWORD(CF_DWORD0(addr), CF_DWORD1(popCount, 0x0, CF_COND_ACTIVE, 0x0, 0x0, CF_INST_JUMP)) +#define ELSE(popCount, addr) to_QWORD(CF_DWORD0(addr), CF_DWORD1(popCount, 0x0, CF_COND_ACTIVE, 0x0, 0x0, CF_INST_ELSE)) #define ALU(addr, cnt) to_QWORD(CF_ALU_WORD0(addr, 0x0, 0x0, 0x0), CF_ALU_WORD1(0x0, 0x0, 0x0, (cnt - 1), 0x0, CF_INST_ALU)) +#define ALU_PUSH_BEFORE(addr, cnt) to_QWORD(CF_ALU_WORD0(addr, 0x0, 0x0, 0x0), CF_ALU_WORD1(0x0, 0x0, 0x0, (cnt - 1), 0x0, CF_INST_ALU_PUSH_BEFORE)) +#define ALU_POP_AFTER(addr, cnt) to_QWORD(CF_ALU_WORD0(addr, 0x0, 0x0, 0x0), CF_ALU_WORD1(0x0, 0x0, 0x0, (cnt - 1), 0x0, CF_INST_ALU_POP_AFTER)) #define EXP_DONE(dstReg_and_type, srcReg, srcSelX, srcSelY, srcSelZ, srcSelW) to_QWORD(CF_EXP_WORD0(dstReg_and_type, srcReg, 0x0, 0x0, 0x0), \ CF_EXP_WORD1(srcSelX, srcSelY, srcSelZ, srcSelW, 0x0, CF_INST_EXP_DONE)) @@ -304,8 +331,8 @@ #define EMIT_VERTEX to_QWORD(0, CF_DWORD1(0, 0, 0, 0, 0, CF_INST_EMIT_VERTEX)) #define ALU_OP2(inst, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, omod) \ - to_QWORD(ALU_WORD0(src0Sel, 0x0, src0Chan, 0x0, src1Sel, 0x0, src1Chan, 0x0, 0x0, 0x0), \ - ALU_WORD1_OP2(0x0, 0x0, 0x0, 0x0, (((dstGpr&__) >> 7) ^ 0x1), omod, inst, 0x0, 0x0, dstGpr, 0x0, dstChan, 0x0)) + to_QWORD(ALU_WORD0(((src0Sel) & ((1 << 13) - 1)), 0x0, src0Chan, 0x0, ((src1Sel) & ((1 << 13) - 1)), 0x0, src1Chan, 0x0, 0x0, 0x0), \ + ALU_WORD1_OP2(((src0Sel) >> 13), ((src1Sel) >> 13), 0x0, 0x0, (((dstGpr&__) >> 7) ^ 0x1), omod, inst, 0x0, 0x0, dstGpr, 0x0, dstChan, 0x0)) #define ALU_OP3(inst, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) \ to_QWORD(ALU_WORD0(src0Sel, 0x0, src0Chan, 0x0, src1Sel, 0x0, src1Chan, 0x0, 0x0, 0x0), \ @@ -317,21 +344,45 @@ #define ALU_ADD_x2(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ ALU_OP2(OP2_INST_ADD, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_M2) +#define ALU_ADD_D2(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_ADD, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_D2) + #define ALU_MUL(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ ALU_OP2(OP2_INST_MUL, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) +#define ALU_MUL_x2(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MUL, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_M2) + +#define ALU_MUL_x4(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MUL, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_M4) + #define ALU_MUL_IEEE(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ ALU_OP2(OP2_INST_MUL_IEEE, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) +#define ALU_MUL_IEEE_x2(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MUL_IEEE, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_M2) + +#define ALU_MUL_IEEE_x4(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MUL_IEEE, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_M4) + #define ALU_FRACT(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_FRACT, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) #define ALU_FLOOR(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_FLOOR, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) +#define ALU_SQRT_IEEE(dstGpr, dstChan, src0Sel, src0Chan) \ + ALU_OP2(OP2_INST_SQRT_IEEE, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) + +#define ALU_SQRT_IEEE_D2(dstGpr, dstChan, src0Sel, src0Chan) \ + ALU_OP2(OP2_INST_SQRT_IEEE, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_D2) + #define ALU_MOV(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_MOV, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) +#define ALU_MOV_D2(dstGpr, dstChan, src0Sel, src0Chan) \ + ALU_OP2(OP2_INST_MOV, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_D2) + #define ALU_MOV_x2(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_MOV, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_M2) @@ -341,6 +392,33 @@ #define ALU_DOT4_IEEE(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ ALU_OP2(OP2_INST_DOT4_IEEE, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) +#define ALU_DOT4(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_DOT4, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_PRED_SETGT(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_PRED_SETGT, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_SETE_DX10(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_SETE_DX10, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_SETGT_DX10(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_SETGT_DX10, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_SETGT(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_SETGT, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_PRED_SETE_INT(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_PRED_SETE_INT, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_MIN(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MIN, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_MAX(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MAX, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + +#define ALU_MAX_DX10(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan) \ + ALU_OP2(OP2_INST_MAX_DX10, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, ALU_OMOD_OFF) + #define ALU_RECIP_IEEE(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_RECIP_IEEE, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) @@ -353,9 +431,18 @@ #define ALU_COS(dstGpr, dstChan, src0Sel, src0Chan) \ ALU_OP2(OP2_INST_COS, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_OFF) +#define ALU_COS_D2(dstGpr, dstChan, src0Sel, src0Chan) \ + ALU_OP2(OP2_INST_COS, dstGpr, dstChan, src0Sel, src0Chan, ALU_SRC_0, 0x0, ALU_OMOD_D2) + #define ALU_MULADD(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) \ ALU_OP3(OP3_INST_MULADD, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) +#define ALU_CNDGT(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) \ + ALU_OP3(OP3_INST_CNDGT, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) + +#define ALU_CNDE_INT(dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) \ + ALU_OP3(OP3_INST_CNDE_INT, dstGpr, dstChan, src0Sel, src0Chan, src1Sel, src1Chan, src2Sel, src2Chan) + #define TEX_SAMPLE(dstReg, dstSelX, dstSelY, dstSelZ, dstSelW, srcReg, srcSelX, srcSelY, srcSelZ, srcSelW, resourceID, samplerID)\ to_QWORD(TEX_WORD0(TEX_INST_SAMPLE, 0x0, 0x0, resourceID, srcReg, 0x0, 0x0), \ TEX_WORD1(dstReg, 0x0, dstSelX, dstSelY, dstSelZ, dstSelW, 0x0, TEX_NORMALIZED, TEX_NORMALIZED, TEX_NORMALIZED, TEX_NORMALIZED)), \