Console initialized. Trying to load library... "libz.so.1" - loaded. ./xonotic-linux32-glx is not a PK3 file Xonotic Linux 01:02:14 Oct 17 2010 - release Added packfile data/font-nimbussansl-20101017.pk3 (5 files) Added packfile data/xonotic-20101017-data.pk3 (3879 files) Added packfile data/xonotic-20101017-maps.pk3 (4335 files) Added packfile data/xonotic-20101017-music.pk3 (8 files) Added packfile data/xonotic-20101017-nexcompat.pk3 (5654 files) Trying to load library... "libd0_rijndael.so.0" "libd0_rijndael.so" "./libd0_rijndael.so.0" "./libd0_rijndael.so" - failed. Loaded public key key_0.d0pk (fingerprint: Xon//KssdlzGkFKdnnN4sgg8H+koTbBn5JTi37BAW1Q=) Loaded private ID key_0.d0si for key_0.d0pk (fingerprint: GFr+ewyRbLpSqsBX93UEuHnnSVf4C10Yyw/EzPPhPlo=) Trying to load library... "libcurl.so.4" - loaded. Skeletal animation uses SSE code path Initializing client Couldn't load gfx/palette.lmp, falling back on internal palette Trying to load library... "libvorbis.so.0" - loaded. Trying to load library... "libvorbisfile.so.3" - loaded. Trying to load library... "libogg.so.0" - loaded. Trying to load library... "libtheora.so.0" - loaded. Trying to load library... "libvorbis.so.0" - loaded. Trying to load library... "libvorbisenc.so.2" - loaded. Trying to load library... "libOffscreenGecko.so" "./libOffscreenGecko.so" - failed. execing quake.rc execing default.cfg execing defaultXonotic.cfg execing physicsNoQWBunny-xpmbased.cfg execing ctfscoring-ai.cfg execing balanceXonotic.cfg execing effects-normal.cfg execing _hud_descriptions.cfg execing hud_luminos.cfg Warning: Could not expand $_backup_con_chatpos Warning: Could not expand $_backup_con_chat Warning: Could not expand $_backup_con_notify Warning: Could not expand $_backup_con_chattime Warning: Could not expand $_backup_cl_deathscoreboard Warning: Could not expand $_backup_scr_centertime Warning: Could not expand $_backup_r_track_sprites Warning: Could not expand $_backup_con_chatvars_set Warning: Could not expand $_backup_con_chatvars_set execing cdtracks.cfg Warning: Could not expand $1 Warning: Could not expand $2- Warning: Could not expand $1 Warning: Could not expand $2- execing turrets.cfg execing unit_machinegun.cfg execing unit_hk.cfg execing unit_hellion.cfg execing unit_mlrs.cfg execing unit_flac.cfg execing unit_fusreac.cfg execing unit_plasma.cfg execing unit_plasma2.cfg execing unit_tesla.cfg execing unit_phaser.cfg execing unit_walker.cfg execing unit_ewheel.cfg couldn't exec unit_repulsor.cfg execing config.cfg couldn't exec data/campaign.cfg execing config_update.cfg couldn't exec autoexec.cfg execing font-nimbussansl.cfg Warning: Could not expand $* in alias scoreboard_columns_set Invalid program name client ! client program not loaded. there is already a private key for 0 Client using an automatically assigned port Client opened a socket on address 0.0.0.0:0 Client opened a socket on address [0:0:0:0:0:0:0:0]:0 Loading OpenGL driver libGL.so.1 Using XFree86-VidModeExtension Version 2.2 Using XVidMode fullscreen mode at 800x600 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[0] 0: MOV OUT[0], IN[0] 1: MOV OUT[1], IN[1] 2: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV temp[0], input[0]; 1: MOV output[1], input[1]; 2: MOV output[0], temp[0]; 3: MOV output[2], temp[0]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[0], input[0]; 2: MOV output[2], input[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10001 reg: 0i swiz: X/ Y/ Z/ W src1: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 checking for GLX_ARB_get_proc_address... enabled checking for GLX_SGI_swap_control... enabled GL_VENDOR: X.Org R300 Project GL_RENDERER: Gallium 0.4 on RV350 GL_VERSION: 2.1 Mesa 7.10-devel GL_EXTENSIONS: GL_ARB_copy_buffer GL_ARB_depth_texture GL_ARB_draw_buffers GL_ARB_draw_elements_base_vertex GL_ARB_fragment_coord_conventions GL_ARB_fragment_program GL_ARB_fragment_program_shadow GL_ARB_fragment_shader GL_ARB_framebuffer_object GL_ARB_map_buffer_range GL_ARB_multisample GL_ARB_multitexture GL_ARB_occlusion_query GL_ARB_pixel_buffer_object GL_ARB_point_parameters GL_ARB_point_sprite GL_ARB_provoking_vertex GL_ARB_shader_objects GL_ARB_shading_language_100 GL_ARB_shadow GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_texture_non_power_of_two GL_ARB_texture_rectangle GL_ARB_texture_rg GL_ARB_texture_swizzle GL_ARB_transpose_matrix GL_ARB_vertex_array_bgra GL_ARB_vertex_array_object GL_ARB_vertex_buffer_object GL_ARB_vertex_program GL_ARB_vertex_shader GL_ARB_window_pos GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_equation_separate GL_EXT_blend_func_separate GL_EXT_blend_logic_op GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_copy_texture GL_EXT_draw_range_elements GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_framebuffer_object GL_EXT_fog_coord GL_EXT_gpu_program_parameters GL_EXT_multi_draw_arrays GL_EXT_packed_depth_stencil GL_EXT_packed_pixels GL_EXT_pixel_buffer_object GL_EXT_point_parameters GL_EXT_polygon_offset GL_EXT_provoking_vertex GL_EXT_rescale_normal GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_shadow_funcs GL_EXT_stencil_two_side GL_EXT_stencil_wrap GL_EXT_subtexture GL_EXT_texture GL_EXT_texture3D GL_EXT_texture_compression_s3tc GL_EXT_texture_cube_map GL_EXT_texture_edge_clamp GL_EXT_texture_env_add GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_EXT_texture_mirror_clamp GL_EXT_texture_object GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_EXT_texture_swizzle GL_EXT_vertex_array GL_EXT_vertex_array_bgra GL_APPLE_packed_pixels GL_APPLE_vertex_array_object GL_ATI_blend_equation_separate GL_ATI_texture_env_combine3 GL_ATI_texture_mirror_once GL_ATI_separate_stencil GL_IBM_multimode_draw_arrays GL_IBM_rasterpos_clip GL_IBM_texture_mirrored_repeat GL_INGR_blend_func_separate GL_MESA_pack_invert GL_MESA_ycbcr_texture GL_MESA_window_pos GL_NV_blend_square GL_NV_conditional_render GL_NV_light_max_exponent GL_NV_packed_depth_stencil GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_NV_texture_rectangle GL_OES_read_format GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_SUN_multi_draw_arrays GL_S3_s3tc GL_OES_EGL_image GL_OES_draw_texture GLX_EXTENSIONS: GLX_ARB_get_proc_address GLX_ARB_multisample GLX_EXT_import_context GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_MESA_swap_control GLX_OML_swap_method GLX_OML_sync_control GLX_SGI_make_current_read GLX_SGI_swap_control GLX_SGI_video_sync GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_EXT_texture_from_pixmap GLX_INTEL_swap_event checking for OpenGL 1.1 core features... enabled Checking OpenGL extensions... checking for GL_AMD_texture_texture4... not detected checking for GL_ARB_depth_texture... enabled checking for GL_ARB_draw_buffers... enabled checking for GL_ARB_fragment_shader... enabled checking for GL_ARB_multitexture... enabled checking for GL_ARB_occlusion_query... enabled checking for GL_ARB_shader_objects... enabled checking for GL_ARB_shading_language_100... enabled checking for GL_ARB_shadow... enabled checking for GL_ARB_texture_compression... enabled checking for GL_ARB_texture_cube_map... enabled checking for GL_ARB_texture_env_combine... enabled checking for GL_ARB_texture_gather... not detected checking for GL_ARB_texture_non_power_of_two... enabled checking for GL_ARB_texture_rectangle... enabled checking for GL_ARB_vertex_buffer_object... enabled checking for GL_ARB_vertex_shader... enabled checking for OpenGL 2.0 core features... enabled checking for GL_EXT_blend_minmax... enabled checking for GL_EXT_blend_subtract... enabled checking for OpenGL 1.2 core features... enabled checking for GL_EXT_framebuffer_object... enabled checking for GL_EXT_stencil_two_side... enabled checking for GL_EXT_texture3D... enabled checking for GL_EXT_texture_compression_s3tc... enabled checking for GL_EXT_texture_edge_clamp... enabled checking for GL_EXT_texture_filter_anisotropic... enabled Using GL2.0 rendering path - 8 texture matrix, 16 texture images, 8 texcoords, shadowmapping supported QuakeC extensions for server and client: BX_WAL_SUPPORT DP_BUTTONCHAT DP_BUTTONUSE DP_CL_LOADSKY DP_CON_ALIASPARAMETERS DP_CON_BESTWEAPON DP_CON_EXPANDCVAR DP_CON_SET DP_CON_SETA DP_CON_STARTMAP DP_CRYPTO DP_CSQC_BINDMAPS DP_CSQC_ENTITYNOCULL DP_CSQC_ENTITYTRANSPARENTSORTING_OFFSET DP_CSQC_MULTIFRAME_INTERPOLATION DP_CSQC_BOXPARTICLES DP_CSQC_SPAWNPARTICLE DP_CSQC_QUERYRENDERENTITY DP_CSQC_SETPAUSE DP_EF_ADDITIVE DP_EF_BLUE DP_EF_DOUBLESIDED DP_EF_FLAME DP_EF_FULLBRIGHT DP_EF_NODEPTHTEST DP_EF_NODRAW DP_EF_NOGUNBOB DP_EF_NOSELFSHADOW DP_EF_NOSHADOW DP_EF_RED DP_EF_RESTARTANIM_BIT DP_EF_STARDUST DP_EF_TELEPORT_BIT DP_ENT_ALPHA DP_ENT_COLORMOD DP_ENT_CUSTOMCOLORMAP DP_ENT_EXTERIORMODELTOCLIENT DP_ENT_GLOW DP_ENT_GLOWMOD DP_ENT_LOWPRECISION DP_ENT_SCALE DP_ENT_VIEWMODEL DP_GECKO_SUPPORT DP_GFX_EXTERNALTEXTURES DP_GFX_EXTERNALTEXTURES_PERMAP DP_GFX_FOG DP_GFX_MODEL_INTERPOLATION DP_GFX_QUAKE3MODELTAGS DP_GFX_SKINFILES DP_GFX_SKYBOX DP_GFX_FONTS DP_GFX_FONTS_FREETYPE DP_UTF8 DP_FONT_VARIABLEWIDTH DP_HALFLIFE_MAP DP_HALFLIFE_MAP_CVAR DP_HALFLIFE_SPRITE DP_INPUTBUTTONS DP_LIGHTSTYLE_STATICVALUE DP_LITSPRITES DP_LITSUPPORT DP_MONSTERWALK DP_MOVETYPEBOUNCEMISSILE DP_MOVETYPEFOLLOW DP_NULL_MODEL DP_QC_ASINACOSATANATAN2TAN DP_QC_AUTOCVARS DP_QC_CHANGEPITCH DP_QC_CMD DP_QC_COPYENTITY DP_QC_CRC16 DP_QC_CVAR_DEFSTRING DP_QC_CVAR_DESCRIPTION DP_QC_CVAR_STRING DP_QC_CVAR_TYPE DP_QC_EDICT_NUM DP_QC_ENTITYDATA DP_QC_ENTITYSTRING DP_QC_ETOS DP_QC_EXTRESPONSEPACKET DP_QC_FINDCHAIN DP_QC_FINDCHAINFLAGS DP_QC_FINDCHAINFLOAT DP_QC_FINDCHAIN_TOFIELD DP_QC_FINDFLAGS DP_QC_FINDFLOAT DP_QC_FS_SEARCH DP_QC_GETLIGHT DP_QC_GETSURFACE DP_QC_GETSURFACETRIANGLE DP_QC_GETSURFACEPOINTATTRIBUTE DP_QC_GETTAGINFO DP_QC_GETTAGINFO_BONEPROPERTIES DP_QC_GETTIME DP_QC_GETTIME_CDTRACK DP_QC_LOG DP_QC_MINMAXBOUND DP_QC_MULTIPLETEMPSTRINGS DP_QC_NUM_FOR_EDICT DP_QC_RANDOMVEC DP_QC_SINCOSSQRTPOW DP_QC_SPRINTF DP_QC_STRFTIME DP_QC_STRINGBUFFERS DP_QC_STRINGBUFFERS_CVARLIST DP_QC_STRINGCOLORFUNCTIONS DP_QC_STRING_CASE_FUNCTIONS DP_QC_STRREPLACE DP_QC_TOKENIZEBYSEPARATOR DP_QC_TOKENIZE_CONSOLE DP_QC_TRACEBOX DP_QC_TRACETOSS DP_QC_TRACE_MOVETYPE_HITMODEL DP_QC_TRACE_MOVETYPE_WORLDONLY DP_QC_UNLIMITEDTEMPSTRINGS DP_QC_URI_ESCAPE DP_QC_URI_GET DP_QC_VECTOANGLES_WITH_ROLL DP_QC_VECTORVECTORS DP_QC_WHICHPACK DP_QUAKE2_MODEL DP_QUAKE2_SPRITE DP_QUAKE3_MAP DP_QUAKE3_MODEL DP_REGISTERCVAR DP_SKELETONOBJECTS DP_SND_DIRECTIONLESSATTNNONE DP_SND_FAKETRACKS DP_SND_OGGVORBIS DP_SND_SETPARAMS DP_SND_STEREOWAV DP_SND_GETSOUNDTIME DP_VIDEO_DPV DP_VIDEO_SUBTITLES DP_SOLIDCORPSE DP_SPRITE32 DP_SV_BOTCLIENT DP_SV_BOUNCEFACTOR DP_SV_CLIENTCAMERA DP_SV_CLIENTCOLORS DP_SV_CLIENTNAME DP_SV_CMD DP_SV_CUSTOMIZEENTITYFORCLIENT DP_SV_DISCARDABLEDEMO DP_SV_DRAWONLYTOCLIENT DP_SV_DROPCLIENT DP_SV_EFFECT DP_SV_ENTITYCONTENTSTRANSITION DP_SV_MODELFLAGS_AS_EFFECTS DP_SV_MOVETYPESTEP_LANDEVENT DP_SV_NETADDRESS DP_SV_NODRAWTOCLIENT DP_SV_ONENTITYNOSPAWNFUNCTION DP_SV_ONENTITYPREPOSTSPAWNFUNCTION DP_SV_PING DP_SV_PING_PACKETLOSS DP_SV_PLAYERPHYSICS DP_SV_POINTPARTICLES DP_SV_POINTSOUND DP_SV_PRECACHEANYTIME DP_SV_PRINT DP_SV_PUNCHVECTOR DP_SV_QCSTATUS DP_SV_ROTATINGBMODEL DP_SV_SETCOLOR DP_SV_SHUTDOWN DP_SV_SLOWMO DP_SV_SPAWNFUNC_PREFIX DP_SV_WRITEPICTURE DP_SV_WRITEUNTERMINATEDSTRING DP_TE_BLOOD DP_TE_BLOODSHOWER DP_TE_CUSTOMFLASH DP_TE_EXPLOSIONRGB DP_TE_FLAMEJET DP_TE_PARTICLECUBE DP_TE_PARTICLERAIN DP_TE_PARTICLESNOW DP_TE_PLASMABURN DP_TE_QUADEFFECTS1 DP_TE_SMALLFLASH DP_TE_SPARK DP_TE_STANDARDEFFECTBUILTINS DP_TRACE_HITCONTENTSMASK_SURFACEINFO DP_VIEWZOOM EXT_BITSHIFT FRIK_FILE FTE_CSQC_SKELETONOBJECTS FTE_QC_CHECKPVS FTE_STRINGS KRIMZON_SV_PARSECLIENTCOMMAND NEH_CMD_PLAY2 NEH_RESTOREGAME NEXUIZ_PLAYERMODEL NXQ_GFX_LETTERBOX PRYDON_CLIENTCURSOR TENEBRAE_GFX_DLIGHTS TW_SV_STEPCONTROL ZQ_PAUSE QuakeC extensions for menu: BX_WAL_SUPPORT DP_CINEMATIC_DPV DP_CSQC_BINDMAPS DP_CRYPTO DP_GFX_FONTS DP_GFX_FONTS_FREETYPE DP_UTF8 DP_FONT_VARIABLEWIDTH DP_GECKO_SUPPORT DP_MENU_EXTRESPONSEPACKET DP_QC_ASINACOSATANATAN2TAN DP_QC_AUTOCVARS DP_QC_CMD DP_QC_CRC16 DP_QC_CVAR_TYPE DP_QC_CVAR_DESCRIPTION DP_QC_FINDCHAIN_TOFIELD DP_QC_LOG DP_QC_RENDER_SCENE DP_QC_SPRINTF DP_QC_STRFTIME DP_QC_STRINGBUFFERS DP_QC_STRINGBUFFERS_CVARLIST DP_QC_STRINGCOLORFUNCTIONS DP_QC_STRING_CASE_FUNCTIONS DP_QC_STRREPLACE DP_QC_TOKENIZEBYSEPARATOR DP_QC_TOKENIZE_CONSOLE DP_QC_UNLIMITEDTEMPSTRINGS DP_QC_URI_ESCAPE DP_QC_URI_GET DP_QC_WHICHPACK FTE_STRINGS r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=0************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0] 0: MUL TEMP[0], IN[0].xxxx, CONST[0] 1: MAD TEMP[0], IN[0].yyyy, CONST[1], TEMP[0] 2: MAD TEMP[0], IN[0].zzzz, CONST[2], TEMP[0] 3: MAD OUT[0], IN[0].wwww, CONST[3], TEMP[0] 4: MOV OUT[1], IN[1] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[1], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[1]; 6: MOV output[2], temp[1]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], input[0].xxxx, const[0]; 1: MAD temp[0], input[0].yyyy, const[1], temp[0]; 2: MAD temp[0], input[0].zzzz, const[2], temp[0]; 3: MAD temp[0], input[0].wwww, const[3], temp[0]; 4: MOV output[1], input[1]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00000001 reg: 0i swiz: X/ X/ X/ X src1: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src2: 0x01248002 reg: 0c swiz: 0/ 0/ 0/ 0 1: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src1: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src1: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src1: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 5: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG DCL IN[0], COLOR, PERSPECTIVE DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=1************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 Video Mode: fullscreen 800x600x32x0.00hz Couldn't load gfx/palette.lmp, falling back on internal palette OpenGL backend started. Trying to load library... "libpng14.so.14" "libpng12.so.0" - loaded. r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR DCL OUT[0], COLOR DCL SAMP[0] 0: TEX OUT[0], IN[0], SAMP[0], 2D 1: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX output[0], input[0], 2D[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[1], input[0], 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MOV output[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], temp[0].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=2************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 Trying to load library... "libfreetype.so.6" - loaded. Failed to load font-file for 'gfx/conchars', it will not support as many characters. Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 0 of font fonts/unifont-5.1.20080907 Using size: 7.000000 for requested size 8.000000 Failed to load font-file for 'gfx/font_sbar', it will not support as many characters. Loading font fonts/n019004l.pfb face 0... Failed to allocate font for fallback 0 of font fonts/n019004l.pfb Using size: 8.000000 for requested size 10.000000 Loading font fonts/n019004l.pfb face 0... Failed to allocate font for fallback 0 of font fonts/n019004l.pfb Using size: 8.000000 for requested size 10.000000 Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 0 of font fonts/unifont-5.1.20080907 Using size: 8.000000 for requested size 9.000000 Loading font fonts/n019004l.pfb face 0... Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 1 of font fonts/n019004l.pfb Using size: 6.000000 for requested size 8.000000 Using size: 9.000000 for requested size 12.000000 Using size: 15.000000 for requested size 20.000000 Failed to load font-file for 'gfx/font_menu', it will not support as many characters. Loading font fonts/n019004l.pfb face 0... Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 1 of font fonts/n019004l.pfb Using size: 8.000000 for requested size 10.000000 Using size: 9.000000 for requested size 12.000000 Using size: 10.000000 for requested size 13.000000 Using size: 12.000000 for requested size 16.000000 Loading font fonts/n019004l.pfb face 0... Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 1 of font fonts/n019004l.pfb Using size: 3.000000 for requested size 4.000000 Using size: 5.000000 for requested size 6.000000 Using size: 6.000000 for requested size 8.000000 Using size: 8.000000 for requested size 10.000000 Using size: 9.000000 for requested size 12.000000 Using size: 8.000000 for requested size 11.000000 Loading font fonts/n019004l.pfb face 0... Loading font fonts/unifont-5.1.20080907.ttf face 0... Failed to allocate font for fallback 1 of font fonts/n019004l.pfb Using size: 8.000000 for requested size 10.000000 Using size: 9.000000 for requested size 12.000000 Using size: 11.000000 for requested size 14.000000 Using size: 12.000000 for requested size 16.000000 Using size: 15.000000 for requested size 20.000000 Using size: 19.000000 for requested size 24.000000 Using size: 22.000000 for requested size 28.000000 Using size: 25.000000 for requested size 32.000000 Failed to load font-file for 'gfx/font_user3', it will not support as many characters. Failed to load font-file for 'gfx/font_user4', it will not support as many characters. Failed to load font-file for 'gfx/font_user5', it will not support as many characters. Failed to load font-file for 'gfx/font_user6', it will not support as many characters. Failed to load font-file for 'gfx/font_user7', it will not support as many characters. Loading shaders from file glsl/default.glsl... GLSL shader glsl/default.glsl generic diffuse colormapping compiled. r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL OUT[0], IN[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], temp[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 pc=3************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t1 t0 bias-> o0.w (01000040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL OUT[2], GENERIC[10] DCL CONST[0..3] DCL TEMP[0..1] 0: MOV OUT[1], IN[1] 1: MOV OUT[2].xy, IN[2].xyxx 2: MUL TEMP[0], CONST[0], IN[0].xxxx 3: MAD TEMP[1], CONST[1], IN[0].yyyy, TEMP[0] 4: MAD TEMP[0], CONST[2], IN[0].zzzz, TEMP[1] 5: MAD OUT[0], CONST[3], IN[0].wwww, TEMP[0] 6: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[0], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[0]; 7: MOV output[3], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[0], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[0]; 7: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00304203 dst: 2o op: VE_ADD src0: 0x01f90041 reg: 2i swiz: X/ Y/ U/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 2: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 3: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 5: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 Draw_CachePic: failed to load gfx/disc Draw_CachePic: failed to load gfx/num_0 Draw_CachePic: failed to load gfx/anum_0 Draw_CachePic: failed to load gfx/num_1 Draw_CachePic: failed to load gfx/anum_1 Draw_CachePic: failed to load gfx/num_2 Draw_CachePic: failed to load gfx/anum_2 Draw_CachePic: failed to load gfx/num_3 Draw_CachePic: failed to load gfx/anum_3 Draw_CachePic: failed to load gfx/num_4 Draw_CachePic: failed to load gfx/anum_4 Draw_CachePic: failed to load gfx/num_5 Draw_CachePic: failed to load gfx/anum_5 Draw_CachePic: failed to load gfx/num_6 Draw_CachePic: failed to load gfx/anum_6 Draw_CachePic: failed to load gfx/num_7 Draw_CachePic: failed to load gfx/anum_7 Draw_CachePic: failed to load gfx/num_8 Draw_CachePic: failed to load gfx/anum_8 Draw_CachePic: failed to load gfx/num_9 Draw_CachePic: failed to load gfx/anum_9 Draw_CachePic: failed to load gfx/num_minus Draw_CachePic: failed to load gfx/anum_minus Draw_CachePic: failed to load gfx/num_colon Draw_CachePic: failed to load gfx/num_slash Draw_CachePic: failed to load gfx/inv_shotgun Draw_CachePic: failed to load gfx/inv_sshotgun Draw_CachePic: failed to load gfx/inv_nailgun Draw_CachePic: failed to load gfx/inv_snailgun Draw_CachePic: failed to load gfx/inv_rlaunch Draw_CachePic: failed to load gfx/inv_srlaunch Draw_CachePic: failed to load gfx/inv_lightng Draw_CachePic: failed to load gfx/inv2_shotgun Draw_CachePic: failed to load gfx/inv2_sshotgun Draw_CachePic: failed to load gfx/inv2_nailgun Draw_CachePic: failed to load gfx/inv2_snailgun Draw_CachePic: failed to load gfx/inv2_rlaunch Draw_CachePic: failed to load gfx/inv2_srlaunch Draw_CachePic: failed to load gfx/inv2_lightng Draw_CachePic: failed to load gfx/inva1_shotgun Draw_CachePic: failed to load gfx/inva1_sshotgun Draw_CachePic: failed to load gfx/inva1_nailgun Draw_CachePic: failed to load gfx/inva1_snailgun Draw_CachePic: failed to load gfx/inva1_rlaunch Draw_CachePic: failed to load gfx/inva1_srlaunch Draw_CachePic: failed to load gfx/inva1_lightng Draw_CachePic: failed to load gfx/inva2_shotgun Draw_CachePic: failed to load gfx/inva2_sshotgun Draw_CachePic: failed to load gfx/inva2_nailgun Draw_CachePic: failed to load gfx/inva2_snailgun Draw_CachePic: failed to load gfx/inva2_rlaunch Draw_CachePic: failed to load gfx/inva2_srlaunch Draw_CachePic: failed to load gfx/inva2_lightng Draw_CachePic: failed to load gfx/inva3_shotgun Draw_CachePic: failed to load gfx/inva3_sshotgun Draw_CachePic: failed to load gfx/inva3_nailgun Draw_CachePic: failed to load gfx/inva3_snailgun Draw_CachePic: failed to load gfx/inva3_rlaunch Draw_CachePic: failed to load gfx/inva3_srlaunch Draw_CachePic: failed to load gfx/inva3_lightng Draw_CachePic: failed to load gfx/inva4_shotgun Draw_CachePic: failed to load gfx/inva4_sshotgun Draw_CachePic: failed to load gfx/inva4_nailgun Draw_CachePic: failed to load gfx/inva4_snailgun Draw_CachePic: failed to load gfx/inva4_rlaunch Draw_CachePic: failed to load gfx/inva4_srlaunch Draw_CachePic: failed to load gfx/inva4_lightng Draw_CachePic: failed to load gfx/inva5_shotgun Draw_CachePic: failed to load gfx/inva5_sshotgun Draw_CachePic: failed to load gfx/inva5_nailgun Draw_CachePic: failed to load gfx/inva5_snailgun Draw_CachePic: failed to load gfx/inva5_rlaunch Draw_CachePic: failed to load gfx/inva5_srlaunch Draw_CachePic: failed to load gfx/inva5_lightng Draw_CachePic: failed to load gfx/sb_shells Draw_CachePic: failed to load gfx/sb_nails Draw_CachePic: failed to load gfx/sb_rocket Draw_CachePic: failed to load gfx/sb_cells Draw_CachePic: failed to load gfx/sb_armor1 Draw_CachePic: failed to load gfx/sb_armor2 Draw_CachePic: failed to load gfx/sb_armor3 Draw_CachePic: failed to load gfx/sb_key1 Draw_CachePic: failed to load gfx/sb_key2 Draw_CachePic: failed to load gfx/sb_invis Draw_CachePic: failed to load gfx/sb_invuln Draw_CachePic: failed to load gfx/sb_suit Draw_CachePic: failed to load gfx/sb_quad Draw_CachePic: failed to load gfx/sb_sigil1 Draw_CachePic: failed to load gfx/sb_sigil2 Draw_CachePic: failed to load gfx/sb_sigil3 Draw_CachePic: failed to load gfx/sb_sigil4 Draw_CachePic: failed to load gfx/face1 Draw_CachePic: failed to load gfx/face_p1 Draw_CachePic: failed to load gfx/face2 Draw_CachePic: failed to load gfx/face_p2 Draw_CachePic: failed to load gfx/face3 Draw_CachePic: failed to load gfx/face_p3 Draw_CachePic: failed to load gfx/face4 Draw_CachePic: failed to load gfx/face_p4 Draw_CachePic: failed to load gfx/face5 Draw_CachePic: failed to load gfx/face_p5 Draw_CachePic: failed to load gfx/face_invis Draw_CachePic: failed to load gfx/face_invul2 Draw_CachePic: failed to load gfx/face_inv2 Draw_CachePic: failed to load gfx/face_quad Draw_CachePic: failed to load gfx/sbar Draw_CachePic: failed to load gfx/ibar Draw_CachePic: failed to load gfx/scorebar Draw_CachePic: failed to load gfx/ranking Draw_CachePic: failed to load gfx/complete Draw_CachePic: failed to load gfx/inter Draw_CachePic: failed to load gfx/finale S_Startup: initializing sound output format: 48000Hz, 16 bit, 2 channels... SndSys_Init: using the ALSA module SndSys_Init: PCM device is "default" Sound format: 48000Hz, 2 channels, 16 bits per sample ioctl CDROMREADTOCHDR failed CDAudio_Init: No CD in player. Initial CD volume: 1 CD Audio Initialized menu programs occupy 755K. PRVM_LoadProgs: no cvar for autocvar global autocvar_menu_watermark in menu, creating... PRVM_SetTempString: enlarging tempstrings buffer (0KB -> 64KB) MQC Build information:  TEST BUILD ========Initialized========= PRVM_SetTempString: enlarging tempstrings buffer (64KB -> 128KB) WARNING: no tooltip set for XonoticTeamSelectDialog/spectate WARNING: no tooltip set for XonoticHUDExitDialog/Exit setup WARNING: no tooltip set for XonoticHUDExitDialog WARNING: no tooltip set for XonoticHUDNotificationDialog WARNING: no tooltip set for XonoticHUDAmmoDialog WARNING: no tooltip set for XonoticHUDHealthArmorDialog WARNING: no tooltip set for XonoticHUDChatDialog WARNING: no tooltip set for XonoticHUDModIconsDialog WARNING: no tooltip set for XonoticHUDPowerupsDialog WARNING: no tooltip set for XonoticHUDPressedKeysDialog WARNING: no tooltip set for XonoticHUDRaceTimerDialog WARNING: no tooltip set for XonoticHUDRadarDialog WARNING: no tooltip set for XonoticHUDScoreDialog WARNING: no tooltip set for XonoticHUDTimerDialog WARNING: no tooltip set for XonoticHUDVoteDialog WARNING: no tooltip set for XonoticHUDWeaponsDialog WARNING: no tooltip set for XonoticHUDEngineInfoDialog WARNING: no tooltip set for XonoticHUDInfoMessagesDialog WARNING: no tooltip set for g_tdm_teams_override g_domination_teams_override g_keyhunt_teams_override WARNING: no tooltip set for XonoticAdvancedDialog/OK WARNING: no tooltip set for XonoticAdvancedDialog PRVM_SetTempString: enlarging tempstrings buffer (128KB -> 256KB) WARNING: no tooltip set for XonoticMutatorsDialog/OK WARNING: no tooltip set for XonoticMapInfoDialog/Close WARNING: no tooltip set for XonoticMapInfoDialog/Play WARNING: no tooltip set for XonoticUserbindEditDialog/Save WARNING: no tooltip set for XonoticUserbindEditDialog/Cancel WARNING: no tooltip set for XonoticWinnerDialog/OK WARNING: no tooltip set for XonoticWeaponsDialog/Up WARNING: no tooltip set for XonoticWeaponsDialog/Down WARNING: no tooltip set for XonoticWeaponsDialog/OK WARNING: no tooltip set for XonoticWaypointDialog/OK WARNING: no tooltip set for XonoticWaypointDialog WARNING: no tooltip set for XonoticServerInfoDialog/Close WARNING: no tooltip set for XonoticServerInfoDialog/Join! WARNING: no tooltip set for XonoticCvarsDialog/Clear WARNING: no tooltip set for XonoticCvarsDialog/ WARNING: no tooltip set for XonoticCvarsDialog/OK WARNING: no tooltip set for XonoticSingleplayerDialog/Instant action! (random map with bots) WARNING: no tooltip set for XonoticSingleplayerDialog/<< WARNING: no tooltip set for XonoticSingleplayerDialog/>> WARNING: no tooltip set for XonoticSingleplayerDialog/Start Singleplayer! WARNING: no tooltip set for XonoticMultiplayerDialog/Clear WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/ WARNING: no tooltip set for XonoticMultiplayerDialog/Join! Draw_CachePic: failed to load maps/runningmanctf WARNING: no tooltip set for XonoticMultiplayerDialog/Start Multiplayer! WARNING: no tooltip set for XonoticMultiplayerDialog/Clear WARNING: no tooltip set for XonoticMultiplayerDialog/Play WARNING: no tooltip set for XonoticMultiplayerDialog/<< WARNING: no tooltip set for XonoticMultiplayerDialog/>> WARNING: no tooltip set for crosshair_dot WARNING: no tooltip set for crosshair_dot_size WARNING: no tooltip set for crosshair_dot_alpha WARNING: no tooltip set for XonoticMultiplayerDialog/Waypoints setup... WARNING: no tooltip set for XonoticMultiplayerDialog/Enter HUD editor WARNING: no tooltip set for XonoticMultiplayerDialog/Apply immediately WARNING: no tooltip set for XonoticSettingsDialog/Change key... WARNING: no tooltip set for XonoticSettingsDialog/Edit... WARNING: no tooltip set for XonoticSettingsDialog/Clear WARNING: no tooltip set for menu_vid_width WARNING: no tooltip set for menu_vid_scale WARNING: no tooltip set for XonoticSettingsDialog/Apply immediately WARNING: no tooltip set for XonoticSettingsDialog/Low WARNING: no tooltip set for XonoticSettingsDialog/Medium WARNING: no tooltip set for XonoticSettingsDialog/Normal WARNING: no tooltip set for XonoticSettingsDialog/High WARNING: no tooltip set for XonoticSettingsDialog/Ultra VM_fclose: no such file handle 1 (or file has been closed) in menu WARNING: no tooltip set for XonoticSettingsDialog/Apply immediately WARNING: no tooltip set for XonoticSettingsDialog/Apply immediately WARNING: no tooltip set for XonoticSettingsDialog/Apply immediately WARNING: no tooltip set for XonoticCreditsDialog/OK Sending extended response requests... BGM track rising-of-the-phoenix playing... failed to load sound "sound/announcer/default/welcome.ogg" GLSL shader glsl/default.glsl generic colormapping compiled. r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=4************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0..1] 0: MOV OUT[1], IN[1] 1: MUL TEMP[0], CONST[0], IN[0].xxxx 2: MAD TEMP[1], CONST[1], IN[0].yyyy, TEMP[0] 3: MAD TEMP[0], CONST[2], IN[0].zzzz, TEMP[1] 4: MAD OUT[0], CONST[3], IN[0].wwww, TEMP[0] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[0], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[0], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 4: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 5: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 Sending extended response requests... LHNET_Write: sendto returned error: Network is unreachable LHNET_Write: sendto returned error: Network is unreachable Sending extended response requests... Trying to connect... "challenge " received, sending connect request back to 94.40.99.90:26000 Got challenge response Accepted CL_Disconnect Authenticated connection to 94.40.99.90:26000 has been established: server is -@-, I am GFr+ewy@Xon//Ks Connection accepted to 94.40.99.90:26000 --> client to server keepalive <-- server to client keepalive Server: Xonotic build 01:02:08 Oct 17 2010 - release (progs 28082 crc) Serverinfo packet received. Server protocol is DP7 <===================================>  scripts/common.shader parsing warning: unknown surfaceparm "skip" scripts/common.shader parsing warning: unknown surfaceparm "skip" Shader 'textures/eX/eXmetal_plate01B' already defined, ignoring mismatching redeclaration Mod_LoadQ3Shaders: unknown wavefunc 0 Mod_LoadQ3Shaders: unknown wavefunc 1 Shader 'textures/skies/exosystem' already defined Shader 'textures/skies/exosystem2' already defined, ignoring mismatching redeclaration Shader 'textures/skies/heaven' already defined CDAudio: Bad track number 0. CL_SignonReply: 1 --> client to server keepalive <-- server to client keepalive Downloading http://94.40.99.93/wwww/x/?map=evilspace-full-cb6860159bdfb02f5bd5d76ad78db7fdbeb2f1c3-310d495e18dccf5de69f7319f57176178d4d72ce.pk3 -> dlcache/evilspace-full-cb6860159bdfb02f5bd5d76ad78db7fdbeb2f1c3-310d495e18dccf5de69f7319f57176178d4d72ce.pk3... Sending extended response requests... <-- server to client keepalive --> client to server keepalive <-- server to client keepalive <-- server to client keepalive Sending extended response requests... Download of dlcache/evilspace-full-cb6860159bdfb02f5bd5d76ad78db7fdbeb2f1c3-310d495e18dccf5de69f7319f57176178d4d72ce.pk3: OK Added packfile /home/ubuntu/.xonotic/data/dlcache/evilspace-full-cb6860159bdfb02f5bd5d76ad78db7fdbeb2f1c3-310d495e18dccf5de69f7319f57176178d4d72ce.pk3 (38 files) cURL downloads occurred, executing cl_begindownloads --> client to server keepalive scripts/common.shader parsing warning: unknown surfaceparm "skip" scripts/common.shader parsing warning: unknown surfaceparm "skip" Shader 'textures/eX/eXmetal_plate01B' already defined, ignoring mismatching redeclaration Mod_LoadQ3Shaders: unknown wavefunc 0 Mod_LoadQ3Shaders: unknown wavefunc 1 Shader 'textures/skies/exosystem' already defined Shader 'textures/skies/exosystem2' already defined, ignoring mismatching redeclaration Shader 'textures/skies/heaven' already defined maps/evilspace.bsp: could not load texture "textures/NULL" maps/evilspace.bsp is deluxemapped copying original lightmap 0 (512x512) to 0 (at 0,0) copying original lightmap 2 (512x512) to 0 (at 512,0) copying original lightmap 4 (512x512) to 0 (at 1024,0) copying original lightmap 6 (512x512) to 0 (at 1536,0) copying original lightmap 8 (512x512) to 0 (at 0,512) copying original lightmap 10 (512x512) to 0 (at 512,512) Stats for q3bsp model "maps/evilspace.bsp": 3980 faces, 328 nodes, 330 leafs, 176 clusters, 1488 clusterportals, mesh: 32241 vertices, 23690 triangles, 3980 surfaces client programs occupy 750K. PRVM_LoadProgs: no cvar for autocvar global autocvar_cl_warpzone_usetrace in client, creating... PRVM_LoadProgs: no cvar for autocvar global autocvar_cl_rollkillspeed in client, creating... CSQC csprogs.dat loaded (crc=6574, size=768772) CSQC Build information:  TEST BUILD VM_search_getsize: invalid handle -1 used in client VM_search_end: invalid handle -1 used in client --> client to server keepalive Draw_CachePic: failed to load gfx/evilspace_radar.tga <-- server to client keepalive <-- server to client keepalive Mem_Free: data == NULL (called at model_alias.c:56) models/turrets/terrainbase.md3: could not load texture "evil8_base/e8_base1" Model models/player/gak_lod1.iqm not found Model models/player/gak_lod2.iqm not found Model models/player/gakarmored_lod1.iqm not found Model models/player/gakarmored_lod2.iqm not found Model models/player/gakmasked_lod1.iqm not found Model models/player/gakmasked_lod2.iqm not found Model models/player/nyx_lod1.iqm not found Model models/player/nyx_lod2.iqm not found Model models/player/pyria_lod1.iqm not found Model models/player/pyria_lod2.iqm not found Model models/player/umbra_lod1.iqm not found Model models/player/umbra_lod2.iqm not found CL_SignonReply: 2 SVQC Build information:  TEST BUILD xeros connected xeros is spectating now CL_SignonReply: 3 couldn't exec maps/evilspace.cfg PostInit maxclients = 12 CL_SignonReply: 4 Loading shaders from file glsl/default.glsl... GLSL shader glsl/default.glsl generic colormapping compiled. GLSL shader glsl/default.glsl flatcolor compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: MUL TEMP[1].xyz, TEMP[0].xyzx, CONST[1].xyzx 3: MOV OUT[0], TEMP[1] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 3: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[0]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: src0.xyz = temp[0], src1.xyz = const[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.x, src0.0 3: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], temp[0].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 3: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=5************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400040) TEX: TEX t0, t0, texture[0] (00008000) 0: xyz: t0 c1 c0 bias-> t0.xyz (03820840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.w c0.x 0.0 op: 00040309 1: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL CONST[0..7] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[1].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: MUL TEMP[0], CONST[4], IN[0].xxxx 5: MAD TEMP[1], CONST[5], IN[0].yyyy, TEMP[0] 6: MAD TEMP[0], CONST[6], IN[0].zzzz, TEMP[1] 7: MAD OUT[0], CONST[7], IN[0].wwww, TEMP[0] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[0], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[0]; 9: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[0], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[0]; 9: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 5: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 7: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 8: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 9: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl depth/shadow compiled. r300: Initial fragment program FRAG DCL OUT[0], COLOR DCL CONST[0] 0: MOV OUT[0], CONST[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = const[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = const[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = const[0], src0.w = const[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=6************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: c0 t0 t0 bias-> o0.xyz (1c000020) w: c0 t0 t0 bias-> o0.w (01000020) xyz: c0.xyz 1.0 0.0 op: 00050a80 w: c0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL OUT[0], POSITION DCL CONST[0..3] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[0].xxxx 1: MAD TEMP[1], CONST[1], IN[0].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[0].zzzz, TEMP[1] 3: MAD OUT[0], CONST[3], IN[0].wwww, TEMP[0] 4: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[2], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[2]; 5: MOV output[1], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[0], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[0]; 5: MOV output[1], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0], const[0], input[0].xxxx; 1: MAD temp[1], const[1], input[0].yyyy, temp[0]; 2: MAD temp[0], const[2], input[0].zzzz, temp[1]; 3: MAD temp[0], const[3], input[0].wwww, temp[0]; 4: MOV output[0], temp[0]; 5: MOV output[1], temp[0]; Final vertex program code: 0: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 1: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 2: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 5: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl lightdirectionmap_modelspace diffuse compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[0..2] DCL TEMP[0..6] IMM FLT32 { -0.5000, 2.0000, -1.0000, 0.2500} IMM FLT32 { 0.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[4].xyyy, SAMP[2], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: TEX TEMP[2].xyz, IN[4].xyyy, SAMP[3], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[0], 2D 5: MAD TEMP[4].xyz, TEMP[2].xyzz, IMM[0].yyyy, IMM[0].zzzw 6: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[1], 2D 7: DP3 TEMP[5].x, TEMP[4].xyzz, IN[2].xyzz 8: DP3 TEMP[5].y, TEMP[4].xyzz, IN[1].xyzz 9: DP3 TEMP[6].x, TEMP[4].xyzz, IN[0].xyzz 10: MOV TEMP[5].z, TEMP[6].xxxx 11: MAX TEMP[4].x, IMM[0].wwww, TEMP[6].xxxx 12: RCP TEMP[6].x, TEMP[4].xxxx 13: MUL TEMP[4].xyz, TEMP[2].xyzz, TEMP[6].xxxx 14: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 15: RSQ TEMP[6].x, TEMP[2].xxxx 16: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[6].xxxx 17: DP3 TEMP[3].x, TEMP[2].xyzz, TEMP[5].xyzz 18: MAX TEMP[2].x, TEMP[3].xxxx, IMM[1].xxxx 19: MUL TEMP[3].xyz, CONST[1].xyzz, TEMP[2].xxxx 20: MAD TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xyzz, CONST[2].xyzz 21: MUL TEMP[1].xyz, TEMP[0].xyzx, TEMP[2].xyzx 22: MOV OUT[0], TEMP[1] 23: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[3]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 5: TEX temp[8], input[3].xyyy, 2D[0]; 6: MOV temp[2].xyz, temp[8]; 7: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 8: TEX temp[9], input[3].xyyy, 2D[1]; 9: MOV temp[2].xyz, temp[9]; 10: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 11: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 12: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 13: MOV temp[5].z, temp[6].xxxx; 14: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 15: RCP temp[6].x, temp[4].xxxx; 16: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 17: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 18: RSQ temp[6].x, temp[2].xxxx; 19: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 20: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 21: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 22: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 23: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 24: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 25: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[3]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 5: TEX temp[8], input[3].xyyy, 2D[0]; 6: MOV temp[2].xyz, temp[8]; 7: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 8: TEX temp[9], input[3].xyyy, 2D[1]; 9: MOV temp[2].xyz, temp[9]; 10: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 11: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 12: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 13: MOV temp[5].z, temp[6].xxxx; 14: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 15: RCP temp[6].x, temp[4].xxxx; 16: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 17: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 18: RSQ temp[6].x, |temp[2].xxxx|; 19: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 20: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 21: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 22: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 23: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 24: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 25: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[3].xxx_; 5: TEX temp[8].xyz, input[3].xy__, 2D[0]; 6: MOV temp[2].xyz, temp[8].xyz_; 7: MAD temp[4].xyz, temp[2].xyz_, const[3].yyy_, const[3].zzz_; 8: TEX temp[9].xyz, input[3].xy__, 2D[1]; 9: MOV temp[2].xyz, temp[9].xyz_; 10: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 11: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 12: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 13: MOV temp[5].z, temp[6].__x_; 14: MAX temp[4].x, const[3].w___, temp[6].x___; 15: RCP temp[6].x, temp[4].x___; 16: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 17: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 18: RSQ temp[6].x, |temp[2].x___|; 19: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 20: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 21: MAX temp[2].x, temp[3].x___, temp[0].0___; 22: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 23: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 24: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 25: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[3].xxx_; 5: TEX temp[8].xyz, input[3].xy__, 2D[0]; 6: MOV temp[2].xyz, temp[8].xyz_; 7: MAD temp[4].xyz, temp[2].xyz_, const[3].yyy_, const[3].zzz_; 8: TEX temp[9].xyz, input[3].xy__, 2D[1]; 9: MOV temp[2].xyz, temp[9].xyz_; 10: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 11: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 12: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 13: MOV temp[5].z, temp[6].__x_; 14: MAX temp[4].x, const[3].w___, temp[6].x___; 15: RCP temp[6].x, temp[4].x___; 16: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 17: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 18: RSQ temp[6].x, |temp[2].x___|; 19: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 20: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 21: MAX temp[2].x, temp[3].x___, temp[0].0___; 22: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 23: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 24: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 25: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[3].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[3].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 21: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 22: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[3].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[3].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 21: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 22: MOV output[0], temp[1]; CONST[3] = { -0.5000 2.0000 -1.0000 0.2500 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[3].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[3].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 21: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 22: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: TEX temp[4].xyz, input[3].xy__, 2D[0]; 5: MAD temp[5].xyz, temp[4].xyz_, const[3].yyy_, none.-1-1-1_; 6: TEX temp[6].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[7].x, temp[5].xyz_, input[2].xyz_; 8: DP3 temp[7].y, temp[5].xyz_, input[1].xyz_; 9: DP3 temp[8].x, temp[5].xyz_, input[0].xyz_; 10: MOV temp[7].z, temp[8].__x_; 11: MAX temp[5].x, const[3].w___, temp[8].x___; 12: RCP temp[9].x, temp[5].x___; 13: MUL temp[10].xyz, temp[6].xyz_, temp[9].xxx_; 14: DP3 temp[11].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[12].x, |temp[11].x___|; 16: MUL temp[11].xyz, temp[3].xyz_, temp[12].xxx_; 17: DP3 temp[3].x, temp[11].xyz_, temp[7].xyz_; 18: MAX temp[11].x, temp[3].x___, temp[0].0___; 19: MUL temp[13].xyz, const[1].xyz_, temp[11].xxx_; 20: MAD temp[14].xyz, temp[13].xyz_, temp[10].xyz_, const[2].xyz_; 21: MUL temp[1].xyz, temp[0].xyz_, temp[14].xyz_; 22: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: TEX temp[4].xyz, input[3].xy__, 2D[0]; 5: src0.xyz = temp[4], src1.xyz = const[3] MAD temp[5].xyz, src0.xyz, src1.yyy, -src0.111 6: TEX temp[6].xyz, input[3].xy__, 2D[1]; 7: src0.xyz = temp[5], src1.xyz = input[2] DP3 temp[7].x, src0.xyz, src1.xyz 8: src0.xyz = temp[5], src1.xyz = input[1] DP3 temp[7].y, src0.xyz, src1.xyz 9: src0.xyz = temp[5], src1.xyz = input[0] DP3 temp[8].x, src0.xyz, src1.xyz 10: src0.xyz = temp[8] MAD temp[7].z, src0.__x, src0.111, src0.000 11: src0.xyz = temp[8], src0.w = const[3] MAX temp[5].x, src0.w__, src0.x__ 12: src0.xyz = temp[5] REPL_ALPHA temp[9].x RCP, src0.x 13: src0.xyz = temp[6], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[3] DP3 temp[11].x, src0.xyz, src0.xyz 15: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 16: src0.xyz = temp[3], src1.xyz = temp[12] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[11], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 18: src0.xyz = temp[3] MAX temp[11].x, src0.x__, src0.0__ 19: src0.xyz = const[1], src1.xyz = temp[11] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[13], src1.xyz = temp[10], src2.xyz = const[2] MAD temp[14].xyz, src0.xyz, src1.xyz, src2.xyz 21: src0.xyz = temp[0], src1.xyz = temp[14] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[4].xy__, 2D[2]; 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: TEX temp[4].xyz, input[3].xy__, 2D[0]; 4: TEX temp[6].xyz, input[3].xy__, 2D[1]; 5: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = const[3], src2.xyz = const[0] MAD temp[5].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[1].w, src0.w, src2.x, src0.0 6: src0.xyz = temp[5], src1.xyz = input[2] DP3 temp[7].x, src0.xyz, src1.xyz 7: src0.xyz = temp[5], src1.xyz = input[1] DP3 temp[7].y, src0.xyz, src1.xyz 8: src0.xyz = temp[5], src1.xyz = input[0] DP3 temp[8].x, src0.xyz, src1.xyz 9: src0.xyz = temp[8] MAD temp[7].z, src0.__x, src0.111, src0.000 10: src0.xyz = temp[8], src0.w = const[3] MAX temp[5].x, src0.w__, src0.x__ 11: src0.xyz = temp[5] REPL_ALPHA temp[9].x RCP, src0.x 12: src0.xyz = temp[6], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 14: src0.xyz = temp[3] DP3 temp[11].x, src0.xyz, src0.xyz 15: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 16: src0.xyz = temp[3], src1.xyz = temp[12] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[11], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 18: src0.xyz = temp[3] MAX temp[11].x, src0.x__, src0.0__ 19: src0.xyz = const[1], src1.xyz = temp[11] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[13], src1.xyz = temp[10], src2.xyz = const[2] MAD temp[14].xyz, src0.xyz, src1.xyz, src2.xyz 21: src0.xyz = temp[0], src1.xyz = temp[14] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], temp[4].xy__, 2D[2]; 2: TEX temp[4].xyz, temp[4].xy__, 2D[3]; 3: TEX temp[6].xyz, temp[3].xy__, 2D[0]; 4: TEX temp[7].xyz, temp[3].xy__, 2D[1]; 5: src0.xyz = temp[6], src0.w = temp[5], src1.xyz = const[3], src2.xyz = const[0] MAD temp[6].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[3].w, src0.w, src2.x, src0.0 6: src0.xyz = temp[6], src1.xyz = temp[2] DP3 temp[2].x, src0.xyz, src1.xyz 7: src0.xyz = temp[6], src1.xyz = temp[1] DP3 temp[2].y, src0.xyz, src1.xyz 8: src0.xyz = temp[6], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 9: src0.xyz = temp[0] MAD temp[2].z, src0.__x, src0.111, src0.000 10: src0.xyz = temp[0], src0.w = const[3] MAX temp[6].x, src0.w__, src0.x__ 11: src0.xyz = temp[6] REPL_ALPHA temp[0].x RCP, src0.x 12: src0.xyz = temp[7], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH 14: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 15: src0.xyz = temp[4] REPL_ALPHA temp[6].x RSQ, |src0.x| 16: src0.xyz = temp[0], src1.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[4], src1.xyz = temp[2] DP3 temp[0].x, src0.xyz, src1.xyz 18: src0.xyz = temp[0] MAX temp[4].x, src0.x__, src0.0__ 19: src0.xyz = const[1], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = const[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 21: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=7************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 17, tex_end: 3 (code_addr: 00460440) TEX: TEX t5, t4, texture[2] (00009144) TEX t4, t4, texture[3] (00009904) TEX t6, t3, texture[0] (00008183) TEX t7, t3, texture[1] (000089c3) 0: xyz: t6 c3 c0 bias-> t6.xyz (039a08c6) w: t5 t0 t0 bias-> t3.w (008c0005) xyz: t6.xyz c3.yyy -1.0 op: 000d4300 w: t5.w c0.x 0.0 op: 00040309 1: xyz: t6 t2 t0 bias-> t2.x (00880086) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t2.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 2: xyz: t6 t1 t0 bias-> t2.y (01080046) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t1.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 3: xyz: t6 t0 t0 bias-> t0.x (00800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t0.xyz t6.xxx op: 00804200 w: t6.x t6.x t6.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx 1.0 0.0 op: 00050a81 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t6.x (00980000) w: c3 t0 t0 bias-> (00000023) xyz: c3.www t0.xyz t0.xxx op: 0280400c w: t0.x t0.x t0.x op: 00000000 6: xyz: t6 t0 t0 bias-> t0.x (00800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xxx t6.xxx t6.xxx op: 05004081 w: t6.x t6.x t6.x op: 05000000 7: xyz: t7 t0 t0 bias-> t1.xyz (03840007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t0.xxx 0.0 op: 00050280 w: t7.x t7.x t7.x op: 00000000 8: xyz: t4 t0 t0 bias-> t0.xyz (03800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz 1.0 -0.5 op: 000d8a80 w: t4.x t4.x t4.x op: 00000000 9: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 10: xyz: t4 t0 t0 bias-> t6.x (00980004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 11: xyz: t0 t6 t0 bias-> t4.xyz (03900180) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t6.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 12: xyz: t4 t2 t0 bias-> t0.x (00800084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 13: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 14: xyz: c1 t4 t0 bias-> t0.xyz (03800121) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz t4.xxx 0.0 op: 00050280 w: c1.x c1.x c1.x op: 00000000 15: xyz: t0 t1 c2 bias-> t0.xyz (03822040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xyz c2.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 16: xyz: t5 t0 t0 bias-> t3.xyz (038c0005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 17: xyz: t3 t0 t0 bias-> o0.xyz (1c000003) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t3.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL OUT[2], GENERIC[11] DCL OUT[3], GENERIC[12] DCL OUT[4], GENERIC[13] DCL OUT[5], GENERIC[14] DCL CONST[0..7] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[5].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: MOV OUT[4].xy, IN[5].xyxx 5: MOV OUT[3].xyz, IN[2].xyzx 6: MOV OUT[2].xyz, IN[3].xyzx 7: MOV OUT[1].xyz, IN[4].xyzx 8: MUL TEMP[0], CONST[4], IN[0].xxxx 9: MAD TEMP[1], CONST[5], IN[0].yyyy, TEMP[0] 10: MAD TEMP[0], CONST[6], IN[0].zzzz, TEMP[1] 11: MAD OUT[0], CONST[7], IN[0].wwww, TEMP[0] 12: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[0], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[0]; 13: MOV output[6], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[0], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[0]; 13: MOV output[6], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x0030a204 dst: 5o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00308203 dst: 4o op: VE_ADD src0: 0x01f900a1 reg: 5i swiz: X/ Y/ U/ U src1: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 5: op: 0x00706203 dst: 3o op: VE_ADD src0: 0x01d10041 reg: 2i swiz: X/ Y/ Z/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 6: op: 0x00704203 dst: 2o op: VE_ADD src0: 0x01d10061 reg: 3i swiz: X/ Y/ Z/ U src1: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 7: op: 0x00702203 dst: 1o op: VE_ADD src0: 0x01d10081 reg: 4i swiz: X/ Y/ Z/ U src1: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 8: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 10: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 11: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 12: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 13: op: 0x00f0c203 dst: 6o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl lightdirectionmap_modelspace diffuse glow compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL CONST[0..3] DCL TEMP[0..6] IMM FLT32 { -0.5000, 2.0000, -1.0000, 0.2500} IMM FLT32 { 0.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[4].xyyy, SAMP[3], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: TEX TEMP[2].xyz, IN[4].xyyy, SAMP[4], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[0], 2D 5: MAD TEMP[4].xyz, TEMP[2].xyzz, IMM[0].yyyy, IMM[0].zzzw 6: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[1], 2D 7: DP3 TEMP[5].x, TEMP[4].xyzz, IN[2].xyzz 8: DP3 TEMP[5].y, TEMP[4].xyzz, IN[1].xyzz 9: DP3 TEMP[6].x, TEMP[4].xyzz, IN[0].xyzz 10: MOV TEMP[5].z, TEMP[6].xxxx 11: MAX TEMP[4].x, IMM[0].wwww, TEMP[6].xxxx 12: RCP TEMP[6].x, TEMP[4].xxxx 13: MUL TEMP[4].xyz, TEMP[2].xyzz, TEMP[6].xxxx 14: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 15: RSQ TEMP[6].x, TEMP[2].xxxx 16: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[6].xxxx 17: DP3 TEMP[3].x, TEMP[2].xyzz, TEMP[5].xyzz 18: MAX TEMP[2].x, TEMP[3].xxxx, IMM[1].xxxx 19: MUL TEMP[3].xyz, CONST[2].xyzz, TEMP[2].xxxx 20: MAD TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xyzz, CONST[3].xyzz 21: MUL TEMP[3].xyz, TEMP[0].xyzz, TEMP[2].xyzz 22: TEX TEMP[0].xyz, IN[4].xyyy, SAMP[2], 2D 23: MAD TEMP[1].xyz, TEMP[0].xyzx, CONST[1].xyzx, TEMP[3].xyzx 24: MOV OUT[0], TEMP[1] 25: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 21: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 22: TEX temp[0].xyz, input[4].xyyy, 2D[2]; 23: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 24: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 21: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 22: TEX temp[0].xyz, input[4].xyyy, 2D[2]; 23: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 24: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 21: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 22: TEX temp[0].xyz, input[4].xyyy, 2D[2]; 23: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 24: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 21: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 22: TEX temp[0].xyz, input[4].xyyy, 2D[2]; 23: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 24: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 21: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 22: TEX temp[0].xyz, input[4].xyyy, 2D[2]; 23: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 24: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[4]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 5: TEX temp[8], input[3].xyyy, 2D[0]; 6: MOV temp[2].xyz, temp[8]; 7: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 8: TEX temp[9], input[3].xyyy, 2D[1]; 9: MOV temp[2].xyz, temp[9]; 10: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 11: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 12: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 13: MOV temp[5].z, temp[6].xxxx; 14: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 15: RCP temp[6].x, temp[4].xxxx; 16: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 17: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 18: RSQ temp[6].x, temp[2].xxxx; 19: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 20: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 21: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 22: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 23: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 24: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 25: TEX temp[10], input[4].xyyy, 2D[2]; 26: MOV temp[0].xyz, temp[10]; 27: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 28: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[4]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 5: TEX temp[8], input[3].xyyy, 2D[0]; 6: MOV temp[2].xyz, temp[8]; 7: MAD temp[4].xyz, temp[2].xyzz, const[4].yyyy, const[4].zzzw; 8: TEX temp[9], input[3].xyyy, 2D[1]; 9: MOV temp[2].xyz, temp[9]; 10: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 11: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 12: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 13: MOV temp[5].z, temp[6].xxxx; 14: MAX temp[4].x, const[4].wwww, temp[6].xxxx; 15: RCP temp[6].x, temp[4].xxxx; 16: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 17: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 18: RSQ temp[6].x, |temp[2].xxxx|; 19: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 20: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 21: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 22: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 23: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[3].xyzz; 24: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 25: TEX temp[10], input[4].xyyy, 2D[2]; 26: MOV temp[0].xyz, temp[10]; 27: MAD temp[1].xyz, temp[0].xyzx, const[1].xyzx, temp[3].xyzx; 28: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[4]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[4].xxx_; 5: TEX temp[8].xyz, input[3].xy__, 2D[0]; 6: MOV temp[2].xyz, temp[8].xyz_; 7: MAD temp[4].xyz, temp[2].xyz_, const[4].yyy_, const[4].zzz_; 8: TEX temp[9].xyz, input[3].xy__, 2D[1]; 9: MOV temp[2].xyz, temp[9].xyz_; 10: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 11: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 12: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 13: MOV temp[5].z, temp[6].__x_; 14: MAX temp[4].x, const[4].w___, temp[6].x___; 15: RCP temp[6].x, temp[4].x___; 16: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 17: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 18: RSQ temp[6].x, |temp[2].x___|; 19: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 20: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 21: MAX temp[2].x, temp[3].x___, temp[0].0___; 22: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 23: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[3].xyz_; 24: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 25: TEX temp[10].xyz, input[4].xy__, 2D[2]; 26: MOV temp[0].xyz, temp[10].xyz_; 27: MAD temp[1].xyz, temp[0].xyz_, const[1].xyz_, temp[3].xyz_; 28: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[4]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[4].xxx_; 5: TEX temp[8].xyz, input[3].xy__, 2D[0]; 6: MOV temp[2].xyz, temp[8].xyz_; 7: MAD temp[4].xyz, temp[2].xyz_, const[4].yyy_, const[4].zzz_; 8: TEX temp[9].xyz, input[3].xy__, 2D[1]; 9: MOV temp[2].xyz, temp[9].xyz_; 10: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 11: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 12: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 13: MOV temp[5].z, temp[6].__x_; 14: MAX temp[4].x, const[4].w___, temp[6].x___; 15: RCP temp[6].x, temp[4].x___; 16: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 17: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 18: RSQ temp[6].x, |temp[2].x___|; 19: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 20: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 21: MAX temp[2].x, temp[3].x___, temp[0].0___; 22: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 23: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[3].xyz_; 24: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 25: TEX temp[10].xyz, input[4].xy__, 2D[2]; 26: MOV temp[0].xyz, temp[10].xyz_; 27: MAD temp[1].xyz, temp[0].xyz_, const[1].xyz_, temp[3].xyz_; 28: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[4]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[4].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[4].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[3].xyz_; 21: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 22: TEX temp[10].xyz, input[4].xy__, 2D[2]; 23: MAD temp[1].xyz, temp[10].xyz_, const[1].xyz_, temp[3].xyz_; 24: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[4]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[4].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[4].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[3].xyz_; 21: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 22: TEX temp[10].xyz, input[4].xy__, 2D[2]; 23: MAD temp[1].xyz, temp[10].xyz_, const[1].xyz_, temp[3].xyz_; 24: MOV output[0], temp[1]; CONST[4] = { -0.5000 2.0000 -1.0000 0.2500 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[4]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: TEX temp[8].xyz, input[3].xy__, 2D[0]; 5: MAD temp[4].xyz, temp[8].xyz_, const[4].yyy_, none.-1-1-1_; 6: TEX temp[9].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 8: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 9: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 10: MOV temp[5].z, temp[6].__x_; 11: MAX temp[4].x, const[4].w___, temp[6].x___; 12: RCP temp[6].x, temp[4].x___; 13: MUL temp[4].xyz, temp[9].xyz_, temp[6].xxx_; 14: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[6].x, |temp[2].x___|; 16: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 17: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 18: MAX temp[2].x, temp[3].x___, temp[0].0___; 19: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 20: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[3].xyz_; 21: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 22: TEX temp[10].xyz, input[4].xy__, 2D[2]; 23: MAD temp[1].xyz, temp[10].xyz_, const[1].xyz_, temp[3].xyz_; 24: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[2].xyz, input[4].xy__, 2D[4]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: TEX temp[4].xyz, input[3].xy__, 2D[0]; 5: MAD temp[5].xyz, temp[4].xyz_, const[4].yyy_, none.-1-1-1_; 6: TEX temp[6].xyz, input[3].xy__, 2D[1]; 7: DP3 temp[7].x, temp[5].xyz_, input[2].xyz_; 8: DP3 temp[7].y, temp[5].xyz_, input[1].xyz_; 9: DP3 temp[8].x, temp[5].xyz_, input[0].xyz_; 10: MOV temp[7].z, temp[8].__x_; 11: MAX temp[5].x, const[4].w___, temp[8].x___; 12: RCP temp[9].x, temp[5].x___; 13: MUL temp[10].xyz, temp[6].xyz_, temp[9].xxx_; 14: DP3 temp[11].x, temp[3].xyz_, temp[3].xyz_; 15: RSQ temp[12].x, |temp[11].x___|; 16: MUL temp[11].xyz, temp[3].xyz_, temp[12].xxx_; 17: DP3 temp[3].x, temp[11].xyz_, temp[7].xyz_; 18: MAX temp[11].x, temp[3].x___, temp[0].0___; 19: MUL temp[13].xyz, const[2].xyz_, temp[11].xxx_; 20: MAD temp[14].xyz, temp[13].xyz_, temp[10].xyz_, const[3].xyz_; 21: MUL temp[15].xyz, temp[0].xyz_, temp[14].xyz_; 22: TEX temp[16].xyz, input[4].xy__, 2D[2]; 23: MAD temp[1].xyz, temp[16].xyz_, const[1].xyz_, temp[15].xyz_; 24: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[3]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[4].xy__, 2D[4]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: TEX temp[4].xyz, input[3].xy__, 2D[0]; 5: src0.xyz = temp[4], src1.xyz = const[4] MAD temp[5].xyz, src0.xyz, src1.yyy, -src0.111 6: TEX temp[6].xyz, input[3].xy__, 2D[1]; 7: src0.xyz = temp[5], src1.xyz = input[2] DP3 temp[7].x, src0.xyz, src1.xyz 8: src0.xyz = temp[5], src1.xyz = input[1] DP3 temp[7].y, src0.xyz, src1.xyz 9: src0.xyz = temp[5], src1.xyz = input[0] DP3 temp[8].x, src0.xyz, src1.xyz 10: src0.xyz = temp[8] MAD temp[7].z, src0.__x, src0.111, src0.000 11: src0.xyz = temp[8], src0.w = const[4] MAX temp[5].x, src0.w__, src0.x__ 12: src0.xyz = temp[5] REPL_ALPHA temp[9].x RCP, src0.x 13: src0.xyz = temp[6], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[3] DP3 temp[11].x, src0.xyz, src0.xyz 15: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 16: src0.xyz = temp[3], src1.xyz = temp[12] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 17: src0.xyz = temp[11], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 18: src0.xyz = temp[3] MAX temp[11].x, src0.x__, src0.0__ 19: src0.xyz = const[2], src1.xyz = temp[11] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 20: src0.xyz = temp[13], src1.xyz = temp[10], src2.xyz = const[3] MAD temp[14].xyz, src0.xyz, src1.xyz, src2.xyz 21: src0.xyz = temp[0], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 22: TEX temp[16].xyz, input[4].xy__, 2D[2]; 23: src0.xyz = temp[16], src1.xyz = const[1], src2.xyz = temp[15] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 24: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[4].xy__, 2D[3]; 2: TEX temp[2].xyz, input[4].xy__, 2D[4]; 3: TEX temp[4].xyz, input[3].xy__, 2D[0]; 4: TEX temp[6].xyz, input[3].xy__, 2D[1]; 5: TEX temp[16].xyz, input[4].xy__, 2D[2]; 6: src0.xyz = temp[4], src0.w = temp[0], src1.xyz = const[4], src2.xyz = const[0] MAD temp[5].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[1].w, src0.w, src2.x, src0.0 7: src0.xyz = temp[5], src1.xyz = input[2] DP3 temp[7].x, src0.xyz, src1.xyz 8: src0.xyz = temp[5], src1.xyz = input[1] DP3 temp[7].y, src0.xyz, src1.xyz 9: src0.xyz = temp[5], src1.xyz = input[0] DP3 temp[8].x, src0.xyz, src1.xyz 10: src0.xyz = temp[8] MAD temp[7].z, src0.__x, src0.111, src0.000 11: src0.xyz = temp[8], src0.w = const[4] MAX temp[5].x, src0.w__, src0.x__ 12: src0.xyz = temp[5] REPL_ALPHA temp[9].x RCP, src0.x 13: src0.xyz = temp[6], src1.xyz = temp[9] MAD temp[10].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 15: src0.xyz = temp[3] DP3 temp[11].x, src0.xyz, src0.xyz 16: src0.xyz = temp[11] REPL_ALPHA temp[12].x RSQ, |src0.x| 17: src0.xyz = temp[3], src1.xyz = temp[12] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = temp[11], src1.xyz = temp[7] DP3 temp[3].x, src0.xyz, src1.xyz 19: src0.xyz = temp[3] MAX temp[11].x, src0.x__, src0.0__ 20: src0.xyz = const[2], src1.xyz = temp[11] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[13], src1.xyz = temp[10], src2.xyz = const[3] MAD temp[14].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[0], src1.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[16], src1.xyz = const[1], src2.xyz = temp[15] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 24: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], temp[4].xy__, 2D[3]; 2: TEX temp[6].xyz, temp[4].xy__, 2D[4]; 3: TEX temp[7].xyz, temp[3].xy__, 2D[0]; 4: TEX temp[8].xyz, temp[3].xy__, 2D[1]; 5: TEX temp[9].xyz, temp[4].xy__, 2D[2]; 6: src0.xyz = temp[7], src0.w = temp[5], src1.xyz = const[4], src2.xyz = const[0] MAD temp[4].xyz, src0.xyz, src1.yyy, -src0.111 MAD temp[3].w, src0.w, src2.x, src0.0 7: src0.xyz = temp[4], src1.xyz = temp[2] DP3 temp[2].x, src0.xyz, src1.xyz 8: src0.xyz = temp[4], src1.xyz = temp[1] DP3 temp[2].y, src0.xyz, src1.xyz 9: src0.xyz = temp[4], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 10: src0.xyz = temp[0] MAD temp[2].z, src0.__x, src0.111, src0.000 11: src0.xyz = temp[0], src0.w = const[4] MAX temp[4].x, src0.w__, src0.x__ 12: src0.xyz = temp[4] REPL_ALPHA temp[0].x RCP, src0.x 13: src0.xyz = temp[8], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[6] MAD temp[0].xyz, src0.xyz, src0.111, -src0.HHH 15: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 16: src0.xyz = temp[4] REPL_ALPHA temp[6].x RSQ, |src0.x| 17: src0.xyz = temp[0], src1.xyz = temp[6] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = temp[4], src1.xyz = temp[2] DP3 temp[0].x, src0.xyz, src1.xyz 19: src0.xyz = temp[0] MAX temp[4].x, src0.x__, src0.0__ 20: src0.xyz = const[2], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[9], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 24: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=8************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 18, tex_end: 4 (code_addr: 00480480) TEX: TEX t5, t4, texture[3] (00009944) TEX t6, t4, texture[4] (0000a184) TEX t7, t3, texture[0] (000081c3) TEX t8, t3, texture[1] (00008a03) TEX t9, t4, texture[2] (00009244) 0: xyz: t7 c4 c0 bias-> t4.xyz (03920907) w: t5 t0 t0 bias-> t3.w (008c0005) xyz: t7.xyz c4.yyy -1.0 op: 000d4300 w: t5.w c0.x 0.0 op: 00040309 1: xyz: t4 t2 t0 bias-> t2.x (00880084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 2: xyz: t4 t1 t0 bias-> t2.y (01080044) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t1.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 3: xyz: t4 t0 t0 bias-> t0.x (00800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t0.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 4: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx 1.0 0.0 op: 00050a81 w: t0.x t0.x t0.x op: 00000000 5: xyz: t0 t0 t0 bias-> t4.x (00900000) w: c4 t0 t0 bias-> (00000024) xyz: c4.www t0.xyz t0.xxx op: 0280400c w: t0.x t0.x t0.x op: 00000000 6: xyz: t4 t0 t0 bias-> t0.x (00800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: t4.x t4.x t4.x op: 05000000 7: xyz: t8 t0 t0 bias-> t1.xyz (03840008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t0.xxx 0.0 op: 00050280 w: t8.x t8.x t8.x op: 00000000 8: xyz: t6 t0 t0 bias-> t0.xyz (03800006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 1.0 -0.5 op: 000d8a80 w: t6.x t6.x t6.x op: 00000000 9: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 10: xyz: t4 t0 t0 bias-> t6.x (00980004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 11: xyz: t0 t6 t0 bias-> t4.xyz (03900180) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t6.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 12: xyz: t4 t2 t0 bias-> t0.x (00800084) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t2.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 13: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 14: xyz: c2 t4 t0 bias-> t0.xyz (03800122) w: t0 t0 t0 bias-> (00000000) xyz: c2.xyz t4.xxx 0.0 op: 00050280 w: c2.x c2.x c2.x op: 00000000 15: xyz: t0 t1 c3 bias-> t0.xyz (03823040) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t1.xyz c3.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 16: xyz: t5 t0 t0 bias-> t0.xyz (03800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 17: xyz: t9 c1 t0 bias-> t3.xyz (038c0849) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz c1.xyz t0.xyz op: 00020200 w: t9.x t9.x t9.x op: 00000000 18: xyz: t3 t0 t0 bias-> o0.xyz (1c000003) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t3.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL IN[5] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL OUT[2], GENERIC[11] DCL OUT[3], GENERIC[12] DCL OUT[4], GENERIC[13] DCL OUT[5], GENERIC[14] DCL CONST[0..7] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[5].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: MOV OUT[4].xy, IN[5].xyxx 5: MOV OUT[3].xyz, IN[2].xyzx 6: MOV OUT[2].xyz, IN[3].xyzx 7: MOV OUT[1].xyz, IN[4].xyzx 8: MUL TEMP[0], CONST[4], IN[0].xxxx 9: MAD TEMP[1], CONST[5], IN[0].yyyy, TEMP[0] 10: MAD TEMP[0], CONST[6], IN[0].zzzz, TEMP[1] 11: MAD OUT[0], CONST[7], IN[0].wwww, TEMP[0] 12: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MOV output[4].xy, input[5].xyxx; 5: MOV output[3].xyz, input[2].xyzx; 6: MOV output[2].xyz, input[3].xyzx; 7: MOV output[1].xyz, input[4].xyzx; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[2], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[2]; 13: MOV output[6], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[0], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[0]; 13: MOV output[6], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MOV output[4].xy, input[5].xy__; 5: MOV output[3].xyz, input[2].xyz_; 6: MOV output[2].xyz, input[3].xyz_; 7: MOV output[1].xyz, input[4].xyz_; 8: MUL temp[0], const[4], input[0].xxxx; 9: MAD temp[1], const[5], input[0].yyyy, temp[0]; 10: MAD temp[0], const[6], input[0].zzzz, temp[1]; 11: MAD temp[0], const[7], input[0].wwww, temp[0]; 12: MOV output[0], temp[0]; 13: MOV output[6], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x0030a204 dst: 5o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00308203 dst: 4o op: VE_ADD src0: 0x01f900a1 reg: 5i swiz: X/ Y/ U/ U src1: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 src2: 0x012480a1 reg: 5i swiz: 0/ 0/ 0/ 0 5: op: 0x00706203 dst: 3o op: VE_ADD src0: 0x01d10041 reg: 2i swiz: X/ Y/ Z/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 6: op: 0x00704203 dst: 2o op: VE_ADD src0: 0x01d10061 reg: 3i swiz: X/ Y/ Z/ U src1: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 7: op: 0x00702203 dst: 1o op: VE_ADD src0: 0x01d10081 reg: 4i swiz: X/ Y/ Z/ U src1: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 8: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 9: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 10: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 11: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 12: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 13: op: 0x00f0c203 dst: 6o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl vertexcolor compiled. r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..2] DCL TEMP[0..2] 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: MAD TEMP[2].xyz, IN[0].xyzz, CONST[1].xyzz, CONST[2].xyzz 3: MUL TEMP[1].xyz, TEMP[0].xyzx, TEMP[2].xyzx 4: MOV OUT[0], TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 3: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 3: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2], src2.xyz = const[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.x, src0.0 4: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], temp[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[0], src2.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 4: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=9************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 2, tex_end: 0 (code_addr: 00400080) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t0 c1 c2 bias-> t0.xyz (03822840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz c2.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 1: xyz: t1 t0 c0 bias-> t0.xyz (03820001) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t1.xyz t0.xyz 0.0 op: 00050200 w: t1.w c0.x 0.0 op: 00040309 2: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL OUT[2], GENERIC[10] DCL CONST[0..7] DCL TEMP[0..1] 0: MOV OUT[1], IN[1] 1: MUL TEMP[0], CONST[0], IN[2].xxxx 2: MAD TEMP[1], CONST[1], IN[2].yyyy, TEMP[0] 3: MAD TEMP[0], CONST[2], IN[2].zzzz, TEMP[1] 4: MAD OUT[2].xy, CONST[3].xyxx, IN[2].wwxx, TEMP[0].xyxx 5: MUL TEMP[0], CONST[4], IN[0].xxxx 6: MAD TEMP[1], CONST[5], IN[0].yyyy, TEMP[0] 7: MAD TEMP[0], CONST[6], IN[0].zzzz, TEMP[1] 8: MAD OUT[0], CONST[7], IN[0].wwww, TEMP[0] 9: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[2].xxxx; 2: MAD temp[1], const[1], input[2].yyyy, temp[0]; 3: MAD temp[0], const[2], input[2].zzzz, temp[1]; 4: MAD output[2].xy, const[3].xyxx, input[2].wwxx, temp[0].xyxx; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[2], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[2]; 10: MOV output[3], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[0], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[0]; 10: MOV output[3], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0].xy, const[0].xy__, input[2].xx__; 2: MAD temp[1].xy, const[1].xy__, input[2].yy__, temp[0].xy__; 3: MAD temp[0].xy, const[2].xy__, input[2].zz__, temp[1].xy__; 4: MAD output[2].xy, const[3].xy__, input[2].ww__, temp[0].xy__; 5: MUL temp[0], const[4], input[0].xxxx; 6: MAD temp[1], const[5], input[0].yyyy, temp[0]; 7: MAD temp[0], const[6], input[0].zzzz, temp[1]; 8: MAD temp[0], const[7], input[0].wwww, temp[0]; 9: MOV output[0], temp[0]; 10: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80041 reg: 2i swiz: X/ X/ U/ U src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 2: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92041 reg: 2i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 3: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4041 reg: 2i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 4: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6041 reg: 2i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 5: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 6: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 7: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 8: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 9: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 10: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl flatcolor colormapping glow compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[0..4] DCL TEMP[0..4] 0: TEX TEMP[0], IN[0].xyyy, SAMP[3], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: TEX TEMP[2].xyz, IN[0].xyyy, SAMP[0], 2D 3: TEX TEMP[3].xyz, IN[0].xyyy, SAMP[1], 2D 4: MUL TEMP[4].xyz, TEMP[3].xyzz, CONST[4].xyzz 5: MAD TEMP[3].xyz, TEMP[2].xyzz, CONST[3].xyzz, TEMP[4].xyzz 6: ADD TEMP[2].xyz, TEMP[0].xyzz, TEMP[3].xyzz 7: MUL TEMP[0].xyz, TEMP[2].xyzz, CONST[2].xyzz 8: TEX TEMP[2].xyz, IN[0].xyyy, SAMP[2], 2D 9: MAD TEMP[1].xyz, TEMP[2].xyzx, CONST[1].xyzx, TEMP[0].xyzx 10: MOV OUT[0], TEMP[1] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[0].xyyy, 2D[0]; 3: TEX temp[3].xyz, input[0].xyyy, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 8: TEX temp[2].xyz, input[0].xyyy, 2D[2]; 9: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 10: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[0].xyyy, 2D[0]; 3: TEX temp[3].xyz, input[0].xyyy, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 8: TEX temp[2].xyz, input[0].xyyy, 2D[2]; 9: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 10: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[0].xyyy, 2D[0]; 3: TEX temp[3].xyz, input[0].xyyy, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 8: TEX temp[2].xyz, input[0].xyyy, 2D[2]; 9: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 10: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[0].xyyy, 2D[0]; 3: TEX temp[3].xyz, input[0].xyyy, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 8: TEX temp[2].xyz, input[0].xyyy, 2D[2]; 9: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 10: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[0].xyyy, 2D[0]; 3: TEX temp[3].xyz, input[0].xyyy, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 8: TEX temp[2].xyz, input[0].xyyy, 2D[2]; 9: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 10: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[5], input[0].xyyy, 2D[0]; 3: MOV temp[2].xyz, temp[5]; 4: TEX temp[6], input[0].xyyy, 2D[1]; 5: MOV temp[3].xyz, temp[6]; 6: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 7: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 8: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 9: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 10: TEX temp[7], input[0].xyyy, 2D[2]; 11: MOV temp[2].xyz, temp[7]; 12: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 13: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[3]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[5], input[0].xyyy, 2D[0]; 3: MOV temp[2].xyz, temp[5]; 4: TEX temp[6], input[0].xyyy, 2D[1]; 5: MOV temp[3].xyz, temp[6]; 6: MUL temp[4].xyz, temp[3].xyzz, const[4].xyzz; 7: MAD temp[3].xyz, temp[2].xyzz, const[3].xyzz, temp[4].xyzz; 8: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 9: MUL temp[0].xyz, temp[2].xyzz, const[2].xyzz; 10: TEX temp[7], input[0].xyyy, 2D[2]; 11: MOV temp[2].xyz, temp[7]; 12: MAD temp[1].xyz, temp[2].xyzx, const[1].xyzx, temp[0].xyzx; 13: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[5].xyz, input[0].xy__, 2D[0]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: TEX temp[6].xyz, input[0].xy__, 2D[1]; 5: MOV temp[3].xyz, temp[6].xyz_; 6: MUL temp[4].xyz, temp[3].xyz_, const[4].xyz_; 7: MAD temp[3].xyz, temp[2].xyz_, const[3].xyz_, temp[4].xyz_; 8: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 9: MUL temp[0].xyz, temp[2].xyz_, const[2].xyz_; 10: TEX temp[7].xyz, input[0].xy__, 2D[2]; 11: MOV temp[2].xyz, temp[7].xyz_; 12: MAD temp[1].xyz, temp[2].xyz_, const[1].xyz_, temp[0].xyz_; 13: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[5].xyz, input[0].xy__, 2D[0]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: TEX temp[6].xyz, input[0].xy__, 2D[1]; 5: MOV temp[3].xyz, temp[6].xyz_; 6: MUL temp[4].xyz, temp[3].xyz_, const[4].xyz_; 7: MAD temp[3].xyz, temp[2].xyz_, const[3].xyz_, temp[4].xyz_; 8: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 9: MUL temp[0].xyz, temp[2].xyz_, const[2].xyz_; 10: TEX temp[7].xyz, input[0].xy__, 2D[2]; 11: MOV temp[2].xyz, temp[7].xyz_; 12: MAD temp[1].xyz, temp[2].xyz_, const[1].xyz_, temp[0].xyz_; 13: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[5].xyz, input[0].xy__, 2D[0]; 3: TEX temp[6].xyz, input[0].xy__, 2D[1]; 4: MUL temp[4].xyz, temp[6].xyz_, const[4].xyz_; 5: MAD temp[3].xyz, temp[5].xyz_, const[3].xyz_, temp[4].xyz_; 6: MUL temp[0].xyz, (temp[3] + temp[0]).xyz_, const[2].xyz_; 7: TEX temp[7].xyz, input[0].xy__, 2D[2]; 8: MAD temp[1].xyz, temp[7].xyz_, const[1].xyz_, temp[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[5].xyz, input[0].xy__, 2D[0]; 3: TEX temp[6].xyz, input[0].xy__, 2D[1]; 4: MUL temp[4].xyz, temp[6].xyz_, const[4].xyz_; 5: MAD temp[3].xyz, temp[5].xyz_, const[3].xyz_, temp[4].xyz_; 6: MUL temp[0].xyz, (temp[3] + temp[0]).xyz_, const[2].xyz_; 7: TEX temp[7].xyz, input[0].xy__, 2D[2]; 8: MAD temp[1].xyz, temp[7].xyz_, const[1].xyz_, temp[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[5].xyz, input[0].xy__, 2D[0]; 3: TEX temp[6].xyz, input[0].xy__, 2D[1]; 4: MUL temp[4].xyz, temp[6].xyz_, const[4].xyz_; 5: MAD temp[3].xyz, temp[5].xyz_, const[3].xyz_, temp[4].xyz_; 6: MUL temp[0].xyz, (temp[3] + temp[0]).xyz_, const[2].xyz_; 7: TEX temp[7].xyz, input[0].xy__, 2D[2]; 8: MAD temp[1].xyz, temp[7].xyz_, const[1].xyz_, temp[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[2].xyz, input[0].xy__, 2D[0]; 3: TEX temp[3].xyz, input[0].xy__, 2D[1]; 4: MUL temp[4].xyz, temp[3].xyz_, const[4].xyz_; 5: MAD temp[5].xyz, temp[2].xyz_, const[3].xyz_, temp[4].xyz_; 6: MUL temp[0].xyz, (temp[5] + temp[0]).xyz_, const[2].xyz_; 7: TEX temp[6].xyz, input[0].xy__, 2D[2]; 8: MAD temp[1].xyz, temp[6].xyz_, const[1].xyz_, temp[0].xyz_; 9: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[0].xy__, 2D[3]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[0].xy__, 2D[0]; 3: TEX temp[3].xyz, input[0].xy__, 2D[1]; 4: src0.xyz = temp[3], src1.xyz = const[4] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 6: src0.xyz = temp[0], src1.xyz = temp[5], src2.xyz = const[2], srcp.xyz = (src1 + src0) MAD temp[0].xyz, srcp.xyz, src2.xyz, src0.000 7: TEX temp[6].xyz, input[0].xy__, 2D[2]; 8: src0.xyz = temp[6], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 9: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[0].xy__, 2D[3]; 2: TEX temp[2].xyz, input[0].xy__, 2D[0]; 3: TEX temp[3].xyz, input[0].xy__, 2D[1]; 4: TEX temp[6].xyz, input[0].xy__, 2D[2]; 5: src0.xyz = temp[3], src0.w = temp[0], src1.xyz = const[4], src2.xyz = const[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src2.x, src0.0 6: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = temp[0], src1.xyz = temp[5], src2.xyz = const[2], srcp.xyz = (src1 + src0) MAD temp[0].xyz, srcp.xyz, src2.xyz, src0.000 8: src0.xyz = temp[6], src1.xyz = const[1], src2.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 9: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], temp[0].xy__, 2D[3]; 2: TEX temp[2].xyz, temp[0].xy__, 2D[0]; 3: TEX temp[3].xyz, temp[0].xy__, 2D[1]; 4: TEX temp[4].xyz, temp[0].xy__, 2D[2]; 5: src0.xyz = temp[3], src0.w = temp[1], src1.xyz = const[4], src2.xyz = const[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 6: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = temp[1], src1.xyz = temp[2], src2.xyz = const[2], srcp.xyz = (src1 + src0) MAD temp[1].xyz, srcp.xyz, src2.xyz, src0.000 8: src0.xyz = temp[4], src1.xyz = const[1], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 9: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=10************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 4, tex_end: 3 (code_addr: 00460100) TEX: TEX t1, t0, texture[3] (00009840) TEX t2, t0, texture[0] (00008080) TEX t3, t0, texture[1] (000088c0) TEX t4, t0, texture[2] (00009100) 0: xyz: t3 c4 c0 bias-> t3.xyz (038e0903) w: t1 t0 t0 bias-> t0.w (00800001) xyz: t3.xyz c4.xyz 0.0 op: 00050200 w: t1.w c0.x 0.0 op: 00040309 1: xyz: t2 c3 t3 bias-> t2.xyz (038838c2) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz c3.xyz t3.xyz op: 80020200 NOP w: t2.x t2.x t2.x op: 00000000 2: xyz: t1 t2 c2 add-> t1.xyz (03862081) w: t0 t0 t0 bias-> (00000000) xyz: srcp.xyz c2.xyz 0.0 op: 0045040f w: t1.x t1.x t1.x op: 00000000 3: xyz: t4 c1 t1 bias-> t0.xyz (03801844) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz c1.xyz t1.xyz op: 00020200 w: t4.x t4.x t4.x op: 00000000 4: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL CONST[0..7] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[1].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: MUL TEMP[0], CONST[4], IN[0].xxxx 5: MAD TEMP[1], CONST[5], IN[0].yyyy, TEMP[0] 6: MAD TEMP[0], CONST[6], IN[0].zzzz, TEMP[1] 7: MAD OUT[0], CONST[7], IN[0].wwww, TEMP[0] 8: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[1].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[2], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[2]; 9: MOV output[2], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[0], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[0]; 9: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[1].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: MUL temp[0], const[4], input[0].xxxx; 5: MAD temp[1], const[5], input[0].yyyy, temp[0]; 6: MAD temp[0], const[6], input[0].zzzz, temp[1]; 7: MAD temp[0], const[7], input[0].wwww, temp[0]; 8: MOV output[0], temp[0]; 9: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x00302204 dst: 1o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10082 reg: 4c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 5: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 7: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 8: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 9: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl lightdirection diffuse glow compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0..4] DCL TEMP[0..4] IMM FLT32 { -0.5000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1].xyyy, SAMP[1], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[1].xxxx 2: TEX TEMP[2].xyz, IN[1].xyyy, SAMP[2], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 5: RSQ TEMP[4].x, TEMP[2].xxxx 6: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xxxx 7: DP3 TEMP[3].x, IN[0].xyzz, IN[0].xyzz 8: RSQ TEMP[4].x, TEMP[3].xxxx 9: MUL TEMP[3].xyz, IN[0].xyzz, TEMP[4].xxxx 10: DP3 TEMP[4].x, TEMP[2].xyzz, TEMP[3].xyzz 11: MAX TEMP[2].x, TEMP[4].xxxx, IMM[0].yyyy 12: MUL TEMP[3].xyz, CONST[3].xyzz, TEMP[2].xxxx 13: MAD TEMP[2].xyz, TEMP[3].xyzz, CONST[0].xyzz, CONST[4].xyzz 14: MUL TEMP[3].xyz, TEMP[0].xyzz, TEMP[2].xyzz 15: TEX TEMP[0].xyz, IN[1].xyyy, SAMP[0], 2D 16: MAD TEMP[1].xyz, TEMP[0].xyzx, CONST[2].xyzx, TEMP[3].xyzx 17: MOV OUT[0], TEMP[1] 18: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, temp[2].xxxx; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, temp[3].xxxx; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 13: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 15: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 16: TEX temp[6], input[1].xyyy, 2D[0]; 17: MOV temp[0].xyz, temp[6]; 18: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 19: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, |temp[2].xxxx|; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, |temp[3].xxxx|; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 13: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 15: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 16: TEX temp[6], input[1].xyyy, 2D[0]; 17: MOV temp[0].xyz, temp[6]; 18: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 19: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[5].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[5].y___; 13: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 15: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 16: TEX temp[6].xyz, input[1].xy__, 2D[0]; 17: MOV temp[0].xyz, temp[6].xyz_; 18: MAD temp[1].xyz, temp[0].xyz_, const[2].xyz_, temp[3].xyz_; 19: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[5].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[5].y___; 13: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 15: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 16: TEX temp[6].xyz, input[1].xy__, 2D[0]; 17: MOV temp[0].xyz, temp[6].xyz_; 18: MAD temp[1].xyz, temp[0].xyz_, const[2].xyz_, temp[3].xyz_; 19: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: TEX temp[6].xyz, input[1].xy__, 2D[0]; 16: MAD temp[1].xyz, temp[6].xyz_, const[2].xyz_, temp[3].xyz_; 17: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: TEX temp[6].xyz, input[1].xy__, 2D[0]; 16: MAD temp[1].xyz, temp[6].xyz_, const[2].xyz_, temp[3].xyz_; 17: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: TEX temp[6].xyz, input[1].xy__, 2D[0]; 16: MAD temp[1].xyz, temp[6].xyz_, const[2].xyz_, temp[3].xyz_; 17: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[5].x, |temp[4].x___|; 6: MUL temp[4].xyz, temp[3].xyz_, temp[5].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[6].x, |temp[3].x___|; 9: MUL temp[7].xyz, input[0].xyz_, temp[6].xxx_; 10: DP3 temp[8].x, temp[4].xyz_, temp[7].xyz_; 11: MAX temp[4].x, temp[8].x___, none.0___; 12: MUL temp[9].xyz, const[3].xyz_, temp[4].xxx_; 13: MAD temp[10].xyz, temp[9].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[11].xyz, temp[0].xyz_, temp[10].xyz_; 15: TEX temp[12].xyz, input[1].xy__, 2D[0]; 16: MAD temp[1].xyz, temp[12].xyz_, const[2].xyz_, temp[11].xyz_; 17: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: src0.xyz = const[1], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 9: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 11: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[3], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[4] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 15: TEX temp[12].xyz, input[1].xy__, 2D[0]; 16: src0.xyz = temp[12], src1.xyz = const[2], src2.xyz = temp[11] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 17: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[1]; 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: TEX temp[12].xyz, input[1].xy__, 2D[0]; 4: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 5: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 6: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 7: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 8: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 9: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 10: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 11: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 12: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 13: src0.xyz = const[3], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[4] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 15: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[12], src1.xyz = const[2], src2.xyz = temp[11] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 17: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], temp[1].xy__, 2D[1]; 2: TEX temp[3].xyz, temp[1].xy__, 2D[2]; 3: TEX temp[6].xyz, temp[1].xy__, 2D[0]; 4: src0.xyz = temp[3], src0.w = temp[2], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 5: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 6: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 7: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 8: src0.xyz = temp[0] DP3 temp[3].x, src0.xyz, src0.xyz 9: src0.xyz = temp[3] REPL_ALPHA temp[3].x RSQ, |src0.x| 10: src0.xyz = temp[0], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 11: src0.xyz = temp[4], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 12: src0.xyz = temp[0] MAX temp[4].x, src0.x__, src0.0__ 13: src0.xyz = const[3], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[0], src1.xyz = const[0], src2.xyz = const[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 15: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 16: src0.xyz = temp[6], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 17: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=11************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 13, tex_end: 2 (code_addr: 00440340) TEX: TEX t2, t1, texture[1] (00008881) TEX t3, t1, texture[2] (000090c1) TEX t6, t1, texture[0] (00008181) 0: xyz: t3 c1 t0 bias-> t3.xyz (038c0843) w: t2 t0 t0 bias-> t1.w (00840002) xyz: t3.xyz 1.0 -0.5 op: 000d8a80 w: t2.w c1.x 0.0 op: 00040189 1: xyz: t3 t0 t0 bias-> t4.x (00900003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 2: xyz: t4 t0 t0 bias-> t5.x (00940004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 3: xyz: t3 t5 t0 bias-> t4.xyz (03900143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 4: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 5: xyz: t3 t0 t0 bias-> t3.x (008c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t3.xxx t3.xxx op: 05004081 w: |t3.x| t3.x t3.x op: 05800040 6: xyz: t0 t3 t0 bias-> t0.xyz (038000c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t3.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 7: xyz: t4 t0 t0 bias-> t0.x (00800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t0.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 8: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 9: xyz: c3 t4 t0 bias-> t0.xyz (03800123) w: t0 t0 t0 bias-> (00000000) xyz: c3.xyz t4.xxx 0.0 op: 00050280 w: c3.x c3.x c3.x op: 00000000 10: xyz: t0 c0 c4 bias-> t0.xyz (03824800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz c4.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 11: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 12: xyz: t6 c2 t0 bias-> t1.xyz (03840886) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c2.xyz t0.xyz op: 00020200 w: t6.x t6.x t6.x op: 00000000 13: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL OUT[2], GENERIC[11] DCL CONST[0..8] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[2].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: DP3 OUT[1].x, CONST[4].xyzz, IN[2].xyzz 5: DP3 OUT[1].y, CONST[4].xyzz, IN[3].xyzz 6: DP3 OUT[1].z, CONST[4].xyzz, IN[4].xyzz 7: MUL TEMP[0], CONST[5], IN[0].xxxx 8: MAD TEMP[1], CONST[6], IN[0].yyyy, TEMP[0] 9: MAD TEMP[0], CONST[7], IN[0].zzzz, TEMP[1] 10: MAD OUT[0], CONST[8], IN[0].wwww, TEMP[0] 11: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[0], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[0]; 12: MOV output[3], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[0], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[0]; 12: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00102201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110041 reg: 2i swiz: X/ Y/ Z/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 5: op: 0x00202201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110061 reg: 3i swiz: X/ Y/ Z/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 6: op: 0x00402201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110081 reg: 4i swiz: X/ Y/ Z/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 7: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 8: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 9: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 10: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10102 reg: 8c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 11: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 12: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 GLSL shader glsl/default.glsl flatcolor colormapping glow reflectcube compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL SAMP[5] DCL SAMP[6] DCL CONST[2..10] DCL TEMP[0..5] IMM FLT32 { -0.5000, 2.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[4].xyyy, SAMP[5], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[6].xxxx 2: TEX TEMP[2].xyz, IN[4].xyyy, SAMP[2], 2D 3: TEX TEMP[3].xyz, IN[4].xyyy, SAMP[3], 2D 4: MUL TEMP[4].xyz, TEMP[3].xyzz, CONST[10].xyzz 5: MAD TEMP[3].xyz, TEMP[2].xyzz, CONST[9].xyzz, TEMP[4].xyzz 6: ADD TEMP[2].xyz, TEMP[0].xyzz, TEMP[3].xyzz 7: TEX TEMP[0].xyz, IN[4].xyyy, SAMP[6], 2D 8: ADD TEMP[3].xyz, TEMP[0].xyzz, IMM[0].xxxy 9: DP3 TEMP[0].x, TEMP[3].xyzz, TEMP[3].xyzz 10: RSQ TEMP[4].x, TEMP[0].xxxx 11: MUL TEMP[0].xyz, TEMP[3].xyzz, TEMP[4].xxxx 12: MOV TEMP[3].xyz, -IN[3].xyzx 13: DP3 TEMP[4].x, TEMP[0].xyzz, TEMP[3].xyzz 14: MUL TEMP[5].xyz, TEMP[4].xxxx, TEMP[0].xyzz 15: MUL TEMP[0].xyz, IMM[0].yyyy, TEMP[5].xyzz 16: ADD TEMP[4].xyz, TEMP[3].xyzz, -TEMP[0].xyzz 17: MUL TEMP[0].xyz, TEMP[4].xxxx, IN[2].xyzz 18: MAD TEMP[3].xyz, TEMP[4].yyyy, IN[1].xyzz, TEMP[0].xyzz 19: MAD TEMP[0].xyz, TEMP[4].zzzz, IN[0].xyzz, TEMP[3].xyzz 20: TEX TEMP[3].xyz, IN[4].xyyy, SAMP[1], 2D 21: MUL TEMP[4], CONST[2], TEMP[0].xxxx 22: MAD TEMP[5].xyz, CONST[3], TEMP[0].yyyy, TEMP[4] 23: MAD TEMP[4].xyz, CONST[4], TEMP[0].zzzz, TEMP[5] 24: TEX TEMP[0].xyz, TEMP[4].xyzz, SAMP[0], CUBE 25: MAD TEMP[4].xyz, TEMP[3].xyzz, TEMP[0].xyzz, TEMP[2].xyzz 26: MUL TEMP[0].xyz, TEMP[4].xyzz, CONST[8].xyzz 27: TEX TEMP[2].xyz, IN[4].xyyy, SAMP[4], 2D 28: MAD TEMP[1].xyz, TEMP[2].xyzx, CONST[7].xyzx, TEMP[0].xyzx 29: MOV OUT[0], TEMP[1] 30: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[2]; 3: TEX temp[3].xyz, input[4].xyyy, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: TEX temp[0].xyz, input[4].xyyy, 2D[6]; 8: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 9: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 10: RSQ temp[4].x, temp[0].xxxx; 11: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 12: MOV temp[3].xyz, -input[3].xyzx; 13: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 14: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 15: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 16: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 17: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 18: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 19: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 20: TEX temp[3].xyz, input[4].xyyy, 2D[1]; 21: MUL temp[4], const[2], temp[0].xxxx; 22: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 23: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 24: TEX temp[0].xyz, temp[4].xyzz, CUBE[0]; 25: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 26: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 27: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 28: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 29: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[2]; 3: TEX temp[3].xyz, input[4].xyyy, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: TEX temp[0].xyz, input[4].xyyy, 2D[6]; 8: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 9: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 10: RSQ temp[4].x, temp[0].xxxx; 11: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 12: MOV temp[3].xyz, -input[3].xyzx; 13: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 14: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 15: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 16: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 17: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 18: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 19: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 20: TEX temp[3].xyz, input[4].xyyy, 2D[1]; 21: MUL temp[4], const[2], temp[0].xxxx; 22: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 23: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 24: TEX temp[0].xyz, temp[4].xyzz, CUBE[0]; 25: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 26: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 27: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 28: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 29: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[2]; 3: TEX temp[3].xyz, input[4].xyyy, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: TEX temp[0].xyz, input[4].xyyy, 2D[6]; 8: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 9: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 10: RSQ temp[4].x, temp[0].xxxx; 11: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 12: MOV temp[3].xyz, -input[3].xyzx; 13: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 14: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 15: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 16: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 17: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 18: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 19: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 20: TEX temp[3].xyz, input[4].xyyy, 2D[1]; 21: MUL temp[4], const[2], temp[0].xxxx; 22: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 23: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 24: TEX temp[0].xyz, temp[4].xyzz, CUBE[0]; 25: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 26: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 27: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 28: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 29: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[2]; 3: TEX temp[3].xyz, input[4].xyyy, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: TEX temp[0].xyz, input[4].xyyy, 2D[6]; 8: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 9: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 10: RSQ temp[4].x, temp[0].xxxx; 11: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 12: MOV temp[3].xyz, -input[3].xyzx; 13: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 14: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 15: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 16: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 17: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 18: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 19: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 20: TEX temp[3].xyz, input[4].xyyy, 2D[1]; 21: MUL temp[4], const[2], temp[0].xxxx; 22: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 23: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 24: TEX temp[0].xyz, temp[4].xyzz, CUBE[0]; 25: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 26: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 27: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 28: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 29: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[2]; 3: TEX temp[3].xyz, input[4].xyyy, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 5: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 6: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 7: TEX temp[0].xyz, input[4].xyyy, 2D[6]; 8: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 9: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 10: RSQ temp[4].x, temp[0].xxxx; 11: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 12: MOV temp[3].xyz, -input[3].xyzx; 13: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 14: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 15: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 16: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 17: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 18: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 19: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 20: TEX temp[3].xyz, input[4].xyyy, 2D[1]; 21: MUL temp[4], const[2], temp[0].xxxx; 22: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 23: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 24: TEX temp[0].xyz, temp[4].xyzz, CUBE[0]; 25: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 26: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 27: TEX temp[2].xyz, input[4].xyyy, 2D[4]; 28: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 29: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[6], input[4].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[6]; 4: TEX temp[7], input[4].xyyy, 2D[3]; 5: MOV temp[3].xyz, temp[7]; 6: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 7: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 8: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 9: TEX temp[8], input[4].xyyy, 2D[6]; 10: MOV temp[0].xyz, temp[8]; 11: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 12: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 13: RSQ temp[4].x, temp[0].xxxx; 14: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 15: MOV temp[3].xyz, -input[3].xyzx; 16: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 17: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 18: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 19: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 20: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 21: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 22: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 23: TEX temp[9], input[4].xyyy, 2D[1]; 24: MOV temp[3].xyz, temp[9]; 25: MUL temp[4], const[2], temp[0].xxxx; 26: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 27: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 28: TEX temp[10], temp[4].xyzz, CUBE[0]; 29: MOV temp[0].xyz, temp[10]; 30: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 31: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 32: TEX temp[11], input[4].xyyy, 2D[4]; 33: MOV temp[2].xyz, temp[11]; 34: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 35: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[5]; 1: MUL temp[1].w, temp[0].xxxw, const[6].xxxx; 2: TEX temp[6], input[4].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[6]; 4: TEX temp[7], input[4].xyyy, 2D[3]; 5: MOV temp[3].xyz, temp[7]; 6: MUL temp[4].xyz, temp[3].xyzz, const[10].xyzz; 7: MAD temp[3].xyz, temp[2].xyzz, const[9].xyzz, temp[4].xyzz; 8: ADD temp[2].xyz, temp[0].xyzz, temp[3].xyzz; 9: TEX temp[8], input[4].xyyy, 2D[6]; 10: MOV temp[0].xyz, temp[8]; 11: ADD temp[3].xyz, temp[0].xyzz, const[11].xxxy; 12: DP3 temp[0].x, temp[3].xyzz, temp[3].xyzz; 13: RSQ temp[4].x, |temp[0].xxxx|; 14: MUL temp[0].xyz, temp[3].xyzz, temp[4].xxxx; 15: MOV temp[3].xyz, -input[3].xyzx; 16: DP3 temp[4].x, temp[0].xyzz, temp[3].xyzz; 17: MUL temp[5].xyz, temp[4].xxxx, temp[0].xyzz; 18: MUL temp[0].xyz, const[11].yyyy, temp[5].xyzz; 19: ADD temp[4].xyz, temp[3].xyzz, -temp[0].xyzz; 20: MUL temp[0].xyz, temp[4].xxxx, input[2].xyzz; 21: MAD temp[3].xyz, temp[4].yyyy, input[1].xyzz, temp[0].xyzz; 22: MAD temp[0].xyz, temp[4].zzzz, input[0].xyzz, temp[3].xyzz; 23: TEX temp[9], input[4].xyyy, 2D[1]; 24: MOV temp[3].xyz, temp[9]; 25: MUL temp[4], const[2], temp[0].xxxx; 26: MAD temp[5].xyz, const[3], temp[0].yyyy, temp[4]; 27: MAD temp[4].xyz, const[4], temp[0].zzzz, temp[5]; 28: TEX temp[10], temp[4].xyzz, CUBE[0]; 29: MOV temp[0].xyz, temp[10]; 30: MAD temp[4].xyz, temp[3].xyzz, temp[0].xyzz, temp[2].xyzz; 31: MUL temp[0].xyz, temp[4].xyzz, const[8].xyzz; 32: TEX temp[11], input[4].xyyy, 2D[4]; 33: MOV temp[2].xyz, temp[11]; 34: MAD temp[1].xyz, temp[2].xyzx, const[7].xyzx, temp[0].xyzx; 35: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[6].___x; 2: TEX temp[6].xyz, input[4].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[6].xyz_; 4: TEX temp[7].xyz, input[4].xy__, 2D[3]; 5: MOV temp[3].xyz, temp[7].xyz_; 6: MUL temp[4].xyz, temp[3].xyz_, const[10].xyz_; 7: MAD temp[3].xyz, temp[2].xyz_, const[9].xyz_, temp[4].xyz_; 8: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 9: TEX temp[8].xyz, input[4].xy__, 2D[6]; 10: MOV temp[0].xyz, temp[8].xyz_; 11: ADD temp[3].xyz, temp[0].xyz_, const[11].xxx_; 12: DP3 temp[0].x, temp[3].xyz_, temp[3].xyz_; 13: RSQ temp[4].x, |temp[0].x___|; 14: MUL temp[0].xyz, temp[3].xyz_, temp[4].xxx_; 15: MOV temp[3].xyz, -input[3].xyz_; 16: DP3 temp[4].x, temp[0].xyz_, temp[3].xyz_; 17: MUL temp[5].xyz, temp[4].xxx_, temp[0].xyz_; 18: MUL temp[0].xyz, const[11].yyy_, temp[5].xyz_; 19: ADD temp[4].xyz, temp[3].xyz_, -temp[0].xyz_; 20: MUL temp[0].xyz, temp[4].xxx_, input[2].xyz_; 21: MAD temp[3].xyz, temp[4].yyy_, input[1].xyz_, temp[0].xyz_; 22: MAD temp[0].xyz, temp[4].zzz_, input[0].xyz_, temp[3].xyz_; 23: TEX temp[9].xyz, input[4].xy__, 2D[1]; 24: MOV temp[3].xyz, temp[9].xyz_; 25: MUL temp[4].xyz, const[2].xyz_, temp[0].xxx_; 26: MAD temp[5].xyz, const[3].xyz_, temp[0].yyy_, temp[4].xyz_; 27: MAD temp[4].xyz, const[4].xyz_, temp[0].zzz_, temp[5].xyz_; 28: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 29: MOV temp[0].xyz, temp[10].xyz_; 30: MAD temp[4].xyz, temp[3].xyz_, temp[0].xyz_, temp[2].xyz_; 31: MUL temp[0].xyz, temp[4].xyz_, const[8].xyz_; 32: TEX temp[11].xyz, input[4].xy__, 2D[4]; 33: MOV temp[2].xyz, temp[11].xyz_; 34: MAD temp[1].xyz, temp[2].xyz_, const[7].xyz_, temp[0].xyz_; 35: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[6].___x; 2: TEX temp[6].xyz, input[4].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[6].xyz_; 4: TEX temp[7].xyz, input[4].xy__, 2D[3]; 5: MOV temp[3].xyz, temp[7].xyz_; 6: MUL temp[4].xyz, temp[3].xyz_, const[10].xyz_; 7: MAD temp[3].xyz, temp[2].xyz_, const[9].xyz_, temp[4].xyz_; 8: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 9: TEX temp[8].xyz, input[4].xy__, 2D[6]; 10: MOV temp[0].xyz, temp[8].xyz_; 11: ADD temp[3].xyz, temp[0].xyz_, const[11].xxx_; 12: DP3 temp[0].x, temp[3].xyz_, temp[3].xyz_; 13: RSQ temp[4].x, |temp[0].x___|; 14: MUL temp[0].xyz, temp[3].xyz_, temp[4].xxx_; 15: MOV temp[3].xyz, -input[3].xyz_; 16: DP3 temp[4].x, temp[0].xyz_, temp[3].xyz_; 17: MUL temp[5].xyz, temp[4].xxx_, temp[0].xyz_; 18: MUL temp[0].xyz, const[11].yyy_, temp[5].xyz_; 19: ADD temp[4].xyz, temp[3].xyz_, -temp[0].xyz_; 20: MUL temp[0].xyz, temp[4].xxx_, input[2].xyz_; 21: MAD temp[3].xyz, temp[4].yyy_, input[1].xyz_, temp[0].xyz_; 22: MAD temp[0].xyz, temp[4].zzz_, input[0].xyz_, temp[3].xyz_; 23: TEX temp[9].xyz, input[4].xy__, 2D[1]; 24: MOV temp[3].xyz, temp[9].xyz_; 25: MUL temp[4].xyz, const[2].xyz_, temp[0].xxx_; 26: MAD temp[5].xyz, const[3].xyz_, temp[0].yyy_, temp[4].xyz_; 27: MAD temp[4].xyz, const[4].xyz_, temp[0].zzz_, temp[5].xyz_; 28: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 29: MOV temp[0].xyz, temp[10].xyz_; 30: MAD temp[4].xyz, temp[3].xyz_, temp[0].xyz_, temp[2].xyz_; 31: MUL temp[0].xyz, temp[4].xyz_, const[8].xyz_; 32: TEX temp[11].xyz, input[4].xy__, 2D[4]; 33: MOV temp[2].xyz, temp[11].xyz_; 34: MAD temp[1].xyz, temp[2].xyz_, const[7].xyz_, temp[0].xyz_; 35: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[6].___x; 2: TEX temp[6].xyz, input[4].xy__, 2D[2]; 3: TEX temp[7].xyz, input[4].xy__, 2D[3]; 4: MUL temp[4].xyz, temp[7].xyz_, const[10].xyz_; 5: MAD temp[3].xyz, temp[6].xyz_, const[9].xyz_, temp[4].xyz_; 6: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 7: TEX temp[8].xyz, input[4].xy__, 2D[6]; 8: ADD temp[3].xyz, temp[8].xyz_, none.-H-H-H_; 9: DP3 temp[0].x, temp[3].xyz_, temp[3].xyz_; 10: RSQ temp[4].x, |temp[0].x___|; 11: MUL temp[0].xyz, temp[3].xyz_, temp[4].xxx_; 12: DP3 temp[4].x, temp[0].xyz_, input[3].-x-y-z_; 13: MUL temp[5].xyz, temp[4].xxx_, temp[0].xyz_; 14: MUL temp[0].xyz, const[11].yyy_, temp[5].xyz_; 15: ADD temp[4].xyz, input[3].-x-y-z_, -temp[0].xyz_; 16: MUL temp[0].xyz, temp[4].xxx_, input[2].xyz_; 17: MAD temp[3].xyz, temp[4].yyy_, input[1].xyz_, temp[0].xyz_; 18: MAD temp[0].xyz, temp[4].zzz_, input[0].xyz_, temp[3].xyz_; 19: TEX temp[9].xyz, input[4].xy__, 2D[1]; 20: MUL temp[4].xyz, const[2].xyz_, temp[0].xxx_; 21: MAD temp[5].xyz, const[3].xyz_, temp[0].yyy_, temp[4].xyz_; 22: MAD temp[4].xyz, const[4].xyz_, temp[0].zzz_, temp[5].xyz_; 23: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 24: MAD temp[4].xyz, temp[9].xyz_, temp[10].xyz_, temp[2].xyz_; 25: MUL temp[0].xyz, temp[4].xyz_, const[8].xyz_; 26: TEX temp[11].xyz, input[4].xy__, 2D[4]; 27: MAD temp[1].xyz, temp[11].xyz_, const[7].xyz_, temp[0].xyz_; 28: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[6].___x; 2: TEX temp[6].xyz, input[4].xy__, 2D[2]; 3: TEX temp[7].xyz, input[4].xy__, 2D[3]; 4: MUL temp[4].xyz, temp[7].xyz_, const[10].xyz_; 5: MAD temp[3].xyz, temp[6].xyz_, const[9].xyz_, temp[4].xyz_; 6: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 7: TEX temp[8].xyz, input[4].xy__, 2D[6]; 8: ADD temp[3].xyz, temp[8].xyz_, none.-H-H-H_; 9: DP3 temp[0].x, temp[3].xyz_, temp[3].xyz_; 10: RSQ temp[4].x, |temp[0].x___|; 11: MUL temp[0].xyz, temp[3].xyz_, temp[4].xxx_; 12: DP3 temp[4].x, temp[0].xyz_, input[3].-x-y-z_; 13: MUL temp[5].xyz, temp[4].xxx_, temp[0].xyz_; 14: MUL temp[0].xyz, const[11].yyy_, temp[5].xyz_; 15: ADD temp[4].xyz, input[3].-x-y-z_, -temp[0].xyz_; 16: MUL temp[0].xyz, temp[4].xxx_, input[2].xyz_; 17: MAD temp[3].xyz, temp[4].yyy_, input[1].xyz_, temp[0].xyz_; 18: MAD temp[0].xyz, temp[4].zzz_, input[0].xyz_, temp[3].xyz_; 19: TEX temp[9].xyz, input[4].xy__, 2D[1]; 20: MUL temp[4].xyz, const[2].xyz_, temp[0].xxx_; 21: MAD temp[5].xyz, const[3].xyz_, temp[0].yyy_, temp[4].xyz_; 22: MAD temp[4].xyz, const[4].xyz_, temp[0].zzz_, temp[5].xyz_; 23: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 24: MAD temp[4].xyz, temp[9].xyz_, temp[10].xyz_, temp[2].xyz_; 25: MUL temp[0].xyz, temp[4].xyz_, const[8].xyz_; 26: TEX temp[11].xyz, input[4].xy__, 2D[4]; 27: MAD temp[1].xyz, temp[11].xyz_, const[7].xyz_, temp[0].xyz_; 28: MOV output[0], temp[1]; CONST[8] = { -0.5000 2.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[3].___x; 2: TEX temp[6].xyz, input[4].xy__, 2D[2]; 3: TEX temp[7].xyz, input[4].xy__, 2D[3]; 4: MUL temp[4].xyz, temp[7].xyz_, const[7].xyz_; 5: MAD temp[3].xyz, temp[6].xyz_, const[6].xyz_, temp[4].xyz_; 6: ADD temp[2].xyz, temp[0].xyz_, temp[3].xyz_; 7: TEX temp[8].xyz, input[4].xy__, 2D[6]; 8: ADD temp[3].xyz, temp[8].xyz_, none.-H-H-H_; 9: DP3 temp[0].x, temp[3].xyz_, temp[3].xyz_; 10: RSQ temp[4].x, |temp[0].x___|; 11: MUL temp[0].xyz, temp[3].xyz_, temp[4].xxx_; 12: DP3 temp[4].x, temp[0].xyz_, input[3].-x-y-z_; 13: MUL temp[5].xyz, temp[4].xxx_, temp[0].xyz_; 14: MUL temp[0].xyz, const[8].yyy_, temp[5].xyz_; 15: ADD temp[4].xyz, input[3].-x-y-z_, -temp[0].xyz_; 16: MUL temp[0].xyz, temp[4].xxx_, input[2].xyz_; 17: MAD temp[3].xyz, temp[4].yyy_, input[1].xyz_, temp[0].xyz_; 18: MAD temp[0].xyz, temp[4].zzz_, input[0].xyz_, temp[3].xyz_; 19: TEX temp[9].xyz, input[4].xy__, 2D[1]; 20: MUL temp[4].xyz, const[0].xyz_, temp[0].xxx_; 21: MAD temp[5].xyz, const[1].xyz_, temp[0].yyy_, temp[4].xyz_; 22: MAD temp[4].xyz, const[2].xyz_, temp[0].zzz_, temp[5].xyz_; 23: TEX temp[10].xyz, temp[4].xyz_, CUBE[0]; 24: MAD temp[4].xyz, temp[9].xyz_, temp[10].xyz_, temp[2].xyz_; 25: MUL temp[0].xyz, temp[4].xyz_, const[5].xyz_; 26: TEX temp[11].xyz, input[4].xy__, 2D[4]; 27: MAD temp[1].xyz, temp[11].xyz_, const[4].xyz_, temp[0].xyz_; 28: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: MUL temp[1].w, temp[0].___w, const[3].___x; 2: TEX temp[2].xyz, input[4].xy__, 2D[2]; 3: TEX temp[3].xyz, input[4].xy__, 2D[3]; 4: MUL temp[4].xyz, temp[3].xyz_, const[7].xyz_; 5: MAD temp[5].xyz, temp[2].xyz_, const[6].xyz_, temp[4].xyz_; 6: ADD temp[6].xyz, temp[0].xyz_, temp[5].xyz_; 7: TEX temp[7].xyz, input[4].xy__, 2D[6]; 8: ADD temp[8].xyz, temp[7].xyz_, none.-H-H-H_; 9: DP3 temp[0].x, temp[8].xyz_, temp[8].xyz_; 10: RSQ temp[4].x, |temp[0].x___|; 11: MUL temp[0].xyz, temp[8].xyz_, temp[4].xxx_; 12: DP3 temp[4].x, temp[0].xyz_, input[3].-x-y-z_; 13: MUL temp[9].xyz, temp[4].xxx_, temp[0].xyz_; 14: MUL temp[0].xyz, const[8].yyy_, temp[9].xyz_; 15: ADD temp[10].xyz, input[3].-x-y-z_, -temp[0].xyz_; 16: MUL temp[0].xyz, temp[10].xxx_, input[2].xyz_; 17: MAD temp[11].xyz, temp[10].yyy_, input[1].xyz_, temp[0].xyz_; 18: MAD temp[0].xyz, temp[10].zzz_, input[0].xyz_, temp[11].xyz_; 19: TEX temp[12].xyz, input[4].xy__, 2D[1]; 20: MUL temp[13].xyz, const[0].xyz_, temp[0].xxx_; 21: MAD temp[14].xyz, const[1].xyz_, temp[0].yyy_, temp[13].xyz_; 22: MAD temp[15].xyz, const[2].xyz_, temp[0].zzz_, temp[14].xyz_; 23: TEX temp[16].xyz, temp[15].xyz_, CUBE[0]; 24: MAD temp[17].xyz, temp[12].xyz_, temp[16].xyz_, temp[6].xyz_; 25: MUL temp[0].xyz, temp[17].xyz_, const[5].xyz_; 26: TEX temp[18].xyz, input[4].xy__, 2D[4]; 27: MAD temp[1].xyz, temp[18].xyz_, const[4].xyz_, temp[0].xyz_; 28: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[5]; 1: src0.xyz = const[3], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[4].xy__, 2D[2]; 3: TEX temp[3].xyz, input[4].xy__, 2D[3]; 4: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[2], src1.xyz = const[6], src2.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 6: src0.xyz = temp[0], src1.xyz = temp[5] MAD temp[6].xyz, src0.xyz, src0.111, src1.xyz 7: TEX temp[7].xyz, input[4].xy__, 2D[6]; 8: src0.xyz = temp[7] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH 9: src0.xyz = temp[8] DP3 temp[0].x, src0.xyz, src0.xyz 10: src0.xyz = temp[0] REPL_ALPHA temp[4].x RSQ, |src0.x| 11: src0.xyz = temp[8], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 12: src0.xyz = temp[0], src1.xyz = input[3] DP3 temp[4].x, src0.xyz, -src1.xyz 13: src0.xyz = temp[4], src1.xyz = temp[0] MAD temp[9].xyz, src0.xxx, src1.xyz, src0.000 14: src0.xyz = const[8], src1.xyz = temp[9] MAD temp[0].xyz, src0.yyy, src1.xyz, src0.000 15: src0.xyz = input[3], src1.xyz = temp[0] MAD temp[10].xyz, -src0.xyz, src0.111, -src1.xyz 16: src0.xyz = temp[10], src1.xyz = input[2] MAD temp[0].xyz, src0.xxx, src1.xyz, src0.000 17: src0.xyz = temp[10], src1.xyz = input[1], src2.xyz = temp[0] MAD temp[11].xyz, src0.yyy, src1.xyz, src2.xyz 18: src0.xyz = temp[10], src1.xyz = input[0], src2.xyz = temp[11] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 19: TEX temp[12].xyz, input[4].xy__, 2D[1]; 20: src0.xyz = const[0], src1.xyz = temp[0] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[13] MAD temp[14].xyz, src0.xyz, src1.yyy, src2.xyz 22: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.zzz, src2.xyz 23: TEX temp[16].xyz, temp[15].xyz_, CUBE[0]; 24: src0.xyz = temp[12], src1.xyz = temp[16], src2.xyz = temp[6] MAD temp[17].xyz, src0.xyz, src1.xyz, src2.xyz 25: src0.xyz = temp[17], src1.xyz = const[5] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 26: TEX temp[18].xyz, input[4].xy__, 2D[4]; 27: src0.xyz = temp[18], src1.xyz = const[4], src2.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 28: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[4].xy__, 2D[5]; 2: TEX temp[2].xyz, input[4].xy__, 2D[2]; 3: TEX temp[3].xyz, input[4].xy__, 2D[3]; 4: TEX temp[7].xyz, input[4].xy__, 2D[6]; 5: TEX temp[12].xyz, input[4].xy__, 2D[1]; 6: TEX temp[18].xyz, input[4].xy__, 2D[4]; 7: src0.xyz = temp[7], src0.w = temp[0], src1.xyz = const[3] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 8: src0.xyz = temp[3], src1.xyz = const[7] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[2], src1.xyz = const[6], src2.xyz = temp[4] MAD temp[5].xyz, src0.xyz, src1.xyz, src2.xyz 10: src0.xyz = temp[0], src1.xyz = temp[5] MAD temp[6].xyz, src0.xyz, src0.111, src1.xyz 11: src0.xyz = temp[8] DP3 temp[0].x, src0.xyz, src0.xyz 12: src0.xyz = temp[0] REPL_ALPHA temp[4].x RSQ, |src0.x| 13: src0.xyz = temp[8], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[0], src1.xyz = input[3] DP3 temp[4].x, src0.xyz, -src1.xyz 15: src0.xyz = temp[4], src1.xyz = temp[0] MAD temp[9].xyz, src0.xxx, src1.xyz, src0.000 16: src0.xyz = const[8], src1.xyz = temp[9] MAD temp[0].xyz, src0.yyy, src1.xyz, src0.000 17: src0.xyz = input[3], src1.xyz = temp[0] MAD temp[10].xyz, -src0.xyz, src0.111, -src1.xyz 18: src0.xyz = temp[10], src1.xyz = input[2] MAD temp[0].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[10], src1.xyz = input[1], src2.xyz = temp[0] MAD temp[11].xyz, src0.yyy, src1.xyz, src2.xyz 20: src0.xyz = temp[10], src1.xyz = input[0], src2.xyz = temp[11] MAD temp[0].xyz, src0.zzz, src1.xyz, src2.xyz 21: src0.xyz = const[0], src1.xyz = temp[0] MAD temp[13].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[13] MAD temp[14].xyz, src0.xyz, src1.yyy, src2.xyz 23: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[14] MAD temp[15].xyz, src0.xyz, src1.zzz, src2.xyz 24: BEGIN_TEX; 25: TEX temp[16].xyz, temp[15].xyz_, CUBE[0]; 26: src0.xyz = temp[12], src1.xyz = temp[16], src2.xyz = temp[6] MAD temp[17].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = temp[17], src1.xyz = const[5] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[18], src1.xyz = const[4], src2.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], temp[4].xy__, 2D[5]; 2: TEX temp[6].xyz, temp[4].xy__, 2D[2]; 3: TEX temp[7].xyz, temp[4].xy__, 2D[3]; 4: TEX temp[8].xyz, temp[4].xy__, 2D[6]; 5: TEX temp[9].xyz, temp[4].xy__, 2D[1]; 6: TEX temp[10].xyz, temp[4].xy__, 2D[4]; 7: src0.xyz = temp[8], src0.w = temp[5], src1.xyz = const[3] MAD temp[8].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[4].w, src0.w, src1.x, src0.0 8: src0.xyz = temp[7], src1.xyz = const[7] MAD temp[7].xyz, src0.xyz, src1.xyz, src0.000 9: src0.xyz = temp[6], src1.xyz = const[6], src2.xyz = temp[7] MAD temp[6].xyz, src0.xyz, src1.xyz, src2.xyz 10: src0.xyz = temp[5], src1.xyz = temp[6] MAD temp[6].xyz, src0.xyz, src0.111, src1.xyz 11: src0.xyz = temp[8] DP3 temp[5].x, src0.xyz, src0.xyz 12: src0.xyz = temp[5] REPL_ALPHA temp[7].x RSQ, |src0.x| 13: src0.xyz = temp[8], src1.xyz = temp[7] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 14: src0.xyz = temp[5], src1.xyz = temp[3] DP3 temp[7].x, src0.xyz, -src1.xyz 15: src0.xyz = temp[7], src1.xyz = temp[5] MAD temp[7].xyz, src0.xxx, src1.xyz, src0.000 16: src0.xyz = const[8], src1.xyz = temp[7] MAD temp[5].xyz, src0.yyy, src1.xyz, src0.000 17: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[3].xyz, -src0.xyz, src0.111, -src1.xyz 18: src0.xyz = temp[3], src1.xyz = temp[2] MAD temp[5].xyz, src0.xxx, src1.xyz, src0.000 19: src0.xyz = temp[3], src1.xyz = temp[1], src2.xyz = temp[5] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz 20: src0.xyz = temp[3], src1.xyz = temp[0], src2.xyz = temp[1] MAD temp[5].xyz, src0.zzz, src1.xyz, src2.xyz 21: src0.xyz = const[0], src1.xyz = temp[5] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = const[1], src1.xyz = temp[5], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.yyy, src2.xyz 23: src0.xyz = const[2], src1.xyz = temp[5], src2.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.zzz, src2.xyz 24: BEGIN_TEX; 25: TEX temp[0].xyz, temp[0].xyz_, CUBE[0]; 26: src0.xyz = temp[9], src1.xyz = temp[0], src2.xyz = temp[6] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 27: src0.xyz = temp[0], src1.xyz = const[5] MAD temp[5].xyz, src0.xyz, src1.xyz, src0.000 28: src0.xyz = temp[10], src1.xyz = const[4], src2.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xyz, src2.xyz 29: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=12************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 16, tex_end: 5 (code_addr: 000a0400) TEX: TEX t5, t4, texture[5] (0000a944) TEX t6, t4, texture[2] (00009184) TEX t7, t4, texture[3] (000099c4) TEX t8, t4, texture[6] (0000b204) TEX t9, t4, texture[1] (00008a44) TEX t10, t4, texture[4] (0000a284) 0: xyz: t8 c3 t0 bias-> t8.xyz (03a008c8) w: t5 t0 t0 bias-> t4.w (00900005) xyz: t8.xyz 1.0 -0.5 op: 000d8a80 w: t5.w c3.x 0.0 op: 00040189 1: xyz: t7 c7 t0 bias-> t7.xyz (039c09c7) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz c7.xyz 0.0 op: 00050200 w: t7.x t7.x t7.x op: 00000000 2: xyz: t6 c6 t7 bias-> t6.xyz (03987986) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz c6.xyz t7.xyz op: 00020200 w: t6.x t6.x t6.x op: 00000000 3: xyz: t5 t6 t0 bias-> t6.xyz (03980185) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz 1.0 t6.xyz op: 00010a80 w: t5.x t5.x t5.x op: 00000000 4: xyz: t8 t0 t0 bias-> t5.x (00940008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t8.xyz t8.xxx op: 00804000 w: t8.x t8.x t8.x op: 00000000 5: xyz: t5 t0 t0 bias-> t7.x (009c0005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: |t5.x| t5.x t5.x op: 05800040 6: xyz: t8 t7 t0 bias-> t5.xyz (039401c8) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t7.xxx 0.0 op: 00050280 w: t8.x t8.x t8.x op: 00000000 7: xyz: t5 t3 t0 bias-> t7.x (009c00c5) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz -t3.xyz t5.xxx op: 00805200 w: t5.x t5.x t5.x op: 00000000 8: xyz: t7 t5 t0 bias-> t7.xyz (039c0147) w: t0 t0 t0 bias-> (00000000) xyz: t7.xxx t5.xyz 0.0 op: 00050201 w: t7.x t7.x t7.x op: 00000000 9: xyz: c8 t7 t0 bias-> t5.xyz (039401e8) w: t0 t0 t0 bias-> (00000000) xyz: c8.yyy t7.xyz 0.0 op: 00050202 w: c8.x c8.x c8.x op: 00000000 10: xyz: t3 t5 t0 bias-> t3.xyz (038c0143) w: t0 t0 t0 bias-> (00000000) xyz: -t3.xyz 1.0 -t5.xyz op: 00090aa0 w: t3.x t3.x t3.x op: 00000000 11: xyz: t3 t2 t0 bias-> t5.xyz (03940083) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t2.xyz 0.0 op: 00050201 w: t3.x t3.x t3.x op: 00000000 12: xyz: t3 t1 t5 bias-> t1.xyz (03845043) w: t0 t0 t0 bias-> (00000000) xyz: t3.yyy t1.xyz t5.xyz op: 00020202 w: t3.x t3.x t3.x op: 00000000 13: xyz: t3 t0 t1 bias-> t5.xyz (03941003) w: t0 t0 t0 bias-> (00000000) xyz: t3.zzz t0.xyz t1.xyz op: 00020203 w: t3.x t3.x t3.x op: 00000000 14: xyz: c0 t5 t0 bias-> t0.xyz (03800160) w: t0 t0 t0 bias-> (00000000) xyz: c0.xyz t5.xxx 0.0 op: 00050280 w: c0.x c0.x c0.x op: 00000000 15: xyz: c1 t5 t0 bias-> t0.xyz (03800161) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz t5.yyy t0.xyz op: 00020300 w: c1.x c1.x c1.x op: 00000000 16: xyz: c2 t5 t0 bias-> t0.xyz (03800162) w: t0 t0 t0 bias-> (00000000) xyz: c2.xyz t5.zzz t0.xyz op: 00020380 w: c2.x c2.x c2.x op: 00000000 NODE 1: alu_offset: 17, tex_offset: 6, alu_end: 3, tex_end: 0 (code_addr: 004060d1) TEX: TEX t0, t0, texture[0] (00008000) 17: xyz: t9 t0 t6 bias-> t0.xyz (03806009) w: t0 t0 t0 bias-> (00000000) xyz: t9.xyz t0.xyz t6.xyz op: 00020200 w: t9.x t9.x t9.x op: 00000000 18: xyz: t0 c5 t0 bias-> t5.xyz (03940940) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c5.xyz 0.0 op: 00050200 w: t0.x t0.x t0.x op: 00000000 19: xyz: t10 c4 t5 bias-> t4.xyz (0390590a) w: t0 t0 t0 bias-> (00000000) xyz: t10.xyz c4.xyz t5.xyz op: 00020200 w: t10.x t10.x t10.x op: 00000000 20: xyz: t4 t0 t0 bias-> o0.xyz (1c000004) w: t4 t0 t0 bias-> o0.w (01000004) xyz: t4.xyz 1.0 0.0 op: 00050a80 w: t4.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL OUT[2], GENERIC[11] DCL OUT[3], GENERIC[12] DCL OUT[4], GENERIC[13] DCL OUT[5], GENERIC[14] DCL CONST[0..8] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[5].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: ADD TEMP[0].xyz, CONST[4].xyzz, -IN[0].xyzz 5: DP3 OUT[4].x, TEMP[0].xyzz, IN[2].xyzz 6: DP3 OUT[4].y, TEMP[0].xyzz, IN[3].xyzz 7: DP3 OUT[4].z, TEMP[0].xyzz, IN[4].xyzz 8: MOV OUT[3].xyz, IN[2].xyzx 9: MOV OUT[2].xyz, IN[3].xyzx 10: MOV OUT[1].xyz, IN[4].xyzx 11: MUL TEMP[0], CONST[5], IN[0].xxxx 12: MAD TEMP[1], CONST[6], IN[0].yyyy, TEMP[0] 13: MAD TEMP[0], CONST[7], IN[0].zzzz, TEMP[1] 14: MAD OUT[0], CONST[8], IN[0].wwww, TEMP[0] 15: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP3 output[4].x, temp[0].xyzz, input[2].xyzz; 6: DP3 output[4].y, temp[0].xyzz, input[3].xyzz; 7: DP3 output[4].z, temp[0].xyzz, input[4].xyzz; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP3 output[4].x, temp[0].xyzz, input[2].xyzz; 6: DP3 output[4].y, temp[0].xyzz, input[3].xyzz; 7: DP3 output[4].z, temp[0].xyzz, input[4].xyzz; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP3 output[4].x, temp[0].xyzz, input[2].xyzz; 6: DP3 output[4].y, temp[0].xyzz, input[3].xyzz; 7: DP3 output[4].z, temp[0].xyzz, input[4].xyzz; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP3 output[4].x, temp[0].xyzz, input[2].xyzz; 6: DP3 output[4].y, temp[0].xyzz, input[3].xyzz; 7: DP3 output[4].z, temp[0].xyzz, input[4].xyzz; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[5].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: ADD temp[0].xyz, const[4].xyzz, -input[0].xyzz; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyzx; 9: MOV output[2].xyz, input[3].xyzx; 10: MOV output[1].xyz, input[4].xyzx; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[2], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[2]; 16: MOV output[6], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[0], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[0]; 16: MOV output[6], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[5].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: ADD temp[0].xyz, const[4].xyz_, -input[0].xyz_; 5: DP4 output[4].x, temp[0].xyz0, input[2].xyz0; 6: DP4 output[4].y, temp[0].xyz0, input[3].xyz0; 7: DP4 output[4].z, temp[0].xyz0, input[4].xyz0; 8: MOV output[3].xyz, input[2].xyz_; 9: MOV output[2].xyz, input[3].xyz_; 10: MOV output[1].xyz, input[4].xyz_; 11: MUL temp[0], const[5], input[0].xxxx; 12: MAD temp[1], const[6], input[0].yyyy, temp[0]; 13: MAD temp[0], const[7], input[0].zzzz, temp[1]; 14: MAD temp[0], const[8], input[0].wwww, temp[0]; 15: MOV output[0], temp[0]; 16: MOV output[6], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x0030a204 dst: 5o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00700003 dst: 0t op: VE_ADD src0: 0x01d10082 reg: 4c swiz: X/ Y/ Z/ U src1: 0x1fd10001 reg: 0i swiz: -X/-Y/-Z/-U src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 5: op: 0x00108201 dst: 4o op: VE_DOT_PRODUCT src0: 0x01110000 reg: 0t swiz: X/ Y/ Z/ 0 src1: 0x01110041 reg: 2i swiz: X/ Y/ Z/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 6: op: 0x00208201 dst: 4o op: VE_DOT_PRODUCT src0: 0x01110000 reg: 0t swiz: X/ Y/ Z/ 0 src1: 0x01110061 reg: 3i swiz: X/ Y/ Z/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 7: op: 0x00408201 dst: 4o op: VE_DOT_PRODUCT src0: 0x01110000 reg: 0t swiz: X/ Y/ Z/ 0 src1: 0x01110081 reg: 4i swiz: X/ Y/ Z/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 8: op: 0x00706203 dst: 3o op: VE_ADD src0: 0x01d10041 reg: 2i swiz: X/ Y/ Z/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 9: op: 0x00704203 dst: 2o op: VE_ADD src0: 0x01d10061 reg: 3i swiz: X/ Y/ Z/ U src1: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 10: op: 0x00702203 dst: 1o op: VE_ADD src0: 0x01d10081 reg: 4i swiz: X/ Y/ Z/ U src1: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 11: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 12: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 13: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 14: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10102 reg: 8c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 15: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 16: op: 0x00f0c203 dst: 6o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[0].xyyy, SAMP[0], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: MUL TEMP[1].xyz, TEMP[0].xyzx, CONST[1].xyzx 3: MOV OUT[0], TEMP[1] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[0].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 3: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: FRC temp[2].xyz, input[0].xyyy; 1: MOV temp[2].w, input[0].xyyy; 2: TEX temp[0], temp[2], 2D[0]; 3: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 5: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: FRC temp[2].xyz, input[0].xyyy; 1: MOV temp[2].w, input[0].xyyy; 2: TEX temp[0], temp[2], 2D[0]; 3: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 4: MUL temp[1].xyz, temp[0].xyzx, const[1].xyzx; 5: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: FRC temp[2].xy, input[0].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: FRC temp[2].xy, input[0].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: FRC temp[2].xy, input[0].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: FRC temp[2].xy, input[0].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: FRC temp[2].xy, input[0].xy__; 1: TEX temp[0], temp[2].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MUL temp[1].xyz, temp[0].xyz_, const[1].xyz_; 4: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: FRC temp[0].xy, input[0].xy__; 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: MUL temp[2].w, temp[1].___w, const[0].___x; 3: MUL temp[2].xyz, temp[1].xyz_, const[1].xyz_; 4: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0] FRC temp[0].xy, src0.xy_ 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: src0.xyz = const[0], src0.w = temp[1] MAD temp[2].w, src0.w, src0.x, src0.0 3: src0.xyz = temp[1], src1.xyz = const[1] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0] FRC temp[0].xy, src0.xy_ 1: BEGIN_TEX; 2: TEX temp[1], temp[0].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[1], src2.xyz = const[0] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src2.x, src0.0 4: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0] FRC temp[0].xy, src0.xy_ 1: BEGIN_TEX; 2: TEX temp[0], temp[0].xy__, 2D[0]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[1], src2.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 4: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=13************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t0 t0 t0 bias-> t0.xy (01800000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xxx t0.xxx op: 04804080 w: t0.x t0.x t0.x op: 00000000 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400041) TEX: TEX t0, t0, texture[0] (00008000) 1: xyz: t0 c1 c0 bias-> t0.xyz (03820840) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz c1.xyz 0.0 op: 00050200 w: t0.w c0.x 0.0 op: 00040309 2: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL IN[2], GENERIC[12], PERSPECTIVE DCL IN[3], GENERIC[13], PERSPECTIVE DCL IN[4], GENERIC[14], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL CONST[0..2] DCL TEMP[0..6] IMM FLT32 { -0.5000, 2.0000, -1.0000, 0.2500} IMM FLT32 { 0.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[4].xyyy, SAMP[2], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: TEX TEMP[2].xyz, IN[4].xyyy, SAMP[3], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[0], 2D 5: MAD TEMP[4].xyz, TEMP[2].xyzz, IMM[0].yyyy, IMM[0].zzzw 6: TEX TEMP[2].xyz, IN[3].xyyy, SAMP[1], 2D 7: DP3 TEMP[5].x, TEMP[4].xyzz, IN[2].xyzz 8: DP3 TEMP[5].y, TEMP[4].xyzz, IN[1].xyzz 9: DP3 TEMP[6].x, TEMP[4].xyzz, IN[0].xyzz 10: MOV TEMP[5].z, TEMP[6].xxxx 11: MAX TEMP[4].x, IMM[0].wwww, TEMP[6].xxxx 12: RCP TEMP[6].x, TEMP[4].xxxx 13: MUL TEMP[4].xyz, TEMP[2].xyzz, TEMP[6].xxxx 14: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 15: RSQ TEMP[6].x, TEMP[2].xxxx 16: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[6].xxxx 17: DP3 TEMP[3].x, TEMP[2].xyzz, TEMP[5].xyzz 18: MAX TEMP[2].x, TEMP[3].xxxx, IMM[1].xxxx 19: MUL TEMP[3].xyz, CONST[1].xyzz, TEMP[2].xxxx 20: MAD TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xyzz, CONST[2].xyzz 21: MUL TEMP[1].xyz, TEMP[0].xyzx, TEMP[2].xyzx 22: MOV OUT[0], TEMP[1] 23: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[2].xyz, input[4].xyyy, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 4: TEX temp[2].xyz, input[3].xyyy, 2D[0]; 5: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 6: TEX temp[2].xyz, input[3].xyyy, 2D[1]; 7: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 8: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 9: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 10: MOV temp[5].z, temp[6].xxxx; 11: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 12: RCP temp[6].x, temp[4].xxxx; 13: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 14: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 15: RSQ temp[6].x, temp[2].xxxx; 16: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 17: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 18: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 19: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 20: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 21: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 22: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[3]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 5: FRC temp[8].xyz, input[3].xyyy; 6: MOV temp[8].w, input[3].xyyy; 7: TEX temp[9], temp[8], 2D[0]; 8: MOV temp[2].xyz, temp[9]; 9: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 10: TEX temp[10], input[3].xyyy, 2D[1]; 11: MOV temp[2].xyz, temp[10]; 12: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 13: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 14: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 15: MOV temp[5].z, temp[6].xxxx; 16: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 17: RCP temp[6].x, temp[4].xxxx; 18: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 19: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[6].x, temp[2].xxxx; 21: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 22: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 23: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 24: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 25: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 26: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 27: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4].xyyy, 2D[2]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: TEX temp[7], input[4].xyyy, 2D[3]; 3: MOV temp[2].xyz, temp[7]; 4: ADD temp[3].xyz, temp[2].xyzz, const[3].xxxy; 5: FRC temp[8].xyz, input[3].xyyy; 6: MOV temp[8].w, input[3].xyyy; 7: TEX temp[9], temp[8], 2D[0]; 8: MOV temp[2].xyz, temp[9]; 9: MAD temp[4].xyz, temp[2].xyzz, const[3].yyyy, const[3].zzzw; 10: TEX temp[10], input[3].xyyy, 2D[1]; 11: MOV temp[2].xyz, temp[10]; 12: DP3 temp[5].x, temp[4].xyzz, input[2].xyzz; 13: DP3 temp[5].y, temp[4].xyzz, input[1].xyzz; 14: DP3 temp[6].x, temp[4].xyzz, input[0].xyzz; 15: MOV temp[5].z, temp[6].xxxx; 16: MAX temp[4].x, const[3].wwww, temp[6].xxxx; 17: RCP temp[6].x, temp[4].xxxx; 18: MUL temp[4].xyz, temp[2].xyzz, temp[6].xxxx; 19: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 20: RSQ temp[6].x, |temp[2].xxxx|; 21: MUL temp[2].xyz, temp[3].xyzz, temp[6].xxxx; 22: DP3 temp[3].x, temp[2].xyzz, temp[5].xyzz; 23: MAX temp[2].x, temp[3].xxxx, temp[0].0000; 24: MUL temp[3].xyz, const[1].xyzz, temp[2].xxxx; 25: MAD temp[2].xyz, temp[3].xyzz, temp[4].xyzz, const[2].xyzz; 26: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 27: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[3].xxx_; 5: FRC temp[8].xy, input[3].xy__; 6: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 7: MOV temp[2].xyz, temp[9].xyz_; 8: MAD temp[4].xyz, temp[2].xyz_, const[3].yyy_, const[3].zzz_; 9: TEX temp[10].xyz, input[3].xy__, 2D[1]; 10: MOV temp[2].xyz, temp[10].xyz_; 11: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 12: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 13: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 14: MOV temp[5].z, temp[6].__x_; 15: MAX temp[4].x, const[3].w___, temp[6].x___; 16: RCP temp[6].x, temp[4].x___; 17: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 18: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 19: RSQ temp[6].x, |temp[2].x___|; 20: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 21: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 22: MAX temp[2].x, temp[3].x___, temp[0].0___; 23: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 24: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 25: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 26: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: MOV temp[2].xyz, temp[7].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[3].xxx_; 5: FRC temp[8].xy, input[3].xy__; 6: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 7: MOV temp[2].xyz, temp[9].xyz_; 8: MAD temp[4].xyz, temp[2].xyz_, const[3].yyy_, const[3].zzz_; 9: TEX temp[10].xyz, input[3].xy__, 2D[1]; 10: MOV temp[2].xyz, temp[10].xyz_; 11: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 12: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 13: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 14: MOV temp[5].z, temp[6].__x_; 15: MAX temp[4].x, const[3].w___, temp[6].x___; 16: RCP temp[6].x, temp[4].x___; 17: MUL temp[4].xyz, temp[2].xyz_, temp[6].xxx_; 18: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 19: RSQ temp[6].x, |temp[2].x___|; 20: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 21: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 22: MAX temp[2].x, temp[3].x___, temp[0].0___; 23: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 24: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 25: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 26: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: FRC temp[8].xy, input[3].xy__; 5: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 6: MAD temp[4].xyz, temp[9].xyz_, const[3].yyy_, none.-1-1-1_; 7: TEX temp[10].xyz, input[3].xy__, 2D[1]; 8: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 9: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 10: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 11: MOV temp[5].z, temp[6].__x_; 12: MAX temp[4].x, const[3].w___, temp[6].x___; 13: RCP temp[6].x, temp[4].x___; 14: MUL temp[4].xyz, temp[10].xyz_, temp[6].xxx_; 15: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 16: RSQ temp[6].x, |temp[2].x___|; 17: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 18: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 19: MAX temp[2].x, temp[3].x___, temp[0].0___; 20: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 21: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 22: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 23: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: FRC temp[8].xy, input[3].xy__; 5: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 6: MAD temp[4].xyz, temp[9].xyz_, const[3].yyy_, none.-1-1-1_; 7: TEX temp[10].xyz, input[3].xy__, 2D[1]; 8: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 9: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 10: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 11: MOV temp[5].z, temp[6].__x_; 12: MAX temp[4].x, const[3].w___, temp[6].x___; 13: RCP temp[6].x, temp[4].x___; 14: MUL temp[4].xyz, temp[10].xyz_, temp[6].xxx_; 15: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 16: RSQ temp[6].x, |temp[2].x___|; 17: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 18: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 19: MAX temp[2].x, temp[3].x___, temp[0].0___; 20: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 21: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 22: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 23: MOV output[0], temp[1]; CONST[3] = { -0.5000 2.0000 -1.0000 0.2500 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[7].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[7].xyz_, none.-H-H-H_; 4: FRC temp[8].xy, input[3].xy__; 5: TEX temp[9].xyz, temp[8].xy__, 2D[0]; 6: MAD temp[4].xyz, temp[9].xyz_, const[3].yyy_, none.-1-1-1_; 7: TEX temp[10].xyz, input[3].xy__, 2D[1]; 8: DP3 temp[5].x, temp[4].xyz_, input[2].xyz_; 9: DP3 temp[5].y, temp[4].xyz_, input[1].xyz_; 10: DP3 temp[6].x, temp[4].xyz_, input[0].xyz_; 11: MOV temp[5].z, temp[6].__x_; 12: MAX temp[4].x, const[3].w___, temp[6].x___; 13: RCP temp[6].x, temp[4].x___; 14: MUL temp[4].xyz, temp[10].xyz_, temp[6].xxx_; 15: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 16: RSQ temp[6].x, |temp[2].x___|; 17: MUL temp[2].xyz, temp[3].xyz_, temp[6].xxx_; 18: DP3 temp[3].x, temp[2].xyz_, temp[5].xyz_; 19: MAX temp[2].x, temp[3].x___, temp[0].0___; 20: MUL temp[3].xyz, const[1].xyz_, temp[2].xxx_; 21: MAD temp[2].xyz, temp[3].xyz_, temp[4].xyz_, const[2].xyz_; 22: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 23: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: MUL temp[1].w, temp[0].___w, const[0].___x; 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: FRC temp[4].xy, input[3].xy__; 5: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 6: MAD temp[6].xyz, temp[5].xyz_, const[3].yyy_, none.-1-1-1_; 7: TEX temp[7].xyz, input[3].xy__, 2D[1]; 8: DP3 temp[8].x, temp[6].xyz_, input[2].xyz_; 9: DP3 temp[8].y, temp[6].xyz_, input[1].xyz_; 10: DP3 temp[9].x, temp[6].xyz_, input[0].xyz_; 11: MOV temp[8].z, temp[9].__x_; 12: MAX temp[6].x, const[3].w___, temp[9].x___; 13: RCP temp[10].x, temp[6].x___; 14: MUL temp[11].xyz, temp[7].xyz_, temp[10].xxx_; 15: DP3 temp[12].x, temp[3].xyz_, temp[3].xyz_; 16: RSQ temp[13].x, |temp[12].x___|; 17: MUL temp[12].xyz, temp[3].xyz_, temp[13].xxx_; 18: DP3 temp[3].x, temp[12].xyz_, temp[8].xyz_; 19: MAX temp[12].x, temp[3].x___, temp[0].0___; 20: MUL temp[14].xyz, const[1].xyz_, temp[12].xxx_; 21: MAD temp[15].xyz, temp[14].xyz_, temp[11].xyz_, const[2].xyz_; 22: MUL temp[1].xyz, temp[0].xyz_, temp[15].xyz_; 23: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[2]; 1: src0.xyz = const[0], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: src0.xyz = input[3] FRC temp[4].xy, src0.xy_ 5: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 6: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[6].xyz, src0.xyz, src1.yyy, -src0.111 7: TEX temp[7].xyz, input[3].xy__, 2D[1]; 8: src0.xyz = temp[6], src1.xyz = input[2] DP3 temp[8].x, src0.xyz, src1.xyz 9: src0.xyz = temp[6], src1.xyz = input[1] DP3 temp[8].y, src0.xyz, src1.xyz 10: src0.xyz = temp[6], src1.xyz = input[0] DP3 temp[9].x, src0.xyz, src1.xyz 11: src0.xyz = temp[9] MAD temp[8].z, src0.__x, src0.111, src0.000 12: src0.xyz = temp[9], src0.w = const[3] MAX temp[6].x, src0.w__, src0.x__ 13: src0.xyz = temp[6] REPL_ALPHA temp[10].x RCP, src0.x 14: src0.xyz = temp[7], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 15: src0.xyz = temp[3] DP3 temp[12].x, src0.xyz, src0.xyz 16: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 17: src0.xyz = temp[3], src1.xyz = temp[13] MAD temp[12].xyz, src0.xyz, src1.xxx, src0.000 18: src0.xyz = temp[12], src1.xyz = temp[8] DP3 temp[3].x, src0.xyz, src1.xyz 19: src0.xyz = temp[3] MAX temp[12].x, src0.x__, src0.0__ 20: src0.xyz = const[1], src1.xyz = temp[12] MAD temp[14].xyz, src0.xyz, src1.xxx, src0.000 21: src0.xyz = temp[14], src1.xyz = temp[11], src2.xyz = const[2] MAD temp[15].xyz, src0.xyz, src1.xyz, src2.xyz 22: src0.xyz = temp[0], src1.xyz = temp[15] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 23: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[4].xy__, 2D[2]; 2: TEX temp[2].xyz, input[4].xy__, 2D[3]; 3: TEX temp[7].xyz, input[3].xy__, 2D[1]; 4: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = const[0] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 5: src0.xyz = temp[3] DP3 temp[12].x, src0.xyz, src0.xyz 6: src0.xyz = temp[12] REPL_ALPHA temp[13].x RSQ, |src0.x| 7: src0.xyz = temp[3], src1.xyz = temp[13] MAD temp[12].xyz, src0.xyz, src1.xxx, src0.000 8: src0.xyz = input[3] FRC temp[4].xy, src0.xy_ 9: BEGIN_TEX; 10: TEX temp[5].xyz, temp[4].xy__, 2D[0]; 11: src0.xyz = temp[5], src1.xyz = const[3] MAD temp[6].xyz, src0.xyz, src1.yyy, -src0.111 12: src0.xyz = temp[6], src1.xyz = input[2] DP3 temp[8].x, src0.xyz, src1.xyz 13: src0.xyz = temp[6], src1.xyz = input[1] DP3 temp[8].y, src0.xyz, src1.xyz 14: src0.xyz = temp[6], src1.xyz = input[0] DP3 temp[9].x, src0.xyz, src1.xyz 15: src0.xyz = temp[9] MAD temp[8].z, src0.__x, src0.111, src0.000 16: src0.xyz = temp[12], src1.xyz = temp[8] DP3 temp[3].x, src0.xyz, src1.xyz 17: src0.xyz = temp[3] MAX temp[12].x, src0.x__, src0.0__ 18: src0.xyz = const[1], src1.xyz = temp[12] MAD temp[14].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = temp[9], src0.w = const[3] MAX temp[6].x, src0.w__, src0.x__ 20: src0.xyz = temp[6] REPL_ALPHA temp[10].x RCP, src0.x 21: src0.xyz = temp[7], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[14], src1.xyz = temp[11], src2.xyz = const[2] MAD temp[15].xyz, src0.xyz, src1.xyz, src2.xyz 23: src0.xyz = temp[0], src1.xyz = temp[15] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[5], temp[4].xy__, 2D[2]; 2: TEX temp[4].xyz, temp[4].xy__, 2D[3]; 3: TEX temp[7].xyz, temp[3].xy__, 2D[1]; 4: src0.xyz = temp[4], src0.w = temp[5], src1.xyz = const[0] MAD temp[6].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[4].w, src0.w, src1.x, src0.0 5: src0.xyz = temp[6] DP3 temp[8].x, src0.xyz, src0.xyz 6: src0.xyz = temp[8] REPL_ALPHA temp[9].x RSQ, |src0.x| 7: src0.xyz = temp[6], src1.xyz = temp[9] MAD temp[8].xyz, src0.xyz, src1.xxx, src0.000 8: src0.xyz = temp[3] FRC temp[3].xy, src0.xy_ 9: BEGIN_TEX; 10: TEX temp[3].xyz, temp[3].xy__, 2D[0]; 11: src0.xyz = temp[3], src1.xyz = const[3] MAD temp[3].xyz, src0.xyz, src1.yyy, -src0.111 12: src0.xyz = temp[3], src1.xyz = temp[2] DP3 temp[2].x, src0.xyz, src1.xyz 13: src0.xyz = temp[3], src1.xyz = temp[1] DP3 temp[2].y, src0.xyz, src1.xyz 14: src0.xyz = temp[3], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 15: src0.xyz = temp[0] MAD temp[2].z, src0.__x, src0.111, src0.000 16: src0.xyz = temp[8], src1.xyz = temp[2] DP3 temp[6].x, src0.xyz, src1.xyz 17: src0.xyz = temp[6] MAX temp[8].x, src0.x__, src0.0__ 18: src0.xyz = const[1], src1.xyz = temp[8] MAD temp[1].xyz, src0.xyz, src1.xxx, src0.000 19: src0.xyz = temp[0], src0.w = const[3] MAX temp[3].x, src0.w__, src0.x__ 20: src0.xyz = temp[3] REPL_ALPHA temp[0].x RCP, src0.x 21: src0.xyz = temp[7], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 22: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = const[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 23: src0.xyz = temp[5], src1.xyz = temp[0] MAD temp[4].xyz, src0.xyz, src1.xyz, src0.000 24: src0.xyz = temp[4], src0.w = temp[4] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=14************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 4, tex_end: 2 (code_addr: 00040100) TEX: TEX t5, t4, texture[2] (00009144) TEX t4, t4, texture[3] (00009904) TEX t7, t3, texture[1] (000089c3) 0: xyz: t4 c0 t0 bias-> t6.xyz (03980804) w: t5 t0 t0 bias-> t4.w (00900005) xyz: t4.xyz 1.0 -0.5 op: 000d8a80 w: t5.w c0.x 0.0 op: 00040189 1: xyz: t6 t0 t0 bias-> t8.x (00a00006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t6.xyz t6.xxx op: 00804000 w: t6.x t6.x t6.x op: 00000000 2: xyz: t8 t0 t0 bias-> t9.x (00a40008) w: t0 t0 t0 bias-> (00000000) xyz: t8.xxx t8.xxx t8.xxx op: 05004081 w: |t8.x| t8.x t8.x op: 05800040 3: xyz: t6 t9 t0 bias-> t8.xyz (03a00246) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz t9.xxx 0.0 op: 00050280 w: t6.x t6.x t6.x op: 00000000 4: xyz: t3 t0 t0 bias-> t3.xy (018c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xxx t3.xxx op: 04804080 w: t3.x t3.x t3.x op: 00000000 NODE 1: alu_offset: 5, tex_offset: 3, alu_end: 13, tex_end: 0 (code_addr: 00403345) TEX: TEX t3, t3, texture[0] (000080c3) 5: xyz: t3 c3 t0 bias-> t3.xyz (038c08c3) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz c3.yyy -1.0 op: 000d4300 w: t3.x t3.x t3.x op: 00000000 6: xyz: t3 t2 t0 bias-> t2.x (00880083) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t2.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 7: xyz: t3 t1 t0 bias-> t2.y (01080043) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t1.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 8: xyz: t3 t0 t0 bias-> t0.x (00800003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t0.xyz t3.xxx op: 00804200 w: t3.x t3.x t3.x op: 00000000 9: xyz: t0 t0 t0 bias-> t2.z (02080000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xxx 1.0 0.0 op: 00050a81 w: t0.x t0.x t0.x op: 00000000 10: xyz: t8 t2 t0 bias-> t6.x (00980088) w: t0 t0 t0 bias-> (00000000) xyz: t8.xyz t2.xyz t8.xxx op: 00804200 w: t8.x t8.x t8.x op: 00000000 11: xyz: t6 t0 t0 bias-> t8.x (00a00006) w: t0 t0 t0 bias-> (00000000) xyz: t6.xyz 0.0 t6.xxx op: 02804a00 w: t6.x t6.x t6.x op: 00000000 12: xyz: c1 t8 t0 bias-> t1.xyz (03840221) w: t0 t0 t0 bias-> (00000000) xyz: c1.xyz t8.xxx 0.0 op: 00050280 w: c1.x c1.x c1.x op: 00000000 13: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: c3 t0 t0 bias-> (00000023) xyz: c3.www t0.xyz t0.xxx op: 0280400c w: t0.x t0.x t0.x op: 00000000 14: xyz: t3 t0 t0 bias-> t0.x (00800003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t3.xxx t3.xxx op: 05004081 w: t3.x t3.x t3.x op: 05000000 15: xyz: t7 t0 t0 bias-> t0.xyz (03800007) w: t0 t0 t0 bias-> (00000000) xyz: t7.xyz t0.xxx 0.0 op: 00050280 w: t7.x t7.x t7.x op: 00000000 16: xyz: t1 t0 c2 bias-> t0.xyz (03822001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t0.xyz c2.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 17: xyz: t5 t0 t0 bias-> t4.xyz (03900005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.xyz 0.0 op: 00050200 w: t5.x t5.x t5.x op: 00000000 18: xyz: t4 t0 t0 bias-> o0.xyz (1c000004) w: t4 t0 t0 bias-> o0.w (01000004) xyz: t4.xyz 1.0 0.0 op: 00050a80 w: t4.w 1.0 0.0 op: 00040889 GLSL shader glsl/default.glsl generic diffuse colormapping compiled. r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL OUT[0], IN[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: FRC temp[1].xyz, input[1].xyyy; 1: MOV temp[1].w, input[1].xyyy; 2: TEX temp[0], temp[1], 2D[0]; 3: MUL output[0], input[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: FRC temp[1].xyz, input[1].xyyy; 1: MOV temp[1].w, input[1].xyyy; 2: TEX temp[0], temp[1], 2D[0]; 3: MUL output[0], input[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: FRC temp[1].xy, input[1].xy__; 1: TEX temp[0], temp[1].xy__, 2D[0]; 2: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: FRC temp[1].xy, input[1].xy__; 1: TEX temp[0], temp[1].xy__, 2D[0]; 2: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: FRC temp[1].xy, input[1].xy__; 1: TEX temp[0], temp[1].xy__, 2D[0]; 2: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: FRC temp[1].xy, input[1].xy__; 1: TEX temp[0], temp[1].xy__, 2D[0]; 2: MUL output[0], input[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: FRC temp[1].xy, input[1].xy__; 1: TEX temp[0], temp[1].xy__, 2D[0]; 2: MUL output[0], input[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: FRC temp[0].xy, input[1].xy__; 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: MUL output[0], input[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] FRC temp[0].xy, src0.xy_ 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[1] FRC temp[0].xy, src0.xy_ 1: BEGIN_TEX; 2: TEX temp[1], temp[0].xy__, 2D[0]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[1] FRC temp[1].xy, src0.xy_ 1: BEGIN_TEX; 2: TEX temp[1], temp[1].xy__, 2D[0]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 pc=15************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00000000) 0: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 1, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400001) TEX: TEX t1, t1, texture[0] (00008041) 1: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t1 t0 bias-> o0.w (01000040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL OUT[2], GENERIC[10] DCL CONST[0..3] DCL TEMP[0..1] 0: MOV OUT[1], IN[1] 1: MOV OUT[2].xy, IN[2].xyxx 2: MUL TEMP[0], CONST[0], IN[0].xxxx 3: MAD TEMP[1], CONST[1], IN[0].yyyy, TEMP[0] 4: MAD TEMP[0], CONST[2], IN[0].zzzz, TEMP[1] 5: MAD OUT[0], CONST[3], IN[0].wwww, TEMP[0] 6: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xyxx; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[2], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[2]; 7: MOV output[3], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[0], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[0]; 7: MOV output[3], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MOV output[2].xy, input[2].xy__; 2: MUL temp[0], const[0], input[0].xxxx; 3: MAD temp[1], const[1], input[0].yyyy, temp[0]; 4: MAD temp[0], const[2], input[0].zzzz, temp[1]; 5: MAD temp[0], const[3], input[0].wwww, temp[0]; 6: MOV output[0], temp[0]; 7: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00304203 dst: 2o op: VE_ADD src0: 0x01f90041 reg: 2i swiz: X/ Y/ U/ U src1: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 2: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 3: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 4: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 5: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 6: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 7: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL OUT[0], IN[0], TEMP[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], temp[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD color[0].w, src0.w, src1.w, src0.0 pc=16************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) TEX: TEX t1, t1, texture[0] (00008041) 0: xyz: t0 t1 t0 bias-> o0.xyz (1c000040) w: t0 t1 t0 bias-> o0.w (01000040) xyz: t0.xyz t1.xyz 0.0 op: 00050200 w: t0.w t1.w 0.0 op: 00040509 Draw_CachePic: failed to load gfx/hud/luminos/dock r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL OUT[0], COLOR 0: MOV OUT[0], IN[0] 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=17************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 0, tex_end: 0 (code_addr: 00400000) 0: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL OUT[0], POSITION DCL OUT[1], COLOR DCL CONST[0..3] DCL TEMP[0..1] 0: MOV OUT[1], IN[1] 1: MUL TEMP[0], CONST[0], IN[0].xxxx 2: MAD TEMP[1], CONST[1], IN[0].yyyy, TEMP[0] 3: MAD TEMP[0], CONST[2], IN[0].zzzz, TEMP[1] 4: MAD OUT[0], CONST[3], IN[0].wwww, TEMP[0] 5: END Vertex Program: before compilation # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[2], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[2]; 6: MOV output[2], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[0], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MOV output[1], input[1]; 1: MUL temp[0], const[0], input[0].xxxx; 2: MAD temp[1], const[1], input[0].yyyy, temp[0]; 3: MAD temp[0], const[2], input[0].zzzz, temp[1]; 4: MAD temp[0], const[3], input[0].wwww, temp[0]; 5: MOV output[0], temp[0]; 6: MOV output[2], temp[0]; Final vertex program code: 0: op: 0x00f02203 dst: 1o op: VE_ADD src0: 0x00d10021 reg: 1i swiz: X/ Y/ Z/ W src1: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d10002 reg: 0c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 2: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d10022 reg: 1c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 3: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10042 reg: 2c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 4: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10062 reg: 3c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 5: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 6: op: 0x00f04203 dst: 2o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 Draw_CachePic: failed to load gfx/hud/scoreboard_scoreboard_bg Wrote screenshots/xonotic000011.jpg r300: Initial fragment program FRAG DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[10], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..2] DCL TEMP[0..2] 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[0].xxxx 2: MAD TEMP[2].xyz, IN[0].xyzz, CONST[1].xyzz, CONST[2].xyzz 3: MUL TEMP[1].xyz, TEMP[0].xyzx, TEMP[2].xyzx 4: MOV OUT[0], TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 2: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 3: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 4: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: FRC temp[3].xyz, input[1].xyyy; 1: MOV temp[3].w, input[1].xyyy; 2: TEX temp[0], temp[3], 2D[0]; 3: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 4: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 5: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 6: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: FRC temp[3].xyz, input[1].xyyy; 1: MOV temp[3].w, input[1].xyyy; 2: TEX temp[0], temp[3], 2D[0]; 3: MUL temp[1].w, temp[0].xxxw, const[0].xxxx; 4: MAD temp[2].xyz, input[0].xyzz, const[1].xyzz, const[2].xyzz; 5: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 6: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: FRC temp[3].xy, input[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 5: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: FRC temp[3].xy, input[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 5: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: FRC temp[3].xy, input[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 5: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: FRC temp[3].xy, input[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 5: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: FRC temp[3].xy, input[1].xy__; 1: TEX temp[0], temp[3].xy__, 2D[0]; 2: MUL temp[1].w, temp[0].___w, const[0].___x; 3: MAD temp[2].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 5: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: FRC temp[0].xy, input[1].xy__; 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: MUL temp[2].w, temp[1].___w, const[0].___x; 3: MAD temp[3].xyz, input[0].xyz_, const[1].xyz_, const[2].xyz_; 4: MUL temp[2].xyz, temp[1].xyz_, temp[3].xyz_; 5: MOV output[0], temp[2]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[1] FRC temp[0].xy, src0.xy_ 1: TEX temp[1], temp[0].xy__, 2D[0]; 2: src0.xyz = const[0], src0.w = temp[1] MAD temp[2].w, src0.w, src0.x, src0.0 3: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 4: src0.xyz = temp[1], src1.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 1: src0.xyz = input[1] FRC temp[0].xy, src0.xy_ 2: BEGIN_TEX; 3: TEX temp[1], temp[0].xy__, 2D[0]; 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[3], src2.xyz = const[0] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, src0.w, src2.x, src0.0 5: src0.xyz = temp[2], src0.w = temp[2] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = temp[0], src1.xyz = const[1], src2.xyz = const[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 1: src0.xyz = temp[1] FRC temp[0].xy, src0.xy_ 2: BEGIN_TEX; 3: TEX temp[0], temp[0].xy__, 2D[0]; 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2], src2.xyz = const[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src2.x, src0.0 5: src0.xyz = temp[0], src0.w = temp[0] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=18************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00000040) 0: xyz: t0 c1 c2 bias-> t2.xyz (038a2840) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c1.xyz c2.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 1: xyz: t1 t0 t0 bias-> t0.xy (01800001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 2, tex_offset: 0, alu_end: 1, tex_end: 0 (code_addr: 00400042) TEX: TEX t0, t0, texture[0] (00008000) 2: xyz: t0 t2 c0 bias-> t0.xyz (03820080) w: t0 t0 t0 bias-> t0.w (00800000) xyz: t0.xyz t2.xyz 0.0 op: 00050200 w: t0.w c0.x 0.0 op: 00040309 3: xyz: t0 t0 t0 bias-> o0.xyz (1c000000) w: t0 t0 t0 bias-> o0.w (01000000) xyz: t0.xyz 1.0 0.0 op: 00050a80 w: t0.w 1.0 0.0 op: 00040889 r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[0..4] DCL TEMP[0..4] IMM FLT32 { -0.5000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1].xyyy, SAMP[1], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[1].xxxx 2: TEX TEMP[2].xyz, IN[1].xyyy, SAMP[2], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 5: RSQ TEMP[4].x, TEMP[2].xxxx 6: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xxxx 7: DP3 TEMP[3].x, IN[0].xyzz, IN[0].xyzz 8: RSQ TEMP[4].x, TEMP[3].xxxx 9: MUL TEMP[3].xyz, IN[0].xyzz, TEMP[4].xxxx 10: DP3 TEMP[4].x, TEMP[2].xyzz, TEMP[3].xyzz 11: MAX TEMP[2].x, TEMP[4].xxxx, IMM[0].yyyy 12: MUL TEMP[3].xyz, CONST[3].xyzz, TEMP[2].xxxx 13: MAD TEMP[2].xyz, TEMP[3].xyzz, CONST[0].xyzz, CONST[4].xyzz 14: MUL TEMP[3].xyz, TEMP[0].xyzz, TEMP[2].xyzz 15: TEX TEMP[0].xyz, IN[1].xyyy, SAMP[0], 2D 16: MAD TEMP[1].xyz, TEMP[0].xyzx, CONST[2].xyzx, TEMP[3].xyzx 17: MOV OUT[0], TEMP[1] 18: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 12: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 14: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 15: TEX temp[0].xyz, input[1].xyyy, 2D[0]; 16: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 17: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, temp[2].xxxx; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, temp[3].xxxx; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 13: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 15: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 16: FRC temp[6].xyz, input[1].xyyy; 17: MOV temp[6].w, input[1].xyyy; 18: TEX temp[7], temp[6], 2D[0]; 19: MOV temp[0].xyz, temp[7]; 20: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 21: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[1]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[2]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[5].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, |temp[2].xxxx|; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, |temp[3].xxxx|; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[5].yyyy; 13: MUL temp[3].xyz, const[3].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[4].xyzz; 15: MUL temp[3].xyz, temp[0].xyzz, temp[2].xyzz; 16: FRC temp[6].xyz, input[1].xyyy; 17: MOV temp[6].w, input[1].xyyy; 18: TEX temp[7], temp[6], 2D[0]; 19: MOV temp[0].xyz, temp[7]; 20: MAD temp[1].xyz, temp[0].xyzx, const[2].xyzx, temp[3].xyzx; 21: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[5].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[5].y___; 13: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 15: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 16: FRC temp[6].xy, input[1].xy__; 17: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 18: MOV temp[0].xyz, temp[7].xyz_; 19: MAD temp[1].xyz, temp[0].xyz_, const[2].xyz_, temp[3].xyz_; 20: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[5].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[5].y___; 13: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 15: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 16: FRC temp[6].xy, input[1].xy__; 17: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 18: MOV temp[0].xyz, temp[7].xyz_; 19: MAD temp[1].xyz, temp[0].xyz_, const[2].xyz_, temp[3].xyz_; 20: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: FRC temp[6].xy, input[1].xy__; 16: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 17: MAD temp[1].xyz, temp[7].xyz_, const[2].xyz_, temp[3].xyz_; 18: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: FRC temp[6].xy, input[1].xy__; 16: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 17: MAD temp[1].xyz, temp[7].xyz_, const[2].xyz_, temp[3].xyz_; 18: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[3].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[3].xyz, temp[0].xyz_, temp[2].xyz_; 15: FRC temp[6].xy, input[1].xy__; 16: TEX temp[7].xyz, temp[6].xy__, 2D[0]; 17: MAD temp[1].xyz, temp[7].xyz_, const[2].xyz_, temp[3].xyz_; 18: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[5].x, |temp[4].x___|; 6: MUL temp[4].xyz, temp[3].xyz_, temp[5].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[6].x, |temp[3].x___|; 9: MUL temp[7].xyz, input[0].xyz_, temp[6].xxx_; 10: DP3 temp[8].x, temp[4].xyz_, temp[7].xyz_; 11: MAX temp[4].x, temp[8].x___, none.0___; 12: MUL temp[9].xyz, const[3].xyz_, temp[4].xxx_; 13: MAD temp[10].xyz, temp[9].xyz_, const[0].xyz_, const[4].xyz_; 14: MUL temp[11].xyz, temp[0].xyz_, temp[10].xyz_; 15: FRC temp[12].xy, input[1].xy__; 16: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 17: MAD temp[1].xyz, temp[13].xyz_, const[2].xyz_, temp[11].xyz_; 18: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[1]; 1: src0.xyz = const[1], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 9: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 11: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[3], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[4] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = input[1] FRC temp[12].xy, src0.xy_ 16: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 17: src0.xyz = temp[13], src1.xyz = const[2], src2.xyz = temp[11] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 18: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[1]; 2: TEX temp[2].xyz, input[1].xy__, 2D[2]; 3: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 9: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 11: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[3], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[4] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[11].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = input[1] FRC temp[12].xy, src0.xy_ 16: BEGIN_TEX; 17: TEX temp[13].xyz, temp[12].xy__, 2D[0]; 18: src0.xyz = temp[13], src1.xyz = const[2], src2.xyz = temp[11] MAD temp[1].xyz, src0.xyz, src1.xyz, src2.xyz 19: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], temp[1].xy__, 2D[1]; 2: TEX temp[3].xyz, temp[1].xy__, 2D[2]; 3: src0.xyz = temp[3], src0.w = temp[2], src1.xyz = const[1] MAD temp[4].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[3].w, src0.w, src1.x, src0.0 4: src0.xyz = temp[4] DP3 temp[5].x, src0.xyz, src0.xyz 5: src0.xyz = temp[5] REPL_ALPHA temp[6].x RSQ, |src0.x| 6: src0.xyz = temp[4], src1.xyz = temp[6] MAD temp[5].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = temp[0] DP3 temp[4].x, src0.xyz, src0.xyz 8: src0.xyz = temp[4] REPL_ALPHA temp[4].x RSQ, |src0.x| 9: src0.xyz = temp[0], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[5], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 11: src0.xyz = temp[0] MAX temp[5].x, src0.x__, src0.0__ 12: src0.xyz = const[3], src1.xyz = temp[5] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[0], src1.xyz = const[0], src2.xyz = const[4] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[1] FRC temp[1].xy, src0.xy_ 16: BEGIN_TEX; 17: TEX temp[1].xyz, temp[1].xy__, 2D[0]; 18: src0.xyz = temp[1], src1.xyz = const[2], src2.xyz = temp[0] MAD temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 19: src0.xyz = temp[3], src0.w = temp[3] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=19************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 12, tex_end: 1 (code_addr: 00020300) TEX: TEX t2, t1, texture[1] (00008881) TEX t3, t1, texture[2] (000090c1) 0: xyz: t3 c1 t0 bias-> t4.xyz (03900843) w: t2 t0 t0 bias-> t3.w (008c0002) xyz: t3.xyz 1.0 -0.5 op: 000d8a80 w: t2.w c1.x 0.0 op: 00040189 1: xyz: t4 t0 t0 bias-> t5.x (00940004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t4.xyz t4.xxx op: 00804000 w: t4.x t4.x t4.x op: 00000000 2: xyz: t5 t0 t0 bias-> t6.x (00980005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xxx t5.xxx t5.xxx op: 05004081 w: |t5.x| t5.x t5.x op: 05800040 3: xyz: t4 t6 t0 bias-> t5.xyz (03940184) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t6.xxx 0.0 op: 00050280 w: t4.x t4.x t4.x op: 00000000 4: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 5: xyz: t4 t0 t0 bias-> t4.x (00900004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 6: xyz: t0 t4 t0 bias-> t0.xyz (03800100) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t4.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 7: xyz: t5 t0 t0 bias-> t0.x (00800005) w: t0 t0 t0 bias-> (00000000) xyz: t5.xyz t0.xyz t5.xxx op: 00804200 w: t5.x t5.x t5.x op: 00000000 8: xyz: t0 t0 t0 bias-> t5.x (00940000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 9: xyz: c3 t5 t0 bias-> t0.xyz (03800163) w: t0 t0 t0 bias-> (00000000) xyz: c3.xyz t5.xxx 0.0 op: 00050280 w: c3.x c3.x c3.x op: 00000000 10: xyz: t0 c0 c4 bias-> t0.xyz (03824800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz c4.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 11: xyz: t2 t0 t0 bias-> t0.xyz (03800002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 12: xyz: t1 t0 t0 bias-> t1.xy (01840001) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz t1.xxx t1.xxx op: 04804080 w: t1.x t1.x t1.x op: 00000000 NODE 1: alu_offset: 13, tex_offset: 2, alu_end: 1, tex_end: 0 (code_addr: 0040204d) TEX: TEX t1, t1, texture[0] (00008041) 13: xyz: t1 c2 t0 bias-> t3.xyz (038c0881) w: t0 t0 t0 bias-> (00000000) xyz: t1.xyz c2.xyz t0.xyz op: 00020200 w: t1.x t1.x t1.x op: 00000000 14: xyz: t3 t0 t0 bias-> o0.xyz (1c000003) w: t3 t0 t0 bias-> o0.w (01000003) xyz: t3.xyz 1.0 0.0 op: 00050a80 w: t3.w 1.0 0.0 op: 00040889 [PUP] Thunderstorm was in the wrong place GLSL shader glsl/default.glsl lightdirection diffuse compiled. r300: Initial fragment program FRAG DCL IN[0], GENERIC[10], PERSPECTIVE DCL IN[1], GENERIC[11], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..3] DCL TEMP[0..4] IMM FLT32 { -0.5000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[1].xyyy, SAMP[0], 2D 1: MUL TEMP[1].w, TEMP[0].xxxw, CONST[1].xxxx 2: TEX TEMP[2].xyz, IN[1].xyyy, SAMP[1], 2D 3: ADD TEMP[3].xyz, TEMP[2].xyzz, IMM[0].xxxy 4: DP3 TEMP[2].x, TEMP[3].xyzz, TEMP[3].xyzz 5: RSQ TEMP[4].x, TEMP[2].xxxx 6: MUL TEMP[2].xyz, TEMP[3].xyzz, TEMP[4].xxxx 7: DP3 TEMP[3].x, IN[0].xyzz, IN[0].xyzz 8: RSQ TEMP[4].x, TEMP[3].xxxx 9: MUL TEMP[3].xyz, IN[0].xyzz, TEMP[4].xxxx 10: DP3 TEMP[4].x, TEMP[2].xyzz, TEMP[3].xyzz 11: MAX TEMP[2].x, TEMP[4].xxxx, IMM[0].yyyy 12: MUL TEMP[3].xyz, CONST[2].xyzz, TEMP[2].xxxx 13: MAD TEMP[2].xyz, TEMP[3].xyzz, CONST[0].xyzz, CONST[3].xyzz 14: MUL TEMP[1].xyz, TEMP[0].xyzx, TEMP[2].xyzx 15: MOV OUT[0], TEMP[1] 16: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 12: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 14: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 15: MOV output[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 12: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 14: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 15: MOV output[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 12: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 14: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 15: MOV output[0], temp[1]; Fragment Program: after 'transform loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 12: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 14: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 15: MOV output[0], temp[1]; Fragment Program: after 'emulate branches' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[2].xyz, input[1].xyyy, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 4: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 5: RSQ temp[4].x, temp[2].xxxx; 6: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 7: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 8: RSQ temp[4].x, temp[3].xxxx; 9: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 10: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 11: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 12: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 13: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 14: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 15: MOV output[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[1]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, temp[2].xxxx; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, temp[3].xxxx; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 13: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 15: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 16: MOV output[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1].xyyy, 2D[0]; 1: MUL temp[1].w, temp[0].xxxw, const[1].xxxx; 2: TEX temp[5], input[1].xyyy, 2D[1]; 3: MOV temp[2].xyz, temp[5]; 4: ADD temp[3].xyz, temp[2].xyzz, const[4].xxxy; 5: DP3 temp[2].x, temp[3].xyzz, temp[3].xyzz; 6: RSQ temp[4].x, |temp[2].xxxx|; 7: MUL temp[2].xyz, temp[3].xyzz, temp[4].xxxx; 8: DP3 temp[3].x, input[0].xyzz, input[0].xyzz; 9: RSQ temp[4].x, |temp[3].xxxx|; 10: MUL temp[3].xyz, input[0].xyzz, temp[4].xxxx; 11: DP3 temp[4].x, temp[2].xyzz, temp[3].xyzz; 12: MAX temp[2].x, temp[4].xxxx, const[4].yyyy; 13: MUL temp[3].xyz, const[2].xyzz, temp[2].xxxx; 14: MAD temp[2].xyz, temp[3].xyzz, const[0].xyzz, const[3].xyzz; 15: MUL temp[1].xyz, temp[0].xyzx, temp[2].xyzx; 16: MOV output[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[1]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[4].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[4].y___; 13: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[3].xyz_; 15: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 16: MOV output[0], temp[1]; Fragment Program: after 'emulate loops' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[1]; 3: MOV temp[2].xyz, temp[5].xyz_; 4: ADD temp[3].xyz, temp[2].xyz_, const[4].xxx_; 5: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 6: RSQ temp[4].x, |temp[2].x___|; 7: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 8: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 9: RSQ temp[4].x, |temp[3].x___|; 10: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 11: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 12: MAX temp[2].x, temp[4].x___, const[4].y___; 13: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 14: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[3].xyz_; 15: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 16: MOV output[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[1]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[3].xyz_; 14: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 15: MOV output[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[1]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[3].xyz_; 14: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 15: MOV output[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[5].xyz, input[1].xy__, 2D[1]; 3: ADD temp[3].xyz, temp[5].xyz_, none.-H-H-H_; 4: DP3 temp[2].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[4].x, |temp[2].x___|; 6: MUL temp[2].xyz, temp[3].xyz_, temp[4].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[4].x, |temp[3].x___|; 9: MUL temp[3].xyz, input[0].xyz_, temp[4].xxx_; 10: DP3 temp[4].x, temp[2].xyz_, temp[3].xyz_; 11: MAX temp[2].x, temp[4].x___, none.0___; 12: MUL temp[3].xyz, const[2].xyz_, temp[2].xxx_; 13: MAD temp[2].xyz, temp[3].xyz_, const[0].xyz_, const[3].xyz_; 14: MUL temp[1].xyz, temp[0].xyz_, temp[2].xyz_; 15: MOV output[0], temp[1]; Fragment Program: after 'register rename' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL temp[1].w, temp[0].___w, const[1].___x; 2: TEX temp[2].xyz, input[1].xy__, 2D[1]; 3: ADD temp[3].xyz, temp[2].xyz_, none.-H-H-H_; 4: DP3 temp[4].x, temp[3].xyz_, temp[3].xyz_; 5: RSQ temp[5].x, |temp[4].x___|; 6: MUL temp[4].xyz, temp[3].xyz_, temp[5].xxx_; 7: DP3 temp[3].x, input[0].xyz_, input[0].xyz_; 8: RSQ temp[6].x, |temp[3].x___|; 9: MUL temp[7].xyz, input[0].xyz_, temp[6].xxx_; 10: DP3 temp[8].x, temp[4].xyz_, temp[7].xyz_; 11: MAX temp[4].x, temp[8].x___, none.0___; 12: MUL temp[9].xyz, const[2].xyz_, temp[4].xxx_; 13: MAD temp[10].xyz, temp[9].xyz_, const[0].xyz_, const[3].xyz_; 14: MUL temp[1].xyz, temp[0].xyz_, temp[10].xyz_; 15: MOV output[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = const[1], src0.w = temp[0] MAD temp[1].w, src0.w, src0.x, src0.0 2: TEX temp[2].xyz, input[1].xy__, 2D[1]; 3: src0.xyz = temp[2] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 9: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 11: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[2], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[3] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: TEX temp[2].xyz, input[1].xy__, 2D[1]; 3: src0.xyz = temp[2], src0.w = temp[0], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[6].x RSQ, |src0.x| 9: src0.xyz = input[0], src1.xyz = temp[6] MAD temp[7].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[7] DP3 temp[8].x, src0.xyz, src1.xyz 11: src0.xyz = temp[8] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[2], src1.xyz = temp[4] MAD temp[9].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[9], src1.xyz = const[0], src2.xyz = const[3] MAD temp[10].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src1.xyz = temp[10] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], temp[1].xy__, 2D[0]; 2: TEX temp[1].xyz, temp[1].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = const[1] MAD temp[3].xyz, src0.xyz, src0.111, -src0.HHH MAD temp[1].w, src0.w, src1.x, src0.0 4: src0.xyz = temp[3] DP3 temp[4].x, src0.xyz, src0.xyz 5: src0.xyz = temp[4] REPL_ALPHA temp[5].x RSQ, |src0.x| 6: src0.xyz = temp[3], src1.xyz = temp[5] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = temp[0] DP3 temp[3].x, src0.xyz, src0.xyz 8: src0.xyz = temp[3] REPL_ALPHA temp[3].x RSQ, |src0.x| 9: src0.xyz = temp[0], src1.xyz = temp[3] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 10: src0.xyz = temp[4], src1.xyz = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz 11: src0.xyz = temp[0] MAX temp[4].x, src0.x__, src0.0__ 12: src0.xyz = const[2], src1.xyz = temp[4] MAD temp[0].xyz, src0.xyz, src1.xxx, src0.000 13: src0.xyz = temp[0], src1.xyz = const[0], src2.xyz = const[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 14: src0.xyz = temp[2], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 15: src0.xyz = temp[1], src0.w = temp[1] MAD color[0].xyz, src0.xyz, src0.111, src0.000 MAD color[0].w, src0.w, src0.1, src0.0 pc=20************************************* Hardware program ---------------- NODE 0: alu_offset: 0, tex_offset: 0, alu_end: 12, tex_end: 1 (code_addr: 00420300) TEX: TEX t2, t1, texture[0] (00008081) TEX t1, t1, texture[1] (00008841) 0: xyz: t1 c1 t0 bias-> t3.xyz (038c0841) w: t2 t0 t0 bias-> t1.w (00840002) xyz: t1.xyz 1.0 -0.5 op: 000d8a80 w: t2.w c1.x 0.0 op: 00040189 1: xyz: t3 t0 t0 bias-> t4.x (00900003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t3.xyz t3.xxx op: 00804000 w: t3.x t3.x t3.x op: 00000000 2: xyz: t4 t0 t0 bias-> t5.x (00940004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xxx t4.xxx t4.xxx op: 05004081 w: |t4.x| t4.x t4.x op: 05800040 3: xyz: t3 t5 t0 bias-> t4.xyz (03900143) w: t0 t0 t0 bias-> (00000000) xyz: t3.xyz t5.xxx 0.0 op: 00050280 w: t3.x t3.x t3.x op: 00000000 4: xyz: t0 t0 t0 bias-> t3.x (008c0000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t0.xyz t0.xxx op: 00804000 w: t0.x t0.x t0.x op: 00000000 5: xyz: t3 t0 t0 bias-> t3.x (008c0003) w: t0 t0 t0 bias-> (00000000) xyz: t3.xxx t3.xxx t3.xxx op: 05004081 w: |t3.x| t3.x t3.x op: 05800040 6: xyz: t0 t3 t0 bias-> t0.xyz (038000c0) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz t3.xxx 0.0 op: 00050280 w: t0.x t0.x t0.x op: 00000000 7: xyz: t4 t0 t0 bias-> t0.x (00800004) w: t0 t0 t0 bias-> (00000000) xyz: t4.xyz t0.xyz t4.xxx op: 00804200 w: t4.x t4.x t4.x op: 00000000 8: xyz: t0 t0 t0 bias-> t4.x (00900000) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz 0.0 t0.xxx op: 02804a00 w: t0.x t0.x t0.x op: 00000000 9: xyz: c2 t4 t0 bias-> t0.xyz (03800122) w: t0 t0 t0 bias-> (00000000) xyz: c2.xyz t4.xxx 0.0 op: 00050280 w: c2.x c2.x c2.x op: 00000000 10: xyz: t0 c0 c3 bias-> t0.xyz (03823800) w: t0 t0 t0 bias-> (00000000) xyz: t0.xyz c0.xyz c3.xyz op: 00020200 w: t0.x t0.x t0.x op: 00000000 11: xyz: t2 t0 t0 bias-> t1.xyz (03840002) w: t0 t0 t0 bias-> (00000000) xyz: t2.xyz t0.xyz 0.0 op: 00050200 w: t2.x t2.x t2.x op: 00000000 12: xyz: t1 t0 t0 bias-> o0.xyz (1c000001) w: t1 t0 t0 bias-> o0.w (01000001) xyz: t1.xyz 1.0 0.0 op: 00050a80 w: t1.w 1.0 0.0 op: 00040889 r300: Initial vertex program VERT DCL IN[0] DCL IN[1] DCL IN[2] DCL IN[3] DCL IN[4] DCL OUT[0], POSITION DCL OUT[1], GENERIC[10] DCL OUT[2], GENERIC[11] DCL CONST[0..8] DCL TEMP[0..1] 0: MUL TEMP[0], CONST[0], IN[1].xxxx 1: MAD TEMP[1], CONST[1], IN[1].yyyy, TEMP[0] 2: MAD TEMP[0], CONST[2], IN[1].zzzz, TEMP[1] 3: MAD OUT[2].xy, CONST[3].xyxx, IN[1].wwxx, TEMP[0].xyxx 4: DP3 OUT[1].x, CONST[4].xyzz, IN[2].xyzz 5: DP3 OUT[1].y, CONST[4].xyzz, IN[3].xyzz 6: DP3 OUT[1].z, CONST[4].xyzz, IN[4].xyzz 7: MUL TEMP[0], CONST[5], IN[0].xxxx 8: MAD TEMP[1], CONST[6], IN[0].yyyy, TEMP[0] 9: MAD TEMP[0], CONST[7], IN[0].zzzz, TEMP[1] 10: MAD OUT[0], CONST[8], IN[0].wwww, TEMP[0] 11: END Vertex Program: before compilation # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'transform loops' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate branches' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate negative addressing' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP3 output[1].x, const[4].xyzz, input[2].xyzz; 5: DP3 output[1].y, const[4].xyzz, input[3].xyzz; 6: DP3 output[1].z, const[4].xyzz, input[4].xyzz; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'native rewrite' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'emulate modifiers' # Radeon Compiler Program 0: MUL temp[0], const[0], input[1].xxxx; 1: MAD temp[1], const[1], input[1].yyyy, temp[0]; 2: MAD temp[0], const[2], input[1].zzzz, temp[1]; 3: MAD output[2].xy, const[3].xyxx, input[1].wwxx, temp[0].xyxx; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'deadcode' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'dataflow optimize' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'source conflict resolve' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[2], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[2]; 12: MOV output[3], temp[2]; Vertex Program: after 'register allocation' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[0], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[0]; 12: MOV output[3], temp[0]; Vertex Program: after 'dead constants' # Radeon Compiler Program 0: MUL temp[0].xy, const[0].xy__, input[1].xx__; 1: MAD temp[1].xy, const[1].xy__, input[1].yy__, temp[0].xy__; 2: MAD temp[0].xy, const[2].xy__, input[1].zz__, temp[1].xy__; 3: MAD output[2].xy, const[3].xy__, input[1].ww__, temp[0].xy__; 4: DP4 output[1].x, const[4].xyz0, input[2].xyz0; 5: DP4 output[1].y, const[4].xyz0, input[3].xyz0; 6: DP4 output[1].z, const[4].xyz0, input[4].xyz0; 7: MUL temp[0], const[5], input[0].xxxx; 8: MAD temp[1], const[6], input[0].yyyy, temp[0]; 9: MAD temp[0], const[7], input[0].zzzz, temp[1]; 10: MAD temp[0], const[8], input[0].wwww, temp[0]; 11: MOV output[0], temp[0]; 12: MOV output[3], temp[0]; Final vertex program code: 0: op: 0x00300002 dst: 0t op: VE_MULTIPLY src0: 0x01f90002 reg: 0c swiz: X/ Y/ U/ U src1: 0x01f80021 reg: 1i swiz: X/ X/ U/ U src2: 0x01248021 reg: 1i swiz: 0/ 0/ 0/ 0 1: op: 0x00302004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x01f90022 reg: 1c swiz: X/ Y/ U/ U src1: 0x01f92021 reg: 1i swiz: Y/ Y/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 2: op: 0x00300004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x01f90042 reg: 2c swiz: X/ Y/ U/ U src1: 0x01fa4021 reg: 1i swiz: Z/ Z/ U/ U src2: 0x01f90020 reg: 1t swiz: X/ Y/ U/ U 3: op: 0x00304204 dst: 2o op: VE_MULTIPLY_ADD src0: 0x01f90062 reg: 3c swiz: X/ Y/ U/ U src1: 0x01fb6021 reg: 1i swiz: W/ W/ U/ U src2: 0x01f90000 reg: 0t swiz: X/ Y/ U/ U 4: op: 0x00102201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110041 reg: 2i swiz: X/ Y/ Z/ 0 src2: 0x01248041 reg: 2i swiz: 0/ 0/ 0/ 0 5: op: 0x00202201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110061 reg: 3i swiz: X/ Y/ Z/ 0 src2: 0x01248061 reg: 3i swiz: 0/ 0/ 0/ 0 6: op: 0x00402201 dst: 1o op: VE_DOT_PRODUCT src0: 0x01110082 reg: 4c swiz: X/ Y/ Z/ 0 src1: 0x01110081 reg: 4i swiz: X/ Y/ Z/ 0 src2: 0x01248081 reg: 4i swiz: 0/ 0/ 0/ 0 7: op: 0x00f00002 dst: 0t op: VE_MULTIPLY src0: 0x00d100a2 reg: 5c swiz: X/ Y/ Z/ W src1: 0x00000001 reg: 0i swiz: X/ X/ X/ X src2: 0x01248001 reg: 0i swiz: 0/ 0/ 0/ 0 8: op: 0x00f02004 dst: 1t op: VE_MULTIPLY_ADD src0: 0x00d100c2 reg: 6c swiz: X/ Y/ Z/ W src1: 0x00492001 reg: 0i swiz: Y/ Y/ Y/ Y src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 9: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d100e2 reg: 7c swiz: X/ Y/ Z/ W src1: 0x00924001 reg: 0i swiz: Z/ Z/ Z/ Z src2: 0x00d10020 reg: 1t swiz: X/ Y/ Z/ W 10: op: 0x00f00004 dst: 0t op: VE_MULTIPLY_ADD src0: 0x00d10102 reg: 8c swiz: X/ Y/ Z/ W src1: 0x00db6001 reg: 0i swiz: W/ W/ W/ W src2: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W 11: op: 0x00f00203 dst: 0o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 12: op: 0x00f06203 dst: 3o op: VE_ADD src0: 0x00d10000 reg: 0t swiz: X/ Y/ Z/ W src1: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 src2: 0x01248000 reg: 0t swiz: 0/ 0/ 0/ 0 Flow Control Ops: 0x00000000 Wrote screenshots/xonotic000012.jpg [PUP] Thunderstorm was in the wrong place Sending extended response requests... Wrote screenshots/xonotic000013.jpg ]quit CL_Disconnect CSQC unloaded Sending clc_disconnect Host_ShutdownServer VM_search_end: invalid handle -1 used in menu Require all of: OpenGL Backend shutting down