fixme:process:GetLogicalProcessorInformation (0x32e504,0x32eb04): stub fixme:wininet:INET_QueryOption INTERNET_OPTION_CONNECTED_STATE: semi-stub fixme:reg:RegSetKeySecurity :(0x68,4,0x129698): stub fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (15000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 15000 fixme:process:GetLogicalProcessorInformation (0x17fbfa4,0x17fc5a4): stub fixme:process:GetLogicalProcessorInformation (0x17fbfa4,0x17fc5a4): stub fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:process:GetLogicalProcessorInformation (0x18fe3b4,0x18fe9b4): stub fixme:process:GetLogicalProcessorInformation (0x18fe3b4,0x18fe9b4): stub fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (60000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 60000 fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:process:GetLogicalProcessorInformation (0x18fe3b4,0x18fe9b4): stub fixme:process:GetLogicalProcessorInformation (0x18fe3b4,0x18fe9b4): stub fixme:shdocvw:PersistStreamInit_Load (0x130720)->(0x32e068) fixme:shdocvw:OleControl_FreezeEvents (0x130720)->(1) fixme:shdocvw:OleControl_FreezeEvents (0x130720)->(0) fixme:hnetcfg:fw_profile_get_FirewallEnabled 0x136a48, 0x32dc30 fixme:mixer:ALSA_MixerInit No master control found on HDA ATI HDMI, disabling mixer fixme:urlmon:URLMoniker_BindToObject use running object table fixme:shdocvw:BindStatusCallback_OnProgress status code 1 fixme:shdocvw:BindStatusCallback_OnProgress status code 2 fixme:shdocvw:BindStatusCallback_OnProgress status code 11 fixme:shdocvw:BindStatusCallback_OnProgress status code 14 fixme:iphlpapi:NotifyAddrChange (Handle 0x309e90c, overlapped 0x309e8f0): stub fixme:win:EnumDisplayDevicesW ((null),0,0x32b108,0x00000000), stub! fixme:shdocvw:ClOleCommandTarget_QueryStatus (0x1307d0)->((null) 1 0x32bd24 (nil)) fixme:shdocvw:ClOleCommandTarget_QueryStatus command_0: 27, 0x0 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 25 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 26 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {000214d1-0000-0000-c000-000000000046} fixme:ntdll:NtLockFile I/O completion on lock not implemented yet fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x34fd350)->() fixme:shdocvw:ClientSite_GetContainer (0x1307d0)->(0x32bcf4) fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {000214d1-0000-0000-c000-000000000046} fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x34fd350)->(0x328ffc) fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:ole:CoCreateInstance no instance created for interface {ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf} of class {56fdf344-fd6d-11d0-958a-006097c9a090}, hres is 0x80004002 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 29 fixme:shdocvw:DocHostUIHandler_GetDropTarget (0x1307d0) fixme:shdocvw:ClientSite_GetContainer (0x1307d0)->(0x32e100) fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 25 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 26 fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x3418cb0)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x34fd968)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x34fd900)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x162e88)->() fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x34d0360)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x34bc968)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x34fd5f0)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x34c3980)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x3419020)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x1629d0)->(0x32dc5c 0x32dc34 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x34c28d8)->(0x32dc5c 0x32dc34 0) fixme:wininet:set_cookie persistent cookies not handled (L"expires=Wednesday, 15-May-2013 00:00:00 GMT; path=/; domain=.atdmt.com") fixme:wininet:set_cookie persistent cookies not handled (L"expires=Friday, 02-Dec-2011 00:00:00 GMT; path=/; domain=.atdmt.com") err:wininet:HTTP_ParseDateAsAsctime unexpected weekday L"0" err:wininet:HTTP_ParseDate unexpected date format L"0" fixme:wininet:InternetLockRequestFile STUB fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x34fd968)->(0x32b7d4) fixme:resource:GetGuiResources (0xffffffff,0): stub fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x34fd900)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 28 fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_GetContentLength (0x34fd590)->(0x32b8d0) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:mshtml:nsURI_GetOriginCharset default action not implemented fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49b7d40)->() fixme:mshtml:nsURI_GetOriginCharset default action not implemented fixme:mshtml:nsURI_GetOriginCharset default action not implemented fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f4a48)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f5150)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f7440)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f7b40)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f9958)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49fa868)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49f97d0)->() fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x49ff2e8)->() fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49b81b8)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x35a0970)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49f4f28)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49f55d0)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49f7918)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49f7fb8)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49f9df8)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49fad30)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49fa380)->(0x32d8d4 0x32d8ac 0) fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x4a01518)->(0x32d8d4 0x32d8ac 0) fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49b7d40)->(0x32b7d4) fixme:wininet:set_cookie persistent cookies not handled (L"expires=Wed, 15-May-2013 23:26:48 GMT") fixme:wininet:set_cookie persistent cookies not handled (L"expires=Wed, 15-May-2013 23:26:48 GMT") fixme:wininet:set_cookie persistent cookies not handled (L"expires=Wed, 15-May-2013 23:26:48 GMT") err:wininet:HTTP_ParseDateAsAsctime unexpected weekday L"0" err:wininet:HTTP_ParseDate unexpected date format L"0" fixme:wininet:set_cookie persistent cookies not handled (L"expires=Mon, 16-May-2011 23:41:48 GMT; path=/; domain=.doubleclick.net") fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f4a48)->(0x32b7d4) fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f7b40)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f7440)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49fa868)->(0x32b28c) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f9958)->(0x32b28c) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f5150)->(0x32b7d4) fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49f97d0)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:set_cookie persistent cookies not handled (L"expires=Wed, 15-May-2013 23:26:48 GMT; path=/; domain=.doubleclick.net") fixme:wininet:set_cookie Unknown additional option L"Max-Age=0; expires=Mon, 21-July-2008 23:59:00 GMT" fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_GetContentLength (0x359edf0)->(0x32b8d0) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x49ff2e8)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x49eaa60)->(0x32dc5c 0x32dc34 0) fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_GetContentLength (0x359edf0)->(0x32b8d0) fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetOriginCharset default action not implemented fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsHttpChannelInternal_SetDocumentURI (0x4a2eb48)->() fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:mshtml:nsURI_GetAsciiHost Use Uri_PUNYCODE_IDN_HOST flag fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {000214d0-0000-0000-c000-000000000046} fixme:shdocvw:PropertyNotifySink_OnChanged unimplemented dispid 1005 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {000214d0-0000-0000-c000-000000000046} fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x3418cb0)->(0x32b7d4) fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:mshtml:HttpNegotiate_GetRootSecurityId (0x4b67a68)->(0x32dc5c 0x32dc34 0) fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:wininet:InternetLockRequestFile STUB fixme:mshtml:nsChannel_IsNoCacheResponse (0x4a2eb48)->(0x32b7d4) fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 26 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 29 fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {000214d1-0000-0000-c000-000000000046} fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented group {de4ba900-59ca-11cf-9592-444553540000} fixme:shdocvw:ClOleCommandTarget_Exec Unimplemented cmdid 35 fixme:shdocvw:DocObjectService_FireDocumentComplete 0x3417490 0x34169d0 0 fixme:mshtml:nsChannel_IsNoCacheResponse (0x34fd350)->(0x32e18c) fixme:hnetcfg:fw_profile_get_FirewallEnabled 0x48471d8, 0x267cd80 err:alsa:wine_snd_pcm_recover underrun occurred fixme:shdocvw:OleInPlaceObject_InPlaceDeactivate (0x130720) fixme:shdocvw:ControlSite_OnFocus (0x1307d0)->(0) fixme:mshtml:HlinkTarget_SetBrowseContext (0x161760)->((nil)) fixme:shdocvw:OleObject_Close (0x130720)->(1) fixme:process:GetLogicalProcessorInformation (0x33f640,0x33fc40): stub fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (3000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 3000 fixme:process:GetLogicalProcessorInformation (0x153bf88,0x153c588): stub fixme:process:GetLogicalProcessorInformation (0x153bf88,0x153c588): stub fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (3000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 3000 fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (3000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 3000 fixme:wininet:URLCache_FindFirstFreeEntry Grow file err:wininet:CommitUrlCacheEntryInternal no free entries fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:process:GetLogicalProcessorInformation (0x163e38c,0x163e98c): stub fixme:process:GetLogicalProcessorInformation (0x33f464,0x33fa64): stub fixme:process:GetLogicalProcessorInformation (0x33f464,0x33fa64): stub fixme:win:EnumDisplayDevicesW ((null),0,0x33ed74,0x00000000), stub! 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], 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 'unroll loops' # 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 'transform IF' # 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 '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 '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 'dead sources' # 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 = 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0].xyz, TEMP[0], CONST[0] 2: MOV OUT[0].w, CONST[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 2: src0.w = const[0] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020100:Addr0: 0c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], CONST[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:win:EnumDisplayDevicesW ((null),0,0x33ec38,0x00000000), stub! 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], 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 'unroll loops' # 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 'transform IF' # 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 '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 '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 'dead sources' # 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 = 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0].xyz, TEMP[0], CONST[0] 2: MOV OUT[0].w, CONST[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 2: src0.w = const[0] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020100:Addr0: 0c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], CONST[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:win:EnumDisplayDevicesW ((null),0,0x33f118,0x00000000), stub! fixme:win:EnumDisplayDevicesW ((null),0,0x33f190,0x00000000), stub! 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], 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 'unroll loops' # 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 'transform IF' # 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 '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 '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 'dead sources' # 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 = 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0].xyz, TEMP[0], CONST[0] 2: MOV OUT[0].w, CONST[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 2: src0.w = const[0] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020100:Addr0: 0c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], CONST[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:win:EnumDisplayDevicesW ((null),0,0x33f054,0x00000000), stub! fixme:mixer:ALSA_MixerInit No master control found on HDA ATI HDMI, disabling mixer fixme:dsalsa:IDsDriverBufferImpl_SetVolumePan (0x13d970,0x13d870): stub fixme:dsalsa:IDsDriverBufferImpl_SetVolumePan (0x13d970,0x13d870): stub fixme:avrt:AvSetMmThreadCharacteristicsW (L"Pro Audio",0x33f86c): stub fixme:winsock:WSAIoctl WS_SIO_UDP_CONNRESET stub fixme:avrt:AvSetMmThreadCharacteristicsW (L"Pro Audio",0x33ef04): stub fixme:win:EnumDisplayDevicesW ((null),0,0x33f338,0x00000000), stub! 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], 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 'unroll loops' # 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 'transform IF' # 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 '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 '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 'dead sources' # 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 = 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0].xyz, TEMP[0], CONST[0] 2: MOV OUT[0].w, CONST[0] 3: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0].xyz, temp[0], const[0]; 2: MOV output[0].w, const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0].xyz, temp[0], const[0]; 2: MOV_SAT output[0].w, const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: MUL_SAT output[0].xyz, temp[0].xyz_, const[0].xyz_; 2: MOV_SAT output[0].w, const[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 2: src0.w = const[0] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0].xyz, input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = const[0], src1.xyz = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020100:Addr0: 0c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0] DCL TEMP[0] 0: TXP TEMP[0], IN[0], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], CONST[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL output[0], temp[0], const[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TXP temp[0], input[0], 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: MUL_SAT output[0], temp[0], const[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TXP temp[0], input[0].xy_w, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TXP temp[0], input[0].xy_w, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[0], src1.w = const[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02c00000: id: 0 op:PROJ, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08040000:Addr0: 0t, Addr1: 0c, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:win:EnumDisplayDevicesW ((null),0,0x33f1fc,0x00000000), stub! fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (5000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 5000 fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (5000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 5000 fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (5000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 5000 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! radeon: Acquired Hyper-Z. r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], 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 'unroll loops' # 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 'transform IF' # 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 '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 '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 'dead sources' # 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 = 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], 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], 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], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT 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_SAT 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_SAT 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_SAT 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..1] DCL TEMP[0..3] 0: TEX TEMP[0], IN[3], SAMP[1], 2D 1: MUL TEMP[1].xyz, TEMP[0], TEMP[0].wwww 2: TEX TEMP[0].xyz, IN[2], SAMP[0], 2D 3: MAD_SAT TEMP[2].xyz, TEMP[0], IN[0], TEMP[1] 4: MOV_SAT TEMP[2].w, IN[0] 5: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 6: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[1] 7: MOV OUT[0].w, TEMP[2] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0].xyz, input[2], 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: ADD temp[4].xyz, temp[2], -const[1]; 7: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[1]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0].xyz, input[2].xy__, 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: ADD temp[4].xyz, temp[2].xyz_, -const[1].xyz_; 7: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[1].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0].xyz, input[2].xy__, 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0].xyz, input[2].xy__, 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0].xyz, input[2].xy__, 2D[0]; 3: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 2: TEX temp[0].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[0], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 4: src0.w = input[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 7: src0.w = temp[2] MAD_SAT 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[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 3: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: BEGIN_TEX; 5: TEX temp[0].xyz, input[2].xy__, 2D[0]; 6: src0.xyz = temp[0], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 3: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: BEGIN_TEX; 5: TEX temp[0].xyz, input[2].xy__, 2D[0]; 6: src0.xyz = temp[0], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=6 chan 1: start=2 end=6 chan 2: start=2 end=6 chan 3: start=0 end=0 1 readers 2: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[3].1: chan 0: start=3 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 5: TEMP[0].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 6: TEMP[2].7: chan 0: start=6 end=7 chan 1: start=6 end=7 chan 2: start=6 end=7 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: src0.xyz = temp[2], src0.w = temp[2], src1.w = input[0] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[1].w, src1.w, src0.1, src0.0 3: src0.xyz = input[3], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[1].z, src0.__x, src1.__x, src1.__y MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: BEGIN_TEX; 5: TEX temp[3].xyz, input[1].xy__, 2D[0]; 6: src0.xyz = temp[3], src1.xyz = input[0], src2.xyz = temp[2] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 7: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.zzz, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000002:Addr0: 2t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00c0d010:MAD dest:1 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c2005:OUT TEX_WAIT wmask: B omask: A 1:RGB_ADDR 0x08040003:Addr0: 3t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00122090:rgb_A_src:0 0/0/R 0 rgb_B_src:1 0/0/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20191010:MAD dest:1 rgb_C_src:1 0/0/G 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f401: src: 1 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 4 0:CMN_INST 0x00083a04:ALU TEX_WAIT NOP wmask: RGB omask: NONE 1:RGB_ADDR 0x00200003:Addr0: 3t, Addr1: 0t, Addr2: 2t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 5 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044624a:rgb_A_src:2 B/B/B 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..2] 0: TEX TEMP[0].xyz, IN[2], SAMP[0], 2D 1: MUL_SAT TEMP[1].xyz, TEMP[0], IN[0] 2: MOV_SAT TEMP[1].w, IN[0] 3: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 4: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[1] 5: MOV OUT[0].w, TEMP[1] 6: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0], input[0]; 2: MOV_SAT temp[1].w, input[0]; 3: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 4: ADD temp[3].xyz, temp[1], -const[1]; 5: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[1]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0].xyz_, input[0].xyz_; 2: MOV_SAT temp[1].w, input[0].___w; 3: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 4: ADD temp[3].xyz, temp[1].xyz_, -const[1].xyz_; 5: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0].xyz_, input[0].xyz_; 2: MOV_SAT temp[1].w, input[0].___w; 3: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 4: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0].xyz_, input[0].xyz_; 2: MOV_SAT temp[1].w, input[0].___w; 3: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 4: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL_SAT temp[1].xyz, temp[0].xyz_, input[0].xyz_; 2: MOV_SAT temp[1].w, input[0].___w; 3: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 4: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 2: src0.w = input[0] MAD_SAT temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 5: src0.w = temp[1] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = input[0], src1.xyz = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = input[0], src1.xyz = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers 2: TEMP[1].7: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[2].1: chan 0: start=3 end=4 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = input[0], src1.xyz = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 3: src0.xyz = input[2], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c0a05:OUT TEX_WAIT NOP wmask: R omask: A 1:RGB_ADDR 0x08040002:Addr0: 2t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..2] 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL_SAT TEMP[1], TEMP[0], IN[0] 2: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 3: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[1] 4: MOV OUT[0].w, TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: ADD temp[3].xyz, temp[1], -const[1]; 4: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: ADD temp[3].xyz, temp[1].xyz_, -const[1].xyz_; 4: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 2: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 3: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 4: src0.w = temp[1] MAD_SAT 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[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[2].1: chan 0: start=3 end=4 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[2], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c0a05:OUT TEX_WAIT NOP wmask: R omask: A 1:RGB_ADDR 0x08040002:Addr0: 2t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..1] DCL TEMP[0..3] 0: TEX TEMP[0], IN[3], SAMP[1], 2D 1: TEX TEMP[1], IN[2], SAMP[0], 2D 2: MUL TEMP[0], IN[0], TEMP[0] 3: MUL_SAT TEMP[2], TEMP[0], TEMP[1] 4: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 5: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[1] 6: MOV OUT[0].w, TEMP[2] 7: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: TEX temp[1], input[2], 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: ADD temp[4].xyz, temp[2], -const[1]; 6: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: TEX temp[1], input[2].xy__, 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: ADD temp[4].xyz, temp[2].xyz_, -const[1].xyz_; 6: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: TEX temp[1], input[2].xy__, 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: TEX temp[1], input[2].xy__, 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: TEX temp[1], input[2].xy__, 2D[0]; 2: MUL temp[0], input[0], temp[0]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: TEX temp[1], input[2].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 6: src0.w = temp[2] MAD_SAT 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[3].xy__, 2D[1]; 2: TEX temp[1], input[2].xy__, 2D[0]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 5: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[3].xy__, 2D[1]; 2: TEX temp[1], input[2].xy__, 2D[0]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 5: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=1 end=3 2 readers 2: TEMP[1].15: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=2 end=4 2 readers 3: TEMP[0].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 1 readers 4: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=5 1 readers 5: TEMP[3].1: chan 0: start=5 end=6 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: TEX temp[1], input[1].xy__, 2D[0]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src1.w, src0.0 5: src0.xyz = input[3], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x001c0805:OUT TEX_WAIT wmask: R omask: A 1:RGB_ADDR 0x08040003:Addr0: 3t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 5 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub fixme:process:GetLogicalProcessorInformation (0x183e38c,0x183e98c): stub r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..1] DCL TEMP[0..3] 0: TEX TEMP[0].xyz, IN[3], SAMP[1], 2D 1: TEX TEMP[1].xyz, IN[2], SAMP[0], 2D 2: MUL TEMP[1].xyz, TEMP[1], TEMP[0] 3: MUL_SAT TEMP[2].xyz, TEMP[1], IN[0] 4: MOV_SAT TEMP[2].w, IN[0] 5: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 6: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[1] 7: MOV OUT[0].w, TEMP[2] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL_SAT temp[2].xyz, temp[1], input[0]; 4: MOV_SAT temp[2].w, input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: ADD temp[4].xyz, temp[2], -const[1]; 7: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[1]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL_SAT temp[2].xyz, temp[1].xyz_, input[0].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: ADD temp[4].xyz, temp[2].xyz_, -const[1].xyz_; 7: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[1].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL_SAT temp[2].xyz, temp[1].xyz_, input[0].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL_SAT temp[2].xyz, temp[1].xyz_, input[0].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL_SAT temp[2].xyz, temp[1].xyz_, input[0].xyz_; 4: MOV_SAT temp[2].w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 4: src0.w = input[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 7: src0.w = temp[2] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[3].xy__, 2D[1]; 2: TEX temp[1].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[3].xy__, 2D[1]; 2: TEX temp[1].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=0 end=0 1 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 1 readers 5: TEMP[3].1: chan 0: start=5 end=6 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].xyz, input[2].xy__, 2D[1]; 2: TEX temp[1].xyz, input[1].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[3], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x001c3805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040003:Addr0: 3t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[1..2] DCL TEMP[0..2] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL TEMP[0], IN[0], TEMP[0] 2: MUL_SAT TEMP[1].xyz, TEMP[0], IMM[0].xxxx 3: MOV_SAT TEMP[1].w, TEMP[0] 4: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 5: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[2] 6: MOV OUT[0].w, TEMP[1] 7: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, temp[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: ADD temp[3].xyz, temp[1], -const[2]; 6: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[2]; 7: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, temp[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: ADD temp[3].xyz, temp[1].xyz_, -const[2].xyz_; 6: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[2].xyz_; 7: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, temp[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, temp[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[0], input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, temp[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 2: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 3: src0.w = temp[0] MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 6: src0.w = temp[1] MAD_SAT 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[2].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[0].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 2: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[1].7: chan 0: start=3 end=5 chan 1: start=3 end=5 chan 2: start=3 end=5 chan 3: start=0 end=0 1 readers 3: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].1: chan 0: start=4 end=5 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 4: src0.xyz = input[2], src0.w = temp[0], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x001c0a05:OUT TEX_WAIT NOP wmask: R omask: A 1:RGB_ADDR 0x08040402:Addr0: 2t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL TEMP[1].xyz, TEMP[0], TEMP[0].wwww 2: TEX TEMP[2].xyz, IN[3], SAMP[1], 2D 3: MUL TEMP[2].xyz, TEMP[1], TEMP[2] 4: MUL TEMP[0].xyz, IN[0], TEMP[0] 5: MAD_SAT TEMP[3].xyz, TEMP[0], IMM[0].xxxx, TEMP[2] 6: MOV_SAT TEMP[3].w, IN[0] 7: MAD_SAT TEMP[4].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 8: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 9: MOV OUT[0].w, TEMP[3] 10: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 9: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[2].xyz, input[3], 2D[1]; 3: MUL temp[2].xyz, temp[1], temp[2]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MAD_SAT temp[3].xyz, temp[0], const[3].xxxx, temp[2]; 6: MOV_SAT temp[3].w, input[0]; 7: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: ADD temp[5].xyz, temp[3], -const[2]; 9: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 10: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: MUL temp[2].xyz, temp[1].xyz_, temp[2].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].xxx_, temp[2].xyz_; 6: MOV_SAT temp[3].w, input[0].___w; 7: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 8: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 9: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: MUL temp[2].xyz, temp[1].xyz_, temp[2].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].xxx_, temp[2].xyz_; 6: MOV_SAT temp[3].w, input[0].___w; 7: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: MUL temp[2].xyz, temp[1].xyz_, temp[2].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].xxx_, temp[2].xyz_; 6: MOV_SAT temp[3].w, input[0].___w; 7: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: MUL temp[2].xyz, temp[1].xyz_, temp[2].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].xxx_, temp[2].xyz_; 6: MOV_SAT temp[3].w, input[0].___w; 7: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[1], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 6: src0.w = input[0] MAD_SAT temp[3].w, src0.w, src0.1, src0.0 7: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 9: src0.w = temp[3] MAD_SAT 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[2].xy__, 2D[0]; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[3].w, src1.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 7: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: TEX temp[2].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[3].w, src1.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 7: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=5 chan 1: start=1 end=5 chan 2: start=1 end=5 chan 3: start=1 end=3 3 readers 2: TEMP[2].7: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 1 readers 5: TEMP[0].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 6: TEMP[3].7: chan 0: start=6 end=8 chan 1: start=6 end=8 chan 2: start=6 end=8 chan 3: start=0 end=0 1 readers 7: TEMP[4].1: chan 0: start=7 end=8 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2].xyz, input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.w = input[0] MAD temp[4].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 4: src0.xyz = temp[4], src0.w = temp[2], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[2] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 7: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00c0d020:MAD dest:2 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490040:MAD dest:4 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000804:Addr0: 4t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00083804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x00240c00:Addr0: 0t, Addr1: 3c, Addr2: 2t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 6 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 7 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[4], SAMP[1], 2D 1: MUL TEMP[1].xyz, TEMP[0], TEMP[0].wwww 2: TEX TEMP[0], IN[3], SAMP[0], 2D 3: MUL TEMP[0], IN[0], TEMP[0] 4: MUL TEMP[1].xyz, TEMP[1], IN[1].wwww 5: MAD_SAT TEMP[2].xyz, TEMP[0], IMM[0].xxxx, TEMP[1] 6: MOV_SAT TEMP[2].w, TEMP[0] 7: MAD_SAT TEMP[3].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 8: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 9: MOV OUT[0].w, TEMP[2] 10: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[4], 2D[1]; 1: MUL temp[1].xyz, temp[0], temp[0].wwww; 2: TEX temp[0], input[3], 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1], input[1].wwww; 5: MAD_SAT temp[2].xyz, temp[0], const[3].xxxx, temp[1]; 6: MOV_SAT temp[2].w, temp[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: ADD temp[4].xyz, temp[2], -const[2]; 9: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1].xyz_, input[1].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_, temp[1].xyz_; 6: MOV_SAT temp[2].w, temp[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 9: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1].xyz_, input[1].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_, temp[1].xyz_; 6: MOV_SAT temp[2].w, temp[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1].xyz_, input[1].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_, temp[1].xyz_; 6: MOV_SAT temp[2].w, temp[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[1]; 1: MUL temp[1].xyz, temp[0].xyz_, temp[0].www_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL temp[0], input[0], temp[0]; 4: MUL temp[1].xyz, temp[1].xyz_, input[1].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_, temp[1].xyz_; 6: MOV_SAT temp[2].w, temp[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[4].xy__, 2D[1]; 1: src0.xyz = temp[0], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 2: TEX temp[0], input[3].xy__, 2D[0]; 3: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = input[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 6: src0.w = temp[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 7: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 9: src0.w = temp[2] MAD_SAT 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[1]; 2: src0.xyz = temp[0], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 3: src0.xyz = temp[1], src0.w = input[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 4: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 5: BEGIN_TEX; 6: TEX temp[0], input[3].xy__, 2D[0]; 7: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 8: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT temp[2].w, src0.w, src0.1, src0.0 9: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[4].xy__, 2D[1]; 2: src0.xyz = temp[0], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 3: src0.xyz = temp[1], src0.w = input[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 4: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 5: BEGIN_TEX; 6: TEX temp[0], input[3].xy__, 2D[0]; 7: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 8: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT temp[2].w, src0.w, src0.1, src0.0 9: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=8 chan 1: start=3 end=8 chan 2: start=3 end=8 chan 3: start=0 end=0 1 readers 4: TEMP[3].1: chan 0: start=4 end=9 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 6: TEMP[0].15: chan 0: start=6 end=7 chan 1: start=6 end=7 chan 2: start=6 end=7 chan 3: start=6 end=7 2 readers 7: TEMP[0].7: chan 0: start=7 end=8 chan 1: start=7 end=8 chan 2: start=7 end=8 chan 3: start=0 end=0 1 readers 7: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=7 end=8 1 readers 8: TEMP[2].7: chan 0: start=8 end=9 chan 1: start=8 end=9 chan 2: start=8 end=9 chan 3: start=0 end=0 1 readers 8: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=8 end=9 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[3], input[3].xy__, 2D[1]; 2: src0.xyz = temp[3], src0.w = temp[3] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 3: src0.xyz = temp[1], src0.w = input[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 4: src0.xyz = input[4], src1.xyz = const[1] MAD_SAT temp[2].z, src0.__x, src1.__x, src1.__y 5: BEGIN_TEX; 6: TEX temp[3], input[2].xy__, 2D[0]; 7: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[3], src1.w = temp[3] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 8: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src2.xyz MAD_SAT temp[0].w, src0.w, src0.1, src0.0 9: src0.xyz = const[2], src0.w = temp[0], src1.xyz = temp[0], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.zzz, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f403: src: 3 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020003:Addr0: 3t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020003:Addr0: 3t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 2 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 3 0:CMN_INST 0x00082004:ALU TEX_WAIT wmask: B omask: NONE 1:RGB_ADDR 0x08040404:Addr0: 4t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00122090:rgb_A_src:0 0/0/R 0 rgb_B_src:1 0/0/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00191020:MAD dest:2 rgb_C_src:1 0/0/G 0 alp_C_src:0 R 0 4 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f402: src: 2 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 5 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000c00:Addr0: 0t, Addr1: 3t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000c00:Addr0: 0t, Addr1: 3t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 6 0:CMN_INST 0x00187a04:ALU TEX_WAIT NOP wmask: ARGB omask: NONE 1:RGB_ADDR 0x00140c00:Addr0: 0t, Addr1: 3c, Addr2: 1t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 0 0 7 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x40200102:Addr0: 2c, Addr1: 0t, Addr2: 2t, srcp:1 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044624a:rgb_A_src:2 B/B/B 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[3], SAMP[0], 2D 1: TEX TEMP[1], IN[4], SAMP[1], 2D 2: ADD TEMP[1].xyz, TEMP[1], -TEMP[0] 3: MUL TEMP[1].xyz, TEMP[1].wwww, TEMP[1] 4: ADD TEMP[0].xyz, TEMP[1], TEMP[0] 5: MAD TEMP[0].xyz, IN[1].wwww, -TEMP[1], TEMP[0] 6: MUL TEMP[0].xyz, IN[0], TEMP[0] 7: MUL_SAT TEMP[2].xyz, TEMP[0], IMM[0].xxxx 8: MUL_SAT TEMP[2].w, IN[0], TEMP[0] 9: MAD_SAT TEMP[3].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 10: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 11: MOV OUT[0].w, TEMP[2] 12: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 11: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MUL temp[1].xyz, temp[1].wwww, temp[1]; 4: ADD temp[0].xyz, temp[1], temp[0]; 5: MAD temp[0].xyz, input[1].wwww, -temp[1], temp[0]; 6: MUL temp[0].xyz, input[0], temp[0]; 7: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 8: MUL_SAT temp[2].w, input[0], temp[0]; 9: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 10: ADD temp[4].xyz, temp[2], -const[2]; 11: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 12: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].www_, temp[1].xyz_; 4: ADD temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 5: MAD temp[0].xyz, input[1].www_, -temp[1].xyz_, temp[0].xyz_; 6: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 7: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 8: MUL_SAT temp[2].w, input[0].___w, temp[0].___w; 9: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 10: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 11: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 12: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].www_, temp[1].xyz_; 4: ADD temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 5: MAD temp[0].xyz, input[1].www_, -temp[1].xyz_, temp[0].xyz_; 6: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 7: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 8: MUL_SAT temp[2].w, input[0].___w, temp[0].___w; 9: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].www_, temp[1].xyz_; 4: ADD temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 5: MAD temp[0].xyz, input[1].www_, -temp[1].xyz_, temp[0].xyz_; 6: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 7: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 8: MUL_SAT temp[2].w, input[0].___w, temp[0].___w; 9: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].www_, temp[1].xyz_; 4: ADD temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 5: MAD temp[0].xyz, input[1].www_, -temp[1].xyz_, temp[0].xyz_; 6: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 7: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 8: MUL_SAT temp[2].w, input[0].___w, temp[0].___w; 9: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz 3: src0.xyz = temp[1], src0.w = temp[1] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 4: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 5: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.www, -src0.xyz, src1.xyz 6: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 7: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 8: src0.w = input[0], src1.w = temp[0] MAD_SAT temp[2].w, src0.w, src1.w, src0.0 9: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 10: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 11: src0.w = temp[2] MAD_SAT 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[3].xy__, 2D[0]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[2] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 6: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.www, -src0.xyz, src1.xyz 7: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 10: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[3].xy__, 2D[0]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[2] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, src1.xyz 6: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.www, -src0.xyz, src1.xyz 7: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 10: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=5 chan 1: start=1 end=5 chan 2: start=1 end=5 chan 3: start=1 end=3 3 readers 2: TEMP[1].15: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=2 end=4 2 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[1].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 2 readers 5: TEMP[0].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 6: TEMP[0].7: chan 0: start=6 end=7 chan 1: start=6 end=7 chan 2: start=6 end=7 chan 3: start=0 end=0 1 readers 7: TEMP[0].7: chan 0: start=7 end=8 chan 1: start=7 end=8 chan 2: start=7 end=8 chan 3: start=0 end=0 1 readers 8: TEMP[2].7: chan 0: start=8 end=10 chan 1: start=8 end=10 chan 2: start=8 end=10 chan 3: start=0 end=0 1 readers 9: TEMP[3].1: chan 0: start=9 end=10 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[0]; 2: TEX temp[3], input[3].xy__, 2D[1]; 3: src0.xyz = temp[3], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[4].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.w = temp[4] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, src1.xyz 6: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[2] MAD temp[1].xyz, src0.www, -src0.xyz, src1.xyz 7: src0.xyz = input[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 9: src0.xyz = input[4], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 10: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f403: src: 3 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000803:Addr0: 3t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x0068c040:MAD dest:4 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20a21010:MAD dest:1 rgb_C_src:1 R/G/B 1 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08001003:Addr0: 3t, Addr1: 4t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0d000:MAD dest:0 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00221020:MAD dest:2 rgb_C_src:1 R/G/B 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0144036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 1 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00221010:MAD dest:1 rgb_C_src:1 R/G/B 0 alp_C_src:0 R 0 6 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 7 0:CMN_INST 0x00083804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 8 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040404:Addr0: 4t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 9 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[1..2] DCL TEMP[0..2] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0].xyz, IN[2], SAMP[0], 2D 1: MUL TEMP[0].xyz, IN[0], TEMP[0] 2: MUL_SAT TEMP[1].xyz, TEMP[0], IMM[0].xxxx 3: MOV_SAT TEMP[1].w, IN[0] 4: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 5: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[2] 6: MOV OUT[0].w, TEMP[1] 7: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[2]; 6: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: MUL temp[0].xyz, input[0], temp[0]; 2: MUL_SAT temp[1].xyz, temp[0], const[3].xxxx; 3: MOV_SAT temp[1].w, input[0]; 4: MAD_SAT temp[2].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 5: ADD temp[3].xyz, temp[1], -const[2]; 6: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[2]; 7: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, input[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: ADD temp[3].xyz, temp[1].xyz_, -const[2].xyz_; 6: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[2].xyz_; 7: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, input[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, input[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 2: MUL_SAT temp[1].xyz, temp[0].xyz_, const[3].xxx_; 3: MOV_SAT temp[1].w, input[0].___w; 4: MAD_SAT temp[2].x, input[1].x___, const[1].x___, const[1].y___; 5: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[2]).xyz_, const[2].xyz_; 6: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 2: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 3: src0.w = input[0] MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 6: src0.w = temp[1] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = const[3] MAD_SAT temp[1].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[2], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=0 end=0 1 readers 2: TEMP[0].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[1].7: chan 0: start=3 end=5 chan 1: start=3 end=5 chan 2: start=3 end=5 chan 3: start=0 end=0 1 readers 4: TEMP[2].1: chan 0: start=4 end=5 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c3805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00080a04:ALU TEX_WAIT NOP wmask: R omask: NONE 1:RGB_ADDR 0x08040402:Addr0: 2t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 4 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0].xyz, IN[4], SAMP[1], 2D 1: TEX TEMP[1].xyz, IN[3], SAMP[0], 2D 2: ADD TEMP[1].xyz, TEMP[1], -TEMP[0] 3: MAD TEMP[0].xyz, IN[1].wwww, TEMP[1], TEMP[0] 4: MUL TEMP[0].xyz, IN[0], TEMP[0] 5: MUL_SAT TEMP[2].xyz, TEMP[0], IMM[0].xxxx 6: MOV_SAT TEMP[2].w, IN[0] 7: MAD_SAT TEMP[3].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 8: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 9: MOV OUT[0].w, TEMP[2] 10: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4], 2D[1]; 1: TEX temp[1].xyz, input[3], 2D[0]; 2: ADD temp[1].xyz, temp[1], -temp[0]; 3: MAD temp[0].xyz, input[1].wwww, temp[1], temp[0]; 4: MUL temp[0].xyz, input[0], temp[0]; 5: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 8: ADD temp[4].xyz, temp[2], -const[2]; 9: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[1]; 1: TEX temp[1].xyz, input[3].xy__, 2D[0]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MAD temp[0].xyz, input[1].www_, temp[1].xyz_, temp[0].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 9: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[1]; 1: TEX temp[1].xyz, input[3].xy__, 2D[0]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MAD temp[0].xyz, input[1].www_, temp[1].xyz_, temp[0].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[1]; 1: TEX temp[1].xyz, input[3].xy__, 2D[0]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MAD temp[0].xyz, input[1].www_, temp[1].xyz_, temp[0].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[1]; 1: TEX temp[1].xyz, input[3].xy__, 2D[0]; 2: ADD temp[1].xyz, temp[1].xyz_, -temp[0].xyz_; 3: MAD temp[0].xyz, input[1].www_, temp[1].xyz_, temp[0].xyz_; 4: MUL temp[0].xyz, input[0].xyz_, temp[0].xyz_; 5: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[4].xy__, 2D[1]; 1: TEX temp[1].xyz, input[3].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz 3: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 4: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 5: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 6: src0.w = input[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 7: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 9: src0.w = temp[2] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[4].xy__, 2D[1]; 2: TEX temp[1].xyz, input[3].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0], src1.w = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[4].xy__, 2D[1]; 2: TEX temp[1].xyz, input[3].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = input[1], src1.xyz = temp[0], src1.w = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=4 chan 1: start=1 end=4 chan 2: start=1 end=4 chan 3: start=0 end=0 2 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[0].7: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=0 end=0 1 readers 5: TEMP[0].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 6: TEMP[2].7: chan 0: start=6 end=8 chan 1: start=6 end=8 chan 2: start=6 end=8 chan 3: start=0 end=0 1 readers 7: TEMP[3].1: chan 0: start=7 end=8 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: TEX temp[2].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[2], src0.w = input[0], src1.xyz = temp[1] MAD temp[2].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[2], src0.w = input[1], src1.xyz = temp[1], src1.w = temp[2] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 6: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = input[4], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f403: src: 3 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000402:Addr0: 2t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c020:MAD dest:2 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20a21020:MAD dest:2 rgb_C_src:1 R/G/B 1 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000402:Addr0: 2t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0d000:MAD dest:0 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20221010:MAD dest:1 rgb_C_src:1 R/G/B 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00083804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 6 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040404:Addr0: 4t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 7 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 2.0000, 1.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[3], SAMP[0], 2D 1: TEX TEMP[1], IN[4], SAMP[1], 2D 2: ADD TEMP[0].xyz, TEMP[0], -TEMP[1] 3: MAD TEMP[1].xyz, IN[1].wwww, TEMP[0], TEMP[1] 4: ADD TEMP[2].x, -IN[1].wwww, IMM[0].yyyy 5: MUL TEMP[1].w, TEMP[1], TEMP[2].xxxx 6: MUL TEMP[0].xyz, IN[1], TEMP[1].wwww 7: MUL TEMP[1].xyz, IN[0], TEMP[1] 8: MAD_SAT TEMP[3].xyz, TEMP[1], IMM[0].xxxx, TEMP[0] 9: MUL_SAT TEMP[3].w, IN[0], TEMP[0] 10: MAD_SAT TEMP[4].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 11: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 12: MOV OUT[0].w, TEMP[3] 13: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 12: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[0]; 1: TEX temp[1], input[4], 2D[1]; 2: ADD temp[0].xyz, temp[0], -temp[1]; 3: MAD temp[1].xyz, input[1].wwww, temp[0], temp[1]; 4: ADD temp[2].x, -input[1].wwww, const[3].yyyy; 5: MUL temp[1].w, temp[1], temp[2].xxxx; 6: MUL temp[0].xyz, input[1], temp[1].wwww; 7: MUL temp[1].xyz, input[0], temp[1]; 8: MAD_SAT temp[3].xyz, temp[1], const[3].xxxx, temp[0]; 9: MUL_SAT temp[3].w, input[0], temp[0]; 10: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 11: ADD temp[5].xyz, temp[3], -const[2]; 12: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 13: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[0].xyz, temp[0].xyz_, -temp[1].xyz_; 3: MAD temp[1].xyz, input[1].www_, temp[0].xyz_, temp[1].xyz_; 4: ADD temp[2].x, -input[1].w___, const[3].y___; 5: MUL temp[1].w, temp[1].___w, temp[2].___x; 6: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 7: MUL temp[1].xyz, input[0].xyz_, temp[1].xyz_; 8: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 9: MUL_SAT temp[3].w, input[0].___w, temp[0].___w; 10: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 11: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 12: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 13: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[0].xyz, temp[0].xyz_, -temp[1].xyz_; 3: MAD temp[1].xyz, input[1].www_, temp[0].xyz_, temp[1].xyz_; 4: ADD temp[2].x, -input[1].w___, none.1___; 5: MUL temp[1].w, temp[1].___w, temp[2].___x; 6: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 7: MUL temp[1].xyz, input[0].xyz_, temp[1].xyz_; 8: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 9: MUL_SAT temp[3].w, input[0].___w, temp[0].___w; 10: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 11: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 12: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[0].xyz, temp[0].xyz_, -temp[1].xyz_; 3: MAD temp[1].xyz, input[1].www_, temp[0].xyz_, temp[1].xyz_; 4: ADD temp[2].x, -input[1].w___, none.1___; 5: MUL temp[1].w, temp[1].___w, temp[2].___x; 6: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 7: MUL temp[1].xyz, input[0].xyz_, temp[1].xyz_; 8: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 9: MUL_SAT temp[3].w, input[0].___w, temp[0].___w; 10: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 11: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 12: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 2.0000 1.0000 0.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: ADD temp[0].xyz, temp[0].xyz_, -temp[1].xyz_; 3: MAD temp[1].xyz, input[1].www_, temp[0].xyz_, temp[1].xyz_; 4: ADD temp[2].x, -input[1].w___, none.1___; 5: MUL temp[1].w, temp[1].___w, temp[2].___x; 6: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 7: MUL temp[1].xyz, input[0].xyz_, temp[1].xyz_; 8: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 9: MUL_SAT temp[3].w, input[0].___w, temp[0].___w; 10: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 11: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 12: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[0]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src0.111, -src1.xyz 3: src0.xyz = temp[0], src0.w = input[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz 4: src0.w = input[1] MAD temp[2].x, -src0.w__, src0.111, src0.1__ 5: src0.xyz = temp[2], src0.w = temp[1] MAD temp[1].w, src0.w, src0.x, src0.0 6: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = input[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.w = input[0], src1.w = temp[0] MAD_SAT temp[3].w, src0.w, src1.w, src0.0 10: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 11: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 12: src0.w = temp[3] MAD_SAT 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[3].xy__, 2D[0]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[3].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = input[1], src1.xyz = temp[1], src1.w = temp[3] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src0.w = input[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, -src0.w, src0.1, src0.1 6: src0.xyz = input[2], src0.w = temp[1], src1.xyz = const[1], src1.w = temp[2] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ MAD temp[1].w, src0.w, src1.w, src0.0 7: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[3].xy__, 2D[0]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[3].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = input[1], src1.xyz = temp[1], src1.w = temp[3] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src0.w = input[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[2].w, -src0.w, src0.1, src0.1 6: src0.xyz = input[2], src0.w = temp[1], src1.xyz = const[1], src1.w = temp[2] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ MAD temp[1].w, src0.w, src1.w, src0.0 7: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=1 end=3 2 readers 2: TEMP[1].15: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=2 end=6 3 readers 3: TEMP[0].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[1].7: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=0 end=0 1 readers 5: TEMP[1].7: chan 0: start=5 end=8 chan 1: start=5 end=8 chan 2: start=5 end=8 chan 3: start=0 end=0 1 readers 5: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=5 end=6 1 readers 6: TEMP[4].1: chan 0: start=6 end=9 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 6: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=6 end=7 1 readers 7: TEMP[0].7: chan 0: start=7 end=8 chan 1: start=7 end=8 chan 2: start=7 end=8 chan 3: start=0 end=0 1 readers 8: TEMP[3].7: chan 0: start=8 end=9 chan 1: start=8 end=9 chan 2: start=8 end=9 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[0]; 2: TEX temp[3], input[3].xy__, 2D[1]; 3: src0.xyz = temp[2], src0.w = input[0], src1.xyz = temp[3], src1.w = temp[2] MAD temp[2].xyz, src0.xyz, src0.111, -src1.xyz MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[2], src0.w = input[1], src1.xyz = temp[3], src1.w = temp[2] MAD temp[2].xyz, src0.www, src0.xyz, src1.xyz MAD_SAT color[0].w, src1.w, src0.1, src0.0 5: src0.xyz = input[0], src0.w = input[1], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, -src0.w, src0.1, src0.1 6: src0.xyz = input[4], src0.w = temp[3], src1.xyz = const[1], src1.w = temp[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD temp[0].w, src0.w, src1.w, src0.0 7: src0.xyz = input[1], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 8: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f403: src: 3 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000c02:Addr0: 2t, Addr1: 3t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x0068c020:MAD dest:2 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20a21020:MAD dest:2 rgb_C_src:1 R/G/B 1 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000c02:Addr0: 2t, Addr1: 3t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0d000:MAD dest:0 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20221020:MAD dest:2 rgb_C_src:1 R/G/B 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c2c000:MAD dest:0 alp_A_src:0 A 1 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x30490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 1 0 5 0:CMN_INST 0x00084804:ALU TEX_WAIT wmask: AR omask: NONE 1:RGB_ADDR 0x08040404:Addr0: 4t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000003:Addr0: 3t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20485020:MAD dest:2 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 6 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 7 0:CMN_INST 0x00083a04:ALU TEX_WAIT NOP wmask: RGB omask: NONE 1:RGB_ADDR 0x00140c00:Addr0: 0t, Addr1: 3c, Addr2: 1t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 8 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40200102:Addr0: 2c, Addr1: 0t, Addr2: 2t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: TEX TEMP[1], IN[3], SAMP[1], 2D 2: ADD TEMP[0].w, -TEMP[0], IMM[0].xxxx 3: MUL TEMP[1].xyz, TEMP[1], TEMP[1].wwww 4: MUL TEMP[1].xyz, TEMP[1], TEMP[0].wwww 5: MAD_SAT TEMP[2].xyz, TEMP[0], IN[0], TEMP[1] 6: MOV_SAT TEMP[2].w, IN[0] 7: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 8: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 9: MOV OUT[0].w, TEMP[2] 10: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: ADD temp[0].w, -temp[0], temp[0].1111; 3: MUL temp[1].xyz, temp[1], temp[1].wwww; 4: MUL temp[1].xyz, temp[1], temp[0].wwww; 5: MAD_SAT temp[2].xyz, temp[0], input[0], temp[1]; 6: MOV_SAT temp[2].w, input[0]; 7: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 8: ADD temp[4].xyz, temp[2], -const[2]; 9: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: ADD temp[0].w, -temp[0].___w, temp[0].___1; 3: MUL temp[1].xyz, temp[1].xyz_, temp[1].www_; 4: MUL temp[1].xyz, temp[1].xyz_, temp[0].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 8: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 9: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: ADD temp[0].w, -temp[0].___w, none.___1; 3: MUL temp[1].xyz, temp[1].xyz_, temp[1].www_; 4: MUL temp[1].xyz, temp[1].xyz_, temp[0].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: ADD temp[0].w, -temp[0].___w, none.___1; 3: MUL temp[1].xyz, temp[1].xyz_, temp[1].www_; 4: MUL temp[1].xyz, temp[1].xyz_, temp[0].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: ADD temp[0].w, -temp[0].___w, none.___1; 3: MUL temp[1].xyz, temp[1].xyz_, temp[1].www_; 4: MUL temp[1].xyz, temp[1].xyz_, temp[0].www_; 5: MAD_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_, temp[1].xyz_; 6: MOV_SAT temp[2].w, input[0].___w; 7: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 8: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: src0.w = temp[0] MAD temp[0].w, -src0.w, src0.1, src0.1 3: src0.xyz = temp[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 4: src0.xyz = temp[1], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 5: src0.xyz = temp[0], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz 6: src0.w = input[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 7: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 8: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 9: src0.w = temp[2] MAD_SAT 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[2].xy__, 2D[0]; 2: TEX temp[1], input[3].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD temp[0].w, -src1.w, src0.1, src0.1 4: src0.xyz = temp[1], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: TEX temp[1], input[3].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD temp[0].w, -src1.w, src0.1, src0.1 4: src0.xyz = temp[1], src0.w = temp[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = input[0], src2.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=5 chan 1: start=1 end=5 chan 2: start=1 end=5 chan 3: start=1 end=3 2 readers 2: TEMP[1].15: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=2 end=3 2 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[1].7: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=0 end=0 1 readers 4: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=5 1 readers 5: TEMP[2].7: chan 0: start=5 end=7 chan 1: start=5 end=7 chan 2: start=5 end=7 chan 3: start=0 end=0 1 readers 6: TEMP[3].1: chan 0: start=6 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2], input[2].xy__, 2D[1]; 3: src0.xyz = temp[2], src0.w = temp[2], src1.w = temp[1] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 MAD temp[2].w, -src1.w, src0.1, src0.1 4: src0.xyz = temp[2], src0.w = temp[2], src1.w = input[0] MAD temp[2].xyz, src0.xyz, src0.www, src0.000 MAD_SAT temp[2].w, src1.w, src0.1, src0.0 5: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0], src2.xyz = temp[2] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000402:Addr0: 2t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00c2d020:MAD dest:2 alp_A_src:1 A 1 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x30490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 1 0 3 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000002:Addr0: 2t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00c0d020:MAD dest:2 alp_A_src:1 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x001c3805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x00200001:Addr0: 1t, Addr1: 0t, Addr2: 2t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 0 0 5 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 6 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[2], PERSPECTIVE DCL IN[6], GENERIC[4], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[4] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 1.0000, 0.7000, 0.3000, 2.0000} 0: TEX TEMP[0], IN[6], SAMP[4], 2D 1: TEX TEMP[1], IN[4], SAMP[1], 2D 2: MUL TEMP[2].w, TEMP[0].xxxx, TEMP[1] 3: MUL TEMP[2].xyz, TEMP[0].xxxx, TEMP[1] 4: DP3_SAT TEMP[0].x, TEMP[0], IMM[0].xxxx 5: TEX TEMP[1], IN[3], SAMP[0], 2D 6: ADD TEMP[0].x, -TEMP[0], IMM[0] 7: MAD TEMP[2].xyz, TEMP[1], TEMP[0].xxxx, TEMP[2] 8: MAD TEMP[0].x, TEMP[1].wwww, TEMP[0], TEMP[2].wwww 9: TEX TEMP[1], IN[5], SAMP[2], 2D 10: MAD TEMP[1].w, TEMP[0].yyyy, TEMP[1], TEMP[0].xxxx 11: MAD TEMP[1].xyz, TEMP[0].yyyy, TEMP[1], TEMP[2] 12: MUL TEMP[0].xyz, IN[1], TEMP[1].wwww 13: MUL TEMP[2].xyz, TEMP[0].wwww, TEMP[0] 14: MAD TEMP[1].w, TEMP[0], IMM[0].zzzz, IMM[0].yyyy 15: MUL TEMP[0].xyz, TEMP[1].wwww, IN[0] 16: MUL TEMP[1].xyz, TEMP[0], TEMP[1] 17: MAD_SAT TEMP[3].xyz, TEMP[1], IMM[0].wwww, TEMP[2] 18: MOV_SAT TEMP[3].w, IMM[0].xxxx 19: MAD_SAT TEMP[4].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 20: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 21: MOV OUT[0].w, TEMP[3] 22: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 21: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[6], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[1].w, temp[0].yyyy, temp[1], temp[0].xxxx; 11: MAD temp[1].xyz, temp[0].yyyy, temp[1], temp[2]; 12: MUL temp[0].xyz, input[1], temp[1].wwww; 13: MUL temp[2].xyz, temp[0].wwww, temp[0]; 14: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 15: MUL temp[0].xyz, temp[1].wwww, input[0]; 16: MUL temp[1].xyz, temp[0], temp[1]; 17: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 18: MOV_SAT temp[3].w, const[3].xxxx; 19: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 20: ADD temp[5].xyz, temp[3], -const[2]; 21: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 22: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, const[3].xxx_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, const[3].x___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[1].w, temp[0].___y, temp[1].___w, temp[0].___x; 11: MAD temp[1].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 12: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 13: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 14: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 15: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 16: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 17: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 18: MOV_SAT temp[3].w, const[3].___x; 19: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 20: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 21: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 22: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[1].w, temp[0].___y, temp[1].___w, temp[0].___x; 11: MAD temp[1].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 12: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 13: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 14: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 15: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 16: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 17: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 18: MOV_SAT temp[3].w, none.___1; 19: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 20: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 21: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[1].w, temp[0].___y, temp[1].___w, temp[0].___x; 11: MAD temp[1].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 12: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 13: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 14: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 15: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 16: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 17: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 18: MOV_SAT temp[3].w, none.___1; 19: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 20: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 21: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 1.0000 0.7000 0.3000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[1].w, temp[0].___y, temp[1].___w, temp[0].___x; 11: MAD temp[1].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 12: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 13: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 14: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 15: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 16: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 17: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 18: MOV_SAT temp[3].w, none.___1; 19: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 20: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 21: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[6].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: src0.xyz = temp[0], src0.w = temp[1] MAD temp[2].w, src0.x, src0.w, src0.0 3: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 5: TEX temp[1], input[3].xy__, 2D[0]; 6: src0.xyz = temp[0] MAD temp[0].x, -src0.x__, src0.111, src0.1__ 7: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 8: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 9: TEX temp[1], input[5].xy__, 2D[2]; 10: src0.xyz = temp[0], src0.w = temp[1] MAD temp[1].w, src0.y, src0.w, src0.x 11: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz 12: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 13: src0.xyz = temp[0], src0.w = temp[0] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 14: src0.xyz = const[3], src0.w = temp[0] MAD temp[1].w, src0.w, src0.z, src0.y 15: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 16: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 17: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 18: MAD_SAT temp[3].w, src0.1, src0.1, src0.0 19: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 20: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 21: src0.w = temp[3] MAD_SAT 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[6].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[2].w, src0.x, src0.w, src0.0 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 7: BEGIN_TEX; 8: TEX temp[1], input[3].xy__, 2D[0]; 9: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 10: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 11: BEGIN_TEX; 12: TEX temp[1], input[5].xy__, 2D[2]; 13: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz MAD temp[1].w, src0.y, src0.w, src0.x 14: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 15: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 16: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 17: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 18: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 19: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[6].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[2].w, src0.x, src0.w, src0.0 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 7: BEGIN_TEX; 8: TEX temp[1], input[3].xy__, 2D[0]; 9: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 10: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 11: BEGIN_TEX; 12: TEX temp[1], input[5].xy__, 2D[2]; 13: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.yyy, src1.xyz, src2.xyz MAD temp[1].w, src0.y, src0.w, src0.x 14: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 15: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 16: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 17: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 18: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 19: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=4 chan 1: start=1 end=13 chan 2: start=1 end=4 chan 3: start=1 end=15 7 readers 2: TEMP[1].15: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=2 end=3 2 readers 3: TEMP[2].7: chan 0: start=3 end=9 chan 1: start=3 end=9 chan 2: start=3 end=9 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=10 1 readers 4: TEMP[0].1: chan 0: start=4 end=5 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 4: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=5 1 readers 5: TEMP[0].1: chan 0: start=5 end=10 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 2 readers 6: TEMP[4].1: chan 0: start=6 end=19 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 8: TEMP[1].15: chan 0: start=8 end=9 chan 1: start=8 end=9 chan 2: start=8 end=9 chan 3: start=8 end=10 2 readers 9: TEMP[2].7: chan 0: start=9 end=13 chan 1: start=9 end=13 chan 2: start=9 end=13 chan 3: start=0 end=0 1 readers 10: TEMP[0].1: chan 0: start=10 end=13 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 12: TEMP[1].15: chan 0: start=12 end=13 chan 1: start=12 end=13 chan 2: start=12 end=13 chan 3: start=12 end=13 2 readers 13: TEMP[1].7: chan 0: start=13 end=17 chan 1: start=13 end=17 chan 2: start=13 end=17 chan 3: start=0 end=0 1 readers 13: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=13 end=14 1 readers 14: TEMP[0].7: chan 0: start=14 end=15 chan 1: start=14 end=15 chan 2: start=14 end=15 chan 3: start=0 end=0 1 readers 15: TEMP[2].7: chan 0: start=15 end=18 chan 1: start=15 end=18 chan 2: start=15 end=18 chan 3: start=0 end=0 1 readers 15: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=15 end=16 1 readers 16: TEMP[0].7: chan 0: start=16 end=17 chan 1: start=16 end=17 chan 2: start=16 end=17 chan 3: start=0 end=0 1 readers 17: TEMP[1].7: chan 0: start=17 end=18 chan 1: start=17 end=18 chan 2: start=17 end=18 chan 3: start=0 end=0 1 readers 18: TEMP[3].7: chan 0: start=18 end=19 chan 1: start=18 end=19 chan 2: start=18 end=19 chan 3: start=0 end=0 1 readers r300compiler error: Rewrite of inst 10 failed Can't allocate source for Inst 13 src_type=1 new_index=2 new_mask=1 r300 FP: Compiler Error: Rewrite of inst 10 failed Can't allocate source for Inst 13 src_type=1 new_index=2 new_mask=1 Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0490:rgb_A_src:0 0/0/0 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c18000:MAD dest:0 alp_A_src:0 1 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[2], PERSPECTIVE DCL IN[6], GENERIC[3], PERSPECTIVE DCL IN[7], GENERIC[4], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL SAMP[3] DCL SAMP[4] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 1.0000, 0.7000, 0.3000, 2.0000} 0: TEX TEMP[0], IN[7], SAMP[4], 2D 1: TEX TEMP[1], IN[4], SAMP[1], 2D 2: MUL TEMP[2].w, TEMP[0].xxxx, TEMP[1] 3: MUL TEMP[2].xyz, TEMP[0].xxxx, TEMP[1] 4: DP3_SAT TEMP[0].x, TEMP[0], IMM[0].xxxx 5: TEX TEMP[1], IN[3], SAMP[0], 2D 6: ADD TEMP[0].x, -TEMP[0], IMM[0] 7: MAD TEMP[2].xyz, TEMP[1], TEMP[0].xxxx, TEMP[2] 8: MAD TEMP[0].x, TEMP[1].wwww, TEMP[0], TEMP[2].wwww 9: TEX TEMP[1], IN[5], SAMP[2], 2D 10: MAD TEMP[2].xyz, TEMP[0].yyyy, TEMP[1], TEMP[2] 11: MAD TEMP[0].x, TEMP[0].yyyy, TEMP[1].wwww, TEMP[0] 12: TEX TEMP[1], IN[6], SAMP[3], 2D 13: MAD TEMP[1].w, TEMP[0].zzzz, TEMP[1], TEMP[0].xxxx 14: MAD TEMP[1].xyz, TEMP[0].zzzz, TEMP[1], TEMP[2] 15: MUL TEMP[0].xyz, IN[1], TEMP[1].wwww 16: MUL TEMP[2].xyz, TEMP[0].wwww, TEMP[0] 17: MAD TEMP[1].w, TEMP[0], IMM[0].zzzz, IMM[0].yyyy 18: MUL TEMP[0].xyz, TEMP[1].wwww, IN[0] 19: MUL TEMP[1].xyz, TEMP[0], TEMP[1] 20: MAD_SAT TEMP[3].xyz, TEMP[1], IMM[0].wwww, TEMP[2] 21: MOV_SAT TEMP[3].w, IMM[0].xxxx 22: MAD_SAT TEMP[4].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 23: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 24: MOV OUT[0].w, TEMP[3] 25: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 24: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[7], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[2].w, temp[0].xxxx, temp[1]; 3: MUL temp[2].xyz, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[1], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[2].xyz, temp[1], temp[0].xxxx, temp[2]; 8: MAD temp[0].x, temp[1].wwww, temp[0], temp[2].wwww; 9: TEX temp[1], input[5], 2D[2]; 10: MAD temp[2].xyz, temp[0].yyyy, temp[1], temp[2]; 11: MAD temp[0].x, temp[0].yyyy, temp[1].wwww, temp[0]; 12: TEX temp[1], input[6], 2D[3]; 13: MAD temp[1].w, temp[0].zzzz, temp[1], temp[0].xxxx; 14: MAD temp[1].xyz, temp[0].zzzz, temp[1], temp[2]; 15: MUL temp[0].xyz, input[1], temp[1].wwww; 16: MUL temp[2].xyz, temp[0].wwww, temp[0]; 17: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 18: MUL temp[0].xyz, temp[1].wwww, input[0]; 19: MUL temp[1].xyz, temp[0], temp[1]; 20: MAD_SAT temp[3].xyz, temp[1], const[3].wwww, temp[2]; 21: MOV_SAT temp[3].w, const[3].xxxx; 22: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 23: ADD temp[5].xyz, temp[3], -const[2]; 24: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 25: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[7].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, const[3].xxx_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, const[3].x___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[2].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 11: MAD temp[0].x, temp[0].y___, temp[1].w___, temp[0].x___; 12: TEX temp[1], input[6].xy__, 2D[3]; 13: MAD temp[1].w, temp[0].___z, temp[1].___w, temp[0].___x; 14: MAD temp[1].xyz, temp[0].zzz_, temp[1].xyz_, temp[2].xyz_; 15: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 16: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 17: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 18: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 19: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 20: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 21: MOV_SAT temp[3].w, const[3].___x; 22: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 23: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 24: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 25: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[7].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[2].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 11: MAD temp[0].x, temp[0].y___, temp[1].w___, temp[0].x___; 12: TEX temp[1], input[6].xy__, 2D[3]; 13: MAD temp[1].w, temp[0].___z, temp[1].___w, temp[0].___x; 14: MAD temp[1].xyz, temp[0].zzz_, temp[1].xyz_, temp[2].xyz_; 15: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 16: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 17: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 18: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 19: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 20: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 21: MOV_SAT temp[3].w, none.___1; 22: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 23: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 24: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[7].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[2].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 11: MAD temp[0].x, temp[0].y___, temp[1].w___, temp[0].x___; 12: TEX temp[1], input[6].xy__, 2D[3]; 13: MAD temp[1].w, temp[0].___z, temp[1].___w, temp[0].___x; 14: MAD temp[1].xyz, temp[0].zzz_, temp[1].xyz_, temp[2].xyz_; 15: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 16: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 17: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 18: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 19: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 20: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 21: MOV_SAT temp[3].w, none.___1; 22: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 23: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 24: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 1.0000 0.7000 0.3000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[7].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[2].w, temp[0].___x, temp[1].___w; 3: MUL temp[2].xyz, temp[0].xxx_, temp[1].xyz_; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[1], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[2].xyz, temp[1].xyz_, temp[0].xxx_, temp[2].xyz_; 8: MAD temp[0].x, temp[1].w___, temp[0].x___, temp[2].w___; 9: TEX temp[1], input[5].xy__, 2D[2]; 10: MAD temp[2].xyz, temp[0].yyy_, temp[1].xyz_, temp[2].xyz_; 11: MAD temp[0].x, temp[0].y___, temp[1].w___, temp[0].x___; 12: TEX temp[1], input[6].xy__, 2D[3]; 13: MAD temp[1].w, temp[0].___z, temp[1].___w, temp[0].___x; 14: MAD temp[1].xyz, temp[0].zzz_, temp[1].xyz_, temp[2].xyz_; 15: MUL temp[0].xyz, input[1].xyz_, temp[1].www_; 16: MUL temp[2].xyz, temp[0].www_, temp[0].xyz_; 17: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 18: MUL temp[0].xyz, temp[1].www_, input[0].xyz_; 19: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 20: MAD_SAT temp[3].xyz, temp[1].xyz_, const[3].www_, temp[2].xyz_; 21: MOV_SAT temp[3].w, none.___1; 22: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 23: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 24: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[7].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: src0.xyz = temp[0], src0.w = temp[1] MAD temp[2].w, src0.x, src0.w, src0.0 3: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 5: TEX temp[1], input[3].xy__, 2D[0]; 6: src0.xyz = temp[0] MAD temp[0].x, -src0.x__, src0.111, src0.1__ 7: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 8: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 9: TEX temp[1], input[5].xy__, 2D[2]; 10: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 11: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].x, src0.y__, src0.w__, src0.x__ 12: TEX temp[1], input[6].xy__, 2D[3]; 13: src0.xyz = temp[0], src0.w = temp[1] MAD temp[1].w, src0.z, src0.w, src0.x 14: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.zzz, src1.xyz, src2.xyz 15: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 16: src0.xyz = temp[0], src0.w = temp[0] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 17: src0.xyz = const[3], src0.w = temp[0] MAD temp[1].w, src0.w, src0.z, src0.y 18: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 19: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 20: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 21: MAD_SAT temp[3].w, src0.1, src0.1, src0.0 22: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 23: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 24: src0.w = temp[3] MAD_SAT 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[7].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[2].w, src0.x, src0.w, src0.0 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 7: BEGIN_TEX; 8: TEX temp[1], input[3].xy__, 2D[0]; 9: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 10: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 11: BEGIN_TEX; 12: TEX temp[1], input[5].xy__, 2D[2]; 13: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].x, src0.y__, src0.w__, src0.x__ 15: BEGIN_TEX; 16: TEX temp[1], input[6].xy__, 2D[3]; 17: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.zzz, src1.xyz, src2.xyz MAD temp[1].w, src0.z, src0.w, src0.x 18: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 19: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 20: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 21: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 23: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[7].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[2].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[2].w, src0.x, src0.w, src0.0 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 5: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 6: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 7: BEGIN_TEX; 8: TEX temp[1], input[3].xy__, 2D[0]; 9: src0.xyz = temp[1], src1.xyz = temp[0], src2.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xxx, src2.xyz 10: src0.xyz = temp[0], src0.w = temp[1], src1.w = temp[2] MAD temp[0].x, src0.w__, src0.x__, src1.w__ 11: BEGIN_TEX; 12: TEX temp[1], input[5].xy__, 2D[2]; 13: src0.xyz = temp[0], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[2].xyz, src0.yyy, src1.xyz, src2.xyz 14: src0.xyz = temp[0], src0.w = temp[1] MAD temp[0].x, src0.y__, src0.w__, src0.x__ 15: BEGIN_TEX; 16: TEX temp[1], input[6].xy__, 2D[3]; 17: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1], src2.xyz = temp[2] MAD temp[1].xyz, src0.zzz, src1.xyz, src2.xyz MAD temp[1].w, src0.z, src0.w, src0.x 18: src0.xyz = input[1], src0.w = temp[1] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 19: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 20: src0.xyz = input[0], src0.w = temp[1] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 21: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 22: src0.xyz = temp[1], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 23: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=4 chan 1: start=1 end=14 chan 2: start=1 end=17 chan 3: start=1 end=19 9 readers 2: TEMP[1].15: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=2 end=3 2 readers 3: TEMP[2].7: chan 0: start=3 end=9 chan 1: start=3 end=9 chan 2: start=3 end=9 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=10 1 readers 4: TEMP[0].1: chan 0: start=4 end=5 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 4: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=5 1 readers 5: TEMP[0].1: chan 0: start=5 end=10 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 2 readers 6: TEMP[4].1: chan 0: start=6 end=23 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 8: TEMP[1].15: chan 0: start=8 end=9 chan 1: start=8 end=9 chan 2: start=8 end=9 chan 3: start=8 end=10 2 readers 9: TEMP[2].7: chan 0: start=9 end=13 chan 1: start=9 end=13 chan 2: start=9 end=13 chan 3: start=0 end=0 1 readers 10: TEMP[0].1: chan 0: start=10 end=14 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 12: TEMP[1].15: chan 0: start=12 end=13 chan 1: start=12 end=13 chan 2: start=12 end=13 chan 3: start=12 end=14 2 readers 13: TEMP[2].7: chan 0: start=13 end=17 chan 1: start=13 end=17 chan 2: start=13 end=17 chan 3: start=0 end=0 1 readers 14: TEMP[0].1: chan 0: start=14 end=17 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 16: TEMP[1].15: chan 0: start=16 end=17 chan 1: start=16 end=17 chan 2: start=16 end=17 chan 3: start=16 end=17 2 readers 17: TEMP[1].7: chan 0: start=17 end=21 chan 1: start=17 end=21 chan 2: start=17 end=21 chan 3: start=0 end=0 1 readers 17: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=17 end=18 1 readers 18: TEMP[0].7: chan 0: start=18 end=19 chan 1: start=18 end=19 chan 2: start=18 end=19 chan 3: start=0 end=0 1 readers 19: TEMP[2].7: chan 0: start=19 end=22 chan 1: start=19 end=22 chan 2: start=19 end=22 chan 3: start=0 end=0 1 readers 19: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=19 end=20 1 readers 20: TEMP[0].7: chan 0: start=20 end=21 chan 1: start=20 end=21 chan 2: start=20 end=21 chan 3: start=0 end=0 1 readers 21: TEMP[1].7: chan 0: start=21 end=22 chan 1: start=21 end=22 chan 2: start=21 end=22 chan 3: start=0 end=0 1 readers 22: TEMP[3].7: chan 0: start=22 end=23 chan 1: start=22 end=23 chan 2: start=22 end=23 chan 3: start=0 end=0 1 readers r300compiler error: Rewrite of inst 14 failed Can't allocate source for Inst 17 src_type=1 new_index=2 new_mask=1 r300 FP: Compiler Error: Rewrite of inst 14 failed Can't allocate source for Inst 17 src_type=1 new_index=2 new_mask=1 Using a dummy shader instead. r300: Initial fragment program FRAG DCL OUT[0], COLOR IMM FLT32 { 0.0000, 1.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxy 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MOV output[0], temp[0].0001; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].0001; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], none.0001; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.000, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0490:rgb_A_src:0 0/0/0 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c18000:MAD dest:0 alp_A_src:0 1 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL OUT[0], COLOR DCL CONST[0..1] DCL TEMP[0..1] 0: MOV_SAT TEMP[0], IN[0] 1: MAD_SAT TEMP[1].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 2: LRP OUT[0].xyz, TEMP[1].xxxx, TEMP[0], CONST[1] 3: MOV OUT[0].w, TEMP[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: ADD temp[2].xyz, temp[0], -const[1]; 3: MAD_SAT output[0].xyz, temp[1].xxxx, temp[2], const[1]; 4: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: ADD temp[2].xyz, temp[0].xyz_, -const[1].xyz_; 3: MAD_SAT output[0].xyz, temp[1].xxx_, temp[2].xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 3: src0.w = temp[0] MAD_SAT 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_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 0: TEMP[0].7: chan 0: start=0 end=2 chan 1: start=0 end=2 chan 2: start=0 end=2 chan 3: start=0 end=0 1 readers 0: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=1 1 readers 1: TEMP[1].1: chan 0: start=1 end=2 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 1 0:CMN_INST 0x001c0805:OUT TEX_WAIT wmask: R omask: A 1:RGB_ADDR 0x08040001:Addr0: 1t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL OUT[0], COLOR DCL CONST[0..1] DCL TEMP[0..1] 0: MOV_SAT TEMP[0], IN[0] 1: MAD_SAT TEMP[1].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 2: LRP OUT[0].xyz, TEMP[1].xxxx, TEMP[0], CONST[1] 3: MOV OUT[0].w, TEMP[0] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV output[0].w, temp[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: LRP_SAT output[0].xyz, temp[1].xxxx, temp[0], const[1]; 3: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 2: ADD temp[2].xyz, temp[0], -const[1]; 3: MAD_SAT output[0].xyz, temp[1].xxxx, temp[2], const[1]; 4: MOV_SAT output[0].w, temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: ADD temp[2].xyz, temp[0].xyz_, -const[1].xyz_; 3: MAD_SAT output[0].xyz, temp[1].xxx_, temp[2].xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT temp[0], input[0]; 1: MAD_SAT temp[1].x, input[1].x___, const[0].x___, const[0].y___; 2: MAD_SAT output[0].xyz, temp[1].xxx_, (temp[0] - const[1]).xyz_, const[1].xyz_; 3: MOV_SAT output[0].w, temp[0].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 3: src0.w = temp[0] MAD_SAT 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_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 0: TEMP[0].7: chan 0: start=0 end=2 chan 1: start=0 end=2 chan 2: start=0 end=2 chan 3: start=0 end=0 1 readers 0: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=1 1 readers 1: TEMP[1].1: chan 0: start=1 end=2 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT temp[0].w, src0.w, src0.1, src0.0 1: src0.xyz = input[1], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 2: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 1 0:CMN_INST 0x001c0805:OUT TEX_WAIT wmask: R omask: A 1:RGB_ADDR 0x08040001:Addr0: 1t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], 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], 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], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], input[0], temp[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], input[0], temp[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT 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_SAT 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_SAT 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_SAT 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # 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_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 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 'unroll loops' # Radeon Compiler Program 0: MOV output[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT 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_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[0], src0.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src0.111, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: MUL OUT[0], TEMP[0], IN[0] 2: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL output[0], temp[0], input[0]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: MUL_SAT output[0], temp[0], input[0]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT 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 = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src1.w, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL IN[2], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL TEMP[0..1] 0: TEX TEMP[0], IN[2], SAMP[1], 2D 1: MUL TEMP[1], IN[0], TEMP[0] 2: TEX TEMP[0], IN[1], SAMP[0], 2D 3: MAD OUT[0], TEMP[0], IN[0], TEMP[1] 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD output[0], temp[0], input[0], temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD output[0], temp[0], input[0], temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD output[0], temp[0], input[0], temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD output[0], temp[0], input[0], temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1], 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1].xy__, 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1].xy__, 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1].xy__, 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: MUL temp[1], input[0], temp[0]; 2: TEX temp[0], input[1].xy__, 2D[0]; 3: MAD_SAT output[0], temp[0], input[0], temp[1]; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[1]; 1: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 2: TEX temp[0], input[1].xy__, 2D[0]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0], src2.xyz = temp[1], src2.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src1.w, src2.w Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[1]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 3: BEGIN_TEX; 4: TEX temp[0], input[1].xy__, 2D[0]; 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0], src2.xyz = temp[1], src2.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src1.w, src2.w Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[1]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[0], src1.w = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 3: BEGIN_TEX; 4: TEX temp[0], input[1].xy__, 2D[0]; 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0], src2.xyz = temp[1], src2.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src1.w, src2.w 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=5 chan 1: start=2 end=5 chan 2: start=2 end=5 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=5 1 readers 4: TEMP[0].15: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=4 end=5 2 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: src0.xyz = input[0], src0.w = input[0], src1.xyz = temp[2], src1.w = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 3: BEGIN_TEX; 4: TEX temp[3], input[1].xy__, 2D[0]; 5: src0.xyz = temp[3], src0.w = temp[3], src1.xyz = input[0], src1.w = input[0], src2.xyz = temp[2], src2.w = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xyz, src2.xyz MAD_SAT color[0].w, src0.w, src1.w, src2.w R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f401: src: 1 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 3 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x00200003:Addr0: 3t, Addr1: 0t, Addr2: 2t, srcp:0 2:ALPHA_ADDR 0x00100003:Addr0: 3t, Addr1: 0t, Addr2: 1t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x1c222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:2 A 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 0.7000, 0.3000, 0.0000, 1.0000} 0: MAD TEMP[0].x, IN[0].wwww, IMM[0].yyyy, IMM[0] 1: MUL TEMP[1].xyz, TEMP[0].xxxx, IN[0] 2: TEX TEMP[0], IN[3], SAMP[0], 2D 3: MUL_SAT TEMP[2].xyz, TEMP[0], TEMP[1] 4: MUL_SAT TEMP[2].w, TEMP[0], IN[1].xxxx 5: MAD_SAT TEMP[3].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 6: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 7: MOV OUT[0].w, TEMP[2] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MAD temp[0].x, input[0].wwww, const[3].yyyy, const[3]; 1: MUL temp[1].xyz, temp[0].xxxx, input[0]; 2: TEX temp[0], input[3], 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0], temp[1]; 4: MUL_SAT temp[2].w, temp[0], input[1].xxxx; 5: MAD_SAT temp[3].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 6: ADD temp[4].xyz, temp[2], -const[2]; 7: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MAD temp[0].x, input[0].w___, const[3].y___, const[3].x___; 1: MUL temp[1].xyz, temp[0].xxx_, input[0].xyz_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, temp[1].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[1].___x; 5: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 6: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 7: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MAD temp[0].x, input[0].w___, const[3].y___, const[3].x___; 1: MUL temp[1].xyz, temp[0].xxx_, input[0].xyz_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, temp[1].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[1].___x; 5: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MAD temp[0].x, input[0].w___, const[3].y___, const[3].x___; 1: MUL temp[1].xyz, temp[0].xxx_, input[0].xyz_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, temp[1].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[1].___x; 5: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 0.7000 0.3000 0.0000 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MAD temp[0].x, input[0].w___, const[3].y___, const[3].x___; 1: MUL temp[1].xyz, temp[0].xxx_, input[0].xyz_; 2: TEX temp[0], input[3].xy__, 2D[0]; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, temp[1].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[1].___x; 5: MAD_SAT temp[3].x, input[2].x___, const[1].x___, const[1].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: src0.xyz = const[3], src0.w = input[0] MAD temp[0].x, src0.w__, src0.y__, src0.x__ 1: src0.xyz = temp[0], src1.xyz = input[0] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 2: TEX temp[0], input[3].xy__, 2D[0]; 3: src0.xyz = temp[0], src1.xyz = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = input[1], src0.w = temp[0] MAD_SAT temp[2].w, src0.w, src0.x, src0.0 5: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 7: src0.w = temp[2] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 1: src0.xyz = const[3], src0.w = input[0] MAD temp[0].x, src0.w__, src0.y__, src0.x__ 2: src0.xyz = temp[0], src1.xyz = input[0] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 3: BEGIN_TEX; 4: TEX temp[0], input[3].xy__, 2D[0]; 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src2.xyz = input[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src2.x, src0.0 6: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 1: src0.xyz = const[3], src0.w = input[0] MAD temp[0].x, src0.w__, src0.y__, src0.x__ 2: src0.xyz = temp[0], src1.xyz = input[0] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 3: BEGIN_TEX; 4: TEX temp[0], input[3].xy__, 2D[0]; 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src2.xyz = input[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src2.x, src0.0 6: src0.xyz = const[2], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 0: TEMP[3].1: chan 0: start=0 end=6 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 1: TEMP[0].1: chan 0: start=1 end=2 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 2: TEMP[1].7: chan 0: start=2 end=5 chan 1: start=2 end=5 chan 2: start=2 end=5 chan 3: start=0 end=0 1 readers 4: TEMP[0].15: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=4 end=5 2 readers 5: TEMP[2].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 5: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=5 end=6 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].y, src0._x_, src1._x_, src1._y_ 1: src0.xyz = const[3], src0.w = input[0] MAD temp[1].z, src0.__w, src0.__y, src0.__x 2: src0.xyz = temp[1], src1.xyz = input[0] MAD temp[0].xyz, src0.zzz, src1.xyz, src0.000 3: BEGIN_TEX; 4: TEX temp[2], input[2].xy__, 2D[0]; 5: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[0], src2.xyz = input[1] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src2.x, src0.0 6: src0.xyz = const[2], src0.w = temp[0], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.yyy, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00081004:ALU TEX_WAIT wmask: G omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00822410:rgb_A_src:0 0/R/0 0 rgb_B_src:1 0/R/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00431010:MAD dest:1 rgb_C_src:1 0/G/0 0 alp_C_src:0 R 0 1 0:CMN_INST 0x00002004:ALU TEX_WAIT wmask: B omask: NONE 1:RGB_ADDR 0x08020103:Addr0: 3c, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00320390:rgb_A_src:0 0/0/A 0 rgb_B_src:0 0/0/G 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00090010:MAD dest:1 rgb_C_src:0 0/0/R 0 alp_C_src:0 R 0 2 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442248:rgb_A_src:0 B/B/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 3 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 4 0:CMN_INST 0x00187a04:ALU TEX_WAIT NOP wmask: ARGB omask: NONE 1:RGB_ADDR 0x00100002:Addr0: 2t, Addr1: 0t, Addr2: 1t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0010c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:2 R 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 5 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446126:rgb_A_src:2 G/G/G 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: TEX TEMP[1], IN[3], SAMP[1], 2D 2: MUL TEMP[0].xyz, TEMP[0], TEMP[1] 3: MUL TEMP[0].w, TEMP[0], IN[0] 4: MUL TEMP[0].xyz, TEMP[0], IN[0] 5: MUL TEMP[0].w, TEMP[1], TEMP[0] 6: MUL_SAT TEMP[2].xyz, TEMP[0], IMM[0].xxxx 7: MUL_SAT TEMP[2].w, TEMP[0], IMM[0].xxxx 8: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 9: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 10: MOV OUT[0].w, TEMP[2] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 10: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1], input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL temp[0].w, temp[0], input[0]; 4: MUL temp[0].xyz, temp[0], input[0]; 5: MUL temp[0].w, temp[1], temp[0]; 6: MUL_SAT temp[2].xyz, temp[0], const[3].xxxx; 7: MUL_SAT temp[2].w, temp[0], const[3].xxxx; 8: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: ADD temp[4].xyz, temp[2], -const[2]; 10: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 11: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[0].w, temp[0].___w, input[0].___w; 4: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 5: MUL temp[0].w, temp[1].___w, temp[0].___w; 6: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 7: MUL_SAT temp[2].w, temp[0].___w, const[3].___x; 8: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 9: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 10: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[0].w, temp[0].___w, input[0].___w; 4: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 5: MUL temp[0].w, temp[1].___w, temp[0].___w; 6: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 7: MUL_SAT temp[2].w, temp[0].___w, const[3].___x; 8: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[0].w, temp[0].___w, input[0].___w; 4: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 5: MUL temp[0].w, temp[1].___w, temp[0].___w; 6: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 7: MUL_SAT temp[2].w, temp[0].___w, const[3].___x; 8: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[0].w, temp[0].___w, input[0].___w; 4: MUL temp[0].xyz, temp[0].xyz_, input[0].xyz_; 5: MUL temp[0].w, temp[1].___w, temp[0].___w; 6: MUL_SAT temp[2].xyz, temp[0].xyz_, const[3].xxx_; 7: MUL_SAT temp[2].w, temp[0].___w, const[3].___x; 8: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1], input[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 3: src0.w = temp[0], src1.w = input[0] MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 5: src0.w = temp[1], src1.w = temp[0] MAD temp[0].w, src0.w, src1.w, src0.0 6: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 7: src0.xyz = const[3], src0.w = temp[0] MAD_SAT temp[2].w, src0.w, src0.x, src0.0 8: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 9: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 10: src0.w = temp[2] MAD_SAT 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[2].xy__, 2D[0]; 2: TEX temp[1], input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = input[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[2].w, src0.w, src1.x, src0.0 6: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: TEX temp[1], input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = input[0], src1.w = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[2].w, src0.w, src1.x, src0.0 6: src0.xyz = input[1], src0.w = temp[2], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=1 end=3 2 readers 2: TEMP[1].15: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=2 end=4 2 readers 3: TEMP[0].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[0].7: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=0 end=0 1 readers 4: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=5 1 readers 5: TEMP[2].7: chan 0: start=5 end=7 chan 1: start=5 end=7 chan 2: start=5 end=7 chan 3: start=0 end=0 1 readers 5: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=5 end=6 1 readers 6: TEMP[3].1: chan 0: start=6 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2], input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0], src1.w = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT temp[0].w, src0.w, src1.x, src0.0 6: src0.xyz = input[3], src0.w = temp[0], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000402:Addr0: 2t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x0008c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 R 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 5 0:CMN_INST 0x001c0805:OUT TEX_WAIT wmask: R omask: A 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 6 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 1.0000, 0.3000, 0.5900, 0.1100} 0: TEX TEMP[0], IN[3], SAMP[1], 2D 1: MUL TEMP[1].x, TEMP[0].yyyy, IMM[0].zzzz 2: MAD TEMP[2].x, TEMP[0], IMM[0].yyyy, TEMP[1] 3: TEX TEMP[1], IN[2], SAMP[0], 2D 4: MAD TEMP[2].x, TEMP[0].zzzz, IMM[0].wwww, TEMP[2] 5: MUL TEMP[0].xyz, TEMP[0], TEMP[0].wwww 6: ADD TEMP[2].y, -TEMP[1].wwww, IMM[0].xxxx 7: MUL TEMP[0].xyz, TEMP[0], TEMP[2].yyyy 8: MUL TEMP[0].w, TEMP[0], TEMP[2].xxxx 9: MAD_SAT TEMP[3].xyz, TEMP[1], IN[0], TEMP[0] 10: MAD_SAT TEMP[3].w, TEMP[1], IN[0], TEMP[0] 11: MAD_SAT TEMP[4].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 12: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 13: MOV OUT[0].w, TEMP[3] 14: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 13: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[3], 2D[1]; 1: MUL temp[1].x, temp[0].yyyy, const[3].zzzz; 2: MAD temp[2].x, temp[0], const[3].yyyy, temp[1]; 3: TEX temp[1], input[2], 2D[0]; 4: MAD temp[2].x, temp[0].zzzz, const[3].wwww, temp[2]; 5: MUL temp[0].xyz, temp[0], temp[0].wwww; 6: ADD temp[2].y, -temp[1].wwww, const[3].xxxx; 7: MUL temp[0].xyz, temp[0], temp[2].yyyy; 8: MUL temp[0].w, temp[0], temp[2].xxxx; 9: MAD_SAT temp[3].xyz, temp[1], input[0], temp[0]; 10: MAD_SAT temp[3].w, temp[1], input[0], temp[0]; 11: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 12: ADD temp[5].xyz, temp[3], -const[2]; 13: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 14: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].x, temp[0].y___, const[3].z___; 2: MAD temp[2].x, temp[0].x___, const[3].y___, temp[1].x___; 3: TEX temp[1], input[2].xy__, 2D[0]; 4: MAD temp[2].x, temp[0].z___, const[3].w___, temp[2].x___; 5: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 6: ADD temp[2].y, -temp[1]._w__, const[3]._x__; 7: MUL temp[0].xyz, temp[0].xyz_, temp[2].yyy_; 8: MUL temp[0].w, temp[0].___w, temp[2].___x; 9: MAD_SAT temp[3].xyz, temp[1].xyz_, input[0].xyz_, temp[0].xyz_; 10: MAD_SAT temp[3].w, temp[1].___w, input[0].___w, temp[0].___w; 11: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 12: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 13: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 14: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].x, temp[0].y___, const[3].z___; 2: MAD temp[2].x, temp[0].x___, const[3].y___, temp[1].x___; 3: TEX temp[1], input[2].xy__, 2D[0]; 4: MAD temp[2].x, temp[0].z___, const[3].w___, temp[2].x___; 5: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 6: ADD temp[2].y, -temp[1]._w__, none._1__; 7: MUL temp[0].xyz, temp[0].xyz_, temp[2].yyy_; 8: MUL temp[0].w, temp[0].___w, temp[2].___x; 9: MAD_SAT temp[3].xyz, temp[1].xyz_, input[0].xyz_, temp[0].xyz_; 10: MAD_SAT temp[3].w, temp[1].___w, input[0].___w, temp[0].___w; 11: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 12: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 13: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].x, temp[0].y___, const[3].z___; 2: MAD temp[2].x, temp[0].x___, const[3].y___, temp[1].x___; 3: TEX temp[1], input[2].xy__, 2D[0]; 4: MAD temp[2].x, temp[0].z___, const[3].w___, temp[2].x___; 5: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 6: ADD temp[2].y, -temp[1]._w__, none._1__; 7: MUL temp[0].xyz, temp[0].xyz_, temp[2].yyy_; 8: MUL temp[0].w, temp[0].___w, temp[2].___x; 9: MAD_SAT temp[3].xyz, temp[1].xyz_, input[0].xyz_, temp[0].xyz_; 10: MAD_SAT temp[3].w, temp[1].___w, input[0].___w, temp[0].___w; 11: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 12: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 13: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 1.0000 0.3000 0.5900 0.1100 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: MUL temp[1].x, temp[0].y___, const[3].z___; 2: MAD temp[2].x, temp[0].x___, const[3].y___, temp[1].x___; 3: TEX temp[1], input[2].xy__, 2D[0]; 4: MAD temp[2].x, temp[0].z___, const[3].w___, temp[2].x___; 5: MUL temp[0].xyz, temp[0].xyz_, temp[0].www_; 6: ADD temp[2].y, -temp[1]._w__, none._1__; 7: MUL temp[0].xyz, temp[0].xyz_, temp[2].yyy_; 8: MUL temp[0].w, temp[0].___w, temp[2].___x; 9: MAD_SAT temp[3].xyz, temp[1].xyz_, input[0].xyz_, temp[0].xyz_; 10: MAD_SAT temp[3].w, temp[1].___w, input[0].___w, temp[0].___w; 11: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 12: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 13: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[3].xy__, 2D[1]; 1: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[1].x, src0.y__, src1.z__, src0.000 2: src0.xyz = temp[0], src1.xyz = const[3], src2.xyz = temp[1] MAD temp[2].x, src0.x__, src1.y__, src2.x__ 3: TEX temp[1], input[2].xy__, 2D[0]; 4: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD temp[2].x, src0.z__, src0.w__, src1.x__ 5: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 6: src0.w = temp[1] MAD temp[2].y, -src0._w_, src0.111, src0._1_ 7: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 8: src0.xyz = temp[2], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 9: src0.xyz = temp[1], src1.xyz = input[0], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 10: src0.w = temp[1], src1.w = input[0], src2.w = temp[0] MAD_SAT temp[3].w, src0.w, src1.w, src2.w 11: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 12: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 13: src0.w = temp[3] MAD_SAT 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[3].xy__, 2D[1]; 2: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 3: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[2].w, src0.y, src1.z, src0.0 4: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = const[3], src2.xyz = temp[1] MAD temp[2].x, src0.x__, src1.y__, src0.w__ 5: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD temp[2].x, src0.z__, src0.w__, src1.x__ 6: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[2], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 8: BEGIN_TEX; 9: TEX temp[1], input[2].xy__, 2D[0]; 10: src0.w = temp[1], src1.w = input[0], src2.w = temp[0] MAD temp[2].y, -src0._w_, src0.111, src0._1_ MAD_SAT temp[3].w, src0.w, src1.w, src2.w 11: src0.xyz = temp[0], src0.w = temp[3], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[1], src1.xyz = input[0], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 13: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[3].xy__, 2D[1]; 2: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 3: src0.xyz = temp[0], src1.xyz = const[3] MAD temp[2].w, src0.y, src1.z, src0.0 4: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = const[3] MAD temp[2].x, src0.x__, src1.y__, src0.w__ 5: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD temp[2].x, src0.z__, src0.w__, src1.x__ 6: src0.xyz = temp[0], src0.w = temp[0] MAD temp[0].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[2], src0.w = temp[0] MAD temp[0].w, src0.w, src0.x, src0.0 8: BEGIN_TEX; 9: TEX temp[1], input[2].xy__, 2D[0]; 10: src0.w = temp[1], src1.w = input[0], src2.w = temp[0] MAD temp[2].y, -src0._w_, src0.111, src0._1_ MAD_SAT temp[3].w, src0.w, src1.w, src2.w 11: src0.xyz = temp[0], src0.w = temp[3], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.yyy, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[1], src1.xyz = input[0], src2.xyz = temp[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src2.xyz 13: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=6 chan 1: start=1 end=6 chan 2: start=1 end=6 chan 3: start=1 end=7 6 readers 2: TEMP[4].1: chan 0: start=2 end=13 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].1: chan 0: start=4 end=5 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 5: TEMP[2].1: chan 0: start=5 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 6: TEMP[0].7: chan 0: start=6 end=11 chan 1: start=6 end=11 chan 2: start=6 end=11 chan 3: start=0 end=0 1 readers 7: TEMP[0].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=7 end=10 1 readers 9: TEMP[1].15: chan 0: start=9 end=12 chan 1: start=9 end=12 chan 2: start=9 end=12 chan 3: start=9 end=10 3 readers 10: TEMP[2].2: chan 0: start=0 end=0 chan 1: start=10 end=11 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 10: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=10 end=11 1 readers 11: TEMP[0].7: chan 0: start=11 end=12 chan 1: start=11 end=12 chan 2: start=11 end=12 chan 3: start=0 end=0 1 readers 12: TEMP[3].7: chan 0: start=12 end=13 chan 1: start=12 end=13 chan 2: start=12 end=13 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2], input[2].xy__, 2D[1]; 2: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].z, src0.__x, src1.__x, src1.__y 3: src0.xyz = temp[2], src1.xyz = const[3] MAD temp[1].w, src0.y, src1.z, src0.0 4: src0.xyz = temp[2], src0.w = temp[1], src1.xyz = const[3] MAD temp[3].x, src0.x__, src1.y__, src0.w__ 5: src0.xyz = temp[2], src0.w = const[3], src1.xyz = temp[3] MAD temp[3].x, src0.z__, src0.w__, src1.x__ 6: src0.xyz = temp[2], src0.w = temp[2] MAD temp[4].xyz, src0.xyz, src0.www, src0.000 7: src0.xyz = temp[3], src0.w = temp[2] MAD temp[1].w, src0.w, src0.x, src0.0 8: BEGIN_TEX; 9: TEX temp[2], input[1].xy__, 2D[0]; 10: src0.w = temp[2], src1.w = input[0], src2.w = temp[1] MAD temp[1].x, -src0.w__, src0.1__, src0.1__ MAD_SAT temp[1].w, src0.w, src1.w, src2.w 11: src0.xyz = temp[4], src0.w = temp[1], src1.xyz = temp[1] MAD temp[3].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 12: src0.xyz = temp[2], src1.xyz = input[0], src2.xyz = temp[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src2.xyz 13: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.zzz, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00082004:ALU TEX_WAIT wmask: B omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00122090:rgb_A_src:0 0/0/R 0 rgb_B_src:1 0/0/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00191010:MAD dest:1 rgb_C_src:1 0/0/G 0 alp_C_src:0 R 0 2 0:CMN_INST 0x00004004:ALU TEX_WAIT wmask: A omask: NONE 1:RGB_ADDR 0x08040c02:Addr0: 2t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00000000:rgb_A_src:0 R/R/R 0 rgb_B_src:0 R/R/R 0 targ: 0 4 ALPHA_INST:0x00484010:MAD dest:1 alp_A_src:0 G 0 alp_B_src:1 B 0 targ 0 w:0 5 RGBA_INST: 0x20000000:MAD dest:0 rgb_C_src:0 R/R/R 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00000804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040c02:Addr0: 2t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0090a480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 G/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x0048c030:MAD dest:3 rgb_C_src:0 A/0/0 0 alp_C_src:0 R 0 4 0:CMN_INST 0x00000804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08000c02:Addr0: 2t, Addr1: 3t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020103:Addr0: 3c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00918488:rgb_A_src:0 B/0/0 0 rgb_B_src:0 A/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00481030:MAD dest:3 rgb_C_src:1 R/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490040:MAD dest:4 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 6 0:CMN_INST 0x00004004:ALU TEX_WAIT wmask: A omask: NONE 1:RGB_ADDR 0x08020003:Addr0: 3t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00000000:rgb_A_src:0 R/R/R 0 rgb_B_src:0 R/R/R 0 targ: 0 4 ALPHA_INST:0x0000c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x20000000:MAD dest:0 rgb_C_src:0 R/R/R 0 alp_C_src:0 0 0 7 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f401: src: 1 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 8 0:CMN_INST 0x00104804:ALU TEX_WAIT wmask: AR omask: NONE 1:RGB_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x00100002:Addr0: 2t, Addr1: 0t, Addr2: 1t, srcp:0 3 RGB_INST: 0x00930c8c:rgb_A_src:0 A/0/0 1 rgb_B_src:0 1/0/0 0 targ: 0 4 ALPHA_INST:0x0068c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x1c498010:MAD dest:1 rgb_C_src:0 1/0/0 0 alp_C_src:2 A 0 9 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000404:Addr0: 4t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490030:MAD dest:3 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 10 0:CMN_INST 0x00083a04:ALU TEX_WAIT NOP wmask: RGB omask: NONE 1:RGB_ADDR 0x00300002:Addr0: 2t, Addr1: 0t, Addr2: 3t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222000:MAD dest:0 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 11 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044624a:rgb_A_src:2 B/B/B 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL OUT[0], COLOR IMM FLT32 { 1.0000, 0.0000, 0.0000, 0.0000} 0: MOV OUT[0], IMM[0].xxxx 1: END Fragment Program: before compilation # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: MOV output[0], temp[0].1111; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].1111; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].1111; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].1111; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].1111; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: MOV_SAT output[0], temp[0].1111; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: MOV_SAT output[0], none.1111; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: MOV_SAT output[0], none.1111; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: MOV_SAT output[0], none.1111; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.111, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.111, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.111, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 Fragment Program: after 'register allocation' # Radeon Compiler Program 0: MAD_SAT color[0].xyz, src0.111, src0.111, src0.000 MAD_SAT color[0].w, src0.1, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db06d8:rgb_A_src:0 1/1/1 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c18000:MAD dest:0 alp_A_src:0 1 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG DCL IN[0], GENERIC[0], LINEAR 0: END Fragment Program: before compilation # Radeon Compiler Program Fragment Program: after 'rewrite depth out' # Radeon Compiler Program Fragment Program: after 'transform KILP' # Radeon Compiler Program Fragment Program: after 'unroll loops' # Radeon Compiler Program Fragment Program: after 'transform TEX' # Radeon Compiler Program Fragment Program: after 'transform IF' # Radeon Compiler Program Fragment Program: after 'native rewrite' # Radeon Compiler Program Fragment Program: after 'deadcode' # Radeon Compiler Program Fragment Program: after 'dataflow optimize' # Radeon Compiler Program Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program Fragment Program: after 'dead constants' # Radeon Compiler Program Fragment Program: after 'pair translate' # Radeon Compiler Program Fragment Program: after 'pair scheduling' # Radeon Compiler Program Fragment Program: after 'dead sources' # Radeon Compiler Program Fragment Program: after 'register allocation' # Radeon Compiler Program R500 Fragment Program: -------- 0 0:CMN_INST 0x00000005:OUT TEX_WAIT wmask: NONE omask: NONE 1:RGB_ADDR 0x00000000:Addr0: 0t, Addr1: 0t, Addr2: 0t, srcp:0 2:ALPHA_ADDR 0x00000000:Addr0: 0t, Addr1: 0t, Addr2: 0t, srcp:0 3 RGB_INST: 0x00000000:rgb_A_src:0 R/R/R 0 rgb_B_src:0 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00000000:MAD dest:0 rgb_C_src:0 R/R/R 0 alp_C_src:0 R 0 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 'unroll loops' # 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 'transform IF' # 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 '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 'pair translate' # Radeon Compiler Program 0: TEX temp[1], input[0].xy__, 2D[0]; 1: 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[1], input[0].xy__, 2D[0]; 2: 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 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[0].xy__, 2D[0]; 2: 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 1: TEMP[1].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers Fragment Program: after 'register allocation' # 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 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe400f400: src: 0 R/G/A/A dst: 0 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00078005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..1] DCL TEMP[0..3] 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL TEMP[1], TEMP[0], IN[0] 2: TEX TEMP[0], IN[3], SAMP[1], 2D 3: MUL_SAT TEMP[2], TEMP[0], TEMP[1] 4: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 5: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[1] 6: MOV OUT[0].w, TEMP[2] 7: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 6: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3], 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 5: ADD temp[4].xyz, temp[2], -const[1]; 6: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3].xy__, 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: ADD temp[4].xyz, temp[2].xyz_, -const[1].xyz_; 6: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3].xy__, 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3].xy__, 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL temp[1], temp[0], input[0]; 2: TEX temp[0], input[3].xy__, 2D[1]; 3: MUL_SAT temp[2], temp[0], temp[1]; 4: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 5: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 6: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 2: TEX temp[0], input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 5: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 6: src0.w = temp[2] MAD_SAT 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[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 4: BEGIN_TEX; 5: TEX temp[0], input[3].xy__, 2D[1]; 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 7: src0.xyz = const[1], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 4: BEGIN_TEX; 5: TEX temp[0], input[3].xy__, 2D[1]; 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = temp[1] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 7: src0.xyz = const[1], src0.w = temp[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=6 chan 1: start=2 end=6 chan 2: start=2 end=6 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=6 1 readers 3: TEMP[3].1: chan 0: start=3 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 5: TEMP[0].15: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=5 end=6 2 readers 6: TEMP[2].7: chan 0: start=6 end=7 chan 1: start=6 end=7 chan 2: start=6 end=7 chan 3: start=0 end=0 1 readers 6: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=6 end=7 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[3], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 4: BEGIN_TEX; 5: TEX temp[2], input[2].xy__, 2D[1]; 6: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = temp[0], src1.w = temp[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src1.w, src0.0 7: src0.xyz = const[1], src0.w = temp[0], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz MAD_SAT color[0].w, src0.w, src0.1, src0.0 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040003:Addr0: 3t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 3 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 4 0:CMN_INST 0x00187a04:ALU TEX_WAIT NOP wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000002:Addr0: 2t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000002:Addr0: 2t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 5 0:CMN_INST 0x001f8005:OUT TEX_WAIT wmask: NONE omask: ARGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 0 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..2] 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL_SAT TEMP[1], TEMP[0], IN[0] 2: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 3: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[1] 4: MOV OUT[0].w, TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: ADD temp[3].xyz, temp[1], -const[1]; 4: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: ADD temp[3].xyz, temp[1].xyz_, -const[1].xyz_; 4: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 2: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 3: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 4: src0.w = temp[1] MAD_SAT 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[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[2].1: chan 0: start=3 end=4 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[2], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c0a05:OUT TEX_WAIT NOP wmask: R omask: A 1:RGB_ADDR 0x08040002:Addr0: 2t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..3] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0].xyz, IN[3], SAMP[1], 2D 1: TEX TEMP[1].xyz, IN[2], SAMP[0], 2D 2: MUL TEMP[1].xyz, TEMP[1], TEMP[0] 3: MUL TEMP[1].xyz, TEMP[1], IN[0] 4: MUL_SAT TEMP[2].xyz, TEMP[1], IMM[0].xxxx 5: MOV_SAT TEMP[2].w, IN[0] 6: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 7: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[2] 8: MOV OUT[0].w, TEMP[2] 9: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[2]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3], 2D[1]; 1: TEX temp[1].xyz, input[2], 2D[0]; 2: MUL temp[1].xyz, temp[1], temp[0]; 3: MUL temp[1].xyz, temp[1], input[0]; 4: MUL_SAT temp[2].xyz, temp[1], const[3].xxxx; 5: MOV_SAT temp[2].w, input[0]; 6: MAD_SAT temp[3].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 7: ADD temp[4].xyz, temp[2], -const[2]; 8: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[2]; 9: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MOV_SAT temp[2].w, input[0].___w; 6: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 7: ADD temp[4].xyz, temp[2].xyz_, -const[2].xyz_; 8: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[2].xyz_; 9: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MOV_SAT temp[2].w, input[0].___w; 6: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 7: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MOV_SAT temp[2].w, input[0].___w; 6: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 7: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: MUL temp[1].xyz, temp[1].xyz_, temp[0].xyz_; 3: MUL temp[1].xyz, temp[1].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MOV_SAT temp[2].w, input[0].___w; 6: MAD_SAT temp[3].x, input[1].x___, const[1].x___, const[1].y___; 7: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[2]).xyz_, const[2].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[3].xy__, 2D[1]; 1: TEX temp[1].xyz, input[2].xy__, 2D[0]; 2: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[1], src1.xyz = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 4: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 5: src0.w = input[0] MAD_SAT temp[2].w, src0.w, src0.1, src0.0 6: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 8: src0.w = temp[2] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[3].xy__, 2D[1]; 2: TEX temp[1].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 6: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[3].xy__, 2D[1]; 2: TEX temp[1].xyz, input[2].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[2], src1.xyz = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = const[3] MAD_SAT temp[2].xyz, src0.xyz, src1.xxx, src0.000 6: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=0 end=0 1 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[1].7: chan 0: start=4 end=5 chan 1: start=4 end=5 chan 2: start=4 end=5 chan 3: start=0 end=0 1 readers 5: TEMP[2].7: chan 0: start=5 end=7 chan 1: start=5 end=7 chan 2: start=5 end=7 chan 3: start=0 end=0 1 readers 6: TEMP[3].1: chan 0: start=6 end=7 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[2].xyz, input[2].xy__, 2D[1]; 2: TEX temp[1].xyz, input[1].xy__, 2D[0]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[0], src1.xyz = const[3] MAD_SAT temp[0].xyz, src0.xyz, src1.xxx, src0.000 6: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 7: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00083804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08040c00:Addr0: 0t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 6 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: TEX TEMP[1].xyz, IN[3], SAMP[1], 2D 2: MUL TEMP[1].xyz, TEMP[0], TEMP[1] 3: MUL TEMP[2].xyz, TEMP[1], IMM[0].xxxx 4: MAD TEMP[0].xyz, -TEMP[1], IMM[0].xxxx, TEMP[0] 5: MAD TEMP[0].xyz, TEMP[0].wwww, TEMP[0], TEMP[2] 6: MUL_SAT TEMP[3].xyz, TEMP[0], IN[0] 7: MOV_SAT TEMP[3].w, IN[0] 8: MAD_SAT TEMP[4].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 9: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 10: MOV OUT[0].w, TEMP[3] 11: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 10: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: MUL temp[2].xyz, temp[1], const[3].xxxx; 4: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 5: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 6: MUL_SAT temp[3].xyz, temp[0], input[0]; 7: MOV_SAT temp[3].w, input[0]; 8: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 9: ADD temp[5].xyz, temp[3], -const[2]; 10: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 11: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 4: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 5: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 6: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 7: MOV_SAT temp[3].w, input[0].___w; 8: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 9: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 10: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 4: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 5: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 6: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 7: MOV_SAT temp[3].w, input[0].___w; 8: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 4: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 5: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 6: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 7: MOV_SAT temp[3].w, input[0].___w; 8: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 4: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 5: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 6: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 7: MOV_SAT temp[3].w, input[0].___w; 8: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 9: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 10: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[1], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 4: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 5: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 6: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 7: src0.w = input[0] MAD_SAT temp[3].w, src0.w, src0.1, src0.0 8: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 9: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 10: src0.w = temp[3] MAD_SAT 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[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[3].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 7: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 9: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[3].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 7: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 9: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=5 chan 1: start=1 end=5 chan 2: start=1 end=5 chan 3: start=1 end=6 3 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=5 chan 1: start=3 end=5 chan 2: start=3 end=5 chan 3: start=0 end=0 2 readers 3: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 1 readers 5: TEMP[0].7: chan 0: start=5 end=6 chan 1: start=5 end=6 chan 2: start=5 end=6 chan 3: start=0 end=0 1 readers 6: TEMP[0].7: chan 0: start=6 end=7 chan 1: start=6 end=7 chan 2: start=6 end=7 chan 3: start=0 end=0 1 readers 7: TEMP[3].7: chan 0: start=7 end=9 chan 1: start=7 end=9 chan 2: start=7 end=9 chan 3: start=0 end=0 1 readers 8: TEMP[4].1: chan 0: start=8 end=9 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2].xyz, input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[2] MAD temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[2], src0.w = temp[2], src1.xyz = const[3] MAD temp[4].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = temp[2], src1.xyz = const[3], src2.xyz = temp[1] MAD temp[2].xyz, -src0.xyz, src1.xxx, src2.xyz 6: src0.xyz = temp[2], src0.w = temp[1], src1.xyz = temp[4] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz 7: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 8: src0.xyz = input[3], src1.xyz = const[1] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 9: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c020:MAD dest:2 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08040c02:Addr0: 2t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020002:Addr0: 2t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490040:MAD dest:4 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x00140c02:Addr0: 2t, Addr1: 3c, Addr2: 1t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002a20:rgb_A_src:0 R/G/B 1 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222020:MAD dest:2 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08001002:Addr0: 2t, Addr1: 4t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00221010:MAD dest:1 rgb_C_src:1 R/G/B 0 alp_C_src:0 R 0 6 0:CMN_INST 0x00083804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 7 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040403:Addr0: 3t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 8 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100102:Addr0: 2c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL IN[4], GENERIC[2], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[2] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 2.0000, 0.0000, 1.0000, 0.0000} 0: TEX TEMP[0].xyz, IN[2], SAMP[0], 2D 1: TEX TEMP[1].xyz, IN[3], SAMP[1], 2D 2: MUL TEMP[1].xyz, TEMP[0], TEMP[1] 3: TEX TEMP[0], IN[4], SAMP[2], 2D 4: MUL TEMP[2].xyz, TEMP[1], IMM[0].xxxx 5: MAD TEMP[0].xyz, -TEMP[1], IMM[0].xxxx, TEMP[0] 6: MAD TEMP[0].xyz, TEMP[0].wwww, TEMP[0], TEMP[2] 7: MUL_SAT TEMP[3].xyz, TEMP[0], IN[0] 8: MOV_SAT TEMP[3].w, IN[0] 9: MAD_SAT TEMP[4].x, IN[1].xxxx, CONST[1].xxxx, CONST[1].yyyy 10: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 11: MOV OUT[0].w, TEMP[3] 12: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 11: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[1].xyz, temp[0], temp[1]; 3: TEX temp[0], input[4], 2D[2]; 4: MUL temp[2].xyz, temp[1], const[3].xxxx; 5: MAD temp[0].xyz, -temp[1], const[3].xxxx, temp[0]; 6: MAD temp[0].xyz, temp[0].wwww, temp[0], temp[2]; 7: MUL_SAT temp[3].xyz, temp[0], input[0]; 8: MOV_SAT temp[3].w, input[0]; 9: MAD_SAT temp[4].x, input[1].xxxx, const[1].xxxx, const[1].yyyy; 10: ADD temp[5].xyz, temp[3], -const[2]; 11: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 12: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: TEX temp[0], input[4].xy__, 2D[2]; 4: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 6: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 7: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 8: MOV_SAT temp[3].w, input[0].___w; 9: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 10: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 11: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 12: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: TEX temp[0], input[4].xy__, 2D[2]; 4: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 6: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 7: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 8: MOV_SAT temp[3].w, input[0].___w; 9: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: TEX temp[0], input[4].xy__, 2D[2]; 4: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 6: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 7: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 8: MOV_SAT temp[3].w, input[0].___w; 9: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 2.0000 0.0000 1.0000 0.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xyz_, temp[1].xyz_; 3: TEX temp[0], input[4].xy__, 2D[2]; 4: MUL temp[2].xyz, temp[1].xyz_, const[3].xxx_; 5: MAD temp[0].xyz, -temp[1].xyz_, const[3].xxx_, temp[0].xyz_; 6: MAD temp[0].xyz, temp[0].www_, temp[0].xyz_, temp[2].xyz_; 7: MUL_SAT temp[3].xyz, temp[0].xyz_, input[0].xyz_; 8: MOV_SAT temp[3].w, input[0].___w; 9: MAD_SAT temp[4].x, input[1].x___, const[1].x___, const[1].y___; 10: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 11: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0].xyz, input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 3: TEX temp[0], input[4].xy__, 2D[2]; 4: src0.xyz = temp[1], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 5: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 6: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 7: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 8: src0.w = input[0] MAD_SAT temp[3].w, src0.w, src0.1, src0.0 9: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 10: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 11: src0.w = temp[3] MAD_SAT color[0].w, src0.w, src0.1, src0.0 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[3].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 6: BEGIN_TEX; 7: TEX temp[0], input[4].xy__, 2D[2]; 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 10: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0].xyz, input[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = input[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[3].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[3], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 6: BEGIN_TEX; 7: TEX temp[0], input[4].xy__, 2D[2]; 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[0] MAD temp[0].xyz, -src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.www, src0.xyz, src1.xyz 10: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[3].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].7: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=0 end=0 1 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[1].7: chan 0: start=3 end=8 chan 1: start=3 end=8 chan 2: start=3 end=8 chan 3: start=0 end=0 2 readers 3: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=9 chan 1: start=4 end=9 chan 2: start=4 end=9 chan 3: start=0 end=0 1 readers 5: TEMP[4].1: chan 0: start=5 end=11 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 7: TEMP[0].15: chan 0: start=7 end=8 chan 1: start=7 end=8 chan 2: start=7 end=8 chan 3: start=7 end=9 2 readers 8: TEMP[0].7: chan 0: start=8 end=9 chan 1: start=8 end=9 chan 2: start=8 end=9 chan 3: start=0 end=0 1 readers 9: TEMP[0].7: chan 0: start=9 end=10 chan 1: start=9 end=10 chan 2: start=9 end=10 chan 3: start=0 end=0 1 readers 10: TEMP[3].7: chan 0: start=10 end=11 chan 1: start=10 end=11 chan 2: start=10 end=11 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1].xyz, input[1].xy__, 2D[0]; 2: TEX temp[2].xyz, input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = input[0], src1.xyz = temp[2] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src0.1, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = const[3] MAD temp[2].xyz, src0.xyz, src1.xxx, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[4], src1.xyz = const[1] MAD_SAT temp[3].z, src0.__x, src1.__x, src1.__y 6: BEGIN_TEX; 7: TEX temp[4], input[3].xy__, 2D[2]; 8: src0.xyz = temp[1], src1.xyz = const[3], src2.xyz = temp[4] MAD temp[1].xyz, -src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = temp[1], src0.w = temp[4], src1.xyz = temp[2] MAD temp[1].xyz, src0.www, src0.xyz, src1.xyz 10: src0.xyz = temp[1], src1.xyz = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 11: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.zzz, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x00143805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08040c01:Addr0: 1t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490020:MAD dest:2 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00082004:ALU TEX_WAIT wmask: B omask: NONE 1:RGB_ADDR 0x08040404:Addr0: 4t, Addr1: 1c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00122090:rgb_A_src:0 0/0/R 0 rgb_B_src:1 0/0/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00191030:MAD dest:3 rgb_C_src:1 0/0/G 0 alp_C_src:0 R 0 5 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02420000: id: 2 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe404f403: src: 3 R/G/A/A dst: 4 R/G/B/A 3:TEX_DXDY: 0x00000000 6 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x00440c01:Addr0: 1t, Addr1: 3c, Addr2: 4t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002a20:rgb_A_src:0 R/G/B 1 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222010:MAD dest:1 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 7 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020004:Addr0: 4t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00221010:MAD dest:1 rgb_C_src:1 R/G/B 0 alp_C_src:0 R 0 8 0:CMN_INST 0x00083a04:ALU TEX_WAIT NOP wmask: RGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 9 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40300102:Addr0: 2c, Addr1: 0t, Addr2: 3t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044624a:rgb_A_src:2 B/B/B 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL CONST[0..1] DCL TEMP[0..2] 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: MUL_SAT TEMP[1], TEMP[0], IN[0] 2: MAD_SAT TEMP[2].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 3: LRP OUT[0].xyz, TEMP[2].xxxx, TEMP[1], CONST[1] 4: MOV OUT[0].w, TEMP[1] 5: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV output[0].w, temp[1]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: LRP_SAT output[0].xyz, temp[2].xxxx, temp[1], const[1]; 4: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 3: ADD temp[3].xyz, temp[1], -const[1]; 4: MAD_SAT output[0].xyz, temp[2].xxxx, temp[3], const[1]; 5: MOV_SAT output[0].w, temp[1]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: ADD temp[3].xyz, temp[1].xyz_, -const[1].xyz_; 4: MAD_SAT output[0].xyz, temp[2].xxx_, temp[3].xyz_, const[1].xyz_; 5: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: MUL_SAT temp[1], temp[0], input[0]; 2: MAD_SAT temp[2].x, input[1].x___, const[0].x___, const[0].y___; 3: MAD_SAT output[0].xyz, temp[2].xxx_, (temp[1] - const[1]).xyz_, const[1].xyz_; 4: MOV_SAT output[0].w, temp[1].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 2: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ 3: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 4: src0.w = temp[1] MAD_SAT 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[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 3: src0.xyz = input[1], src0.w = temp[1], src1.xyz = const[0] MAD_SAT temp[2].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[1], src2.xyz = temp[2], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[1].7: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=0 end=0 1 readers 2: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=2 end=3 1 readers 3: TEMP[2].1: chan 0: start=3 end=4 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0], src1.w = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[2], src0.w = temp[0], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 4: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00187804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 2 0:CMN_INST 0x001c0a05:OUT TEX_WAIT NOP wmask: R omask: A 1:RGB_ADDR 0x08040002:Addr0: 2t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], COLOR[1], LINEAR DCL IN[2], FOG, PERSPECTIVE DCL IN[3], GENERIC[0], PERSPECTIVE DCL IN[4], GENERIC[1], PERSPECTIVE DCL IN[5], GENERIC[4], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL SAMP[4] DCL CONST[1..2] DCL TEMP[0..4] IMM FLT32 { 1.0000, 0.7000, 0.3000, 2.0000} 0: TEX TEMP[0], IN[5], SAMP[4], 2D 1: TEX TEMP[1], IN[4], SAMP[1], 2D 2: MUL TEMP[1].xyz, TEMP[0].xxxx, TEMP[1] 3: MUL TEMP[1].w, TEMP[0].xxxx, TEMP[1] 4: DP3_SAT TEMP[0].x, TEMP[0], IMM[0].xxxx 5: TEX TEMP[2], IN[3], SAMP[0], 2D 6: ADD TEMP[0].x, -TEMP[0], IMM[0] 7: MAD TEMP[1].w, TEMP[2], TEMP[0].xxxx, TEMP[1] 8: MAD TEMP[0].xyz, TEMP[2], TEMP[0].xxxx, TEMP[1] 9: MUL TEMP[1].xyz, IN[1], TEMP[1].wwww 10: MUL TEMP[2].xyz, TEMP[0].wwww, TEMP[1] 11: MAD TEMP[1].w, TEMP[0], IMM[0].zzzz, IMM[0].yyyy 12: MUL TEMP[1].xyz, TEMP[1].wwww, IN[0] 13: MUL TEMP[0].xyz, TEMP[1], TEMP[0] 14: MAD_SAT TEMP[3].xyz, TEMP[0], IMM[0].wwww, TEMP[2] 15: MOV_SAT TEMP[3].w, IMM[0].xxxx 16: MAD_SAT TEMP[4].x, IN[2].xxxx, CONST[1].xxxx, CONST[1].yyyy 17: LRP OUT[0].xyz, TEMP[4].xxxx, TEMP[3], CONST[2] 18: MOV OUT[0].w, TEMP[3] 19: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV output[0].w, temp[3]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV output[0].w, temp[3]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV output[0].w, temp[3]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV output[0].w, temp[3]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: LRP_SAT output[0].xyz, temp[4].xxxx, temp[3], const[2]; 18: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[5], 2D[4]; 1: TEX temp[1], input[4], 2D[1]; 2: MUL temp[1].xyz, temp[0].xxxx, temp[1]; 3: MUL temp[1].w, temp[0].xxxx, temp[1]; 4: DP3_SAT temp[0].x, temp[0], const[3].xxxx; 5: TEX temp[2], input[3], 2D[0]; 6: ADD temp[0].x, -temp[0], const[3]; 7: MAD temp[1].w, temp[2], temp[0].xxxx, temp[1]; 8: MAD temp[0].xyz, temp[2], temp[0].xxxx, temp[1]; 9: MUL temp[1].xyz, input[1], temp[1].wwww; 10: MUL temp[2].xyz, temp[0].wwww, temp[1]; 11: MAD temp[1].w, temp[0], const[3].zzzz, const[3].yyyy; 12: MUL temp[1].xyz, temp[1].wwww, input[0]; 13: MUL temp[0].xyz, temp[1], temp[0]; 14: MAD_SAT temp[3].xyz, temp[0], const[3].wwww, temp[2]; 15: MOV_SAT temp[3].w, const[3].xxxx; 16: MAD_SAT temp[4].x, input[2].xxxx, const[1].xxxx, const[1].yyyy; 17: ADD temp[5].xyz, temp[3], -const[2]; 18: MAD_SAT output[0].xyz, temp[4].xxxx, temp[5], const[2]; 19: MOV_SAT output[0].w, temp[3]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[5].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xxx_, temp[1].xyz_; 3: MUL temp[1].w, temp[0].___x, temp[1].___w; 4: DP3_SAT temp[0].x, temp[0].xyz_, const[3].xxx_; 5: TEX temp[2], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, const[3].x___; 7: MAD temp[1].w, temp[2].___w, temp[0].___x, temp[1].___w; 8: MAD temp[0].xyz, temp[2].xyz_, temp[0].xxx_, temp[1].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].www_; 10: MUL temp[2].xyz, temp[0].www_, temp[1].xyz_; 11: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 12: MUL temp[1].xyz, temp[1].www_, input[0].xyz_; 13: MUL temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 14: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].www_, temp[2].xyz_; 15: MOV_SAT temp[3].w, const[3].___x; 16: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 17: ADD temp[5].xyz, temp[3].xyz_, -const[2].xyz_; 18: MAD_SAT output[0].xyz, temp[4].xxx_, temp[5].xyz_, const[2].xyz_; 19: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[5].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xxx_, temp[1].xyz_; 3: MUL temp[1].w, temp[0].___x, temp[1].___w; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[2], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[1].w, temp[2].___w, temp[0].___x, temp[1].___w; 8: MAD temp[0].xyz, temp[2].xyz_, temp[0].xxx_, temp[1].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].www_; 10: MUL temp[2].xyz, temp[0].www_, temp[1].xyz_; 11: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 12: MUL temp[1].xyz, temp[1].www_, input[0].xyz_; 13: MUL temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 14: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].www_, temp[2].xyz_; 15: MOV_SAT temp[3].w, none.___1; 16: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 17: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 18: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[5].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xxx_, temp[1].xyz_; 3: MUL temp[1].w, temp[0].___x, temp[1].___w; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[2], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[1].w, temp[2].___w, temp[0].___x, temp[1].___w; 8: MAD temp[0].xyz, temp[2].xyz_, temp[0].xxx_, temp[1].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].www_; 10: MUL temp[2].xyz, temp[0].www_, temp[1].xyz_; 11: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 12: MUL temp[1].xyz, temp[1].www_, input[0].xyz_; 13: MUL temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 14: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].www_, temp[2].xyz_; 15: MOV_SAT temp[3].w, none.___1; 16: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 17: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 18: MOV_SAT output[0].w, temp[3].___w; CONST[3] = { 1.0000 0.7000 0.3000 2.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[5].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: MUL temp[1].xyz, temp[0].xxx_, temp[1].xyz_; 3: MUL temp[1].w, temp[0].___x, temp[1].___w; 4: DP3_SAT temp[0].x, temp[0].xyz_, none.111_; 5: TEX temp[2], input[3].xy__, 2D[0]; 6: ADD temp[0].x, -temp[0].x___, none.1___; 7: MAD temp[1].w, temp[2].___w, temp[0].___x, temp[1].___w; 8: MAD temp[0].xyz, temp[2].xyz_, temp[0].xxx_, temp[1].xyz_; 9: MUL temp[1].xyz, input[1].xyz_, temp[1].www_; 10: MUL temp[2].xyz, temp[0].www_, temp[1].xyz_; 11: MAD temp[1].w, temp[0].___w, const[3].___z, const[3].___y; 12: MUL temp[1].xyz, temp[1].www_, input[0].xyz_; 13: MUL temp[0].xyz, temp[1].xyz_, temp[0].xyz_; 14: MAD_SAT temp[3].xyz, temp[0].xyz_, const[3].www_, temp[2].xyz_; 15: MOV_SAT temp[3].w, none.___1; 16: MAD_SAT temp[4].x, input[2].x___, const[1].x___, const[1].y___; 17: MAD_SAT output[0].xyz, temp[4].xxx_, (temp[3] - const[2]).xyz_, const[2].xyz_; 18: MOV_SAT output[0].w, temp[3].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[5].xy__, 2D[4]; 1: TEX temp[1], input[4].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 3: src0.xyz = temp[0], src0.w = temp[1] MAD temp[1].w, src0.x, src0.w, src0.0 4: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 5: TEX temp[2], input[3].xy__, 2D[0]; 6: src0.xyz = temp[0] MAD temp[0].x, -src0.x__, src0.111, src0.1__ 7: src0.xyz = temp[0], src0.w = temp[2], src1.w = temp[1] MAD temp[1].w, src0.w, src0.x, src1.w 8: src0.xyz = temp[2], src1.xyz = temp[0], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = input[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 10: src0.xyz = temp[1], src0.w = temp[0] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 11: src0.xyz = const[3], src0.w = temp[0] MAD temp[1].w, src0.w, src0.z, src0.y 12: src0.xyz = input[0], src0.w = temp[1] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 13: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 14: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 15: MAD_SAT temp[3].w, src0.1, src0.1, src0.0 16: src0.xyz = input[2], src1.xyz = const[1] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ 17: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 18: src0.w = temp[3] MAD_SAT 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[5].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: TEX temp[2], input[3].xy__, 2D[0]; 4: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[1].w, src0.x, src0.w, src0.0 5: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = input[2], src0.w = temp[2], src1.xyz = const[1], src1.w = temp[1], src2.xyz = temp[0] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ MAD temp[1].w, src0.w, src2.x, src1.w 8: src0.xyz = temp[2], src1.xyz = temp[0], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = input[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 10: src0.xyz = temp[1], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 11: src0.xyz = input[0], src0.w = temp[1] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 12: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 14: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[5].xy__, 2D[4]; 2: TEX temp[1], input[4].xy__, 2D[1]; 3: TEX temp[2], input[3].xy__, 2D[0]; 4: src0.xyz = temp[0], src0.w = temp[1], src1.xyz = temp[1] MAD temp[1].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[1].w, src0.x, src0.w, src0.0 5: src0.xyz = temp[0] DP3_SAT temp[0].x, src0.xyz, src0.111 MAD_SAT temp[3].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[0], src0.w = temp[3] MAD temp[0].x, -src0.x__, src0.111, src0.1__ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = input[2], src0.w = temp[2], src1.xyz = const[1], src1.w = temp[1], src2.xyz = temp[0] MAD_SAT temp[4].x, src0.x__, src1.x__, src1.y__ MAD temp[1].w, src0.w, src2.x, src1.w 8: src0.xyz = temp[2], src1.xyz = temp[0], src2.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xxx, src2.xyz 9: src0.xyz = input[1], src0.w = temp[1] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 10: src0.xyz = temp[1], src0.w = temp[0], src1.xyz = const[3] MAD temp[2].xyz, src0.www, src0.xyz, src0.000 MAD temp[1].w, src0.w, src1.z, src1.y 11: src0.xyz = input[0], src0.w = temp[1] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 12: src0.xyz = temp[1], src1.xyz = temp[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[2] MAD_SAT temp[3].xyz, src0.xyz, src0.www, src1.xyz 14: src0.xyz = const[2], src1.xyz = temp[3], src2.xyz = temp[4], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=5 chan 1: start=1 end=5 chan 2: start=1 end=5 chan 3: start=1 end=10 5 readers 2: TEMP[1].15: chan 0: start=2 end=4 chan 1: start=2 end=4 chan 2: start=2 end=4 chan 3: start=2 end=4 2 readers 3: TEMP[2].15: chan 0: start=3 end=8 chan 1: start=3 end=8 chan 2: start=3 end=8 chan 3: start=3 end=7 2 readers 4: TEMP[1].7: chan 0: start=4 end=8 chan 1: start=4 end=8 chan 2: start=4 end=8 chan 3: start=0 end=0 1 readers 4: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=4 end=7 1 readers 5: TEMP[0].1: chan 0: start=5 end=6 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 5: TEMP[3].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=5 end=6 1 readers 6: TEMP[0].1: chan 0: start=6 end=8 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 2 readers 7: TEMP[4].1: chan 0: start=7 end=14 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers 7: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=7 end=9 1 readers 8: TEMP[0].7: chan 0: start=8 end=12 chan 1: start=8 end=12 chan 2: start=8 end=12 chan 3: start=0 end=0 1 readers 9: TEMP[1].7: chan 0: start=9 end=10 chan 1: start=9 end=10 chan 2: start=9 end=10 chan 3: start=0 end=0 1 readers 10: TEMP[2].7: chan 0: start=10 end=13 chan 1: start=10 end=13 chan 2: start=10 end=13 chan 3: start=0 end=0 1 readers 10: TEMP[1].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=10 end=11 1 readers 11: TEMP[1].7: chan 0: start=11 end=12 chan 1: start=11 end=12 chan 2: start=11 end=12 chan 3: start=0 end=0 1 readers 12: TEMP[0].7: chan 0: start=12 end=13 chan 1: start=12 end=13 chan 2: start=12 end=13 chan 3: start=0 end=0 1 readers 13: TEMP[3].7: chan 0: start=13 end=14 chan 1: start=13 end=14 chan 2: start=13 end=14 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[4], input[4].xy__, 2D[4]; 2: TEX temp[3], input[3].xy__, 2D[1]; 3: TEX temp[2], input[2].xy__, 2D[0]; 4: src0.xyz = temp[4], src0.w = temp[3], src1.xyz = temp[3] MAD temp[3].xyz, src0.xxx, src1.xyz, src0.000 MAD temp[0].w, src0.x, src0.w, src0.0 5: src0.xyz = temp[4] DP3_SAT temp[5].y, src0.xyz, src0.111 MAD_SAT temp[1].w, src0.1, src0.1, src0.0 6: src0.xyz = temp[5], src0.w = temp[1] MAD temp[5].y, -src0._y_, src0._1_, src0._1_ MAD_SAT color[0].w, src0.w, src0.1, src0.0 7: src0.xyz = input[5], src0.w = temp[2], src1.xyz = const[1], src1.w = temp[0], src2.xyz = temp[5] MAD_SAT temp[5].x, src0.x__, src1.x__, src1.y__ MAD temp[0].w, src0.w, src2.y, src1.w 8: src0.xyz = temp[2], src1.xyz = temp[5], src2.xyz = temp[3] MAD temp[2].xyz, src0.xyz, src1.yyy, src2.xyz 9: src0.xyz = input[1], src0.w = temp[0] MAD temp[1].xyz, src0.xyz, src0.www, src0.000 10: src0.xyz = temp[1], src0.w = temp[4], src1.xyz = const[3] MAD temp[1].xyz, src0.www, src0.xyz, src0.000 MAD temp[0].w, src0.w, src1.z, src1.y 11: src0.xyz = input[0], src0.w = temp[0] MAD temp[0].xyz, src0.www, src0.xyz, src0.000 12: src0.xyz = temp[0], src1.xyz = temp[2] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 13: src0.xyz = temp[0], src0.w = const[3], src1.xyz = temp[1] MAD_SAT temp[0].xyz, src0.xyz, src0.www, src1.xyz 14: src0.xyz = const[2], src1.xyz = temp[0], src2.xyz = temp[5], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02440000: id: 4 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe404f404: src: 4 R/G/A/A dst: 4 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe403f403: src: 3 R/G/A/A dst: 3 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 3 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000c04:Addr0: 4t, Addr1: 3t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020003:Addr0: 3t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442000:rgb_A_src:0 R/R/R 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00600000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 A 0 targ 0 w:0 5 RGBA_INST: 0x20490030:MAD dest:3 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00185004:ALU TEX_WAIT wmask: AG omask: NONE 1:RGB_ADDR 0x08020004:Addr0: 4t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00db0220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 1/1/1 0 targ: 0 4 ALPHA_INST:0x00c18010:MAD dest:1 alp_A_src:0 1 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20000051:DP3 dest:5 rgb_C_src:0 R/R/R 0 alp_C_src:0 0 0 5 0:CMN_INST 0x00141005:OUT TEX_WAIT wmask: G omask: A 1:RGB_ADDR 0x08020005:Addr0: 5t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x009a0c30:rgb_A_src:0 0/G/0 1 rgb_B_src:0 0/1/0 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x204d0050:MAD dest:5 rgb_C_src:0 0/1/0 0 alp_C_src:0 0 0 6 0:CMN_INST 0x00084804:ALU TEX_WAIT wmask: AR omask: NONE 1:RGB_ADDR 0x00540405:Addr0: 5t, Addr1: 1c, Addr2: 5t, srcp:0 2:ALPHA_ADDR 0x08000002:Addr0: 2t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x0030c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:2 G 0 targ 0 w:0 5 RGBA_INST: 0x1a485050:MAD dest:5 rgb_C_src:1 G/0/0 0 alp_C_src:1 A 0 7 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x00301402:Addr0: 2t, Addr1: 5t, Addr2: 3t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0024a220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 G/G/G 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00222020:MAD dest:2 rgb_C_src:2 R/G/B 0 alp_C_src:0 R 0 8 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 9 0:CMN_INST 0x00007804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08040c01:Addr0: 1t, Addr1: 3c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020004:Addr0: 4t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x0048c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 B 0 targ 0 w:0 5 RGBA_INST: 0x0a490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:1 G 0 10 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020000:Addr0: 0t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x0044036c:rgb_A_src:0 A/A/A 0 rgb_B_src:0 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 11 0:CMN_INST 0x00003804:ALU TEX_WAIT wmask: RGB omask: NONE 1:RGB_ADDR 0x08000800:Addr0: 0t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 12 0:CMN_INST 0x00083a04:ALU TEX_WAIT NOP wmask: RGB omask: NONE 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020103:Addr0: 3c, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x006d8220:rgb_A_src:0 R/G/B 0 rgb_B_src:0 A/A/A 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00221000:MAD dest:0 rgb_C_src:1 R/G/B 0 alp_C_src:0 R 0 13 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40500102:Addr0: 2c, Addr1: 0t, Addr2: 5t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], FOG, PERSPECTIVE DCL IN[2], GENERIC[0], PERSPECTIVE DCL IN[3], GENERIC[1], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL SAMP[1] DCL CONST[0..1] DCL TEMP[0..3] 0: TEX TEMP[0], IN[2], SAMP[0], 2D 1: TEX TEMP[1].xyz, IN[3], SAMP[1], 2D 2: MUL TEMP[0].xyz, TEMP[0], TEMP[1] 3: MUL_SAT TEMP[2].xyz, TEMP[0], IN[0] 4: MUL_SAT TEMP[2].w, TEMP[0], IN[0] 5: MAD_SAT TEMP[3].x, IN[1].xxxx, CONST[0].xxxx, CONST[0].yyyy 6: LRP OUT[0].xyz, TEMP[3].xxxx, TEMP[2], CONST[1] 7: MOV OUT[0].w, TEMP[2] 8: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV output[0].w, temp[2]; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: LRP_SAT output[0].xyz, temp[3].xxxx, temp[2], const[1]; 7: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[2], 2D[0]; 1: TEX temp[1].xyz, input[3], 2D[1]; 2: MUL temp[0].xyz, temp[0], temp[1]; 3: MUL_SAT temp[2].xyz, temp[0], input[0]; 4: MUL_SAT temp[2].w, temp[0], input[0]; 5: MAD_SAT temp[3].x, input[1].xxxx, const[0].xxxx, const[0].yyyy; 6: ADD temp[4].xyz, temp[2], -const[1]; 7: MAD_SAT output[0].xyz, temp[3].xxxx, temp[4], const[1]; 8: MOV_SAT output[0].w, temp[2]; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: ADD temp[4].xyz, temp[2].xyz_, -const[1].xyz_; 7: MAD_SAT output[0].xyz, temp[3].xxx_, temp[4].xyz_, const[1].xyz_; 8: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: MUL temp[0].xyz, temp[0].xyz_, temp[1].xyz_; 3: MUL_SAT temp[2].xyz, temp[0].xyz_, input[0].xyz_; 4: MUL_SAT temp[2].w, temp[0].___w, input[0].___w; 5: MAD_SAT temp[3].x, input[1].x___, const[0].x___, const[0].y___; 6: MAD_SAT output[0].xyz, temp[3].xxx_, (temp[2] - const[1]).xyz_, const[1].xyz_; 7: MOV_SAT output[0].w, temp[2].___w; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[2].xy__, 2D[0]; 1: TEX temp[1].xyz, input[3].xy__, 2D[1]; 2: src0.xyz = temp[0], src1.xyz = temp[1] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 3: src0.xyz = temp[0], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 4: src0.w = temp[0], src1.w = input[0] MAD_SAT temp[2].w, src0.w, src1.w, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 7: src0.w = temp[2] MAD_SAT 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[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[2].xy__, 2D[0]; 2: TEX temp[1].xyz, input[3].xy__, 2D[1]; 3: src0.xyz = temp[0], src0.w = temp[0], src1.xyz = temp[1], src1.w = input[0] MAD temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[2].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[0], src0.w = temp[2], src1.xyz = input[0] MAD_SAT temp[2].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[1], src1.xyz = const[0] MAD_SAT temp[3].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[2], src2.xyz = temp[3], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz 1: TEMP[0].15: chan 0: start=1 end=3 chan 1: start=1 end=3 chan 2: start=1 end=3 chan 3: start=1 end=3 2 readers 2: TEMP[1].7: chan 0: start=2 end=3 chan 1: start=2 end=3 chan 2: start=2 end=3 chan 3: start=0 end=0 1 readers 3: TEMP[0].7: chan 0: start=3 end=4 chan 1: start=3 end=4 chan 2: start=3 end=4 chan 3: start=0 end=0 1 readers 3: TEMP[2].8: chan 0: start=0 end=0 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=3 end=4 1 readers 4: TEMP[2].7: chan 0: start=4 end=6 chan 1: start=4 end=6 chan 2: start=4 end=6 chan 3: start=0 end=0 1 readers 5: TEMP[3].1: chan 0: start=5 end=6 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: TEX temp[2].xyz, input[2].xy__, 2D[1]; 3: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = temp[2], src1.w = input[0] MAD temp[1].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT temp[1].w, src0.w, src1.w, src0.0 4: src0.xyz = temp[1], src0.w = temp[1], src1.xyz = input[0] MAD_SAT temp[0].xyz, src0.xyz, src1.xyz, src0.000 MAD_SAT color[0].w, src0.w, src0.1, src0.0 5: src0.xyz = input[3], src1.xyz = const[0] MAD_SAT temp[1].x, src0.x__, src1.x__, src1.y__ 6: src0.xyz = const[1], src1.xyz = temp[0], src2.xyz = temp[1], srcp.xyz = (src1 - src0) MAD_SAT color[0].xyz, src2.xxx, srcp.xyz, src0.xyz R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00003807:TEX TEX_WAIT wmask: RGB omask: NONE 1:TEX_INST: 0x02410000: id: 1 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe402f402: src: 2 R/G/A/A dst: 2 R/G/B/A 3:TEX_DXDY: 0x00000000 2 0:CMN_INST 0x00107804:ALU TEX_WAIT wmask: ARGB omask: NONE 1:RGB_ADDR 0x08000801:Addr0: 1t, Addr1: 2t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c010:MAD dest:1 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20490010:MAD dest:1 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 3 0:CMN_INST 0x001c3805:OUT TEX_WAIT wmask: RGB omask: A 1:RGB_ADDR 0x08000001:Addr0: 1t, Addr1: 0t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020001:Addr0: 1t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x00c0c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:0 1 0 targ 0 w:0 5 RGBA_INST: 0x20490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 0 0 4 0:CMN_INST 0x00080804:ALU TEX_WAIT wmask: R omask: NONE 1:RGB_ADDR 0x08040003:Addr0: 3t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00902480:rgb_A_src:0 R/0/0 0 rgb_B_src:1 R/0/0 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00485010:MAD dest:1 rgb_C_src:1 G/0/0 0 alp_C_src:0 R 0 5 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x40100101:Addr0: 1c, Addr1: 0t, Addr2: 1t, srcp:1 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00446002:rgb_A_src:2 R/R/R 0 rgb_B_src:3 R/G/B 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00220000:MAD dest:0 rgb_C_src:0 R/G/B 0 alp_C_src:0 R 0 r300: Initial fragment program FRAG PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 DCL IN[0], COLOR, LINEAR DCL IN[1], GENERIC[0], PERSPECTIVE DCL OUT[0], COLOR DCL SAMP[0] DCL TEMP[0] IMM FLT32 { 0.2990, 0.5870, 0.1140, 1.0000} 0: TEX TEMP[0], IN[1], SAMP[0], 2D 1: DP3 TEMP[0].x, TEMP[0], IMM[0] 2: MUL OUT[0].w, IN[0], TEMP[0] 3: MUL OUT[0].xyz, IN[0], TEMP[0].xxxx 4: END Fragment Program: before compilation # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL output[0].w, input[0], temp[0]; 3: MUL output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'rewrite depth out' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL output[0].w, input[0], temp[0]; 3: MUL output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'transform KILP' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL output[0].w, input[0], temp[0]; 3: MUL output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'unroll loops' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL output[0].w, input[0], temp[0]; 3: MUL output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'saturate output writes' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL_SAT output[0].w, input[0], temp[0]; 3: MUL_SAT output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'transform TEX' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL_SAT output[0].w, input[0], temp[0]; 3: MUL_SAT output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'transform IF' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL_SAT output[0].w, input[0], temp[0]; 3: MUL_SAT output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'native rewrite' # Radeon Compiler Program 0: TEX temp[0], input[1], 2D[0]; 1: DP3 temp[0].x, temp[0], const[0]; 2: MUL_SAT output[0].w, input[0], temp[0]; 3: MUL_SAT output[0].xyz, input[0], temp[0].xxxx; Fragment Program: after 'deadcode' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: DP3 temp[0].x, temp[0].xyz_, const[0].xyz_; 2: MUL_SAT output[0].w, input[0].___w, temp[0].___w; 3: MUL_SAT output[0].xyz, input[0].xyz_, temp[0].xxx_; Fragment Program: after 'dataflow optimize' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: DP3 temp[0].x, temp[0].xyz_, const[0].xyz_; 2: MUL_SAT output[0].w, input[0].___w, temp[0].___w; 3: MUL_SAT output[0].xyz, input[0].xyz_, temp[0].xxx_; Fragment Program: after 'dataflow swizzles' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: DP3 temp[0].x, temp[0].xyz_, const[0].xyz_; 2: MUL_SAT output[0].w, input[0].___w, temp[0].___w; 3: MUL_SAT output[0].xyz, input[0].xyz_, temp[0].xxx_; CONST[0] = { 0.2990 0.5870 0.1140 1.0000 } Fragment Program: after 'dead constants' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: DP3 temp[0].x, temp[0].xyz_, const[0].xyz_; 2: MUL_SAT output[0].w, input[0].___w, temp[0].___w; 3: MUL_SAT output[0].xyz, input[0].xyz_, temp[0].xxx_; Fragment Program: after 'pair translate' # Radeon Compiler Program 0: TEX temp[0], input[1].xy__, 2D[0]; 1: src0.xyz = temp[0], src1.xyz = const[0] DP3 temp[0].x, src0.xyz, src1.xyz 2: src0.w = input[0], src1.w = temp[0] MAD_SAT color[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[0], src1.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 Fragment Program: after 'pair scheduling' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = input[0], src1.xyz = const[0], src1.w = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[0], src1.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 Fragment Program: after 'dead sources' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[0], input[1].xy__, 2D[0]; 2: src0.xyz = temp[0], src0.w = input[0], src1.xyz = const[0], src1.w = temp[0] DP3 temp[0].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[0], src1.xyz = temp[0] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 1: TEMP[0].15: chan 0: start=1 end=2 chan 1: start=1 end=2 chan 2: start=1 end=2 chan 3: start=1 end=2 2 readers 2: TEMP[0].1: chan 0: start=2 end=3 chan 1: start=0 end=0 chan 2: start=0 end=0 chan 3: start=0 end=0 1 readers Fragment Program: after 'register allocation' # Radeon Compiler Program 0: BEGIN_TEX; 1: TEX temp[1], input[1].xy__, 2D[0]; 2: src0.xyz = temp[1], src0.w = input[0], src1.xyz = const[0], src1.w = temp[1] DP3 temp[1].x, src0.xyz, src1.xyz MAD_SAT color[0].w, src0.w, src1.w, src0.0 3: src0.xyz = input[0], src1.xyz = temp[1] MAD_SAT color[0].xyz, src0.xyz, src1.xxx, src0.000 R500 Fragment Program: -------- 0 0:CMN_INST 0x00007807:TEX TEX_WAIT wmask: ARGB omask: NONE 1:TEX_INST: 0x02400000: id: 0 op:LD, ACQ, SCALED 2:TEX_ADDR: 0xe401f401: src: 1 R/G/A/A dst: 1 R/G/B/A 3:TEX_DXDY: 0x00000000 1 0:CMN_INST 0x00140805:OUT TEX_WAIT wmask: R omask: A 1:RGB_ADDR 0x08040001:Addr0: 1t, Addr1: 0c, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00442220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/G/B 0 targ: 0 4 ALPHA_INST:0x0068c000:MAD dest:0 alp_A_src:0 A 0 alp_B_src:1 A 0 targ 0 w:0 5 RGBA_INST: 0x20000011:DP3 dest:1 rgb_C_src:0 R/R/R 0 alp_C_src:0 0 0 2 0:CMN_INST 0x000b8005:OUT TEX_WAIT wmask: NONE omask: RGB 1:RGB_ADDR 0x08000400:Addr0: 0t, Addr1: 1t, Addr2: 128t, srcp:0 2:ALPHA_ADDR 0x08020080:Addr0: 128t, Addr1: 128t, Addr2: 128t, srcp:0 3 RGB_INST: 0x00002220:rgb_A_src:0 R/G/B 0 rgb_B_src:1 R/R/R 0 targ: 0 4 ALPHA_INST:0x00000000:MAD dest:0 alp_A_src:0 R 0 alp_B_src:0 R 0 targ 0 w:0 5 RGBA_INST: 0x00490000:MAD dest:0 rgb_C_src:0 0/0/0 0 alp_C_src:0 R 0 fixme:wininet:InternetSetOptionW Option INTERNET_OPTION_CONNECT_TIMEOUT (5000): STUB fixme:wininet:InternetSetOptionW INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT 5000 fixme:wininet:CommitUrlCacheEntryInternal entry already in cache - don't know what to do! radeon: Released Hyper-Z. archive Data/Cache/SoundCache-3.MPQ opened archive Data/Cache/SoundCache-2.MPQ opened archive Data/Cache/SoundCache-1.MPQ opened archive Data/Cache/SoundCache-0.MPQ opened archive Data/Cache/enGB/SoundCache-enGB.MPQ opened archive Data/wow-update-13164.MPQ opened archive Data/Cache/enGB/patch-enGB-13164.MPQ opened archive Data/Cache/patch-base-13164.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13164.MPQ opened archive Data/Cache/SoundCache-patch-13164.MPQ opened archive Data/wow-update-13205.MPQ opened archive Data/Cache/enGB/patch-enGB-13205.MPQ opened archive Data/Cache/patch-base-13205.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13205.MPQ opened archive Data/Cache/SoundCache-patch-13205.MPQ opened archive Data/wow-update-13287.MPQ opened archive Data/Cache/enGB/patch-enGB-13287.MPQ opened archive Data/Cache/patch-base-13287.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13287.MPQ opened archive Data/Cache/SoundCache-patch-13287.MPQ opened archive Data/wow-update-13329.MPQ opened archive Data/Cache/enGB/patch-enGB-13329.MPQ opened archive Data/Cache/patch-base-13329.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13329.MPQ opened archive Data/Cache/SoundCache-patch-13329.MPQ opened archive Data/wow-update-13596.MPQ opened archive Data/Cache/enGB/patch-enGB-13596.MPQ opened archive Data/Cache/patch-base-13596.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13596.MPQ opened archive Data/Cache/SoundCache-patch-13596.MPQ opened archive Data/wow-update-13623.MPQ opened archive Data/Cache/enGB/patch-enGB-13623.MPQ opened archive Data/Cache/patch-base-13623.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13623.MPQ opened archive Data/Cache/SoundCache-patch-13623.MPQ opened archive Data/enGB/wow-update-enGB-13914.MPQ opened archive Data/wow-update-base-13914.MPQ opened archive Data/Cache/enGB/patch-enGB-13914.MPQ opened archive Data/Cache/patch-base-13914.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-13914.MPQ opened archive Data/Cache/SoundCache-patch-13914.MPQ opened archive Data/enGB/wow-update-enGB-14007.MPQ opened archive Data/wow-update-base-14007.MPQ opened archive Data/Cache/enGB/patch-enGB-14007.MPQ opened archive Data/Cache/patch-base-14007.MPQ opened archive Data/Cache/enGB/SoundCache-patch-enGB-14007.MPQ opened archive Data/Cache/SoundCache-patch-14007.MPQ opened archive Data\art.MPQ opened archive Data\world.MPQ opened archive Data\sound.MPQ opened archive Data\enGB\locale-enGB.MPQ opened archive Data\enGB\speech-enGB.MPQ opened archive Data\expansion1.MPQ opened archive Data\expansion2.MPQ opened archive Data\enGB\expansion1-locale-enGB.MPQ opened archive Data\enGB\expansion2-locale-enGB.MPQ opened archive Data\enGB\expansion1-speech-enGB.MPQ opened archive Data\enGB\expansion2-speech-enGB.MPQ opened