10 Commits

Author SHA1 Message Date
Abdessamad DERRAZ
14f2418ce7 v1.9.10-2 : Commodore - Amiga (UAE4ARM) : Amiga CDTV extended ROM v1.00 2021-10-17 21:16:53 +02:00
Abdessamad DERRAZ
d29de10ece Neko Project II Kai : Add wav files
5f46db98ff/np2kai_libretro.info
2021-10-17 21:12:43 +02:00
Abdessamad DERRAZ
4fdaf52245 PCSX2 : EROM.BIN 2021-10-17 21:08:13 +02:00
Abdessamad DERRAZ
82cd9f2b49 NeoCD : UNIVERSE BIOS v3.3 2021-10-17 20:57:56 +02:00
Abdessamad DERRAZ
7505bed384 PCSX2 : v1.7.0 2021-10-17 20:47:31 +02:00
Abdessamad DERRAZ
d677acd6a1 PPSSPP : v1.12.2 2021-10-17 20:37:54 +02:00
Abdessamad DERRAZ
86a6843a3b Dolphin : Update 2021-10-17 20:34:00 +02:00
Abdessamad DERRAZ
7f0f5c7aa6 Genesis Plus GX Wide : Sonic & Knuckles 2021-10-17 20:27:43 +02:00
Abdessamad DERRAZ
5ebdad46fc Sinclair - ZX Spectrum (Fuse) 2021-10-17 20:22:46 +02:00
Abdessamad DERRAZ
3a364561f4 PS1: Update Beetle PSX
Thanks to @soredake
2021-10-17 20:14:14 +02:00
1639 changed files with 93254 additions and 88385 deletions

View File

@@ -223,6 +223,22 @@ ULUS10070 = true
ULES00719 = true ULES00719 = true
# No US release, it seems # No US release, it seems
# Star Wars: Lethal Alliance (#11551)
ULES00599 = true
ULUS10188 = true
# Digimon World Re:Digitize
ULJS00496 = true
NPJH50588 = true
ULAS42319 = true
# NOVA: Near Orbit Vanguard Alliance
NPUZ00179 = true
NPEZ00222 = true
# Street Riders (only region found. See #14746)
ULES00276 = true
[ClearToRAM] [ClearToRAM]
# SOCOM Navy Seals games require this. See issue #8973. # SOCOM Navy Seals games require this. See issue #8973.
# Navy Seals : Tactical Strike # Navy Seals : Tactical Strike
@@ -244,10 +260,16 @@ UCUS98645 = true
# Fireteam Bravo 2 Demo # Fireteam Bravo 2 Demo
UCUS98677 = true UCUS98677 = true
UCUS98691 = true UCUS98691 = true
# Fireteam Bravo 3
NPHG00032 = true # DBZ Tenkaichi Tag Team, see issue #14283
UCUS98716 = true ULJS00311 = true
UCES01242 = true ULAS42247 = true
ULUS10537 = true
ULUS10737 = true
ULJS19067 = true
ULAS42318 = true
NPUH90087 = true # demo
NPEH90042 = true # demo
[Force04154000Download] [Force04154000Download]
# This applies a hack to Dangan Ronpa, its demo, and its sequel. # This applies a hack to Dangan Ronpa, its demo, and its sequel.
@@ -356,9 +378,6 @@ ULJM05359 = true
ULJM05885 = true ULJM05885 = true
NPJH50825 = true NPJH50825 = true
ULKS46157 = true ULKS46157 = true
# GOW : JP/Korean
UCJS10114 = true
UCKS45084 = true
# GOW : Ghost of Sparta # GOW : Ghost of Sparta
UCUS98737 = true UCUS98737 = true
UCAS40323 = true UCAS40323 = true
@@ -526,6 +545,10 @@ ULJM05091 = true
# GachiTora! Abarenbou Kyoushi in High School need it to render shadows properly (see #14136) # GachiTora! Abarenbou Kyoushi in High School need it to render shadows properly (see #14136)
ULJS00355 = true ULJS00355 = true
NPJH50409 = true NPJH50409 = true
# MegaMan Maverick Hunter X (see #10085)
ULES00251 = true
ULUS10068 = true
ULJM05043 = true
[DisableAccurateDepth] [DisableAccurateDepth]
# Midnight Club: LA Remix # Midnight Club: LA Remix
@@ -619,12 +642,12 @@ UCES00373 = true
ULJS00078 = true ULJS00078 = true
UCAS40104 = true UCAS40104 = true
# Ys Seven # Ys Seven disabled (caused glitches, see #13529)
ULUS10551 = true # ULUS10551 = true
ULJM05475 = true # ULJM05475 = true
ULJM05475 = true # ULJM05475 = true
NPEH00065 = true # NPEH00065 = true
NPJH50350 = true # NPJH50350 = true
# Burnout Legends # Burnout Legends
ULES00125 = true ULES00125 = true
@@ -681,6 +704,11 @@ UCAS40347 = true
UCJS10038 = true UCJS10038 = true
UCJS18013 = true UCJS18013 = true
# Megaman Maverick Hunter X (see #10085)
ULES00251 = true
ULUS10068 = true
ULJM05043 = true
# Note! This whole flag is disabled temporarily by appending "Disabled" to its name). See 7914 # Note! This whole flag is disabled temporarily by appending "Disabled" to its name). See 7914
[YugiohSaveFixDisabled] [YugiohSaveFixDisabled]
# The cause of Yu-gi-oh series 's bad save (cannot save) are load "save status" and use cwcheat, # The cause of Yu-gi-oh series 's bad save (cannot save) are load "save status" and use cwcheat,
@@ -745,8 +773,6 @@ NPJH50017 = true
# The GOW games are very heavy and render as fast as they can. They benefit greatly from # The GOW games are very heavy and render as fast as they can. They benefit greatly from
# capping the framerate at 60fps. # capping the framerate at 60fps.
UCJS10114 = true
UCKS45084 = true
# GOW : Ghost of Sparta # GOW : Ghost of Sparta
UCUS98737 = true UCUS98737 = true
UCAS40323 = true UCAS40323 = true
@@ -847,6 +873,26 @@ ULES01495 = true
# Atari Classics Evolved # Atari Classics Evolved
ULUS10325 = true ULUS10325 = true
# Kurohyou 2: Ryu ga Gotoku Ashura Hen (Japan)
NPJH50562 = true
NPJH50333 = true
# Silent Hill Origin
ULUS10285 = true
ULES00869 = true
# Resistance Retribution
UCES01184 = true
UCUS98668 = true
# Spider-Man 3
ULES00938 = true
ULUS10317 = true
# NBA 2K13
ULUS10598 = true
ULES01578 = true
[JitInvalidationHack] [JitInvalidationHack]
# This is an absolutely awful hack that somehow prevents issues when clearing the JIT, # This is an absolutely awful hack that somehow prevents issues when clearing the JIT,
# if the game has copied code with EmuHack opcodes or something. Hopefully will be able # if the game has copied code with EmuHack opcodes or something. Hopefully will be able
@@ -859,6 +905,7 @@ ULES00034 = true
ULES00035 = true ULES00035 = true
# MTX MotoTrax # MTX MotoTrax
ULUS10138 = true ULUS10138 = true
ULES00581 = true
[HideISOFiles] [HideISOFiles]
# DJ Max Portable has some crude copy-protection functionality where it looks for ISO/CSO files # DJ Max Portable has some crude copy-protection functionality where it looks for ISO/CSO files
@@ -989,12 +1036,6 @@ ULJM05533 = true
NPJH50006 = true NPJH50006 = true
ULES01301 = true ULES01301 = true
[DoublePrecisionSinCos]
# Hitman Reborn Battle Arena 2 (#12900)
ULJS00218 = true
# Hitman Reborn Battle Arena
ULJS00157 = true
[DisableFirstFrameReadback] [DisableFirstFrameReadback]
# Wipeout Pure: Temporary workaround for lens flare flicker. See #13344 # Wipeout Pure: Temporary workaround for lens flare flicker. See #13344
UCUS98612 = true UCUS98612 = true
@@ -1003,6 +1044,15 @@ UCES00001 = true
UCKS45008 = true UCKS45008 = true
NPJG00059 = true NPJG00059 = true
#Socom FireTeam Bravo 3 / Navy Seals Portable. See issue #11814
UCES01242 = true
UCUS98716 = true
NPHG00032 = true
NPJG00035 = true
UCJS10102 = true
NPEG90024 = true # demo
NPJG90068 = true # demo
[MpegAvcWarmUp] [MpegAvcWarmUp]
# God Eater issue #13527 ,It is custom mpeg library that required sceMpegGetAvcAu return ERROR_MPEG_NO_DATA but break FIFA 14 issue #14086 # God Eater issue #13527 ,It is custom mpeg library that required sceMpegGetAvcAu return ERROR_MPEG_NO_DATA but break FIFA 14 issue #14086
# God Eater 1 # God Eater 1
@@ -1027,3 +1077,8 @@ NPJH50352 = true
ULUS10563FV = true ULUS10563FV = true
ULJS19081 = true ULJS19081 = true
NPJH50352 = true NPJH50352 = true
# Field Commander, see issue #10209
ULUS10088 = true
ULES00335 = true
ULKS46070 = true

Binary file not shown.

View File

@@ -1,200 +1,202 @@
# Windows - DINPUT # Windows - DINPUT
8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 8f0e1200000000000000504944564944,Acme,platform:Windows,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows, ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Windows,
6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows, 0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows, 6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Windows,
88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows, 88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,platform:Windows,
4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows, 4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Windows,
25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows, 25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,platform:Windows,
4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows, 4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Windows,
6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,platform:Windows,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13, 36280100000000000000504944564944,OUYA Controller,platform:Windows,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,
4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows, 4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Windows,
00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows, 00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows, 00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Windows,
28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7, 28040140000000000000504944564944,GamePad Pro USB,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9, ff113133000000000000504944564944,SVEN X-PAD,platform:Windows,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,
8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 8f0e0300000000000000504944564944,Piranha xtreme,platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 8f0e0d31000000000000504944564944,Multilaser JS071 USB,platform:Windows,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5, 10080300000000000000504944564944,PS2 USB,platform:Windows,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,
79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows, 79000600000000000000504944564944,G-Shark GS-GP702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Windows,
4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows, 4b12014d000000000000504944564944,NYKO AIRFLO,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftstick:a0,rightstick:a2,leftshoulder:a3,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:h0.6,lefty:h0.12,rightx:h0.9,righty:h0.4,lefttrigger:b6,righttrigger:b7,platform:Windows,
d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows, d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows, a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,platform:Windows,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 6f0e1e01000000000000504944564944,Rock Candy Gamepad for PS3,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows, 83056020000000000000504944564944,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,y:b2,x:b3,start:b7,back:b6,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Windows,
10080100000000000000504944564944,PS1 USB,platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 10080100000000000000504944564944,PS1 USB,platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows, 49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9,platform:Windows,
4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Windows, 4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Windows,
0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows, 0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
79004318000000000000504944564944,Mayflash GameCube Controller Adapter,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b0,start:b9,guide:b0,leftshoulder:b4,rightshoulder:b7,leftstick:b0,rightstick:b0,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 79004318000000000000504944564944,Mayflash GameCube Controller Adapter,platform:Windows,a:b1,b:b2,x:b0,y:b3,back:b0,start:b9,guide:b0,leftshoulder:b4,rightshoulder:b7,leftstick:b0,rightstick:b0,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
79000018000000000000504944564944,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows, 79000018000000000000504944564944,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows, 2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Windows,
300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,platform:Windows, 300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,platform:Windows,
10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,platform:Windows, 10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,platform:Windows,
63252305000000000000504944564944,USB Vibration Joystick (BM),platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 63252305000000000000504944564944,USB Vibration Joystick (BM),platform:Windows,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8, 20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
02200090000000000000504944564944,8Bitdo NES30 PRO USB,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8, 02200090000000000000504944564944,8Bitdo NES30 PRO USB,platform:Windows,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,
ff113133000000000000504944564944,Gembird JPD-DualForce,platform:Windows,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11, ff113133000000000000504944564944,Gembird JPD-DualForce,platform:Windows,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,
341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows, 341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Windows,
c0111352000000000000504944564944,Battalife Joystick,platform:Windows,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1, c0111352000000000000504944564944,Battalife Joystick,platform:Windows,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1,
100801e5000000000000504944564944,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Windows, 100801e5000000000000504944564944,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Windows,
4c05cc09000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows, 4c05cc09000000000000504944564944,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
4c05a00b000000000000504944564944,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows, 4c05a00b000000000000504944564944,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Windows,
# OS X # OS X
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X, 0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Mac OS X,
6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, 6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, 6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, 6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X, 6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Mac OS X,
4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X, 4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Mac OS X,
4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X, 4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Mac OS X,
5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, 5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X, 891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Mac OS X,
4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X, 4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Mac OS X,
8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 8f0e0000000000000300000000000000,Piranha xtreme,platform:Mac OS X,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 0d0f0000000000004d00000000000000,HORI Gem Pad 3,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X, 79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,platform:Mac OS X,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X, AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,platform:Mac OS X,
050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X, 050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,platform:Mac OS X,
83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X, 83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
5e04000000000000dd02000000000000,Xbox One Wired Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4, 5e04000000000000dd02000000000000,Xbox One Wired Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,platform:Mac OS X, 050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,platform:Mac OS X,
79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,platform:Mac OS X, 79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,platform:Mac OS X,
2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X, 2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X, 351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X, b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X, 10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Mac OS X,
d814000000000000cecf000000000000,MC Cthulhu,platform:Mac OS X,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7, d814000000000000cecf000000000000,MC Cthulhu,platform:Mac OS X,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7,
0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4, 0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,platform:Mac OS X,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4,
5e04000000000000e002000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b10,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4, 5e04000000000000e002000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b10,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
79000000000000001100000000000000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a3,lefty:a4,platform:Mac OS X, 79000000000000001100000000000000,Retrolink Classic Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a3,lefty:a4,platform:Mac OS X,
4c05000000000000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X, 4c05000000000000cc09000000000000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Mac OS X,
5e04000000000000ea02000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4, 5e04000000000000ea02000000000000,Xbox Wireless Controller,platform:Mac OS X,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,
81170000000000007e05000000000000,Sega Saturn,x:b0,a:b2,b:b4,y:b6,start:b13,dpleft:b15,dpdown:b16,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,lefttrigger:b10,rightshoulder:b9,righttrigger:a4,righttrigger:b11,leftx:a0,lefty:a2,platform:Mac OS X, 81170000000000007e05000000000000,Sega Saturn,x:b0,a:b2,b:b4,y:b6,start:b13,dpleft:b15,dpdown:b16,dpright:b14,dpup:b17,leftshoulder:b8,lefttrigger:a5,lefttrigger:b10,rightshoulder:b9,righttrigger:a4,righttrigger:b11,leftx:a0,lefty:a2,platform:Mac OS X,
bd1200000000000015d0000000000000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X, bd1200000000000015d0000000000000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Mac OS X,
03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X, 03000000632500002305000000010000,Redragon Saturn,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Mac OS X,
# Linux # Linux
050000004c0500006802000000000000,Sony PLAYSTATION(R)3 Controller,platform:Linux,a:b14,b:b13,x:b15,y:b12,back:b0,guide:b16,start:b3,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpdown:b6,dpleft:b7,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a12,righttrigger:a13, 050000004c0500006802000000000000,Sony PLAYSTATION(R)3 Controller,platform:Linux,a:b14,b:b13,x:b15,y:b12,back:b0,guide:b16,start:b3,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpdown:b6,dpleft:b7,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a12,righttrigger:a13,
03000000ff1100004133000010010000,GreenAsia Inc.USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 03000000ff1100004133000010010000,GreenAsia Inc.USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux, 0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,platform:Linux,
03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux, 03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,platform:Linux,
030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux, 030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,platform:Linux,
030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux, 030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,platform:Linux,
03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux, 03000000451300000830000010010000,NYKO CORE,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux, 030000004c050000c405000011010000,Sony DualShock 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 030000006f0e00003001000001010000,EA Sports PS3 Controller,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux, 030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,
03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux, 03000000100800000100000010010000,Twin USB PS2 Adapter,a:b2,b:b1,y:b0,x:b3,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux, 03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux, 030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5, 030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,
030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2, 030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,
030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux, 030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 030000006d04000016c2000010010000,Logitech Logitech Dual Action,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux, 03000000260900008888000000010000,GameCube {WiseGroup USB box},a:b0,b:b2,y:b3,x:b1,start:b7,leftshoulder:,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,rightstick:,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,platform:Linux,
030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux, 030000006d04000011c2000010010000,Logitech WingMan Cordless RumblePad,a:b0,b:b1,y:b4,x:b3,start:b8,guide:b5,back:b2,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b9,righttrigger:b10,platform:Linux,
030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 030000006d04000018c2000010010000,Logitech Logitech RumblePad 2 USB,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, 05000000d6200000ad0d000001000000,Moga Pro,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b6,leftstick:b7,rightstick:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 030000004f04000009d0000000010000,Thrustmaster Run N Drive Wireless PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7, 030000004f04000008d0000000010000,Thrustmaster Run N Drive Wireless,platform:Linux,a:b1,b:b2,x:b0,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7,
0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux, 0300000000f000000300000000010000,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux, 0300000000f00000f100000000010000,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,platform:Linux,
030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000006f0e00001f01000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1, 03000000280400000140000000010000,Gravis GamePad Pro USB ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftx:a0,lefty:a1,
030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000005e0400008502000000010000,Microsoft X-Box pad (Japan),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e0400008502000000010000,Microsoft X-Box pad (Japan),platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5, 03000000250900000500000000010000,Sony PS2 pad with SmartJoy adapter,platform:Linux,a:b2,b:b1,y:b0,x:b3,start:b8,back:b9,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,
030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux, 030000008916000000fd000024010000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux, 030000004f04000000b3000010010000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,platform:Linux,
03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux, 03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,platform:Linux,
050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux, 050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,
060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux, 060000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux, 050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux, 05000000504c415953544154494f4e00,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,platform:Linux,
03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4, 03000000790000000600000010010000,DragonRise Inc. Generic USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13, 03000000666600000488000000010000,Super Joy Box 5 Pro,platform:Linux,a:b2,b:b1,x:b3,y:b0,back:b9,start:b8,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b4,righttrigger:b5,dpup:b12,dpleft:b15,dpdown:b14,dpright:b13,
05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2, 05000000362800000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2, 05000000362800000100000003010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,
030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000008916000001fd000024010000,Razer Onza Classic Edition,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e040000d102000001010000,Microsoft X-Box One pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux, 030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1, 03000000790000001100000010010000,RetroLink Saturn Classic Controller,platform:Linux,x:b3,a:b0,b:b1,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16, 050000007e0500003003000001000000,Nintendo Wii U Pro Controller,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b8,start:b9,guide:b10,leftshoulder:b4,rightshoulder:b5,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:b13,dpleft:b15,dpdown:b14,dpright:b16,
030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 030000005e0400008e02000004010000,Microsoft X-Box 360 pad,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1, 030000000d0f00002200000011010000,HORI CO. LTD. REAL ARCADE Pro.V3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,
030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7 030000000d0f00001000000011010000,HORI CO. LTD. FIGHTING STICK 3,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7
03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
03000000f0250000c283000010010000,Goodbetterbest Ltd PC USB Controller,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7 03000000f0250000c283000010010000,Goodbetterbest Ltd PC USB Controller,platform:Linux,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7
0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3, 0000000058626f782047616d65706100,Xbox Gamepad (userspace driver),platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b7,back:b6,guide:b8,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,lefttrigger:a5,righttrigger:a4,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a2,righty:a3,
03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux, 03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000006f0e00001304000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:a0,rightstick:a3,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000006f0e00001304000000010000,Generic X-Box pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:a0,rightstick:a3,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4, 03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000830500006020000010010000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux, 03000000830500006020000010010000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
03000000c9110000f055000011010000,HJC Game GAMEPAD,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:h0.8,lefttrigger:b6,x:b2,dpup:h0.1,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:b7,b:b1,platform:Linux, 03000000c9110000f055000011010000,HJC Game GAMEPAD,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:h0.8,lefttrigger:b6,x:b2,dpup:h0.1,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:b7,b:b1,platform:Linux,
03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux, 03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,platform:Linux,
03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:,leftstick:,rightstick:,leftshoulder:,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,rightshoulder:b7,dpup:b12,platform:Linux, 03000000341a000005f7000010010000,GameCube {HuiJia USB box},a:b1,b:b2,y:b3,x:b0,start:b9,guide:,back:,leftstick:,rightstick:,leftshoulder:,dpleft:b15,dpdown:b14,dpright:b13,leftx:a0,lefty:a1,rightx:a5,righty:a2,lefttrigger:a3,righttrigger:a4,rightshoulder:b7,dpup:b12,platform:Linux,
030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,platform:Linux,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3, 030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,platform:Linux,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,
030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,lefttrigger:a2,righttrigger:a5,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000006f0e00004601000001010000,Rock Candy Wired Controller for Xbox One,platform:Linux,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,back:b6,start:b7,guide:b8,leftstick:b9,rightstick:b10,lefttrigger:a2,righttrigger:a5,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 03000000380700001647000010040000,Mad Catz Wired Xbox 360 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux, 030000006f0e00003901000020060000,Afterglow Wired Controller for Xbox One,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,platform:Linux,
030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,platform:Linux,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7, 030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,platform:Linux,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,
05000000102800000900000000010000,8Bitdo SFC30 GamePad,platform:Linux,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1, 05000000102800000900000000010000,8Bitdo SFC30 GamePad,platform:Linux,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1, 03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1,
030000000d0f00000d00000000010000,hori,platform:Linux,a:b0,b:b6,y:b2,x:b1,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,start:b9,guide:b10,back:b8,leftshoulder:b3,rightshoulder:b7,leftx:b4,lefty:b5, 030000000d0f00000d00000000010000,hori,platform:Linux,a:b0,b:b6,y:b2,x:b1,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,start:b9,guide:b10,back:b8,leftshoulder:b3,rightshoulder:b7,leftx:b4,lefty:b5,
030000000d0f00006700000001010000,HORIPAD ONE,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2, 030000000d0f00006700000001010000,HORIPAD ONE,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,
03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5, 03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,platform:Linux,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7, 03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,platform:Linux,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,
03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),platform:Linux,a:b3,b:b4,y:b1,x:b0,start:b7,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5, 03000000fd0500000030000000010000,InterAct GoPad I-73000 (Fighting Game Layout),platform:Linux,a:b3,b:b4,y:b1,x:b0,start:b7,back:b6,leftx:a0,lefty:a1,rightshoulder:b2,righttrigger:b5,
05000000010000000100000003000000,Nintendo Wiimote,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 05000000010000000100000003000000,Nintendo Wiimote,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
030000005e0400008e02000062230000,Microsoft X-Box 360 pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e0400008e02000062230000,Microsoft X-Box 360 pad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux, 03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,platform:Linux,
030000006f0e00000103000000020000,Logic3 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000006f0e00000103000000020000,Logic3 Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
05000000380700006652000025010000,Mad Catz C.T.R.L.R ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3, 05000000380700006652000025010000,Mad Catz C.T.R.L.R ,platform:Linux,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,
06000000adde0000efbe000002010000,Hidromancer Game Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 06000000adde0000efbe000002010000,Hidromancer Game Controller,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,platform:Linux,a:b12,b:b10,x:b13,y:b11,back:b4,start:b5,leftstick:b14,rightstick:b15,leftshoulder:b9,rightshoulder:b8,dpup:b0,dpdown:b2,dpleft:b3,dpright:b1,leftx:a1,lefty:a0,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 03000000c01600008704000011010000,Serial/Keyboard/Mouse/Joystick,platform:Linux,a:b12,b:b10,x:b13,y:b11,back:b4,start:b5,leftstick:b14,rightstick:b15,leftshoulder:b9,rightshoulder:b8,dpup:b0,dpdown:b2,dpleft:b3,dpright:b1,leftx:a1,lefty:a0,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
05000000a00500003232000001000000,8Bitdo Zero GamePad,platform:Linux,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1, 05000000a00500003232000001000000,8Bitdo Zero GamePad,platform:Linux,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,
03000000780000000600000010010000,Microntek USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftx:a0,lefty:a1, 03000000780000000600000010010000,Microntek USB Joystick,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftx:a0,lefty:a1,
03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:a2,righttrigger:a5, 03000000ad1b00002ef0000090040000,Mad Catz Fightpad SFxT,platform:Linux,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:a2,righttrigger:a5,
03000000100800000300000010010000,USB Gamepad,platform:Linux,a:b2,b:b1,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5, 03000000100800000300000010010000,USB Gamepad,platform:Linux,a:b2,b:b1,x:b3,y:b0,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000005e0400008e02000073050000,Speedlink TORID Wireless Gamepad,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000001008000001e5000010010000,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Linux, 030000001008000001e5000010010000,NEXT Classic USB Game Controller,a:b0,b:b1,back:b8,start:b9,rightx:a2,righty:a3,leftx:a0,lefty:a1,platform:Linux,
030000006d04000016c2000011010000,Logitech F310 Gamepad (DInput),x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux, 030000006d04000016c2000011010000,Logitech F310 Gamepad (DInput),x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,platform:Linux,
03000000bd12000015d0000010010000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux, 03000000bd12000015d0000010010000,Tomee SNES USB Controller,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,platform:Linux,
050000004c050000cc09000000010000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux, 050000004c050000cc09000000010000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
030000004c050000a00b000011010000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux, 030000004c050000a00b000011010000,Sony DualShock 4 Wireless Adaptor,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b13,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
05000000ac0500003232000001000000,VR-BOX,platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5, 05000000ac0500003232000001000000,VR-BOX,platform:Linux,a:b0,b:b1,x:b2,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,
030000004c050000cc09000011010000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux, 030000004c050000cc09000011010000,Sony DualShock 4 V2,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
030000004c050000cc09000011810000,Sony Interactive Entertainment Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000004c050000cc09000011810000,Sony Interactive Entertainment Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
050000004c050000cc09000000810000,Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4, 050000004c050000cc09000000810000,Wireless Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
030000004c0500006802000011810000,Sony PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4, 030000004c0500006802000011810000,Sony PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
050000004c0500006802000000810000,PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4, 050000004c0500006802000000810000,PLAYSTATION(R)3 Controller,platform:Linux,x:b3,a:b0,b:b1,y:b2,back:b8,guide:b10,start:b9,dpleft:b15,dpdown:b14,dpright:b16,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:a5,leftstick:b7,leftstick:b11,rightstick:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,
03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5, 03000000c82d00000190000011010000,8Bitdo NES30 Pro 8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,
05000000c82d00002038000000010000,8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, 05000000c82d00002038000000010000,8Bitdo NES30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
030000005e040000a102000000010000,Xbox 360 Wireless Receiver,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpdown:b14,dpleft:b11,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5, 030000005e040000a102000000010000,Xbox 360 Wireless Receiver,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b6,guide:b8,start:b7,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpdown:b14,dpleft:b11,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,
050000004c050000cc09000001000000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux, 050000004c050000cc09000001000000,Sony DualShock 4 V2 BT,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:a3,righttrigger:a4,platform:Linux,
03000000bc2000006412000011010000,BETOP CONTROLLER,a:b2,b:b1,y:b0,x:b3,start:b9,guide:b30,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux, 03000000bc2000006412000011010000,BETOP CONTROLLER,a:b2,b:b1,y:b0,x:b3,start:b9,guide:b30,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
05000000c82d00000161000000010000,8Bitdo SN30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, 05000000c82d00000161000000010000,8Bitdo SN30 Pro,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
03000000380700008532000010010000,MadCatz Madcatz Fightpad,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:b5,righttrigger:b7, 03000000380700008532000010010000,MadCatz Madcatz Fightpad,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,lefttrigger:b5,righttrigger:b7,
030000000d0f0000ee00000011010000,HORI CO.,LTD. HORIPAD mini4,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 030000000d0f0000ee00000011010000,HORI CO.,LTD. HORIPAD mini4,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
030000000d0f0000c100000011010000,HORI CO.,LTD. HORIPAD S,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7, 030000000d0f0000c100000011010000,HORI CO.,LTD. HORIPAD S,platform:Linux,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,
03000000ad1b000003f5000033050000,Hori Fighting Stick VX,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,-leftx:h0.8,+leftx:h0.2,-lefty:h0.1,+lefty:h0.4,lefttrigger:b6,righttrigger:b7, 03000000ad1b000003f5000033050000,Hori Fighting Stick VX,platform:Linux,a:b0,b:b1,x:b2,y:b3,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,-leftx:h0.8,+leftx:h0.2,-lefty:h0.1,+lefty:h0.4,lefttrigger:b6,righttrigger:b7,
03000000c82d00000260000011010000,8Bitdo SF30 Pro 8BitDo SN30 Pro+,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4, 03000000c82d00000260000011010000,8Bitdo SF30 Pro 8BitDo SN30 Pro+,platform:Linux,a:b1,b:b0,x:b4,y:b3,back:b10,guide:b2,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a5,righttrigger:a4,
060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b9,guide:b11,start:b10,leftstick:b12,rightstick:b13,leftshoulder:b5,rightshoulder:b6,dpup:b14,dpdown:b15,dpleft:b16,dpright:b17,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b7,righttrigger:b8, 060000007e0500000820000000000000,Nintendo Switch Combined Joy-Cons,platform:Linux,a:b0,b:b1,x:b3,y:b2,back:b9,guide:b11,start:b10,leftstick:b12,rightstick:b13,leftshoulder:b5,rightshoulder:b6,dpup:b14,dpdown:b15,dpleft:b16,dpright:b17,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b7,righttrigger:b8,
05000000491900000204000000000000,PG-9118,platform:Linux,x:b76,a:b73,b:b74,y:b77,back:b83,start:b84,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b79,lefttrigger:b81,rightshoulder:b80,righttrigger:b82,leftstick:b86,rightstick:b87,leftx:a0,lefty:a1,rightx:a2,righty:a3, 05000000491900000204000000000000,PG-9118,platform:Linux,x:b76,a:b73,b:b74,y:b77,back:b83,start:b84,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b79,lefttrigger:b81,rightshoulder:b80,righttrigger:b82,leftstick:b86,rightstick:b87,leftx:a0,lefty:a1,rightx:a2,righty:a3,
03000000d620000011a7000011010000,PowerA Nintendo Switch Wired Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,platform:Linux,
050000004c050000e60c000000810000,Sony DualSense,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:a5,rightx:a3,righty:a4,start:b9,x:b3,y:b2,platform:Linux,

View File

@@ -1,337 +1,337 @@
006b570008068310:184 = strtok_r 006b570008068310:184 = strtok_r
019ba2099fb88f3c:48 = vector_normalize_t 019ba2099fb88f3c:48 = vector_normalize_t
0266f96d740c7e03:912 = memcpy 0266f96d740c7e03:912 = memcpy
02bd2859045d2383:240 = bcmp 02bd2859045d2383:240 = bcmp
030507c9a1f0fc85:92 = matrix_rot_x 030507c9a1f0fc85:92 = matrix_rot_x
0483fceefa4557ff:1360 = __udivdi3 0483fceefa4557ff:1360 = __udivdi3
0558ad5c5be00ca1:76 = vtfm_t 0558ad5c5be00ca1:76 = vtfm_t
05aedd0c04b451a1:356 = sqrt 05aedd0c04b451a1:356 = sqrt
0654fc8adbe16ef7:28 = vmul_q 0654fc8adbe16ef7:28 = vmul_q
06b243c926fa6ab5:24 = vf2in_q 06b243c926fa6ab5:24 = vf2in_q
06e2826e02056114:56 = wcslen 06e2826e02056114:56 = wcslen
075fa9b234b41e9b:32 = fmodf 075fa9b234b41e9b:32 = fmodf
0a051019bdd786c3:184 = strcasecmp 0a051019bdd786c3:184 = strcasecmp
0a46dc426054bb9d:24 = vector_add_t 0a46dc426054bb9d:24 = vector_add_t
0c0173ed70f84f66:48 = vnormalize_t 0c0173ed70f84f66:48 = vnormalize_t
0c65188f5bfb3915:24 = vsgn_q 0c65188f5bfb3915:24 = vsgn_q
0d898513a722ea3c:40 = copysignf 0d898513a722ea3c:40 = copysignf
0e99b037b852c8ea:68 = isnan 0e99b037b852c8ea:68 = isnan
0eb5f2e95f59276a:40 = dl_write_lightmode 0eb5f2e95f59276a:40 = dl_write_lightmode
0f1e7533a546f6a1:228 = dl_write_bone_matrix_4 0f1e7533a546f6a1:228 = dl_write_bone_matrix_4
0f2a1106ad84fb74:52 = strcmp 0f2a1106ad84fb74:52 = strcmp
0ffa5db8396d4274:64 = memcpy_jak 0ffa5db8396d4274:64 = memcpy_jak
1252e902d0b49bfb:44 = vector_sub_q_2 1252e902d0b49bfb:44 = vector_sub_q_2
12df3d33a58d0298:52 = vmidt_t 12df3d33a58d0298:52 = vmidt_t
12feef7b017d3431:700 = memmove 12feef7b017d3431:700 = memmove
1322c7e3fe6dff4d:784 = _free_r 1322c7e3fe6dff4d:784 = _free_r
1376c115d5f1d90c:36 = strlen 1376c115d5f1d90c:36 = strlen
1448134dd3acd1f9:240 = memchr 1448134dd3acd1f9:240 = memchr
14800e59c04968d7:100 = wcsstr 14800e59c04968d7:100 = wcsstr
14b56e858a27a8a4:24 = vi2f_q 14b56e858a27a8a4:24 = vi2f_q
15c4662d5d3c728e:308 = acosf 15c4662d5d3c728e:308 = acosf
1616ee7052542059:48 = vtfm_t 1616ee7052542059:48 = vtfm_t
16965ca11a4e7dac:104 = vmmul_q_transp 16965ca11a4e7dac:104 = vmmul_q_transp
16afe830a5dd2de2:40 = vdiv_q 16afe830a5dd2de2:40 = vdiv_q
184e834a63a79016:32 = isnanf 184e834a63a79016:32 = isnanf
189212bda9c94df1:736 = atanf 189212bda9c94df1:736 = atanf
199821ce500ef9d2:24 = vocp_t 199821ce500ef9d2:24 = vocp_t
1a3c8e9d637ed421:104 = __adddf3 1a3c8e9d637ed421:104 = __adddf3
1a7564fa3e25c992:844 = memcpy 1a7564fa3e25c992:844 = memcpy
1aad94c0723edfc0:124 = vmmul_t_transp 1aad94c0723edfc0:124 = vmmul_t_transp
1ab33b12b3cb8cb0:28 = vqmul_q 1ab33b12b3cb8cb0:28 = vqmul_q
1ac05627df1f87f4:112 = memcpy16 1ac05627df1f87f4:112 = memcpy16
1bdf3600844373fd:112 = strstr 1bdf3600844373fd:112 = strstr
1c967be07917ddc9:92 = strcat 1c967be07917ddc9:92 = strcat
1d03fa48334ca966:556 = _strtol_r 1d03fa48334ca966:556 = _strtol_r
1e1525e3bc2f6703:676 = rint 1e1525e3bc2f6703:676 = rint
1ec055f28bb9f4d1:88 = gu_update_stall 1ec055f28bb9f4d1:88 = gu_update_stall
1ef9cfe6afd3c035:180 = memset 1ef9cfe6afd3c035:180 = memset
1f53eac122f96b37:224 = cosf 1f53eac122f96b37:224 = cosf
2097a8b75c8fe651:436 = atan2 2097a8b75c8fe651:436 = atan2
21411b3c860822c0:36 = matrix_scale_q_t 21411b3c860822c0:36 = matrix_scale_q_t
24d82a8675800808:220 = ceilf 24d82a8675800808:220 = ceilf
26cc90cb25af9d27:476 = log10 26cc90cb25af9d27:476 = log10
2774614d57d4baa2:28 = vsub_q 2774614d57d4baa2:28 = vsub_q
279c6bf9cf99cc85:436 = strncpy 279c6bf9cf99cc85:436 = strncpy
2876ed93c5fd1211:328 = dl_write_matrix_4 2876ed93c5fd1211:328 = dl_write_matrix_4
2965b1ad3ca15cc1:44 = vtfm_t 2965b1ad3ca15cc1:44 = vtfm_t
299a370587df078f:116 = strange_copy_routine 299a370587df078f:116 = strange_copy_routine
2abca53599f09ea7:608 = dl_write_matrix_3 2abca53599f09ea7:608 = dl_write_matrix_3
2adb92e8855c454e:48 = vtfm_q 2adb92e8855c454e:48 = vtfm_q
2adc229bef7bbc75:40 = isnan 2adc229bef7bbc75:40 = isnan
2bcf5268dd26345a:340 = acos 2bcf5268dd26345a:340 = acos
2c4cb2028a1735bf:600 = floor 2c4cb2028a1735bf:600 = floor
2ca5958bb816c72e:44 = vector_i2f_t 2ca5958bb816c72e:44 = vector_i2f_t
2e7022d9767c9018:2100 = atan 2e7022d9767c9018:2100 = atan
2f10d3faec84b5bb:276 = sinf 2f10d3faec84b5bb:276 = sinf
2f639673670caa0e:772 = dl_write_matrix_2 2f639673670caa0e:772 = dl_write_matrix_2
2f718936b371fc44:40 = vcos_s 2f718936b371fc44:40 = vcos_s
3024e961d1811dea:396 = fmod 3024e961d1811dea:396 = fmod
30c9c4f420573eb6:540 = expf 30c9c4f420573eb6:540 = expf
317afeb882ff324a:212 = memcpy 317afeb882ff324a:212 = memcpy
31ea2e192f5095a1:52 = vector_add_t 31ea2e192f5095a1:52 = vector_add_t
31f523ef18898e0e:420 = logf 31f523ef18898e0e:420 = logf
32806967fe81568b:40 = vector_sub_t_2 32806967fe81568b:40 = vector_sub_t_2
32ceb9a7f72b9385:440 = _strtoul_r 32ceb9a7f72b9385:440 = _strtoul_r
32e6bc7c151491ed:68 = memchr 32e6bc7c151491ed:68 = memchr
335df69db1073a8d:96 = wcscpy 335df69db1073a8d:96 = wcscpy
33dc6b144cb302c1:304 = memmove 33dc6b144cb302c1:304 = memmove
35d3527ff8c22ff2:56 = matrix_scale_q 35d3527ff8c22ff2:56 = matrix_scale_q
373ce518eee5a2d2:20 = matrix300_store_q 373ce518eee5a2d2:20 = matrix300_store_q
388043e96b0e11fd:144 = dl_write_material_2 388043e96b0e11fd:144 = dl_write_material_2
38f19bc3be215acc:388 = log10f 38f19bc3be215acc:388 = log10f
393047f06eceaba1:96 = strcspn 393047f06eceaba1:96 = strcspn
39a651942a0b3861:204 = tan 39a651942a0b3861:204 = tan
3a3bc2b20a55bf02:68 = memchr 3a3bc2b20a55bf02:68 = memchr
3ab08b5659de1746:40 = vsin_s 3ab08b5659de1746:40 = vsin_s
3c421a9265f37ebc:700 = memmove 3c421a9265f37ebc:700 = memmove
3cbc2d50a3db59e9:100 = strncmp 3cbc2d50a3db59e9:100 = strncmp
3ce1806699a91d9d:148 = dl_write_light 3ce1806699a91d9d:148 = dl_write_light
3d5e914011c181d4:444 = scalbnf 3d5e914011c181d4:444 = scalbnf
3ea41eafb53fc99a:388 = logf 3ea41eafb53fc99a:388 = logf
3fe38bff09ac3da0:436 = _strtoul_r 3fe38bff09ac3da0:436 = _strtoul_r
40a25c7e1fd44fe2:24 = fabsf 40a25c7e1fd44fe2:24 = fabsf
410d48d9b6580b4a:36 = dl_write_ztest 410d48d9b6580b4a:36 = dl_write_ztest
42dc17c8018f30f2:44 = vtan.s 42dc17c8018f30f2:44 = vtan.s
436b07caa2aab931:352 = acos 436b07caa2aab931:352 = acos
444472537eedf966:32 = vmzero_q 444472537eedf966:32 = vmzero_q
449ff96982626338:28 = vmidt_q 449ff96982626338:28 = vmidt_q
44f65b1a72c45703:36 = strlen 44f65b1a72c45703:36 = strlen
45528de3948615dc:64 = memcpy 45528de3948615dc:64 = memcpy
456a0d78ac318d15:164 = gta_dl_write_matrix 456a0d78ac318d15:164 = gta_dl_write_matrix
497248c9d12f44fd:68 = strcpy 497248c9d12f44fd:68 = strcpy
4a70207212a4c497:24 = strlen 4a70207212a4c497:24 = strlen
4b16a5c602c74c6c:24 = vsub_t 4b16a5c602c74c6c:24 = vsub_t
4bb677dace6ca526:184 = memset 4bb677dace6ca526:184 = memset
4c4bdedcc13ac77c:624 = dl_write_matrix_5 4c4bdedcc13ac77c:624 = dl_write_matrix_5
4c91c556d1aa896b:104 = dl_write_material_3 4c91c556d1aa896b:104 = dl_write_material_3
4cf38c368078181e:616 = dl_write_matrix 4cf38c368078181e:616 = dl_write_matrix
4d72b294501cddfb:80 = copysign 4d72b294501cddfb:80 = copysign
4ddd83b7f4ed8d4e:844 = memcpy 4ddd83b7f4ed8d4e:844 = memcpy
4e266783291b0220:28 = vsub_t 4e266783291b0220:28 = vsub_t
4e5950928c0bb082:44 = vmmul_q_transp4 4e5950928c0bb082:44 = vmmul_q_transp4
4f34fc596ecf5b25:40 = vdiv_t 4f34fc596ecf5b25:40 = vdiv_t
500a949afb39133f:24 = vf2iu_q 500a949afb39133f:24 = vf2iu_q
50d8f01ea8fa713d:48 = send_commandi 50d8f01ea8fa713d:48 = send_commandi
50fa6db2fb14814a:544 = rint 50fa6db2fb14814a:544 = rint
513ce13cd7ce97ea:332 = scalbnf 513ce13cd7ce97ea:332 = scalbnf
514161da54d37416:1416 = __umoddi3 514161da54d37416:1416 = __umoddi3
51c52d7dd4d2191c:360 = cos 51c52d7dd4d2191c:360 = cos
5287d4b8abd5806b:768 = _strtoll_r 5287d4b8abd5806b:768 = _strtoll_r
52d5141545a75eda:60 = dl_write_clutformat 52d5141545a75eda:60 = dl_write_clutformat
530cbe1ce9b45d58:108 = dl_write_light_vector 530cbe1ce9b45d58:108 = dl_write_light_vector
53c9aa23504a630f:96 = vmmul_q_5 53c9aa23504a630f:96 = vmmul_q_5
54015ccbcbc75374:24 = strlen 54015ccbcbc75374:24 = strlen
5550d87a851c218c:168 = dl_write_viewport 5550d87a851c218c:168 = dl_write_viewport
55c1294280bfade0:88 = dl_write_blend_fixed 55c1294280bfade0:88 = dl_write_blend_fixed
56c9929e8c8c5768:24 = fabsf 56c9929e8c8c5768:24 = fabsf
572b2d9e57e6e363:788 = memcpy_thingy 572b2d9e57e6e363:788 = memcpy_thingy
580200b840b47c58:1856 = _realloc_r 580200b840b47c58:1856 = _realloc_r
5961f681bbd69035:28 = vfad_q 5961f681bbd69035:28 = vfad_q
598b91c64cf7e036:2388 = qsort 598b91c64cf7e036:2388 = qsort
59a0cb08f5ecf8b6:28 = copysignf 59a0cb08f5ecf8b6:28 = copysignf
5ae4ec2a5e133de3:28 = vector_cross_t 5ae4ec2a5e133de3:28 = vector_cross_t
5b005f8375d7c364:236 = floorf 5b005f8375d7c364:236 = floorf
5b103d973fd1dd94:92 = matrix_rot_y 5b103d973fd1dd94:92 = matrix_rot_y
5b9d7e9d4c905694:196 = _calloc_r 5b9d7e9d4c905694:196 = _calloc_r
5bf7a77b028e9f66:324 = sqrtf 5bf7a77b028e9f66:324 = sqrtf
5c0b3edc0e48852c:148 = memmove 5c0b3edc0e48852c:148 = memmove
5e898df42c4af6b8:76 = wcsncmp 5e898df42c4af6b8:76 = wcsncmp
5f473780835e3458:52 = vclamp_q 5f473780835e3458:52 = vclamp_q
5fc58ed2c4d48b79:40 = vtfm_q_transp 5fc58ed2c4d48b79:40 = vtfm_q_transp
6145029ef86f0365:76 = __extendsfdf2 6145029ef86f0365:76 = __extendsfdf2
62815f41fa86a131:656 = scalbn 62815f41fa86a131:656 = scalbn
6301fa5149bd973a:120 = wcscat 6301fa5149bd973a:120 = wcscat
658b07240a690dbd:36 = strlen 658b07240a690dbd:36 = strlen
66122f0ab50b2ef9:296 = dl_write_dither_matrix_5 66122f0ab50b2ef9:296 = dl_write_dither_matrix_5
66f7f1beccbc104a:256 = memcpy_swizzled 66f7f1beccbc104a:256 = memcpy_swizzled
679e647e34ecf7f1:132 = roundf 679e647e34ecf7f1:132 = roundf
67afe74d9ec72f52:4380 = _strtod_r 67afe74d9ec72f52:4380 = _strtod_r
68b22c2aa4b8b915:400 = sqrt 68b22c2aa4b8b915:400 = sqrt
6962da85a6dad937:60 = strrchr 6962da85a6dad937:60 = strrchr
69a3c4f774859404:64 = vmmul_q_transp2 69a3c4f774859404:64 = vmmul_q_transp2
6b022e20ee3fa733:68 = __negdf2 6b022e20ee3fa733:68 = __negdf2
6b2a6347c0dfcb57:152 = strcpy 6b2a6347c0dfcb57:152 = strcpy
6b4148322c569cb3:240 = wmemchr 6b4148322c569cb3:240 = wmemchr
6c4cb6d25851553a:44 = vtfm_t 6c4cb6d25851553a:44 = vtfm_t
6c7b2462b9ec7bc7:56 = vmmul_q 6c7b2462b9ec7bc7:56 = vmmul_q
6ca9cc8fa485d096:304 = __ieee754_sqrtf 6ca9cc8fa485d096:304 = __ieee754_sqrtf
6ccffc753d2c148e:96 = strlwr 6ccffc753d2c148e:96 = strlwr
6e40ec681fb5c571:40 = matrix_copy_q 6e40ec681fb5c571:40 = matrix_copy_q
6e9884c842a51142:236 = strncasecmp 6e9884c842a51142:236 = strncasecmp
6f101c5c4311c144:276 = floorf 6f101c5c4311c144:276 = floorf
6f1731f84bbf76c3:116 = strcmp 6f1731f84bbf76c3:116 = strcmp
6f4e1a1a84df1da0:68 = dl_write_texmode 6f4e1a1a84df1da0:68 = dl_write_texmode
70649c7211f6a8da:16 = fabsf 70649c7211f6a8da:16 = fabsf
7245b74db370ae72:64 = vmmul_q_transp3 7245b74db370ae72:64 = vmmul_q_transp3
7259d52b21814a5a:40 = vtfm_t_transp 7259d52b21814a5a:40 = vtfm_t_transp
736b34ebc702d873:104 = vmmul_q_transp 736b34ebc702d873:104 = vmmul_q_transp
7499a2ce8b60d801:12 = abs 7499a2ce8b60d801:12 = abs
74ebbe7d341463f3:72 = dl_write_colortest 74ebbe7d341463f3:72 = dl_write_colortest
755a41f9183bb89a:60 = vmmul_q 755a41f9183bb89a:60 = vmmul_q
759834c69bb12c12:68 = strcpy 759834c69bb12c12:68 = strcpy
75c5a88d62c9c99f:276 = sinf 75c5a88d62c9c99f:276 = sinf
76c661fecbb39990:364 = sin 76c661fecbb39990:364 = sin
770c9c07bf58fd14:16 = fabsf 770c9c07bf58fd14:16 = fabsf
774e479eb9634525:464 = _strtol_r 774e479eb9634525:464 = _strtol_r
77aeb1c23f9aa2ad:56 = strchr 77aeb1c23f9aa2ad:56 = strchr
78e8c65b5a458f33:148 = memcmp 78e8c65b5a458f33:148 = memcmp
794d1b073c183c77:24 = fabsf 794d1b073c183c77:24 = fabsf
7978a886cf70b1c9:56 = wcschr 7978a886cf70b1c9:56 = wcschr
79faa339fff5a80c:28 = finitef 79faa339fff5a80c:28 = finitef
7c50728008c288e3:36 = vector_transform_q_4x4 7c50728008c288e3:36 = vector_transform_q_4x4
7f1fc0dce6be120a:404 = fmod 7f1fc0dce6be120a:404 = fmod
828b98925af9ff8f:40 = vector_distance_t 828b98925af9ff8f:40 = vector_distance_t
83ac39971df4b966:336 = sqrtf 83ac39971df4b966:336 = sqrtf
84c6cd47834f4c79:1284 = powf 84c6cd47834f4c79:1284 = powf
8734dc1d155ea493:24 = vf2iz_q 8734dc1d155ea493:24 = vf2iz_q
87fe3f7e621ddebb:212 = memcpy 87fe3f7e621ddebb:212 = memcpy
891ca854e1c664e9:2392 = qsort 891ca854e1c664e9:2392 = qsort
8965d4b004adad28:420 = log10f 8965d4b004adad28:420 = log10f
89e1858ba11b84e4:52 = memset 89e1858ba11b84e4:52 = memset
8a00e7207e7dbc81:232 = _exit 8a00e7207e7dbc81:232 = _exit
8a1f9daadecbaf7f:104 = vmmul_q_transp 8a1f9daadecbaf7f:104 = vmmul_q_transp
8a610f34078ce360:32 = vector_copy_q_t 8a610f34078ce360:32 = vector_copy_q_t
8c3fd997a544d0b1:268 = memcpy 8c3fd997a544d0b1:268 = memcpy
8df2928848857e97:164 = strcat 8df2928848857e97:164 = strcat
8e48cabd529ca6b5:52 = vector_multiply_t 8e48cabd529ca6b5:52 = vector_multiply_t
8e97dcb03fbaba5c:104 = vmmul_q_transp 8e97dcb03fbaba5c:104 = vmmul_q_transp
8ee81b03d2eef1e7:28 = vmul_t 8ee81b03d2eef1e7:28 = vmul_t
8f19c41e8b987e18:100 = matrix_mogrify 8f19c41e8b987e18:100 = matrix_mogrify
8ff11e9bed387401:700 = memmove 8ff11e9bed387401:700 = memmove
910140c1a07aa59e:256 = rot_matrix_euler_zyx 910140c1a07aa59e:256 = rot_matrix_euler_zyx
91606bd72ae90481:44 = wmemcpy 91606bd72ae90481:44 = wmemcpy
92c7d2de74068c9c:32 = vcross_t 92c7d2de74068c9c:32 = vcross_t
93d8a275ba288b26:32 = vdot_t 93d8a275ba288b26:32 = vdot_t
94c7083b64a946b4:2028 = powf 94c7083b64a946b4:2028 = powf
95a52ce1bc460108:2036 = _malloc_r 95a52ce1bc460108:2036 = _malloc_r
95bd33ac373c019a:24 = fabsf 95bd33ac373c019a:24 = fabsf
9705934b0950d68d:280 = dl_write_framebuffer_ptr 9705934b0950d68d:280 = dl_write_framebuffer_ptr
9734cf721bc0f3a1:732 = atanf 9734cf721bc0f3a1:732 = atanf
9a06b9d5c16c4c20:76 = dl_write_clut_ptrload 9a06b9d5c16c4c20:76 = dl_write_clut_ptrload
9b88b739267d189e:88 = strrchr 9b88b739267d189e:88 = strrchr
9ce53975bb88c0e7:96 = strncpy 9ce53975bb88c0e7:96 = strncpy
9d4f5f56b52f07f2:808 = memmove 9d4f5f56b52f07f2:808 = memmove
9e2941c4a5c5e847:792 = memcpy 9e2941c4a5c5e847:792 = memcpy
9e6ce11f9d49f954:292 = memcpy 9e6ce11f9d49f954:292 = memcpy
9f269daa6f0da803:128 = dl_write_scissor_region 9f269daa6f0da803:128 = dl_write_scissor_region
9f7919eeb43982b0:208 = __fixdfsi 9f7919eeb43982b0:208 = __fixdfsi
a1ca0640f11182e7:72 = strcspn a1ca0640f11182e7:72 = strcspn
a243486be51ce224:272 = cosf a243486be51ce224:272 = cosf
a2bcef60a550a3ef:92 = matrix_rot_z a2bcef60a550a3ef:92 = matrix_rot_z
a41989db0f9bf97e:1304 = pow a41989db0f9bf97e:1304 = pow
a44f6227fdbc12b1:132 = memcmp a44f6227fdbc12b1:132 = memcmp
a46cc6ea720d5775:44 = dl_write_cull a46cc6ea720d5775:44 = dl_write_cull
a54967288afe8f26:600 = ceil a54967288afe8f26:600 = ceil
a5ddbbc688e89a4d:56 = isinf a5ddbbc688e89a4d:56 = isinf
a662359e30b829e4:148 = memcmp a662359e30b829e4:148 = memcmp
a8390e65fa087c62:140 = vtfm_t_q a8390e65fa087c62:140 = vtfm_t_q
a85fe8abb88b1c6f:52 = vector_sub_t a85fe8abb88b1c6f:52 = vector_sub_t
a9194e55cc586557:268 = memcpy a9194e55cc586557:268 = memcpy
a91b3d60bd75105b:28 = vadd_t a91b3d60bd75105b:28 = vadd_t
ab97ec58c58a7c75:52 = vector_divide_t ab97ec58c58a7c75:52 = vector_divide_t
acc2c11c3ea28320:268 = ceilf acc2c11c3ea28320:268 = ceilf
ad67add5122b8c64:52 = matrix_q_translate_t ad67add5122b8c64:52 = matrix_q_translate_t
ada952a1adcea4f5:60 = vmmul_q_transp5 ada952a1adcea4f5:60 = vmmul_q_transp5
adfbf8fb8c933193:56 = fabs adfbf8fb8c933193:56 = fabs
ae50226363135bdd:24 = vector_sub_t ae50226363135bdd:24 = vector_sub_t
ae6cd7dfac82c244:48 = vpow_s ae6cd7dfac82c244:48 = vpow_s
af85d47f95ad2921:1936 = pow af85d47f95ad2921:1936 = pow
afb2c7e56c04c8e9:48 = vtfm_q afb2c7e56c04c8e9:48 = vtfm_q
afc9968e7d246a5e:1588 = atan afc9968e7d246a5e:1588 = atan
afcb7dfbc4d72588:44 = vector_transform_3x4 afcb7dfbc4d72588:44 = vector_transform_3x4
b0db731f27d3aa1b:40 = vmax_s b0db731f27d3aa1b:40 = vmax_s
b0ef265e87899f0a:32 = vector_divide_t_s b0ef265e87899f0a:32 = vector_divide_t_s
b183a37baa12607b:32 = vscl_t b183a37baa12607b:32 = vscl_t
b1a3e60a89af9857:20 = fabs b1a3e60a89af9857:20 = fabs
b3fef47fb27d57c9:44 = vector_scale_t b3fef47fb27d57c9:44 = vector_scale_t
b43fd5078ae78029:84 = send_commandi_stall b43fd5078ae78029:84 = send_commandi_stall
b43ffbd4dc446dd2:324 = atan2f b43ffbd4dc446dd2:324 = atan2f
b5fdb3083e6f4b3f:36 = vhtfm_t b5fdb3083e6f4b3f:36 = vhtfm_t
b6a04277fb1e1a1a:104 = vmmul_q_transp b6a04277fb1e1a1a:104 = vmmul_q_transp
b7448c5ffdd3b0fc:356 = atan2f b7448c5ffdd3b0fc:356 = atan2f
b7d88567dc22aab1:820 = memcpy b7d88567dc22aab1:820 = memcpy
b877d3c37a7aaa5d:60 = vmmul_q_2 b877d3c37a7aaa5d:60 = vmmul_q_2
b89aa73b6f94ba95:52 = vclamp_t b89aa73b6f94ba95:52 = vclamp_t
b8bd1f0e02e9ad87:156 = dl_write_light_dir b8bd1f0e02e9ad87:156 = dl_write_light_dir
b8cfaeebfeb2de20:7548 = _vfprintf_r b8cfaeebfeb2de20:7548 = _vfprintf_r
b97f352e85661af6:32 = finitef b97f352e85661af6:32 = finitef
bb3c6592ed319ba4:132 = dl_write_fog_params bb3c6592ed319ba4:132 = dl_write_fog_params
bb7d7c93e4c08577:124 = __truncdfsf2 bb7d7c93e4c08577:124 = __truncdfsf2
bdf54d66079afb96:200 = dl_write_bone_matrix_3 bdf54d66079afb96:200 = dl_write_bone_matrix_3
be773f78afd1a70f:128 = rand be773f78afd1a70f:128 = rand
bf5d02ccb8514881:108 = strcmp bf5d02ccb8514881:108 = strcmp
bf791954ebef4afb:396 = expf bf791954ebef4afb:396 = expf
bfe07e305abc4cd1:808 = memmove bfe07e305abc4cd1:808 = memmove
c0feb88cc04a1dc7:48 = vector_negate_t c0feb88cc04a1dc7:48 = vector_negate_t
c1f34599d0b9146b:116 = __subdf3 c1f34599d0b9146b:116 = __subdf3
c319f0d107dd2f45:888 = __muldf3 c319f0d107dd2f45:888 = __muldf3
c35c10300b6b6091:620 = floor c35c10300b6b6091:620 = floor
c3dbf3e6c80a0a51:164 = dl_write_bone_matrix c3dbf3e6c80a0a51:164 = dl_write_bone_matrix
c51519f5dab342d4:224 = cosf c51519f5dab342d4:224 = cosf
c52c14b9af8c3008:76 = memcmp c52c14b9af8c3008:76 = memcmp
c54eae62622f1e11:164 = dl_write_bone_matrix_2 c54eae62622f1e11:164 = dl_write_bone_matrix_2
c96e3a087ebf49a9:100 = dl_write_light_color c96e3a087ebf49a9:100 = dl_write_light_color
cb7a2edd603ecfef:48 = vtfm_p cb7a2edd603ecfef:48 = vtfm_p
cdf64d21418b2667:24 = vzero_q cdf64d21418b2667:24 = vzero_q
ce1c95ee25b8e2ea:448 = fmod ce1c95ee25b8e2ea:448 = fmod
ce4d18a75b98859f:40 = vector_add_t_2 ce4d18a75b98859f:40 = vector_add_t_2
ceb5372d0003d951:52 = dl_write_stenciltest ceb5372d0003d951:52 = dl_write_stenciltest
cee11483b550ce8f:24 = vocp_q cee11483b550ce8f:24 = vocp_q
cfecf208769ed5fd:272 = cosf cfecf208769ed5fd:272 = cosf
d019b067b58cf6c3:700 = memmove d019b067b58cf6c3:700 = memmove
d12a3a91e0040229:524 = dl_write_enable_disable d12a3a91e0040229:524 = dl_write_enable_disable
d1faacfc711d61e8:68 = __negdf2 d1faacfc711d61e8:68 = __negdf2
d207b0650a41dd9c:28 = vmin_q d207b0650a41dd9c:28 = vmin_q
d6d6e0bb21654778:24 = vneg_t d6d6e0bb21654778:24 = vneg_t
d7229fee680e7851:40 = vmin_s d7229fee680e7851:40 = vmin_s
d75670860a7f4b05:144 = wcsncpy d75670860a7f4b05:144 = wcsncpy
d76d1a8804c7ec2c:100 = dl_write_material d76d1a8804c7ec2c:100 = dl_write_material
d7d350c0b33a4662:28 = vadd_q d7d350c0b33a4662:28 = vadd_q
d80051931427dca0:116 = __subdf3 d80051931427dca0:116 = __subdf3
da51dab503b06979:32 = vmidt_q da51dab503b06979:32 = vmidt_q
dc0cc8b400ecfbf2:36 = strcmp dc0cc8b400ecfbf2:36 = strcmp
dcab869acf2bacab:292 = strncasecmp dcab869acf2bacab:292 = strncasecmp
dcdf7e1c1a3dc260:372 = strncmp dcdf7e1c1a3dc260:372 = strncmp
dcfc28e624a81bf1:5476 = _dtoa_r dcfc28e624a81bf1:5476 = _dtoa_r
ddfa5a85937aa581:32 = vdot_q ddfa5a85937aa581:32 = vdot_q
e0214719d8a0aa4e:104 = strstr e0214719d8a0aa4e:104 = strstr
e029f0699ca3a886:76 = matrix300_transform_by e029f0699ca3a886:76 = matrix300_transform_by
e1107cf3892724a0:460 = _memalign_r e1107cf3892724a0:460 = _memalign_r
e1724e6e29209d97:24 = vector_length_t_2 e1724e6e29209d97:24 = vector_length_t_2
e1a5d939cc308195:68 = wcscmp e1a5d939cc308195:68 = wcscmp
e2d9106e5b9e39e6:80 = strnlen e2d9106e5b9e39e6:80 = strnlen
e32cb5c062d1a1c4:700 = _strtoull_r e32cb5c062d1a1c4:700 = _strtoull_r
e3835fb2c9c04e59:44 = vmmul_q e3835fb2c9c04e59:44 = vmmul_q
e527c62d8613f297:136 = strcpy e527c62d8613f297:136 = strcpy
e7b36c2c1348551d:148 = tan e7b36c2c1348551d:148 = tan
e83a7a9d80a21c11:4448 = _strtod_r e83a7a9d80a21c11:4448 = _strtod_r
e894bda909a8a8f9:1064 = expensive_wipeout_pulse e894bda909a8a8f9:1064 = expensive_wipeout_pulse
e8ad7719be44e7c8:276 = strchr e8ad7719be44e7c8:276 = strchr
eabb9c1b4f83d2b4:52 = memset eabb9c1b4f83d2b4:52 = memset
eb0f7bf63d52ece9:88 = strncat eb0f7bf63d52ece9:88 = strncat
eb8c0834d8bbc28c:416 = fmodf eb8c0834d8bbc28c:416 = fmodf
edbbe9bf9fbceca8:172 = dl_write_viewport2 edbbe9bf9fbceca8:172 = dl_write_viewport2
edc3f476221f96e6:148 = tanf edc3f476221f96e6:148 = tanf
f1f660fdf349eac2:1588 = _malloc_r f1f660fdf349eac2:1588 = _malloc_r
f38a356a359dbe06:28 = vmax_q f38a356a359dbe06:28 = vmax_q
f3fc2220ed0f2703:32 = send_commandf f3fc2220ed0f2703:32 = send_commandf
f4d797cef4ac88cd:684 = _free_r f4d797cef4ac88cd:684 = _free_r
f4ea7d2ec943fa02:224 = sinf f4ea7d2ec943fa02:224 = sinf
f4f8cdf479dfc4a4:224 = sinf f4f8cdf479dfc4a4:224 = sinf
f52f993e444b6c52:44 = dl_write_shademode f52f993e444b6c52:44 = dl_write_shademode
f56641884b36c638:468 = scalbn f56641884b36c638:468 = scalbn
f5f7826b4a61767c:40 = matrix_copy_q f5f7826b4a61767c:40 = matrix_copy_q
f73c094e492bc163:396 = hypot f73c094e492bc163:396 = hypot
f7fc691db0147e25:96 = strspn f7fc691db0147e25:96 = strspn
f842aea3baa61f29:32 = vector_length_t f842aea3baa61f29:32 = vector_length_t
f8e0902f4099a9d6:2260 = qsort f8e0902f4099a9d6:2260 = qsort
f972543ab7df071a:32 = vsqrt_s f972543ab7df071a:32 = vsqrt_s
f9b00ef163e8b9d4:32 = vscl_q f9b00ef163e8b9d4:32 = vscl_q
f9ea1bf2a897ef24:588 = ceil f9ea1bf2a897ef24:588 = ceil
fa156c48461eeeb9:24 = vf2id_q fa156c48461eeeb9:24 = vf2id_q
fb4253a1d9d9df9f:20 = isnanf fb4253a1d9d9df9f:20 = isnanf
fd34a9ad94fa6241:76 = __extendsfdf2 fd34a9ad94fa6241:76 = __extendsfdf2
fe4f0280240008e9:28 = vavg_q fe4f0280240008e9:28 = vavg_q
fe5dd338ab862291:216 = memset fe5dd338ab862291:216 = memset
ffc8f5f8f946152c:192 = dl_write_light_color ffc8f5f8f946152c:192 = dl_write_light_color

View File

@@ -1,28 +1,28 @@
# lang # lang
PPSSPP language ini repository PPSSPP language ini repository
# Thanks for your interest in translating PPSSPP! # Thanks for your interest in translating PPSSPP!
* Simply copy *en_US.ini* file to a new ini file with your language code, or use it to update an existing file with that name. * Simply copy *en_US.ini* file to a new ini file with your language code, or use it to update an existing file with that name.
* To see a list of codes, view [this](http://stackoverflow.com/questions/3191664/list-of-all-locales-and-their-short-codes) page. * To see a list of codes, view [this](http://stackoverflow.com/questions/3191664/list-of-all-locales-and-their-short-codes) page.
# Please note, while translating: # Please note, while translating:
* Ampersands `&` on the *RIGHT* side of an equals sign denote an underlined keyboard hotkey. * Ampersands `&` on the *RIGHT* side of an equals sign denote an underlined keyboard hotkey.
* The hotkeys are only supported currently in the *DesktopUI* section, however. * The hotkeys are only supported currently in the *DesktopUI* section, however.
* Example: `&File`. This will make it so when you press ALT + F on Windows, it'll open the File menu. * Example: `&File`. This will make it so when you press ALT + F on Windows, it'll open the File menu.
# Tools # Tools
* To remove a translation, use the following (where KeyWord is the key): * To remove a translation, use the following (where KeyWord is the key):
find . -type f -print0 | xargs -0 sed -i /^KeyWord/d find . -type f -print0 | xargs -0 sed -i /^KeyWord/d
* To change a translation key, use something like this: * To change a translation key, use something like this:
find . -type f -print0 | xargs -0 sed -i /^Key/NewKey find . -type f -print0 | xargs -0 sed -i /^Key/NewKey
* Before you commit, use git diff to check that you don't delete too much * Before you commit, use git diff to check that you don't delete too much
or some unrelated key with the same prefix. or some unrelated key with the same prefix.
### Happy translating! ### Happy translating!

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,61 +1,61 @@
[LangRegionNames] [LangRegionNames]
ja_JP = "日本語" ja_JP = "日本語"
en_US = "English" en_US = "English"
fi_FI = "Suomi" fi_FI = "Suomi"
fr_FR = "Français" fr_FR = "Français"
es_ES = "Castellano (España)" es_ES = "Castellano (España)"
es_LA = "Español (América Latina)" es_LA = "Español (América Latina)"
de_DE = "Deutsch" de_DE = "Deutsch"
it_IT = "Italiano" it_IT = "Italiano"
nl_NL = "Nederlands" nl_NL = "Nederlands"
pt_PT = "Português" pt_PT = "Português"
pt_BR = "Português Brasileiro" pt_BR = "Português Brasileiro"
ru_RU = "Русский" ru_RU = "Русский"
ko_KR = "한국어" ko_KR = "한국어"
zh_TW = "繁體中文" zh_TW = "繁體中文"
zh_CN = "简体中文" zh_CN = "简体中文"
ar_AE = "العربية" ar_AE = "العربية"
az_AZ = "Azeri" az_AZ = "Azeri"
ca_ES = "Català" ca_ES = "Català"
gl_ES = "Galego" gl_ES = "Galego"
gr_EL = "Ελληνικά" gr_EL = "Ελληνικά"
he_IL = "עברית" he_IL = "עברית"
hu_HU = "Magyar" hu_HU = "Magyar"
id_ID = "Indonesia" id_ID = "Indonesia"
pl_PL = "Polski" pl_PL = "Polski"
ro_RO = "Român" ro_RO = "Român"
sv_SE = "Svenska" sv_SE = "Svenska"
tr_TR = "Türk" tr_TR = "Türk"
uk_UA = "Українська" uk_UA = "Українська"
vi_VN = "Tiếng Việt" vi_VN = "Tiếng Việt"
cz_CZ = "Česky" cz_CZ = "Česky"
tg_PH = "Tagalog" tg_PH = "Tagalog"
th_TH = "ไทย" th_TH = "ไทย"
dr_ID = "Duri" dr_ID = "Duri"
fa_IR = "فارسی" fa_IR = "فارسی"
ms_MY = "Melayu" ms_MY = "Melayu"
da_DK = "Dansk" da_DK = "Dansk"
no_NO = "Norsk" no_NO = "Norsk"
bg_BG = "български език" bg_BG = "български език"
lt-LT = "Lithuanian" lt-LT = "Lithuanian"
jv_ID = "Jawa" jv_ID = "Jawa"
lo_LA = "ລາວ" lo_LA = "ລາວ"
hr_HR = "Hrvatski" hr_HR = "Hrvatski"
[SystemLanguage] [SystemLanguage]
ja_JP = "JAPANESE" ja_JP = "JAPANESE"
en_US = "ENGLISH" en_US = "ENGLISH"
fr_FR = "FRENCH" fr_FR = "FRENCH"
es_ES = "SPANISH" es_ES = "SPANISH"
gl_ES = "SPANISH" gl_ES = "SPANISH"
es_LA = "SPANISH" es_LA = "SPANISH"
de_DE = "GERMAN" de_DE = "GERMAN"
it_IT = "ITALIAN" it_IT = "ITALIAN"
nl_NL = "DUTCH" nl_NL = "DUTCH"
pt_PT = "PORTUGUESE" pt_PT = "PORTUGUESE"
pt_BR = "PORTUGUESE" pt_BR = "PORTUGUESE"
ru_RU = "RUSSIAN" ru_RU = "RUSSIAN"
ko_KR = "KOREAN" ko_KR = "KOREAN"
th_TH = "THAI" th_TH = "THAI"
zh_TW = "CHINESE_TRADITIONAL" zh_TW = "CHINESE_TRADITIONAL"
zh_CN = "CHINESE_SIMPLIFIED" zh_CN = "CHINESE_SIMPLIFIED"

View File

@@ -1,77 +1,77 @@
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from: // 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
// http://forums.ngemu.com/showthread.php?t=76098 // http://forums.ngemu.com/showthread.php?t=76098
// by guest(r) (guest.r@gmail.com) // by guest(r) (guest.r@gmail.com)
// License: GNU-GPL // License: GNU-GPL
// Shader notes: looks better with sprite games // Shader notes: looks better with sprite games
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
const float mx = 0.325; // start smoothing factor const float mx = 0.325; // start smoothing factor
const float k = -0.250; // smoothing decrease factor const float k = -0.250; // smoothing decrease factor
const float max_w = 0.25; // max. smoothing weigth const float max_w = 0.25; // max. smoothing weigth
const float min_w =-0.05; // min smoothing/sharpening weigth const float min_w =-0.05; // min smoothing/sharpening weigth
void main() void main()
{ {
vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 c = texture2D(sampler0, v_texcoord0.xy).xyz;
vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz; vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz;
vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz; vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz;
vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz; vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz;
vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz; vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz;
vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz; vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz;
vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz; vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz;
vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz; vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz; vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz;
vec3 dt = vec3(1.0,1.0,1.0); vec3 dt = vec3(1.0,1.0,1.0);
float ko1=dot(abs(o1-c),dt); float ko1=dot(abs(o1-c),dt);
float ko2=dot(abs(o2-c),dt); float ko2=dot(abs(o2-c),dt);
float ko3=dot(abs(o3-c),dt); float ko3=dot(abs(o3-c),dt);
float ko4=dot(abs(o4-c),dt); float ko4=dot(abs(o4-c),dt);
float sd1 = dot(abs(i1-i3),dt); float sd1 = dot(abs(i1-i3),dt);
float sd2 = dot(abs(i2-i4),dt); float sd2 = dot(abs(i2-i4),dt);
float w1 = step(ko1,ko3)*sd2; float w1 = step(ko1,ko3)*sd2;
float w2 = step(ko2,ko4)*sd1; float w2 = step(ko2,ko4)*sd1;
float w3 = step(ko3,ko1)*sd2; float w3 = step(ko3,ko1)*sd2;
float w4 = step(ko4,ko2)*sd1; float w4 = step(ko4,ko2)*sd1;
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1); c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
float lc = c.r+c.g+c.b+0.2; float lc = c.r+c.g+c.b+0.2;
w1 = (i1.r+i1.g+i1.b+lc)*0.2; w1 = (i1.r+i1.g+i1.b+lc)*0.2;
w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w); w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
w2 = (i2.r+i2.g+i2.b+lc)*0.2; w2 = (i2.r+i2.g+i2.b+lc)*0.2;
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w); w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
w3 = (i3.r+i3.g+i3.b+lc)*0.2; w3 = (i3.r+i3.g+i3.b+lc)*0.2;
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w); w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
w4 = (i4.r+i4.g+i4.b+lc)*0.2; w4 = (i4.r+i4.g+i4.b+lc)*0.2;
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w); w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c; gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,37 +1,37 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
uniform vec2 u_pixelDelta; uniform vec2 u_pixelDelta;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
void main() void main()
{ {
float x = u_pixelDelta.x*((u_texelDelta.x/u_pixelDelta.x)/2.0); float x = u_pixelDelta.x*((u_texelDelta.x/u_pixelDelta.x)/2.0);
float y = u_pixelDelta.y*((u_texelDelta.y/u_pixelDelta.y)/2.0); float y = u_pixelDelta.y*((u_texelDelta.y/u_pixelDelta.y)/2.0);
vec2 dg1 = vec2( x,y); vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y); vec2 dg2 = vec2(-x,y);
vec2 sd1 = dg1*0.5; vec2 sd1 = dg1*0.5;
vec2 sd2 = dg2*0.5; vec2 sd2 = dg2*0.5;
gl_Position = a_position; gl_Position = a_position;
v_texcoord0=a_texcoord0.xyxy; v_texcoord0=a_texcoord0.xyxy;
v_texcoord1.xy = v_texcoord0.xy - sd1; v_texcoord1.xy = v_texcoord0.xy - sd1;
v_texcoord2.xy = v_texcoord0.xy - sd2; v_texcoord2.xy = v_texcoord0.xy - sd2;
v_texcoord3.xy = v_texcoord0.xy + sd1; v_texcoord3.xy = v_texcoord0.xy + sd1;
v_texcoord4.xy = v_texcoord0.xy + sd2; v_texcoord4.xy = v_texcoord0.xy + sd2;
v_texcoord5.xy = v_texcoord0.xy - dg1; v_texcoord5.xy = v_texcoord0.xy - dg1;
v_texcoord6.xy = v_texcoord0.xy + dg1; v_texcoord6.xy = v_texcoord0.xy + dg1;
v_texcoord5.zw = v_texcoord0.xy - dg2; v_texcoord5.zw = v_texcoord0.xy - dg2;
v_texcoord6.zw = v_texcoord0.xy + dg2; v_texcoord6.zw = v_texcoord0.xy + dg2;
} }

View File

@@ -1,218 +1,218 @@
/* /*
Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r) Hyllian's xBR-lv2 Shader Accuracy (tweak by guest.r)
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions: furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software. all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street. Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
*/ */
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
#define CornerA 0 //ON:1/OFF:0 / A, B, C, D are just different variants of corner rounding #define CornerA 0 //ON:1/OFF:0 / A, B, C, D are just different variants of corner rounding
#define CornerB 0 //ON:1/OFF:0 / activate only one #define CornerB 0 //ON:1/OFF:0 / activate only one
#define CornerD 0 //ON:1/OFF:0 #define CornerD 0 //ON:1/OFF:0
// CornerC //used as default if none of the above is defined // CornerC //used as default if none of the above is defined
const float XBR_SCALE = 3.0; const float XBR_SCALE = 3.0;
const float lv2_cf = 2.0; const float lv2_cf = 2.0;
const float coef = 2.0; const float coef = 2.0;
const vec3 rgbw = vec3(14.352, 28.176, 5.472); const vec3 rgbw = vec3(14.352, 28.176, 5.472);
const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0); const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0);
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25); const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
uniform sampler2D sampler0; uniform sampler2D sampler0;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
uniform vec2 u_pixelDelta; uniform vec2 u_pixelDelta;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
// Difference between vector components. // Difference between vector components.
vec4 df(vec4 A, vec4 B) { vec4 df(vec4 A, vec4 B) {
return vec4(abs(A-B)); return vec4(abs(A-B));
} }
// Compare two vectors and return their components are different. // Compare two vectors and return their components are different.
vec4 diff(vec4 A, vec4 B) { vec4 diff(vec4 A, vec4 B) {
return vec4(notEqual(A, B)); return vec4(notEqual(A, B));
} }
// Determine if two vector components are equal based on a threshold. // Determine if two vector components are equal based on a threshold.
vec4 eq(vec4 A, vec4 B) { vec4 eq(vec4 A, vec4 B) {
return (step(df(A, B), eq_threshold)); return (step(df(A, B), eq_threshold));
} }
// Determine if two vector components are NOT equal based on a threshold. // Determine if two vector components are NOT equal based on a threshold.
vec4 neq(vec4 A, vec4 B) { vec4 neq(vec4 A, vec4 B) {
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B)); return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
} }
float c_df(vec3 c1, vec3 c2) { float c_df(vec3 c1, vec3 c2) {
vec3 df = abs(c1 - c2); vec3 df = abs(c1 - c2);
return df.r + df.g + df.b; return df.r + df.g + df.b;
} }
void main() { void main() {
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x); bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
// Let's skip the whole scaling if output size smaller than 1.6x of input size // Let's skip the whole scaling if output size smaller than 1.6x of input size
if (upscale) { if (upscale) {
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
vec4 irlv0, irlv1, irlv2l, irlv2u; vec4 irlv0, irlv1, irlv2l, irlv2u;
vec4 fx, fx_l, fx_u; // inequations of straight lines. vec4 fx, fx_l, fx_u; // inequations of straight lines.
vec2 pS = 1.0 / u_texelDelta.xy; vec2 pS = 1.0 / u_texelDelta.xy;
vec2 fp = fract(v_texcoord0.xy*pS.xy); vec2 fp = fract(v_texcoord0.xy*pS.xy);
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy; vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
vec2 dx = vec2(u_texelDelta.x,0.0); vec2 dx = vec2(u_texelDelta.x,0.0);
vec2 dy = vec2(0.0,u_texelDelta.y); vec2 dy = vec2(0.0,u_texelDelta.y);
vec2 y2 = dy + dy; vec2 x2 = dx + dx; vec2 y2 = dy + dy; vec2 x2 = dx + dx;
vec4 delta = vec4(1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE); vec4 delta = vec4(1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE);
vec4 delta_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE); vec4 delta_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE);
vec4 delta_u = delta_l.yxwz; vec4 delta_u = delta_l.yxwz;
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz; vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz; vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz; vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz; vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz; vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz; vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz; vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz; vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz; vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz; vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz; vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz; vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz; vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz; vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz; vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz; vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz; vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz; vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz; vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz; vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz; vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw)); vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw)); vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
vec4 d = b.yzwx; vec4 d = b.yzwx;
vec4 e = vec4(dot(E,rgbw)); vec4 e = vec4(dot(E,rgbw));
vec4 f = b.wxyz; vec4 f = b.wxyz;
vec4 g = c.zwxy; vec4 g = c.zwxy;
vec4 h = b.zwxy; vec4 h = b.zwxy;
vec4 i = c.wxyz; vec4 i = c.wxyz;
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw)); vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw)); vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw)); vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
vec4 f4 = h5.yzwx; vec4 f4 = h5.yzwx;
// These inequations define the line below which interpolation occurs. // These inequations define the line below which interpolation occurs.
fx = (Ao*fp.y+Bo*fp.x); fx = (Ao*fp.y+Bo*fp.x);
fx_l = (Ax*fp.y+Bx*fp.x); fx_l = (Ax*fp.y+Bx*fp.x);
fx_u = (Ay*fp.y+By*fp.x); fx_u = (Ay*fp.y+By*fp.x);
irlv1 = irlv0 = diff(e,f) * diff(e,h); irlv1 = irlv0 = diff(e,f) * diff(e,h);
#if(CornerA==0) // A takes priority skipping other corners #if(CornerA==0) // A takes priority skipping other corners
#define SMOOTH_TIPS #define SMOOTH_TIPS
// Corner C also default if no other ones used // Corner C also default if no other ones used
irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) ); irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) );
int select1 = 0; int select1 = 0;
#if(CornerB==1) // Corner B #if(CornerB==1) // Corner B
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) ); irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) );
select1 = 1; select1 = 1;
#endif #endif
#if(CornerD==1) // Corner D #if(CornerD==1) // Corner D
if (select1==0) { if (select1==0) {
vec4 c1 = i4.yzwx; vec4 c1 = i4.yzwx;
vec4 g0 = i5.wxyz; vec4 g0 = i5.wxyz;
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0))); irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0)));
} }
#endif #endif
#endif #endif
irlv2l = diff(e,g) * diff(d,g); irlv2l = diff(e,g) * diff(d,g);
irlv2u = diff(e,c) * diff(b,c); irlv2u = diff(e,c) * diff(b,c);
vec4 fx45i = clamp((fx + delta -Co - Ci) / (2.0*delta ), 0.0, 1.0); vec4 fx45i = clamp((fx + delta -Co - Ci) / (2.0*delta ), 0.0, 1.0);
vec4 fx45 = clamp((fx + delta -Co ) / (2.0*delta ), 0.0, 1.0); vec4 fx45 = clamp((fx + delta -Co ) / (2.0*delta ), 0.0, 1.0);
vec4 fx30 = clamp((fx_l + delta_l -Cx ) / (2.0*delta_l), 0.0, 1.0); vec4 fx30 = clamp((fx_l + delta_l -Cx ) / (2.0*delta_l), 0.0, 1.0);
vec4 fx60 = clamp((fx_u + delta_u -Cy ) / (2.0*delta_u), 0.0, 1.0); vec4 fx60 = clamp((fx_u + delta_u -Cy ) / (2.0*delta_u), 0.0, 1.0);
vec4 w1, w2; vec4 w1, w2;
w1.x = dot(abs(E-C),rgbw) + dot(abs(E-G),rgbw) + dot(abs(I-H5),rgbw) + dot(abs(I-F4),rgbw) + 4.0*dot(abs(H-F),rgbw); w1.x = dot(abs(E-C),rgbw) + dot(abs(E-G),rgbw) + dot(abs(I-H5),rgbw) + dot(abs(I-F4),rgbw) + 4.0*dot(abs(H-F),rgbw);
w1.y = dot(abs(E-A),rgbw) + dot(abs(E-I),rgbw) + dot(abs(C-F4),rgbw) + dot(abs(C-B1),rgbw) + 4.0*dot(abs(F-B),rgbw); w1.y = dot(abs(E-A),rgbw) + dot(abs(E-I),rgbw) + dot(abs(C-F4),rgbw) + dot(abs(C-B1),rgbw) + 4.0*dot(abs(F-B),rgbw);
w1.z = dot(abs(E-G),rgbw) + dot(abs(E-C),rgbw) + dot(abs(A-B1),rgbw) + dot(abs(A-D0),rgbw) + 4.0*dot(abs(B-D),rgbw); w1.z = dot(abs(E-G),rgbw) + dot(abs(E-C),rgbw) + dot(abs(A-B1),rgbw) + dot(abs(A-D0),rgbw) + 4.0*dot(abs(B-D),rgbw);
w1.w = dot(abs(E-I),rgbw) + dot(abs(E-A),rgbw) + dot(abs(G-D0),rgbw) + dot(abs(G-H5),rgbw) + 4.0*dot(abs(D-H),rgbw); w1.w = dot(abs(E-I),rgbw) + dot(abs(E-A),rgbw) + dot(abs(G-D0),rgbw) + dot(abs(G-H5),rgbw) + 4.0*dot(abs(D-H),rgbw);
w2.x = dot(abs(H-D),rgbw) + dot(abs(H-I5),rgbw) + dot(abs(F-I4),rgbw) + dot(abs(F-B),rgbw) + 4.0*dot(abs(E-I),rgbw); w2.x = dot(abs(H-D),rgbw) + dot(abs(H-I5),rgbw) + dot(abs(F-I4),rgbw) + dot(abs(F-B),rgbw) + 4.0*dot(abs(E-I),rgbw);
w2.y = dot(abs(F-H),rgbw) + dot(abs(F-C4),rgbw) + dot(abs(B-C1),rgbw) + dot(abs(B-D),rgbw) + 4.0*dot(abs(E-C),rgbw); w2.y = dot(abs(F-H),rgbw) + dot(abs(F-C4),rgbw) + dot(abs(B-C1),rgbw) + dot(abs(B-D),rgbw) + 4.0*dot(abs(E-C),rgbw);
w2.z = dot(abs(B-F),rgbw) + dot(abs(B-A1),rgbw) + dot(abs(D-A0),rgbw) + dot(abs(D-H),rgbw) + 4.0*dot(abs(E-A),rgbw); w2.z = dot(abs(B-F),rgbw) + dot(abs(B-A1),rgbw) + dot(abs(D-A0),rgbw) + dot(abs(D-H),rgbw) + 4.0*dot(abs(E-A),rgbw);
w2.w = dot(abs(D-B),rgbw) + dot(abs(D-G0),rgbw) + dot(abs(H-G5),rgbw) + dot(abs(H-F),rgbw) + 4.0*dot(abs(E-G),rgbw); w2.w = dot(abs(D-B),rgbw) + dot(abs(D-G0),rgbw) + dot(abs(H-G5),rgbw) + dot(abs(H-F),rgbw) + 4.0*dot(abs(E-G),rgbw);
edri = step(w1, w2) * irlv0; edri = step(w1, w2) * irlv0;
edr = step(w1 + vec4(0.1, 0.1, 0.1, 0.1), w2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1); edr = step(w1 + vec4(0.1, 0.1, 0.1, 0.1), w2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1);
w1.x = dot(abs(F-G),rgbw); w1.y = dot(abs(B-I),rgbw); w1.z = dot(abs(D-C),rgbw); w1.w = dot(abs(H-A),rgbw); w1.x = dot(abs(F-G),rgbw); w1.y = dot(abs(B-I),rgbw); w1.z = dot(abs(D-C),rgbw); w1.w = dot(abs(H-A),rgbw);
w2.x = dot(abs(H-C),rgbw); w2.y = dot(abs(F-A),rgbw); w2.z = dot(abs(B-G),rgbw); w2.w = dot(abs(D-I),rgbw); w2.x = dot(abs(H-C),rgbw); w2.y = dot(abs(F-A),rgbw); w2.z = dot(abs(B-G),rgbw); w2.w = dot(abs(D-I),rgbw);
edr_l = step( lv2_cf*w1, w2 ) * irlv2l * edr; edr_l = step( lv2_cf*w1, w2 ) * irlv2l * edr;
edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr; edr_u = step( lv2_cf*w2, w1 ) * irlv2u * edr;
fx45 = edr * fx45; fx45 = edr * fx45;
fx30 = edr_l * fx30; fx30 = edr_l * fx30;
fx60 = edr_u * fx60; fx60 = edr_u * fx60;
fx45i = edri * fx45i; fx45i = edri * fx45i;
w1.x = dot(abs(E-F),rgbw); w1.y = dot(abs(E-B),rgbw); w1.z = dot(abs(E-D),rgbw); w1.w = dot(abs(E-H),rgbw); w1.x = dot(abs(E-F),rgbw); w1.y = dot(abs(E-B),rgbw); w1.z = dot(abs(E-D),rgbw); w1.w = dot(abs(E-H),rgbw);
w2.x = dot(abs(E-H),rgbw); w2.y = dot(abs(E-F),rgbw); w2.z = dot(abs(E-B),rgbw); w2.w = dot(abs(E-D),rgbw); w2.x = dot(abs(E-H),rgbw); w2.y = dot(abs(E-F),rgbw); w2.z = dot(abs(E-B),rgbw); w2.w = dot(abs(E-D),rgbw);
px = step(w1, w2); px = step(w1, w2);
#ifdef SMOOTH_TIPS #ifdef SMOOTH_TIPS
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i)); vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
#else #else
vec4 maximos = max(max(fx30, fx60), fx45); vec4 maximos = max(max(fx30, fx60), fx45);
#endif #endif
vec3 res1 = E; vec3 res1 = E;
res1 = mix(res1, mix(H, F, px.x), maximos.x); res1 = mix(res1, mix(H, F, px.x), maximos.x);
res1 = mix(res1, mix(B, D, px.z), maximos.z); res1 = mix(res1, mix(B, D, px.z), maximos.z);
vec3 res2 = E; vec3 res2 = E;
res2 = mix(res2, mix(F, B, px.y), maximos.y); res2 = mix(res2, mix(F, B, px.y), maximos.y);
res2 = mix(res2, mix(D, H, px.w), maximos.w); res2 = mix(res2, mix(D, H, px.w), maximos.w);
res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2))); res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
} }
gl_FragColor.xyz = res; gl_FragColor.xyz = res;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,133 +1,133 @@
/* /*
Hyllian's 5xBR v3.5a Shader Hyllian's 5xBR v3.5a Shader
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version. of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
uniform vec2 u_pixelDelta; uniform vec2 u_pixelDelta;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
const float coef = 2.0; const float coef = 2.0;
const vec3 rgbw = vec3(16.163, 23.351, 8.4772); const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 ); const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 ); const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 ); const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 ); const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 ); const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 ); const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 ); const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
vec4 df(vec4 A, vec4 B) { vec4 df(vec4 A, vec4 B) {
return abs(A-B); return abs(A-B);
} }
vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) { vec4 weighted_distance(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h) {
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h)); return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
} }
void main(){ void main(){
bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x); bool upscale = u_texelDelta.x > (1.6 * u_pixelDelta.x);
vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 res = texture2D(sampler0, v_texcoord0.xy).xyz;
// Let's skip the whole scaling if output size smaller than 1.6x of input size // Let's skip the whole scaling if output size smaller than 1.6x of input size
if (upscale) { if (upscale) {
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up; bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
bvec4 nc; // new_color bvec4 nc; // new_color
bvec4 fx, fx_left, fx_up; // inequations of straight lines. bvec4 fx, fx_left, fx_up; // inequations of straight lines.
vec2 pS = 1.0 / u_texelDelta.xy; vec2 pS = 1.0 / u_texelDelta.xy;
vec2 fp = fract(v_texcoord0.xy*pS.xy); vec2 fp = fract(v_texcoord0.xy*pS.xy);
vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy; vec2 TexCoord_0 = v_texcoord0.xy-fp*u_pixelDelta.xy;
vec2 dx = vec2(u_texelDelta.x,0.0); vec2 dx = vec2(u_texelDelta.x,0.0);
vec2 dy = vec2(0.0,u_texelDelta.y); vec2 dy = vec2(0.0,u_texelDelta.y);
vec2 y2 = dy + dy; vec2 x2 = dx + dx; vec2 y2 = dy + dy; vec2 x2 = dx + dx;
vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz; vec3 A = texture2D(sampler0, TexCoord_0 -dx -dy ).xyz;
vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz; vec3 B = texture2D(sampler0, TexCoord_0 -dy ).xyz;
vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz; vec3 C = texture2D(sampler0, TexCoord_0 +dx -dy ).xyz;
vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz; vec3 D = texture2D(sampler0, TexCoord_0 -dx ).xyz;
vec3 E = texture2D(sampler0, TexCoord_0 ).xyz; vec3 E = texture2D(sampler0, TexCoord_0 ).xyz;
vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz; vec3 F = texture2D(sampler0, TexCoord_0 +dx ).xyz;
vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz; vec3 G = texture2D(sampler0, TexCoord_0 -dx +dy ).xyz;
vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz; vec3 H = texture2D(sampler0, TexCoord_0 +dy ).xyz;
vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz; vec3 I = texture2D(sampler0, TexCoord_0 +dx +dy ).xyz;
vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz; vec3 A1 = texture2D(sampler0, TexCoord_0 -dx -y2).xyz;
vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz; vec3 C1 = texture2D(sampler0, TexCoord_0 +dx -y2).xyz;
vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz; vec3 A0 = texture2D(sampler0, TexCoord_0 -x2 -dy).xyz;
vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz; vec3 G0 = texture2D(sampler0, TexCoord_0 -x2 +dy).xyz;
vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz; vec3 C4 = texture2D(sampler0, TexCoord_0 +x2 -dy).xyz;
vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz; vec3 I4 = texture2D(sampler0, TexCoord_0 +x2 +dy).xyz;
vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz; vec3 G5 = texture2D(sampler0, TexCoord_0 -dx +y2).xyz;
vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz; vec3 I5 = texture2D(sampler0, TexCoord_0 +dx +y2).xyz;
vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz; vec3 B1 = texture2D(sampler0, TexCoord_0 -y2).xyz;
vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz; vec3 D0 = texture2D(sampler0, TexCoord_0 -x2 ).xyz;
vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz; vec3 H5 = texture2D(sampler0, TexCoord_0 +y2).xyz;
vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz; vec3 F4 = texture2D(sampler0, TexCoord_0 +x2 ).xyz;
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw)); vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw)); vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
vec4 d = vec4(b.y, b.z, b.w, b.x); vec4 d = vec4(b.y, b.z, b.w, b.x);
vec4 e = vec4(dot(E,rgbw)); vec4 e = vec4(dot(E,rgbw));
vec4 f = vec4(b.w, b.x, b.y, b.z); vec4 f = vec4(b.w, b.x, b.y, b.z);
vec4 g = vec4(c.z, c.w, c.x, c.y); vec4 g = vec4(c.z, c.w, c.x, c.y);
vec4 h = vec4(b.z, b.w, b.x, b.y); vec4 h = vec4(b.z, b.w, b.x, b.y);
vec4 i = vec4(c.w, c.x, c.y, c.z); vec4 i = vec4(c.w, c.x, c.y, c.z);
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw)); vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw)); vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw)); vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x); vec4 f4 = vec4(h5.y, h5.z, h5.w, h5.x);
// These inequations define the line below which interpolation occurs. // These inequations define the line below which interpolation occurs.
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co); fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx); fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy); fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h))); interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g))); interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c))); interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1)); edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1));
edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left)); edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left));
edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up)); edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up));
nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) ); nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) );
nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) ); nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) );
nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) ); nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) );
nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) ); nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) );
px = lessThanEqual(df(e,f),df(e,h)); px = lessThanEqual(df(e,f),df(e,h));
res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E; res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
} }
gl_FragColor.rgb = res; gl_FragColor.rgb = res;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,34 +1,34 @@
/* /*
Hyllian's 5xBR v3.5a Shader Hyllian's 5xBR v3.5a Shader
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version. of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
v_texcoord0 = a_texcoord0; v_texcoord0 = a_texcoord0;
gl_Position = a_position; gl_Position = a_position;
} }

View File

@@ -1,73 +1,73 @@
// PPSSPP: Simple Gauss filter // PPSSPP: Simple Gauss filter
// Made by Bigpet // Made by Bigpet
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
// The inverse of the texture dimensions along X and Y // The inverse of the texture dimensions along X and Y
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
uniform vec2 u_pixelDelta; uniform vec2 u_pixelDelta;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
// The parameters are hardcoded for now, but could be // The parameters are hardcoded for now, but could be
// made into uniforms to control fromt he program. // made into uniforms to control fromt he program.
float GAUSS_SPAN_MAX = 1.5; float GAUSS_SPAN_MAX = 1.5;
//just a variable to describe the maximu //just a variable to describe the maximu
float GAUSS_KERNEL_SIZE = 5.0; float GAUSS_KERNEL_SIZE = 5.0;
//indices //indices
// XX XX 00 XX XX // XX XX 00 XX XX
// XX 01 02 03 XX // XX 01 02 03 XX
// 04 05 06 07 08 // 04 05 06 07 08
// XX 09 10 11 XX // XX 09 10 11 XX
// XX XX 12 XX XX // XX XX 12 XX XX
//filter strength, rather smooth //filter strength, rather smooth
// XX XX 01 XX XX // XX XX 01 XX XX
// XX 03 08 03 XX // XX 03 08 03 XX
// 01 08 10 08 01 // 01 08 10 08 01
// XX 03 08 03 XX // XX 03 08 03 XX
// XX XX 01 XX XX // XX XX 01 XX XX
vec2 offset = u_pixelDelta*GAUSS_SPAN_MAX/GAUSS_KERNEL_SIZE; vec2 offset = u_pixelDelta*GAUSS_SPAN_MAX/GAUSS_KERNEL_SIZE;
vec3 rgbSimple0 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-2.0)).xyz; vec3 rgbSimple0 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-2.0)).xyz;
vec3 rgbSimple1 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0,-1.0)).xyz; vec3 rgbSimple1 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0,-1.0)).xyz;
vec3 rgbSimple2 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-1.0)).xyz; vec3 rgbSimple2 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0,-1.0)).xyz;
vec3 rgbSimple3 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0,-1.0)).xyz; vec3 rgbSimple3 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0,-1.0)).xyz;
vec3 rgbSimple4 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-2.0, 0.0)).xyz; vec3 rgbSimple4 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-2.0, 0.0)).xyz;
vec3 rgbSimple5 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 0.0)).xyz; vec3 rgbSimple5 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 0.0)).xyz;
vec3 rgbSimple6 = 10.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 0.0)).xyz; vec3 rgbSimple6 = 10.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 0.0)).xyz;
vec3 rgbSimple7 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 0.0)).xyz; vec3 rgbSimple7 = 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 0.0)).xyz;
vec3 rgbSimple8 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 2.0, 0.0)).xyz; vec3 rgbSimple8 = 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 2.0, 0.0)).xyz;
vec3 rgbSimple9 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 1.0)).xyz; vec3 rgbSimple9 = 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2(-1.0, 1.0)).xyz;
vec3 rgbSimple10= 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 1.0)).xyz; vec3 rgbSimple10= 8.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 1.0)).xyz;
vec3 rgbSimple11= 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 1.0)).xyz; vec3 rgbSimple11= 3.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 1.0, 1.0)).xyz;
vec3 rgbSimple12= 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 2.0)).xyz; vec3 rgbSimple12= 1.0 * texture2D(sampler0, v_texcoord0.xy + offset * vec2( 0.0, 2.0)).xyz;
//vec3 rgbSimple10= vec3(1.0,0.0,0.0); //vec3 rgbSimple10= vec3(1.0,0.0,0.0);
//vec3 rgbSimple11= vec3(1.0,0.0,0.0); //vec3 rgbSimple11= vec3(1.0,0.0,0.0);
//vec3 rgbSimple12= vec3(1.0,0.0,0.0); //vec3 rgbSimple12= vec3(1.0,0.0,0.0);
vec3 rgb = rgbSimple0 + vec3 rgb = rgbSimple0 +
rgbSimple1 + rgbSimple1 +
rgbSimple2 + rgbSimple2 +
rgbSimple3 + rgbSimple3 +
rgbSimple4 + rgbSimple4 +
rgbSimple5 + rgbSimple5 +
rgbSimple6 + rgbSimple6 +
rgbSimple7 + rgbSimple7 +
rgbSimple8 + rgbSimple8 +
rgbSimple9 + rgbSimple9 +
rgbSimple10 + rgbSimple10 +
rgbSimple11 + rgbSimple11 +
rgbSimple12; rgbSimple12;
rgb = rgb / 58.0; rgb = rgb / 58.0;
gl_FragColor.xyz=rgb; gl_FragColor.xyz=rgb;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,69 +1,69 @@
// AA-Color shader, Modified to use in PPSSPP. Grabbed from: // AA-Color shader, Modified to use in PPSSPP. Grabbed from:
// http://forums.ngemu.com/showthread.php?t=76098 // http://forums.ngemu.com/showthread.php?t=76098
// by guest(r) (guest.r@gmail.com) // by guest(r) (guest.r@gmail.com)
// license: GNU-GPL // license: GNU-GPL
// Color variables // Color variables
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
const float a = 1.20 ; // saturation const float a = 1.20 ; // saturation
const float b = 1.00 ; // brightness const float b = 1.00 ; // brightness
const float c = 1.25 ; // contrast const float c = 1.25 ; // contrast
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup) // you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
float contrast0(float x) float contrast0(float x)
{ return x; } { return x; }
float contrast1(float x) float contrast1(float x)
{ x = x*1.1547-1.0; { x = x*1.1547-1.0;
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;} return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
float contrast2(float x) float contrast2(float x)
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;} { return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
float contrast3(float x) float contrast3(float x)
{ return 1.73*pow(0.57735*x,c); } { return 1.73*pow(0.57735*x,c); }
float contrast4(float x) float contrast4(float x)
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); } { return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
void main() void main()
{ {
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz; vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz; vec3 c01 = texture2D(sampler0, v_texcoord4.xy).xyz;
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz; vec3 c21 = texture2D(sampler0, v_texcoord5.xy).xyz;
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz; vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0); vec3 dt = vec3(1.0,1.0,1.0);
float k1=dot(abs(c01-c21),dt); float k1=dot(abs(c01-c21),dt);
float k2=dot(abs(c10-c12),dt); float k2=dot(abs(c10-c12),dt);
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001); vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
float x = sqrt(dot(color,color)); float x = sqrt(dot(color,color));
color.r = pow(color.r+0.001,a); color.r = pow(color.r+0.001,a);
color.g = pow(color.g+0.001,a); color.g = pow(color.g+0.001,a);
color.b = pow(color.b+0.001,a); color.b = pow(color.b+0.001,a);
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b; gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,38 +1,38 @@
// by guest(r) - guest.r@gmail.com // by guest(r) - guest.r@gmail.com
// license: GNU-GPL // license: GNU-GPL
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
float scaleoffset = 0.8; float scaleoffset = 0.8;
void main() void main()
{ {
float x = u_texelDelta.x*scaleoffset; float x = u_texelDelta.x*scaleoffset;
float y = u_texelDelta.y*scaleoffset; float y = u_texelDelta.y*scaleoffset;
gl_Position = a_position; gl_Position = a_position;
v_texcoord0 = a_texcoord0.xyxy; v_texcoord0 = a_texcoord0.xyxy;
v_texcoord1 = v_texcoord0; v_texcoord1 = v_texcoord0;
v_texcoord2 = v_texcoord0; v_texcoord2 = v_texcoord0;
v_texcoord4 = v_texcoord0; v_texcoord4 = v_texcoord0;
v_texcoord5 = v_texcoord0; v_texcoord5 = v_texcoord0;
v_texcoord1.y-=y; v_texcoord1.y-=y;
v_texcoord2.y+=y; v_texcoord2.y+=y;
v_texcoord4.x-=x; v_texcoord4.x-=x;
v_texcoord5.x+=x; v_texcoord5.x+=x;
} }

View File

@@ -1,47 +1,47 @@
// Simple Bloom shader; created to use in PPSSPP. // Simple Bloom shader; created to use in PPSSPP.
// Without excessive samples and complex nested loops // Without excessive samples and complex nested loops
// (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility). // (to make it compatible with low-end GPUs and to ensure ps_2_0 compatibility).
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
uniform vec4 u_setting; uniform vec4 u_setting;
void main() void main()
{ {
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
vec4 sum = vec4(0); vec4 sum = vec4(0);
vec3 bloom; vec3 bloom;
for(int i= -3 ;i < 3; i++) for(int i= -3 ;i < 3; i++)
{ {
sum += texture2D(sampler0, v_texcoord0 + vec2(-1, i)*0.004) * u_setting.x; sum += texture2D(sampler0, v_texcoord0 + vec2(-1, i)*0.004) * u_setting.x;
sum += texture2D(sampler0, v_texcoord0 + vec2(0, i)*0.004) * u_setting.x; sum += texture2D(sampler0, v_texcoord0 + vec2(0, i)*0.004) * u_setting.x;
sum += texture2D(sampler0, v_texcoord0 + vec2(1, i)*0.004) * u_setting.x; sum += texture2D(sampler0, v_texcoord0 + vec2(1, i)*0.004) * u_setting.x;
} }
if (color.r < 0.3 && color.g < 0.3 && color.b < 0.3) if (color.r < 0.3 && color.g < 0.3 && color.b < 0.3)
{ {
bloom = sum.xyz*sum.xyz*0.012 + color; bloom = sum.xyz*sum.xyz*0.012 + color;
} }
else else
{ {
if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5) if (color.r < 0.5 && color.g < 0.5 && color.b < 0.5)
{ {
bloom = sum.xyz*sum.xyz*0.009 + color; bloom = sum.xyz*sum.xyz*0.009 + color;
} }
else else
{ {
bloom = sum.xyz*sum.xyz*0.0075 + color; bloom = sum.xyz*sum.xyz*0.0075 + color;
} }
} }
bloom = mix(color, bloom, u_setting.y); bloom = mix(color, bloom, u_setting.y);
gl_FragColor.rgb = bloom; gl_FragColor.rgb = bloom;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,52 +1,52 @@
// Modified to use in PPSSPP. Grabbed from: // Modified to use in PPSSPP. Grabbed from:
// http://forums.ngemu.com/showthread.php?t=76098 // http://forums.ngemu.com/showthread.php?t=76098
// Advanced Cartoon shader I // Advanced Cartoon shader I
// by guest(r) (guest.r@gmail.com) // by guest(r) (guest.r@gmail.com)
// license: GNU-GPL // license: GNU-GPL
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform vec4 u_setting; uniform vec4 u_setting;
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
void main() void main()
{ {
vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz; vec3 c00 = texture2D(sampler0, v_texcoord5.xy).xyz;
vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz; vec3 c10 = texture2D(sampler0, v_texcoord1.xy).xyz;
vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz; vec3 c20 = texture2D(sampler0, v_texcoord2.zw).xyz;
vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz; vec3 c01 = texture2D(sampler0, v_texcoord3.xy).xyz;
vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 c11 = texture2D(sampler0, v_texcoord0.xy).xyz;
vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz; vec3 c21 = texture2D(sampler0, v_texcoord4.xy).xyz;
vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz; vec3 c02 = texture2D(sampler0, v_texcoord1.zw).xyz;
vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz; vec3 c12 = texture2D(sampler0, v_texcoord2.xy).xyz;
vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz; vec3 c22 = texture2D(sampler0, v_texcoord6.xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0); vec3 dt = vec3(1.0,1.0,1.0);
float d1=dot(abs(c00-c22),dt); float d1=dot(abs(c00-c22),dt);
float d2=dot(abs(c20-c02),dt); float d2=dot(abs(c20-c02),dt);
float hl=dot(abs(c01-c21),dt); float hl=dot(abs(c01-c21),dt);
float vl=dot(abs(c10-c12),dt); float vl=dot(abs(c10-c12),dt);
float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15); float d = u_setting.x*(d1+d2+hl+vl)/(dot(c11,dt)+0.15);
float lc = 4.0*length(c11); float lc = 4.0*length(c11);
float f = fract(lc); f*=f; float f = fract(lc); f*=f;
lc = 0.25*(floor(lc) + f*f)+0.05; lc = 0.25*(floor(lc) + f*f)+0.05;
c11 = 4.0*normalize(c11); c11 = 4.0*normalize(c11);
vec3 frct = fract(c11); frct*=frct; vec3 frct = fract(c11); frct*=frct;
c11 = floor(c11)+ 0.05*dt + frct*frct; c11 = floor(c11)+ 0.05*dt + frct*frct;
gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11; gl_FragColor.rgb = 0.25*lc*(1.1-d*sqrt(d))*c11;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,39 +1,39 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
varying vec4 v_texcoord4; varying vec4 v_texcoord4;
varying vec4 v_texcoord5; varying vec4 v_texcoord5;
varying vec4 v_texcoord6; varying vec4 v_texcoord6;
float scaleoffset = 0.8; //edge detection offset float scaleoffset = 0.8; //edge detection offset
void main() void main()
{ {
float x = u_texelDelta.x*scaleoffset; float x = u_texelDelta.x*scaleoffset;
float y = u_texelDelta.y*scaleoffset; float y = u_texelDelta.y*scaleoffset;
vec2 dg1 = vec2( x,y); vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y); vec2 dg2 = vec2(-x,y);
vec2 dx = vec2(x,0.0); vec2 dx = vec2(x,0.0);
vec2 dy = vec2(0.0,y); vec2 dy = vec2(0.0,y);
gl_Position = a_position; gl_Position = a_position;
v_texcoord0=a_texcoord0.xyxy; v_texcoord0=a_texcoord0.xyxy;
v_texcoord1.xy = v_texcoord0.xy - dy; v_texcoord1.xy = v_texcoord0.xy - dy;
v_texcoord2.xy = v_texcoord0.xy + dy; v_texcoord2.xy = v_texcoord0.xy + dy;
v_texcoord3.xy = v_texcoord0.xy - dx; v_texcoord3.xy = v_texcoord0.xy - dx;
v_texcoord4.xy = v_texcoord0.xy + dx; v_texcoord4.xy = v_texcoord0.xy + dx;
v_texcoord5.xy = v_texcoord0.xy - dg1; v_texcoord5.xy = v_texcoord0.xy - dg1;
v_texcoord6.xy = v_texcoord0.xy + dg1; v_texcoord6.xy = v_texcoord0.xy + dg1;
v_texcoord1.zw = v_texcoord0.xy - dg2; v_texcoord1.zw = v_texcoord0.xy - dg2;
v_texcoord2.zw = v_texcoord0.xy + dg2; v_texcoord2.zw = v_texcoord0.xy + dg2;
} }

View File

@@ -1,20 +1,20 @@
// Color correction // Color correction
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
uniform vec4 u_setting; uniform vec4 u_setting;
void main() void main()
{ {
vec3 rgb = texture2D( sampler0, v_texcoord0 ).xyz; vec3 rgb = texture2D( sampler0, v_texcoord0 ).xyz;
rgb = vec3(mix(vec3(dot(rgb, vec3(0.299, 0.587, 0.114))), rgb, u_setting.y)); rgb = vec3(mix(vec3(dot(rgb, vec3(0.299, 0.587, 0.114))), rgb, u_setting.y));
rgb = (rgb-0.5)*u_setting.z+0.5+u_setting.x-1.0; rgb = (rgb-0.5)*u_setting.z+0.5+u_setting.x-1.0;
gl_FragColor.rgb = pow(rgb, vec3(1.0/u_setting.w)); gl_FragColor.rgb = pow(rgb, vec3(1.0/u_setting.w));
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,33 +1,33 @@
// Retro (CRT) shader, created to use in PPSSPP. // Retro (CRT) shader, created to use in PPSSPP.
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
uniform vec4 u_time; uniform vec4 u_time;
void main() void main()
{ {
// scanlines // scanlines
int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 ); int vPos = int( ( v_texcoord0.y + u_time.x * 0.5 ) * 272.0 );
float line_intensity = mod( float(vPos), 2.0 ); float line_intensity = mod( float(vPos), 2.0 );
// color shift // color shift
float off = line_intensity * 0.0005; float off = line_intensity * 0.0005;
vec2 shift = vec2( off, 0 ); vec2 shift = vec2( off, 0 );
// shift R and G channels to simulate NTSC color bleed // shift R and G channels to simulate NTSC color bleed
vec2 colorShift = vec2( 0.001, 0 ); vec2 colorShift = vec2( 0.001, 0 );
float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x; float r = texture2D( sampler0, v_texcoord0 + colorShift + shift ).x;
float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y; float g = texture2D( sampler0, v_texcoord0 - colorShift + shift ).y;
float b = texture2D( sampler0, v_texcoord0 ).z; float b = texture2D( sampler0, v_texcoord0 ).z;
vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 ); vec4 c = vec4( r, g * 0.99, b, 1.0 ) * clamp( line_intensity, 0.85, 1.0 );
float rollbar = sin( ( v_texcoord0.y + u_time.x ) * 4.0 ); float rollbar = sin( ( v_texcoord0.y + u_time.x ) * 4.0 );
gl_FragColor.rgba = c + (rollbar * 0.02); gl_FragColor.rgba = c + (rollbar * 0.02);
} }

View File

@@ -1,162 +1,163 @@
# You can have multiple ini files if you want, it doesn't matter. # You can have multiple ini files if you want, it doesn't matter.
[FXAA] [FXAA]
Name=FXAA Antialiasing Name=FXAA Antialiasing
Author=nVidia Author=nVidia
Fragment=fxaa.fsh Fragment=fxaa.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
[CRT] [CRT]
Name=CRT Scanlines Name=CRT Scanlines
Author=KillaMaaki Author=KillaMaaki
Fragment=crt.fsh Fragment=crt.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
60fps=True 60fps=True
[Natural] [Natural]
Name=Natural Colors Name=Natural Colors
Fragment=natural.fsh Fragment=natural.fsh
Vertex=natural.vsh Vertex=natural.vsh
[NaturalA] [NaturalA]
Name=Natural Colors (No Blur) Name=Natural Colors (No Blur)
Fragment=naturalA.fsh Fragment=naturalA.fsh
Vertex=naturalA.vsh Vertex=naturalA.vsh
[Vignette] [Vignette]
Name=Vignette Name=Vignette
Author=Henrik Author=Henrik
Fragment=vignette.fsh Fragment=vignette.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
[Grayscale] [Grayscale]
Name=Grayscale Name=Grayscale
Author=Henrik Author=Henrik
Fragment=grayscale.fsh Fragment=grayscale.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
[Bloom] [Bloom]
Name=Bloom Name=Bloom
Fragment=bloom.fsh Fragment=bloom.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
SettingName1=Amount SettingName1=Amount
SettingDefaultValue1=0.6 SettingDefaultValue1=0.6
SettingMaxValue1=1.0 SettingMaxValue1=1.0
SettingMinValue1=0.0 SettingMinValue1=0.0
SettingName2=Power SettingName2=Power
SettingDefaultValue2=0.5 SettingDefaultValue2=0.5
SettingMaxValue2=1.0 SettingMaxValue2=1.0
SettingMinValue2=0.0 SettingMinValue2=0.0
[Sharpen] [Sharpen]
Name=Sharpen Name=Sharpen
Fragment=sharpen.fsh Fragment=sharpen.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
SettingName1=Amount SettingName1=Amount
SettingDefaultValue1=1.5 SettingDefaultValue1=1.5
SettingMaxValue1=3.0 SettingMaxValue1=3.0
SettingMinValue1=1.0 SettingMinValue1=1.0
SettingStep1=0.1 SettingStep1=0.1
[InverseColors] [InverseColors]
Name=Inverse Colors Name=Inverse Colors
Author=Henrik Author=Henrik
Fragment=inversecolors.fsh Fragment=inversecolors.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
[Scanlines] [Scanlines]
Name=Scanlines (CRT) Name=Scanlines (CRT)
Fragment=scanlines.fsh Fragment=scanlines.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
OutputResolution=True OutputResolution=True
SettingName1=Amount SettingName1=Amount
SettingDefaultValue1=1.0 SettingDefaultValue1=1.0
SettingMaxValue1=1.0 SettingMaxValue1=1.0
SettingMinValue1=0.0 SettingMinValue1=0.0
SettingStep1=0.1 SettingStep1=0.1
SettingName2=Intensity SettingName2=Intensity
SettingDefaultValue2=0.5 SettingDefaultValue2=0.5
SettingMaxValue2=1.0 SettingMaxValue2=1.0
SettingMinValue2=0.0 SettingMinValue2=0.0
SettingStep2=0.05 SettingStep2=0.05
[Cartoon] [Cartoon]
Name=Cartoon Name=Cartoon
Fragment=cartoon.fsh Fragment=cartoon.fsh
Vertex=cartoon.vsh Vertex=cartoon.vsh
SettingName1=Black border SettingName1=Black border
SettingDefaultValue1=0.5 SettingDefaultValue1=0.5
SettingMaxValue1=1.0 SettingMaxValue1=1.0
SettingMinValue1=0.0 SettingMinValue1=0.0
[4xHqGLSL] [4xHqGLSL]
Name=4xHqGLSL Upscaler Name=4xHqGLSL Upscaler
Fragment=4xhqglsl.fsh Fragment=4xhqglsl.fsh
Vertex=4xhqglsl.vsh Vertex=4xhqglsl.vsh
OutputResolution=True OutputResolution=True
Upscaling=True Upscaling=True
[AAColor] [AAColor]
Name=AA-Color Name=AA-Color
Fragment=aacolor.fsh Fragment=aacolor.fsh
Vertex=aacolor.vsh Vertex=aacolor.vsh
[UpscaleSpline36] [UpscaleSpline36]
Name=Spline36 Upscaler Name=Spline36 Upscaler
Fragment=upscale_spline36.fsh Fragment=upscale_spline36.fsh
Vertex=upscale_spline36.vsh Vertex=upscale_spline36.vsh
OutputResolution=True OutputResolution=True
RequiresIntSupport=True RequiresIntSupport=True
Upscaling=True Upscaling=True
[5xBR] [5xBR]
Name=5xBR Upscaler Name=5xBR Upscaler
Author=Hyllian Author=Hyllian
Fragment=5xBR.fsh Fragment=5xBR.fsh
Vertex=5xBR.vsh Vertex=5xBR.vsh
OutputResolution=True OutputResolution=True
Upscaling=True Upscaling=True
[5xBR-lv2] [5xBR-lv2]
Name=5xBR lv2 Upscaler Name=5xBR lv2 Upscaler
Author=Hyllian (tweak by guest.r) Author=Hyllian (tweak by guest.r)
Fragment=5xBR-lv2.fsh Fragment=5xBR-lv2.fsh
Vertex=5xBR.vsh Vertex=5xBR.vsh
OutputResolution=True OutputResolution=True
Upscaling=True Upscaling=True
[VideoSmoothingAA] [VideoSmoothingAA]
Name=Video aware guest.r AA 4.o Name=Video aware guest.r AA 4.o
Author=guest.r(tweak by LunaMoo) Author=guest.r(tweak by LunaMoo)
Fragment=videoAA.fsh Fragment=videoAA.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
OutputResolution=True OutputResolution=True
[SSAA(Gauss)] [SSAA(Gauss)]
Name=Super Sampling AA(Gauss) Name=Super Sampling AA(Gauss)
Fragment=GaussianDownscale.fsh Fragment=GaussianDownscale.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
OutputResolution=True OutputResolution=True
SSAA=2 SSAA=2
[ColorCorrection] [ColorCorrection]
Name=Color correction Name=Color correction
Fragment=colorcorrection.fsh Fragment=colorcorrection.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
SettingName1=Brightness SettingName1=Brightness
SettingDefaultValue1=1.0 SettingDefaultValue1=1.0
SettingMaxValue1=2.0 SettingMaxValue1=2.0
SettingMinValue1=0.1 SettingMinValue1=0.1
SettingStep1=0.05 SettingStep1=0.05
SettingName2=Saturation SettingName2=Saturation
SettingDefaultValue2=1.0 SettingDefaultValue2=1.0
SettingMaxValue2=2.0 SettingMaxValue2=2.0
SettingMinValue2=0.0 SettingMinValue2=0.0
SettingStep2=0.1 SettingStep2=0.1
SettingName3=Contrast SettingName3=Contrast
SettingDefaultValue3=1.0 SettingDefaultValue3=1.0
SettingMaxValue3=3.0 SettingMaxValue3=3.0
SettingMinValue3=0.1 SettingMinValue3=0.1
SettingStep3=0.1 SettingStep3=0.1
SettingName4=Gamma SettingName4=Gamma
SettingDefaultValue4=1.0 SettingDefaultValue4=1.0
SettingMaxValue4=2.0 SettingMaxValue4=2.0
SettingMinValue4=0.1 SettingMinValue4=0.1
SettingStep4=0.05 SettingStep4=0.05
[PSPColor] [PSPColor]
Name=PSP Color Name=PSP Color
Author=hunterk, Pokefan531 (ported by jdgleaver) Author=hunterk, Pokefan531 (ported by jdgleaver)
Fragment=psp_color.fsh Fragment=psp_color.fsh
Vertex=fxaa.vsh Vertex=fxaa.vsh
[Tex4xBRZ] [Tex4xBRZ]
Type=Texture Type=Texture
Name=4xBRZ Name=4xBRZ
Author=Hyllian Author=Hyllian
Compute=tex_4xbrz.csh Compute=tex_4xbrz.csh
[TexMMPX] VendorBlacklist=ARM
Type=Texture [TexMMPX]
Name=MMPX Type=Texture
Author=Morgan McGuire and Mara Gagiu Name=MMPX
Compute=tex_mmpx.csh Author=Morgan McGuire and Mara Gagiu
MaxScale=2 Compute=tex_mmpx.csh
MaxScale=2

View File

@@ -1,68 +1,68 @@
// PPSSPP: Grabbed from Processing and slightly modified. // PPSSPP: Grabbed from Processing and slightly modified.
// FXAA shader, GLSL code adapted from: // FXAA shader, GLSL code adapted from:
// http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA // http://horde3d.org/wiki/index.php5?title=Shading_Technique_-_FXAA
// Whitepaper describing the technique: // Whitepaper describing the technique:
// http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf // http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/FXAA_WhitePaper.pdf
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
// The inverse of the texture dimensions along X and Y // The inverse of the texture dimensions along X and Y
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
// The parameters are hardcoded for now, but could be // The parameters are hardcoded for now, but could be
// made into uniforms to control fromt he program. // made into uniforms to control fromt he program.
float FXAA_SPAN_MAX = 8.0; float FXAA_SPAN_MAX = 8.0;
float FXAA_REDUCE_MUL = 1.0/8.0; float FXAA_REDUCE_MUL = 1.0/8.0;
float FXAA_REDUCE_MIN = (1.0/128.0); float FXAA_REDUCE_MIN = (1.0/128.0);
vec3 rgbNW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, -1.0) * u_texelDelta)).xyz; vec3 rgbNW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, -1.0) * u_texelDelta)).xyz;
vec3 rgbNE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, -1.0) * u_texelDelta)).xyz; vec3 rgbNE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, -1.0) * u_texelDelta)).xyz;
vec3 rgbSW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, +1.0) * u_texelDelta)).xyz; vec3 rgbSW = texture2D(sampler0, v_texcoord0.xy + (vec2(-1.0, +1.0) * u_texelDelta)).xyz;
vec3 rgbSE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, +1.0) * u_texelDelta)).xyz; vec3 rgbSE = texture2D(sampler0, v_texcoord0.xy + (vec2(+1.0, +1.0) * u_texelDelta)).xyz;
vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 rgbM = texture2D(sampler0, v_texcoord0.xy).xyz;
vec3 luma = vec3(0.299, 0.587, 0.114); vec3 luma = vec3(0.299, 0.587, 0.114);
float lumaNW = dot(rgbNW, luma); float lumaNW = dot(rgbNW, luma);
float lumaNE = dot(rgbNE, luma); float lumaNE = dot(rgbNE, luma);
float lumaSW = dot(rgbSW, luma); float lumaSW = dot(rgbSW, luma);
float lumaSE = dot(rgbSE, luma); float lumaSE = dot(rgbSE, luma);
float lumaM = dot( rgbM, luma); float lumaM = dot( rgbM, luma);
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
vec2 dir; vec2 dir;
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE)); dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN); float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce); float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX), dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta; max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * u_texelDelta;
vec3 rgbA = (1.0/2.0) * ( vec3 rgbA = (1.0/2.0) * (
texture2D(sampler0, v_texcoord0.xy + dir * (1.0/3.0 - 0.5)).xyz + texture2D(sampler0, v_texcoord0.xy + dir * (1.0/3.0 - 0.5)).xyz +
texture2D(sampler0, v_texcoord0.xy + dir * (2.0/3.0 - 0.5)).xyz); texture2D(sampler0, v_texcoord0.xy + dir * (2.0/3.0 - 0.5)).xyz);
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * ( vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
texture2D(sampler0, v_texcoord0.xy + dir * (0.0/3.0 - 0.5)).xyz + texture2D(sampler0, v_texcoord0.xy + dir * (0.0/3.0 - 0.5)).xyz +
texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz); texture2D(sampler0, v_texcoord0.xy + dir * (3.0/3.0 - 0.5)).xyz);
float lumaB = dot(rgbB, luma); float lumaB = dot(rgbB, luma);
if((lumaB < lumaMin) || (lumaB > lumaMax)){ if((lumaB < lumaMin) || (lumaB > lumaMax)){
gl_FragColor.xyz=rgbA; gl_FragColor.xyz=rgbA;
} else { } else {
gl_FragColor.xyz=rgbB; gl_FragColor.xyz=rgbB;
} }
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,12 +1,12 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
v_texcoord0 = a_texcoord0; v_texcoord0 = a_texcoord0;
gl_Position = a_position; gl_Position = a_position;
} }

View File

@@ -1,16 +1,16 @@
// Simple grayscale shader // Simple grayscale shader
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
float luma = dot(rgb, vec3(0.299, 0.587, 0.114)); float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
gl_FragColor.rgb = vec3(luma, luma, luma); gl_FragColor.rgb = vec3(luma, luma, luma);
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,19 +1,19 @@
// Simple false color shader // Simple false color shader
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
float luma = dot(rgb, vec3(0.299, 0.587, 0.114)); float luma = dot(rgb, vec3(0.299, 0.587, 0.114));
vec3 gray = vec3(luma, luma, luma) - 0.5; vec3 gray = vec3(luma, luma, luma) - 0.5;
rgb -= vec3(0.5, 0.5, 0.5); rgb -= vec3(0.5, 0.5, 0.5);
gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5; gl_FragColor.rgb = mix(rgb, gray, 2.0) + 0.5;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,58 +1,58 @@
// Natural Vision Shader, modified to use in PPSSPP. // Natural Vision Shader, modified to use in PPSSPP.
// by ShadX (Modded by SimoneT) // by ShadX (Modded by SimoneT)
// http://forums.ngemu.com/showthread.php?t=76098 // http://forums.ngemu.com/showthread.php?t=76098
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212, const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
0.587,-0.275,-0.523, 0.587,-0.275,-0.523,
0.114,-0.321, 0.311); 0.114,-0.321, 0.311);
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0, const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523, 0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149); 0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
const vec3 val00 = vec3( 1.2, 1.2, 1.2); const vec3 val00 = vec3( 1.2, 1.2, 1.2);
void main() void main()
{ {
vec3 c0,c1; vec3 c0,c1;
c0 = texture2D(sampler0,v_texcoord0.xy).xyz; c0 = texture2D(sampler0,v_texcoord0.xy).xyz;
c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord0.zy).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord0.xw).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord0.xw).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord0.zw).xyz)*0.125; c0+=(texture2D(sampler0,v_texcoord0.zw).xyz)*0.125;
c0+= texture2D(sampler0,v_texcoord1.xy).xyz; c0+= texture2D(sampler0,v_texcoord1.xy).xyz;
c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord1.zy).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord1.xw).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord1.xw).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord1.zw).xyz)*0.125; c0+=(texture2D(sampler0,v_texcoord1.zw).xyz)*0.125;
c0+= texture2D(sampler0,v_texcoord2.xy).xyz; c0+= texture2D(sampler0,v_texcoord2.xy).xyz;
c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord2.zy).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord2.xw).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord2.xw).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord2.zw).xyz)*0.125; c0+=(texture2D(sampler0,v_texcoord2.zw).xyz)*0.125;
c0+= texture2D(sampler0,v_texcoord3.xy).xyz; c0+= texture2D(sampler0,v_texcoord3.xy).xyz;
c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord3.zy).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25; c0+=(texture2D(sampler0,v_texcoord3.xw).xyz)*0.25;
c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125; c0+=(texture2D(sampler0,v_texcoord3.zw).xyz)*0.125;
c0*=0.153846153846; c0*=0.153846153846;
c1=RGBtoYIQ*c0; c1=RGBtoYIQ*c0;
c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz); c1=vec3(pow(c1.x,val00.x),c1.yz*val00.yz);
gl_FragColor.rgb=YIQtoRGB*c1; gl_FragColor.rgb=YIQtoRGB*c1;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,24 +1,24 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
varying vec4 v_texcoord0; varying vec4 v_texcoord0;
varying vec4 v_texcoord1; varying vec4 v_texcoord1;
varying vec4 v_texcoord2; varying vec4 v_texcoord2;
varying vec4 v_texcoord3; varying vec4 v_texcoord3;
void main() void main()
{ {
gl_Position=a_position; gl_Position=a_position;
v_texcoord0=a_texcoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5)*u_texelDelta.xyxy; v_texcoord0=a_texcoord0.xyxy+vec4(-0.5,-0.5,-1.5,-1.5)*u_texelDelta.xyxy;
v_texcoord1=a_texcoord0.xyxy+vec4( 0.5,-0.5, 1.5,-1.5)*u_texelDelta.xyxy; v_texcoord1=a_texcoord0.xyxy+vec4( 0.5,-0.5, 1.5,-1.5)*u_texelDelta.xyxy;
v_texcoord2=a_texcoord0.xyxy+vec4(-0.5, 0.5,-1.5, 1.5)*u_texelDelta.xyxy; v_texcoord2=a_texcoord0.xyxy+vec4(-0.5, 0.5,-1.5, 1.5)*u_texelDelta.xyxy;
v_texcoord3=a_texcoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5)*u_texelDelta.xyxy; v_texcoord3=a_texcoord0.xyxy+vec4( 0.5, 0.5, 1.5, 1.5)*u_texelDelta.xyxy;
} }

View File

@@ -1,15 +1,15 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() void main()
{ {
gl_Position=a_position; gl_Position=a_position;
v_texcoord0=a_texcoord0; v_texcoord0=a_texcoord0;
} }

View File

@@ -1,58 +1,58 @@
/* /*
psp_color vertex shader psp_color vertex shader
Original code written by hunterk, modified by Pokefan531 and Original code written by hunterk, modified by Pokefan531 and
released into the public domain released into the public domain
'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver 'Ported' (i.e. copy/paste) to PPSSPP format by jdgleaver
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option) Software Foundation; either version 2 of the License, or (at your option)
any later version. any later version.
Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000 Notes: This shader replicates the LCD dynamics of the PSP 1000 and PSP 2000
*/ */
//================ //================
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
// For android, use this instead... // For android, use this instead...
//precision highp float; //precision highp float;
//precision highp int; //precision highp int;
// //
#endif #endif
//================ //================
#define target_gamma 2.21 #define target_gamma 2.21
#define display_gamma 2.2 #define display_gamma 2.2
#define r 0.98 #define r 0.98
#define g 0.795 #define g 0.795
#define b 0.98 #define b 0.98
#define rg 0.04 #define rg 0.04
#define rb 0.01 #define rb 0.01
#define gr 0.20 #define gr 0.20
#define gb 0.01 #define gb 0.01
#define br -0.18 #define br -0.18
#define bg 0.165 #define bg 0.165
//================ //================
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
//================ //================
void main() void main()
{ {
// Apply colour correction // Apply colour correction
vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma)); vec3 screen = pow(texture2D(sampler0, v_texcoord0.xy).rgb, vec3(target_gamma));
// screen = clamp(screen, 0.0, 1.0); // screen = clamp(screen, 0.0, 1.0);
screen = pow( screen = pow(
mat3(r, rg, rb, mat3(r, rg, rb,
gr, g, gb, gr, g, gb,
br, bg, b) * screen, br, bg, b) * screen,
vec3(1.0 / display_gamma) vec3(1.0 / display_gamma)
); );
gl_FragColor = vec4(screen, 1.0); gl_FragColor = vec4(screen, 1.0);
} }

View File

@@ -1,29 +1,29 @@
// Advanced Scanlines (CRT) shader, created to use in PPSSPP. // Advanced Scanlines (CRT) shader, created to use in PPSSPP.
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
uniform vec4 u_setting; uniform vec4 u_setting;
void main() void main()
{ {
float pos0 = ((v_texcoord0.y + 1.0) * 170.0*u_setting.x); float pos0 = ((v_texcoord0.y + 1.0) * 170.0*u_setting.x);
float pos1 = cos((fract( pos0 ) - 0.5)*3.1415926*u_setting.y)*1.5; float pos1 = cos((fract( pos0 ) - 0.5)*3.1415926*u_setting.y)*1.5;
vec4 rgb = texture2D( sampler0, v_texcoord0 ); vec4 rgb = texture2D( sampler0, v_texcoord0 );
// slight contrast curve // slight contrast curve
vec4 color = rgb*0.5+0.5*rgb*rgb*1.2; vec4 color = rgb*0.5+0.5*rgb*rgb*1.2;
// color tint // color tint
color *= vec4(0.9,1.0,0.7, 0.0); color *= vec4(0.9,1.0,0.7, 0.0);
// vignette // vignette
color *= 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0); color *= 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
gl_FragColor.rgba = mix(vec4(0,0,0,0), color, pos1); gl_FragColor.rgba = mix(vec4(0,0,0,0), color, pos1);
} }

View File

@@ -1,19 +1,19 @@
// Simple sharpen shader; created to use in PPSSPP // Simple sharpen shader; created to use in PPSSPP
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
uniform vec4 u_setting; uniform vec4 u_setting;
void main() void main()
{ {
vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 color = texture2D(sampler0, v_texcoord0.xy).xyz;
color -= texture2D(sampler0, v_texcoord0.xy+0.0001).xyz*7.0*u_setting.x; color -= texture2D(sampler0, v_texcoord0.xy+0.0001).xyz*7.0*u_setting.x;
color += texture2D(sampler0, v_texcoord0.xy-0.0001).xyz*7.0*u_setting.x; color += texture2D(sampler0, v_texcoord0.xy-0.0001).xyz*7.0*u_setting.x;
gl_FragColor.rgb = color; gl_FragColor.rgb = color;
} }

View File

@@ -1,279 +1,279 @@
// 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+) // 4xBRZ shader - Copyright (C) 2014-2016 DeSmuME team (GPL2+)
// Hyllian's xBR-vertex code and texel mapping // Hyllian's xBR-vertex code and texel mapping
// Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com // Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
#define BLEND_ALPHA 1 #define BLEND_ALPHA 1
#define BLEND_NONE 0 #define BLEND_NONE 0
#define BLEND_NORMAL 1 #define BLEND_NORMAL 1
#define BLEND_DOMINANT 2 #define BLEND_DOMINANT 2
#define LUMINANCE_WEIGHT 1.0 #define LUMINANCE_WEIGHT 1.0
#define EQUAL_COLOR_TOLERANCE 30.0/255.0 #define EQUAL_COLOR_TOLERANCE 30.0/255.0
#define STEEP_DIRECTION_THRESHOLD 2.2 #define STEEP_DIRECTION_THRESHOLD 2.2
#define DOMINANT_DIRECTION_THRESHOLD 3.6 #define DOMINANT_DIRECTION_THRESHOLD 3.6
float reduce(vec4 color) { float reduce(vec4 color) {
return dot(color.rgb, vec3(65536.0, 256.0, 1.0)); return dot(color.rgb, vec3(65536.0, 256.0, 1.0));
} }
float DistYCbCr(vec4 pixA, vec4 pixB) { float DistYCbCr(vec4 pixA, vec4 pixB) {
// https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion // https://en.wikipedia.org/wiki/YCbCr#ITU-R_BT.2020_conversion
const vec3 K = vec3(0.2627, 0.6780, 0.0593); const vec3 K = vec3(0.2627, 0.6780, 0.0593);
const mat3 MATRIX = mat3(K, const mat3 MATRIX = mat3(K,
-.5 * K.r / (1.0 - K.b), -.5 * K.g / (1.0 - K.b), .5, -.5 * K.r / (1.0 - K.b), -.5 * K.g / (1.0 - K.b), .5,
.5, -.5 * K.g / (1.0 - K.r), -.5 * K.b / (1.0 - K.r)); .5, -.5 * K.g / (1.0 - K.r), -.5 * K.b / (1.0 - K.r));
vec4 diff = pixA - pixB; vec4 diff = pixA - pixB;
vec3 YCbCr = diff.rgb * MATRIX; vec3 YCbCr = diff.rgb * MATRIX;
YCbCr.x *= LUMINANCE_WEIGHT; YCbCr.x *= LUMINANCE_WEIGHT;
float d = length(YCbCr); float d = length(YCbCr);
return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a); return sqrt(pixA.a * pixB.a * d * d + diff.a * diff.a);
} }
bool IsPixEqual(const vec4 pixA, const vec4 pixB) { bool IsPixEqual(const vec4 pixA, const vec4 pixB) {
return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE); return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
} }
bool IsBlendingNeeded(const ivec4 blend) { bool IsBlendingNeeded(const ivec4 blend) {
ivec4 diff = blend - ivec4(BLEND_NONE); ivec4 diff = blend - ivec4(BLEND_NONE);
return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0; return diff.x != 0 || diff.y != 0 || diff.z != 0 || diff.w != 0;
} }
vec4 applyScalingf(uvec2 origxy, uvec2 xy) { vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
float dx = 1.0 / params.width; float dx = 1.0 / params.width;
float dy = 1.0 / params.height; float dy = 1.0 / params.height;
// A1 B1 C1 // A1 B1 C1
// A0 A B C C4 // A0 A B C C4
// D0 D E F F4 // D0 D E F F4
// G0 G H I I4 // G0 G H I I4
// G5 H5 I5 // G5 H5 I5
uvec4 t1 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 2); // A1 B1 C1 uvec4 t1 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 2); // A1 B1 C1
uvec4 t2 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 1); // A B C uvec4 t2 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y - 1); // A B C
uvec4 t3 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 0); // D E F uvec4 t3 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 0); // D E F
uvec4 t4 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 1); // G H I uvec4 t4 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 1); // G H I
uvec4 t5 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 2); // G5 H5 I5 uvec4 t5 = uvec4(origxy.x - 1, origxy.x, origxy.x + 1, origxy.y + 2); // G5 H5 I5
uvec4 t6 = uvec4(origxy.x - 2, origxy.y - 1, origxy.y, origxy.y + 1); // A0 D0 G0 uvec4 t6 = uvec4(origxy.x - 2, origxy.y - 1, origxy.y, origxy.y + 1); // A0 D0 G0
uvec4 t7 = uvec4(origxy.x + 2, origxy.y - 1, origxy.y, origxy.y + 1); // C4 F4 I4 uvec4 t7 = uvec4(origxy.x + 2, origxy.y - 1, origxy.y, origxy.y + 1); // C4 F4 I4
vec2 f = fract(vec2(float(xy.x) / float(params.scale), float(xy.y) / float(params.scale))); vec2 f = fract(vec2(float(xy.x) / float(params.scale), float(xy.y) / float(params.scale)));
//--------------------------------------- //---------------------------------------
// Input Pixel Mapping: |21|22|23| // Input Pixel Mapping: |21|22|23|
// 19|06|07|08|09 // 19|06|07|08|09
// 18|05|00|01|10 // 18|05|00|01|10
// 17|04|03|02|11 // 17|04|03|02|11
// |15|14|13| // |15|14|13|
vec4 src[25]; vec4 src[25];
src[21] = readColorf(t1.xw); src[21] = readColorf(t1.xw);
src[22] = readColorf(t1.yw); src[22] = readColorf(t1.yw);
src[23] = readColorf(t1.zw); src[23] = readColorf(t1.zw);
src[ 6] = readColorf(t2.xw); src[ 6] = readColorf(t2.xw);
src[ 7] = readColorf(t2.yw); src[ 7] = readColorf(t2.yw);
src[ 8] = readColorf(t2.zw); src[ 8] = readColorf(t2.zw);
src[ 5] = readColorf(t3.xw); src[ 5] = readColorf(t3.xw);
src[ 0] = readColorf(t3.yw); src[ 0] = readColorf(t3.yw);
src[ 1] = readColorf(t3.zw); src[ 1] = readColorf(t3.zw);
src[ 4] = readColorf(t4.xw); src[ 4] = readColorf(t4.xw);
src[ 3] = readColorf(t4.yw); src[ 3] = readColorf(t4.yw);
src[ 2] = readColorf(t4.zw); src[ 2] = readColorf(t4.zw);
src[15] = readColorf(t5.xw); src[15] = readColorf(t5.xw);
src[14] = readColorf(t5.yw); src[14] = readColorf(t5.yw);
src[13] = readColorf(t5.zw); src[13] = readColorf(t5.zw);
src[19] = readColorf(t6.xy); src[19] = readColorf(t6.xy);
src[18] = readColorf(t6.xz); src[18] = readColorf(t6.xz);
src[17] = readColorf(t6.xw); src[17] = readColorf(t6.xw);
src[ 9] = readColorf(t7.xy); src[ 9] = readColorf(t7.xy);
src[10] = readColorf(t7.xz); src[10] = readColorf(t7.xz);
src[11] = readColorf(t7.xw); src[11] = readColorf(t7.xw);
float v[9]; float v[9];
v[0] = reduce(src[0]); v[0] = reduce(src[0]);
v[1] = reduce(src[1]); v[1] = reduce(src[1]);
v[2] = reduce(src[2]); v[2] = reduce(src[2]);
v[3] = reduce(src[3]); v[3] = reduce(src[3]);
v[4] = reduce(src[4]); v[4] = reduce(src[4]);
v[5] = reduce(src[5]); v[5] = reduce(src[5]);
v[6] = reduce(src[6]); v[6] = reduce(src[6]);
v[7] = reduce(src[7]); v[7] = reduce(src[7]);
v[8] = reduce(src[8]); v[8] = reduce(src[8]);
ivec4 blendResult = ivec4(BLEND_NONE); ivec4 blendResult = ivec4(BLEND_NONE);
// Preprocess corners // Preprocess corners
// Pixel Tap Mapping: --|--|--|--|-- // Pixel Tap Mapping: --|--|--|--|--
// --|--|07|08|-- // --|--|07|08|--
// --|05|00|01|10 // --|05|00|01|10
// --|04|03|02|11 // --|04|03|02|11
// --|--|14|13|-- // --|--|14|13|--
// Corner (1, 1) // Corner (1, 1)
if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false) { if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false) {
float dist_03_01 = DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + DistYCbCr(src[14], src[ 2]) + DistYCbCr(src[ 2], src[10]) + (4.0 * DistYCbCr(src[ 3], src[ 1])); float dist_03_01 = DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + DistYCbCr(src[14], src[ 2]) + DistYCbCr(src[ 2], src[10]) + (4.0 * DistYCbCr(src[ 3], src[ 1]));
float dist_00_02 = DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[ 3], src[13]) + DistYCbCr(src[ 7], src[ 1]) + DistYCbCr(src[ 1], src[11]) + (4.0 * DistYCbCr(src[ 0], src[ 2])); float dist_00_02 = DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[ 3], src[13]) + DistYCbCr(src[ 7], src[ 1]) + DistYCbCr(src[ 1], src[11]) + (4.0 * DistYCbCr(src[ 0], src[ 2]));
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_03_01) < dist_00_02; bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_03_01) < dist_00_02;
blendResult[2] = ((dist_03_01 < dist_00_02) && (v[0] != v[1]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE; blendResult[2] = ((dist_03_01 < dist_00_02) && (v[0] != v[1]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
} }
// Pixel Tap Mapping: --|--|--|--|-- // Pixel Tap Mapping: --|--|--|--|--
// --|06|07|--|-- // --|06|07|--|--
// 18|05|00|01|-- // 18|05|00|01|--
// 17|04|03|02|-- // 17|04|03|02|--
// --|15|14|--|-- // --|15|14|--|--
// Corner (0, 1) // Corner (0, 1)
if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false) { if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false) {
float dist_04_00 = DistYCbCr(src[17], src[ 5]) + DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[15], src[ 3]) + DistYCbCr(src[ 3], src[ 1]) + (4.0 * DistYCbCr(src[ 4], src[ 0])); float dist_04_00 = DistYCbCr(src[17], src[ 5]) + DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[15], src[ 3]) + DistYCbCr(src[ 3], src[ 1]) + (4.0 * DistYCbCr(src[ 4], src[ 0]));
float dist_05_03 = DistYCbCr(src[18], src[ 4]) + DistYCbCr(src[ 4], src[14]) + DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + (4.0 * DistYCbCr(src[ 5], src[ 3])); float dist_05_03 = DistYCbCr(src[18], src[ 4]) + DistYCbCr(src[ 4], src[14]) + DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + (4.0 * DistYCbCr(src[ 5], src[ 3]));
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_03) < dist_04_00; bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_03) < dist_04_00;
blendResult[3] = ((dist_04_00 > dist_05_03) && (v[0] != v[5]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE; blendResult[3] = ((dist_04_00 > dist_05_03) && (v[0] != v[5]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
} }
// Pixel Tap Mapping: --|--|22|23|-- // Pixel Tap Mapping: --|--|22|23|--
// --|06|07|08|09 // --|06|07|08|09
// --|05|00|01|10 // --|05|00|01|10
// --|--|03|02|-- // --|--|03|02|--
// --|--|--|--|-- // --|--|--|--|--
// Corner (1, 0) // Corner (1, 0)
if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false) { if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false) {
float dist_00_08 = DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[ 7], src[23]) + DistYCbCr(src[ 3], src[ 1]) + DistYCbCr(src[ 1], src[ 9]) + (4.0 * DistYCbCr(src[ 0], src[ 8])); float dist_00_08 = DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[ 7], src[23]) + DistYCbCr(src[ 3], src[ 1]) + DistYCbCr(src[ 1], src[ 9]) + (4.0 * DistYCbCr(src[ 0], src[ 8]));
float dist_07_01 = DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + DistYCbCr(src[22], src[ 8]) + DistYCbCr(src[ 8], src[10]) + (4.0 * DistYCbCr(src[ 7], src[ 1])); float dist_07_01 = DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + DistYCbCr(src[22], src[ 8]) + DistYCbCr(src[ 8], src[10]) + (4.0 * DistYCbCr(src[ 7], src[ 1]));
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_07_01) < dist_00_08; bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_07_01) < dist_00_08;
blendResult[1] = ((dist_00_08 > dist_07_01) && (v[0] != v[7]) && (v[0] != v[1])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE; blendResult[1] = ((dist_00_08 > dist_07_01) && (v[0] != v[7]) && (v[0] != v[1])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
} }
// Pixel Tap Mapping: --|21|22|--|-- // Pixel Tap Mapping: --|21|22|--|--
// 19|06|07|08|-- // 19|06|07|08|--
// 18|05|00|01|-- // 18|05|00|01|--
// --|04|03|--|-- // --|04|03|--|--
// --|--|--|--|-- // --|--|--|--|--
// Corner (0, 0) // Corner (0, 0)
if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false) { if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false) {
float dist_05_07 = DistYCbCr(src[18], src[ 6]) + DistYCbCr(src[ 6], src[22]) + DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + (4.0 * DistYCbCr(src[ 5], src[ 7])); float dist_05_07 = DistYCbCr(src[18], src[ 6]) + DistYCbCr(src[ 6], src[22]) + DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + (4.0 * DistYCbCr(src[ 5], src[ 7]));
float dist_06_00 = DistYCbCr(src[19], src[ 5]) + DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[21], src[ 7]) + DistYCbCr(src[ 7], src[ 1]) + (4.0 * DistYCbCr(src[ 6], src[ 0])); float dist_06_00 = DistYCbCr(src[19], src[ 5]) + DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[21], src[ 7]) + DistYCbCr(src[ 7], src[ 1]) + (4.0 * DistYCbCr(src[ 6], src[ 0]));
bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_07) < dist_06_00; bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_07) < dist_06_00;
blendResult[0] = ((dist_05_07 < dist_06_00) && (v[0] != v[5]) && (v[0] != v[7])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE; blendResult[0] = ((dist_05_07 < dist_06_00) && (v[0] != v[5]) && (v[0] != v[7])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
} }
vec4 dst[16]; vec4 dst[16];
dst[ 0] = src[0]; dst[ 0] = src[0];
dst[ 1] = src[0]; dst[ 1] = src[0];
dst[ 2] = src[0]; dst[ 2] = src[0];
dst[ 3] = src[0]; dst[ 3] = src[0];
dst[ 4] = src[0]; dst[ 4] = src[0];
dst[ 5] = src[0]; dst[ 5] = src[0];
dst[ 6] = src[0]; dst[ 6] = src[0];
dst[ 7] = src[0]; dst[ 7] = src[0];
dst[ 8] = src[0]; dst[ 8] = src[0];
dst[ 9] = src[0]; dst[ 9] = src[0];
dst[10] = src[0]; dst[10] = src[0];
dst[11] = src[0]; dst[11] = src[0];
dst[12] = src[0]; dst[12] = src[0];
dst[13] = src[0]; dst[13] = src[0];
dst[14] = src[0]; dst[14] = src[0];
dst[15] = src[0]; dst[15] = src[0];
// Scale pixel // Scale pixel
if (IsBlendingNeeded(blendResult) == true) { if (IsBlendingNeeded(blendResult) == true) {
float dist_01_04 = DistYCbCr(src[1], src[4]); float dist_01_04 = DistYCbCr(src[1], src[4]);
float dist_03_08 = DistYCbCr(src[3], src[8]); float dist_03_08 = DistYCbCr(src[3], src[8]);
bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[4]) && (v[5] != v[4]); bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[4]) && (v[5] != v[4]);
bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[8]) && (v[7] != v[8]); bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[8]) && (v[7] != v[8]);
bool needBlend = (blendResult[2] != BLEND_NONE); bool needBlend = (blendResult[2] != BLEND_NONE);
bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT || bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) || ((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
(blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) || (blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
(IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[0], src[2]) == false) ) == false ); (IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[0], src[2]) == false) ) == false );
vec4 blendPix = ( DistYCbCr(src[0], src[1]) <= DistYCbCr(src[0], src[3]) ) ? src[1] : src[3]; vec4 blendPix = ( DistYCbCr(src[0], src[1]) <= DistYCbCr(src[0], src[3]) ) ? src[1] : src[3];
dst[ 2] = mix(dst[ 2], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00); dst[ 2] = mix(dst[ 2], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00); dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
dst[10] = mix(dst[10], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00); dst[10] = mix(dst[10], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
dst[11] = mix(dst[11], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[11] = mix(dst[11], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[12] = mix(dst[12], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00); dst[12] = mix(dst[12], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
dst[13] = mix(dst[13], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[13] = mix(dst[13], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[14] = mix(dst[14], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00); dst[14] = mix(dst[14], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00); dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
dist_01_04 = DistYCbCr(src[7], src[2]); dist_01_04 = DistYCbCr(src[7], src[2]);
dist_03_08 = DistYCbCr(src[1], src[6]); dist_03_08 = DistYCbCr(src[1], src[6]);
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[2]) && (v[3] != v[2]); haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[2]) && (v[3] != v[2]);
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]); haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]);
needBlend = (blendResult[1] != BLEND_NONE); needBlend = (blendResult[1] != BLEND_NONE);
doLineBlend = ( blendResult[1] >= BLEND_DOMINANT || doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
!((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) || !((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
(blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) || (blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
(IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && !IsPixEqual(src[0], src[8])) ) ); (IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && !IsPixEqual(src[0], src[8])) ) );
blendPix = ( DistYCbCr(src[0], src[7]) <= DistYCbCr(src[0], src[1]) ) ? src[7] : src[1]; blendPix = ( DistYCbCr(src[0], src[7]) <= DistYCbCr(src[0], src[1]) ) ? src[7] : src[1];
dst[ 1] = mix(dst[ 1], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00); dst[ 1] = mix(dst[ 1], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00); dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
dst[ 7] = mix(dst[ 7], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00); dst[ 7] = mix(dst[ 7], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
dst[ 8] = mix(dst[ 8], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[ 8] = mix(dst[ 8], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[ 9] = mix(dst[ 9], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00); dst[ 9] = mix(dst[ 9], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
dst[10] = mix(dst[10], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[10] = mix(dst[10], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[11] = mix(dst[11], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00); dst[11] = mix(dst[11], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00); dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
dist_01_04 = DistYCbCr(src[5], src[8]); dist_01_04 = DistYCbCr(src[5], src[8]);
dist_03_08 = DistYCbCr(src[7], src[4]); dist_03_08 = DistYCbCr(src[7], src[4]);
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[8]) && (v[1] != v[8]); haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[8]) && (v[1] != v[8]);
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]); haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]);
needBlend = (blendResult[0] != BLEND_NONE); needBlend = (blendResult[0] != BLEND_NONE);
doLineBlend = ( blendResult[0] >= BLEND_DOMINANT || doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
!((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) || !((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
(blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) || (blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
(IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && !IsPixEqual(src[0], src[6])) ) ); (IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && !IsPixEqual(src[0], src[6])) ) );
blendPix = ( DistYCbCr(src[0], src[5]) <= DistYCbCr(src[0], src[7]) ) ? src[5] : src[7]; blendPix = ( DistYCbCr(src[0], src[5]) <= DistYCbCr(src[0], src[7]) ) ? src[5] : src[7];
dst[ 0] = mix(dst[ 0], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00); dst[ 0] = mix(dst[ 0], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00); dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
dst[ 4] = mix(dst[ 4], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00); dst[ 4] = mix(dst[ 4], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
dst[ 5] = mix(dst[ 5], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[ 5] = mix(dst[ 5], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[ 6] = mix(dst[ 6], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00); dst[ 6] = mix(dst[ 6], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
dst[ 7] = mix(dst[ 7], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[ 7] = mix(dst[ 7], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[ 8] = mix(dst[ 8], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00); dst[ 8] = mix(dst[ 8], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00); dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
dist_01_04 = DistYCbCr(src[3], src[6]); dist_01_04 = DistYCbCr(src[3], src[6]);
dist_03_08 = DistYCbCr(src[5], src[2]); dist_03_08 = DistYCbCr(src[5], src[2]);
haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[6]) && (v[7] != v[6]); haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[6]) && (v[7] != v[6]);
haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]); haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]);
needBlend = (blendResult[3] != BLEND_NONE); needBlend = (blendResult[3] != BLEND_NONE);
doLineBlend = ( blendResult[3] >= BLEND_DOMINANT || doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
!((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) || !((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
(blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) || (blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
(IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && !IsPixEqual(src[0], src[4])) ) ); (IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && !IsPixEqual(src[0], src[4])) ) );
blendPix = ( DistYCbCr(src[0], src[3]) <= DistYCbCr(src[0], src[5]) ) ? src[3] : src[5]; blendPix = ( DistYCbCr(src[0], src[3]) <= DistYCbCr(src[0], src[5]) ) ? src[3] : src[5];
dst[ 3] = mix(dst[ 3], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00); dst[ 3] = mix(dst[ 3], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00); dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
dst[13] = mix(dst[13], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00); dst[13] = mix(dst[13], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
dst[14] = mix(dst[14], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[14] = mix(dst[14], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[15] = mix(dst[15], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00); dst[15] = mix(dst[15], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
dst[ 4] = mix(dst[ 4], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00); dst[ 4] = mix(dst[ 4], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
dst[ 5] = mix(dst[ 5], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00); dst[ 5] = mix(dst[ 5], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00); dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
} }
// select output pixel // select output pixel
vec4 res = mix(mix(mix(mix(dst[ 6], dst[ 7], step(0.25, f.x)), vec4 res = mix(mix(mix(mix(dst[ 6], dst[ 7], step(0.25, f.x)),
mix(dst[ 8], dst[ 9], step(0.75, f.x)), mix(dst[ 8], dst[ 9], step(0.75, f.x)),
step(0.50, f.x)), step(0.50, f.x)),
mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)), mix(mix(dst[ 5], dst[ 0], step(0.25, f.x)),
mix(dst[ 1], dst[10], step(0.75, f.x)), mix(dst[ 1], dst[10], step(0.75, f.x)),
step(0.50, f.x)), step(0.50, f.x)),
step(0.25, f.y)), step(0.25, f.y)),
mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)), mix(mix(mix(dst[ 4], dst[ 3], step(0.25, f.x)),
mix(dst[ 2], dst[11], step(0.75, f.x)), mix(dst[ 2], dst[11], step(0.75, f.x)),
step(0.50, f.x)), step(0.50, f.x)),
mix(mix(dst[15], dst[14], step(0.25, f.x)), mix(mix(dst[15], dst[14], step(0.25, f.x)),
mix(dst[13], dst[12], step(0.75, f.x)), mix(dst[13], dst[12], step(0.75, f.x)),
step(0.50, f.x)), step(0.50, f.x)),
step(0.75, f.y)), step(0.75, f.y)),
step(0.50, f.y)); step(0.50, f.y));
return res; return res;
} }
uint applyScalingu(uvec2 origxy, uvec2 xy) { uint applyScalingu(uvec2 origxy, uvec2 xy) {
return packUnorm4x8(applyScalingf(origxy, xy)); return packUnorm4x8(applyScalingf(origxy, xy));
} }

View File

@@ -1,117 +1,117 @@
/* MMPX.glc /* MMPX.glc
Copyright 2020 Morgan McGuire & Mara Gagiu. Copyright 2020 Morgan McGuire & Mara Gagiu.
Provided under the Open Source MIT license https://opensource.org/licenses/MIT Provided under the Open Source MIT license https://opensource.org/licenses/MIT
See js-demo.html for the commented source code. See js-demo.html for the commented source code.
This is an optimized GLSL port of that version This is an optimized GLSL port of that version
by Morgan McGuire and Mara Gagiu. by Morgan McGuire and Mara Gagiu.
*/ */
#define ABGR8 uint #define ABGR8 uint
ABGR8 src(int x, int y) { ABGR8 src(int x, int y) {
return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1))); return readColoru(uvec2(clamp(x, 0, params.width - 1), clamp(y, 0, params.height - 1)));
} }
uint luma(ABGR8 C) { uint luma(ABGR8 C) {
uint alpha = (C & 0xFF000000u) >> 24; uint alpha = (C & 0xFF000000u) >> 24;
return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha); return (((C & 0x00FF0000u) >> 16) + ((C & 0x0000FF00u) >> 8) + (C & 0x000000FFu) + 1u) * (256u - alpha);
} }
bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) { bool all_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
return ((B ^ A0) | (B ^ A1)) == 0u; return ((B ^ A0) | (B ^ A1)) == 0u;
} }
bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) { bool all_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u; return ((B ^ A0) | (B ^ A1) | (B ^ A2)) == 0u;
} }
bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) { bool all_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u; return ((B ^ A0) | (B ^ A1) | (B ^ A2) | (B ^ A3)) == 0u;
} }
bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) { bool any_eq3(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2) {
return B == A0 || B == A1 || B == A2; return B == A0 || B == A1 || B == A2;
} }
bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) { bool none_eq2(ABGR8 B, ABGR8 A0, ABGR8 A1) {
return (B != A0) && (B != A1); return (B != A0) && (B != A1);
} }
bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) { bool none_eq4(ABGR8 B, ABGR8 A0, ABGR8 A1, ABGR8 A2, ABGR8 A3) {
return B != A0 && B != A1 && B != A2 && B != A3; return B != A0 && B != A1 && B != A2 && B != A3;
} }
uint applyScalingu(uvec2 origxy, uvec2 xy) { uint applyScalingu(uvec2 origxy, uvec2 xy) {
int srcX = int(origxy.x); int srcX = int(origxy.x);
int srcY = int(origxy.y); int srcY = int(origxy.y);
ABGR8 A = src(srcX - 1, srcY - 1), B = src(srcX, srcY - 1), C = src(srcX + 1, srcY - 1); ABGR8 A = src(srcX - 1, srcY - 1), B = src(srcX, srcY - 1), C = src(srcX + 1, srcY - 1);
ABGR8 D = src(srcX - 1, srcY + 0), E = src(srcX, srcY + 0), F = src(srcX + 1, srcY + 0); ABGR8 D = src(srcX - 1, srcY + 0), E = src(srcX, srcY + 0), F = src(srcX + 1, srcY + 0);
ABGR8 G = src(srcX - 1, srcY + 1), H = src(srcX, srcY + 1), I = src(srcX + 1, srcY + 1); ABGR8 G = src(srcX - 1, srcY + 1), H = src(srcX, srcY + 1), I = src(srcX + 1, srcY + 1);
ABGR8 J = E, K = E, L = E, M = E; ABGR8 J = E, K = E, L = E, M = E;
if (((A ^ E) | (B ^ E) | (C ^ E) | (D ^ E) | (F ^ E) | (G ^ E) | (H ^ E) | (I ^ E)) != 0u) { if (((A ^ E) | (B ^ E) | (C ^ E) | (D ^ E) | (F ^ E) | (G ^ E) | (H ^ E) | (I ^ E)) != 0u) {
ABGR8 P = src(srcX, srcY - 2), S = src(srcX, srcY + 2); ABGR8 P = src(srcX, srcY - 2), S = src(srcX, srcY + 2);
ABGR8 Q = src(srcX - 2, srcY), R = src(srcX + 2, srcY); ABGR8 Q = src(srcX - 2, srcY), R = src(srcX + 2, srcY);
ABGR8 Bl = luma(B), Dl = luma(D), El = luma(E), Fl = luma(F), Hl = luma(H); ABGR8 Bl = luma(B), Dl = luma(D), El = luma(E), Fl = luma(F), Hl = luma(H);
// 1:1 slope rules // 1:1 slope rules
if ((D == B && D != H && D != F) && (El >= Dl || E == A) && any_eq3(E, A, C, G) && ((El < Dl) || A != D || E != P || E != Q)) J = D; if ((D == B && D != H && D != F) && (El >= Dl || E == A) && any_eq3(E, A, C, G) && ((El < Dl) || A != D || E != P || E != Q)) J = D;
if ((B == F && B != D && B != H) && (El >= Bl || E == C) && any_eq3(E, A, C, I) && ((El < Bl) || C != B || E != P || E != R)) K = B; if ((B == F && B != D && B != H) && (El >= Bl || E == C) && any_eq3(E, A, C, I) && ((El < Bl) || C != B || E != P || E != R)) K = B;
if ((H == D && H != F && H != B) && (El >= Hl || E == G) && any_eq3(E, A, G, I) && ((El < Hl) || G != H || E != S || E != Q)) L = H; if ((H == D && H != F && H != B) && (El >= Hl || E == G) && any_eq3(E, A, G, I) && ((El < Hl) || G != H || E != S || E != Q)) L = H;
if ((F == H && F != B && F != D) && (El >= Fl || E == I) && any_eq3(E, C, G, I) && ((El < Fl) || I != H || E != R || E != S)) M = F; if ((F == H && F != B && F != D) && (El >= Fl || E == I) && any_eq3(E, C, G, I) && ((El < Fl) || I != H || E != R || E != S)) M = F;
// Intersection rules // Intersection rules
if ((E != F && all_eq4(E, C, I, D, Q) && all_eq2(F, B, H)) && (F != src(srcX + 3, srcY))) K = M = F; if ((E != F && all_eq4(E, C, I, D, Q) && all_eq2(F, B, H)) && (F != src(srcX + 3, srcY))) K = M = F;
if ((E != D && all_eq4(E, A, G, F, R) && all_eq2(D, B, H)) && (D != src(srcX - 3, srcY))) J = L = D; if ((E != D && all_eq4(E, A, G, F, R) && all_eq2(D, B, H)) && (D != src(srcX - 3, srcY))) J = L = D;
if ((E != H && all_eq4(E, G, I, B, P) && all_eq2(H, D, F)) && (H != src(srcX, srcY + 3))) L = M = H; if ((E != H && all_eq4(E, G, I, B, P) && all_eq2(H, D, F)) && (H != src(srcX, srcY + 3))) L = M = H;
if ((E != B && all_eq4(E, A, C, H, S) && all_eq2(B, D, F)) && (B != src(srcX, srcY - 3))) J = K = B; if ((E != B && all_eq4(E, A, C, H, S) && all_eq2(B, D, F)) && (B != src(srcX, srcY - 3))) J = K = B;
if (Bl < El && all_eq4(E, G, H, I, S) && none_eq4(E, A, D, C, F)) J = K = B; if (Bl < El && all_eq4(E, G, H, I, S) && none_eq4(E, A, D, C, F)) J = K = B;
if (Hl < El && all_eq4(E, A, B, C, P) && none_eq4(E, D, G, I, F)) L = M = H; if (Hl < El && all_eq4(E, A, B, C, P) && none_eq4(E, D, G, I, F)) L = M = H;
if (Fl < El && all_eq4(E, A, D, G, Q) && none_eq4(E, B, C, I, H)) K = M = F; if (Fl < El && all_eq4(E, A, D, G, Q) && none_eq4(E, B, C, I, H)) K = M = F;
if (Dl < El && all_eq4(E, C, F, I, R) && none_eq4(E, B, A, G, H)) J = L = D; if (Dl < El && all_eq4(E, C, F, I, R) && none_eq4(E, B, A, G, H)) J = L = D;
// 2:1 slope rules // 2:1 slope rules
if (H != B) { if (H != B) {
if (H != A && H != E && H != C) { if (H != A && H != E && H != C) {
if (all_eq3(H, G, F, R) && none_eq2(H, D, src(srcX + 2, srcY - 1))) L = M; if (all_eq3(H, G, F, R) && none_eq2(H, D, src(srcX + 2, srcY - 1))) L = M;
if (all_eq3(H, I, D, Q) && none_eq2(H, F, src(srcX - 2, srcY - 1))) M = L; if (all_eq3(H, I, D, Q) && none_eq2(H, F, src(srcX - 2, srcY - 1))) M = L;
} }
if (B != I && B != G && B != E) { if (B != I && B != G && B != E) {
if (all_eq3(B, A, F, R) && none_eq2(B, D, src(srcX + 2, srcY + 1))) J = K; if (all_eq3(B, A, F, R) && none_eq2(B, D, src(srcX + 2, srcY + 1))) J = K;
if (all_eq3(B, C, D, Q) && none_eq2(B, F, src(srcX - 2, srcY + 1))) K = J; if (all_eq3(B, C, D, Q) && none_eq2(B, F, src(srcX - 2, srcY + 1))) K = J;
} }
} // H !== B } // H !== B
if (F != D) { if (F != D) {
if (D != I && D != E && D != C) { if (D != I && D != E && D != C) {
if (all_eq3(D, A, H, S) && none_eq2(D, B, src(srcX + 1, srcY + 2))) J = L; if (all_eq3(D, A, H, S) && none_eq2(D, B, src(srcX + 1, srcY + 2))) J = L;
if (all_eq3(D, G, B, P) && none_eq2(D, H, src(srcX + 1, srcY - 2))) L = J; if (all_eq3(D, G, B, P) && none_eq2(D, H, src(srcX + 1, srcY - 2))) L = J;
} }
if (F != E && F != A && F != G) { if (F != E && F != A && F != G) {
if (all_eq3(F, C, H, S) && none_eq2(F, B, src(srcX - 1, srcY + 2))) K = M; if (all_eq3(F, C, H, S) && none_eq2(F, B, src(srcX - 1, srcY + 2))) K = M;
if (all_eq3(F, I, B, P) && none_eq2(F, H, src(srcX - 1, srcY - 2))) M = K; if (all_eq3(F, I, B, P) && none_eq2(F, H, src(srcX - 1, srcY - 2))) M = K;
} }
} // F !== D } // F !== D
} // not constant } // not constant
// TODO: Write four pixels at once. For now, 1/4x speed. // TODO: Write four pixels at once. For now, 1/4x speed.
if ((xy.y & 1u) == 0u) { if ((xy.y & 1u) == 0u) {
if ((xy.x & 1u) == 0u) { if ((xy.x & 1u) == 0u) {
return J; return J;
} }
return K; return K;
} }
if ((xy.x & 1u) == 0u) { if ((xy.x & 1u) == 0u) {
return L; return L;
} }
return M; return M;
} }
vec4 applyScalingf(uvec2 origxy, uvec2 xy) { vec4 applyScalingf(uvec2 origxy, uvec2 xy) {
return unpackUnorm4x8(applyScalingu(origxy, xy)); return unpackUnorm4x8(applyScalingu(origxy, xy));
} }

View File

@@ -1,120 +1,120 @@
// Spline36 upscaling shader. // Spline36 upscaling shader.
// See issue #3921 // See issue #3921
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_position; varying vec2 v_position;
uniform vec2 u_texelDelta; uniform vec2 u_texelDelta;
uniform vec2 u_pixelDelta; uniform vec2 u_pixelDelta;
const vec2 HALF_PIXEL = vec2(0.5, 0.5); const vec2 HALF_PIXEL = vec2(0.5, 0.5);
float spline36_0_1(float x) { float spline36_0_1(float x) {
return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0; return ((13.0 / 11.0 * x - 453.0 / 209.0) * x - 3.0 / 209.0) * x + 1.0;
} }
float spline36_1_2(float x) { float spline36_1_2(float x) {
return ((-6.0 / 11.0 * x + 612.0 / 209.0) * x - 1038.0 / 209.0) * x + 540.0 / 209.0; return ((-6.0 / 11.0 * x + 612.0 / 209.0) * x - 1038.0 / 209.0) * x + 540.0 / 209.0;
} }
float spline36_2_3(float x) { float spline36_2_3(float x) {
return ((1.0 / 11.0 * x - 159.0 / 209.0) * x + 434.0 / 209.0) * x - 384.0 / 209.0; return ((1.0 / 11.0 * x - 159.0 / 209.0) * x + 434.0 / 209.0) * x - 384.0 / 209.0;
} }
vec4 rgb(int inputX, int inputY) { vec4 rgb(int inputX, int inputY) {
return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta); return texture2D(sampler0, (vec2(inputX, inputY) + HALF_PIXEL) * u_texelDelta);
} }
vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) { vec4 interpolateHorizontally(vec2 inputPos, ivec2 inputPosFloor, int dy) {
float sumOfWeights = 0.0; float sumOfWeights = 0.0;
vec4 sumOfWeightedPixel = vec4(0.0); vec4 sumOfWeightedPixel = vec4(0.0);
float x; float x;
float weight; float weight;
x = inputPos.x - float(inputPosFloor.x - 2); x = inputPos.x - float(inputPosFloor.x - 2);
weight = spline36_2_3(x); weight = spline36_2_3(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 2, inputPosFloor.y + dy);
--x; --x;
weight = spline36_1_2(x); weight = spline36_1_2(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x - 1, inputPosFloor.y + dy);
--x; --x;
weight = spline36_0_1(x); weight = spline36_0_1(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 0, inputPosFloor.y + dy);
x = 1.0 - x; x = 1.0 - x;
weight = spline36_0_1(x); weight = spline36_0_1(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 1, inputPosFloor.y + dy);
++x; ++x;
weight = spline36_1_2(x); weight = spline36_1_2(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 2, inputPosFloor.y + dy);
++x; ++x;
weight = spline36_2_3(x); weight = spline36_2_3(x);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy); sumOfWeightedPixel += weight * rgb(inputPosFloor.x + 3, inputPosFloor.y + dy);
return sumOfWeightedPixel / sumOfWeights; return sumOfWeightedPixel / sumOfWeights;
} }
vec4 process(vec2 outputPos) { vec4 process(vec2 outputPos) {
vec2 inputPos = outputPos / u_texelDelta; vec2 inputPos = outputPos / u_texelDelta;
ivec2 inputPosFloor = ivec2(inputPos); ivec2 inputPosFloor = ivec2(inputPos);
// Vertical interporation // Vertical interporation
float sumOfWeights = 0.0; float sumOfWeights = 0.0;
vec4 sumOfWeightedPixel = vec4(0.0); vec4 sumOfWeightedPixel = vec4(0.0);
float weight; float weight;
float y; float y;
y = inputPos.y - float(inputPosFloor.y - 2); y = inputPos.y - float(inputPosFloor.y - 2);
weight = spline36_2_3(y); weight = spline36_2_3(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -2);
--y; --y;
weight = spline36_1_2(y); weight = spline36_1_2(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, -1);
--y; --y;
weight = spline36_0_1(y); weight = spline36_0_1(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +0);
y = 1.0 - y; y = 1.0 - y;
weight = spline36_0_1(y); weight = spline36_0_1(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +1);
++y; ++y;
weight = spline36_1_2(y); weight = spline36_1_2(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +2);
++y; ++y;
weight = spline36_2_3(y); weight = spline36_2_3(y);
sumOfWeights += weight; sumOfWeights += weight;
sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3); sumOfWeightedPixel += weight * interpolateHorizontally(inputPos, inputPosFloor, +3);
return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0); return vec4((sumOfWeightedPixel / sumOfWeights).xyz, 1.0);
} }
void main() void main()
{ {
gl_FragColor.rgba = process(v_position); gl_FragColor.rgba = process(v_position);
} }

View File

@@ -1,16 +1,16 @@
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
attribute vec4 a_position; attribute vec4 a_position;
attribute vec2 a_texcoord0; attribute vec2 a_texcoord0;
varying vec2 v_position; varying vec2 v_position;
void main() void main()
{ {
gl_Position = a_position; gl_Position = a_position;
v_position = a_texcoord0; v_position = a_texcoord0;
} }

View File

@@ -1,201 +1,201 @@
/* /*
AA shader 4.o / AA shader 4.o - filtro AA shader 4.o / AA shader 4.o - filtro
Copyright (C) 2014 guest(r) - guest.r@gmail.com Copyright (C) 2014 guest(r) - guest.r@gmail.com
This program is free software; you can redistribute it and/or This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version. of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
// Modified as video aware smoothing effect for PPSSPP. // Modified as video aware smoothing effect for PPSSPP.
// Some variable definitions had to be moved inside functions(and so repeated) due to glsl->hlsl auto translation failing. // Some variable definitions had to be moved inside functions(and so repeated) due to glsl->hlsl auto translation failing.
// Also auto translation fails with bool uniform, which is why u_video is defined as float. // Also auto translation fails with bool uniform, which is why u_video is defined as float.
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
uniform float u_video; uniform float u_video;
//=========== //===========
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
const vec3 dt = vec3(1.0,1.0,1.0); const vec3 dt = vec3(1.0,1.0,1.0);
vec3 texture2d (vec2 texcoord) { vec3 texture2d (vec2 texcoord) {
float scale = 1.0; float scale = 1.0;
if (u_video==1.0){ if (u_video==1.0){
scale = 2.0; scale = 2.0;
} else { } else {
scale = 7.0; scale = 7.0;
} }
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale; vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale; vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz; vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz; vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz; vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz; vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
float m1=dot(abs(s00-s22),dt)+0.001; float m1=dot(abs(s00-s22),dt)+0.001;
float m2=dot(abs(s02-s20),dt)+0.001; float m2=dot(abs(s02-s20),dt)+0.001;
return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2); return 0.5*(m2*(s00+s22)+m1*(s02+s20))/(m1+m2);
} }
vec3 texture2dd (vec2 texcoord) { vec3 texture2dd (vec2 texcoord) {
float scale = 1.0; float scale = 1.0;
if (u_video==1.0){ if (u_video==1.0){
scale = 2.0; scale = 2.0;
} else { } else {
scale = 7.0; scale = 7.0;
} }
vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale; vec4 yx = vec4(1.0/480.0,1.0/272.0,-1.0/480.0,-1.0/272.0)/scale;
vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale; vec4 xy = vec4(2.0/480.0,2.0/272.0,-2.0/480.0,-2.0/272.0)/scale;
vec3 c11 = texture2D(sampler0, texcoord ).xyz; vec3 c11 = texture2D(sampler0, texcoord ).xyz;
vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz; vec3 c00 = texture2D(sampler0, texcoord + xy.zw).xyz;
vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz; vec3 c20 = texture2D(sampler0, texcoord + xy.xw).xyz;
vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz; vec3 c22 = texture2D(sampler0, texcoord + xy.xy).xyz;
vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz; vec3 c02 = texture2D(sampler0, texcoord + xy.zy).xyz;
vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz; vec3 s00 = texture2D(sampler0, texcoord + yx.zw).xyz;
vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz; vec3 s20 = texture2D(sampler0, texcoord + yx.xw).xyz;
vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz; vec3 s22 = texture2D(sampler0, texcoord + yx.xy).xyz;
vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz; vec3 s02 = texture2D(sampler0, texcoord + yx.zy).xyz;
float d1=dot(abs(c00-c22),dt)+0.001; float d1=dot(abs(c00-c22),dt)+0.001;
float d2=dot(abs(c20-c02),dt)+0.001; float d2=dot(abs(c20-c02),dt)+0.001;
float m1=dot(abs(s00-s22),dt)+0.001; float m1=dot(abs(s00-s22),dt)+0.001;
float m2=dot(abs(s02-s20),dt)+0.001; float m2=dot(abs(s02-s20),dt)+0.001;
vec3 t2=(d1*(c20+c02)+d2*(c00+c22))/(2.0*(d1+d2)); vec3 t2=(d1*(c20+c02)+d2*(c00+c22))/(2.0*(d1+d2));
return 0.25*(c11+t2+(m2*(s00+s22)+m1*(s02+s20))/(m1+m2)); return 0.25*(c11+t2+(m2*(s00+s22)+m1*(s02+s20))/(m1+m2));
} }
void main() { void main() {
float scale = 7.0; float scale = 7.0;
bool filtro = false; bool filtro = false;
if (u_video==1.0){ if (u_video==1.0){
scale = 2.0; scale = 2.0;
filtro = true; filtro = true;
} else { } else {
scale = 7.0; scale = 7.0;
filtro = false; filtro = false;
} }
// Calculating texel coordinates // Calculating texel coordinates
vec2 size = vec2(480.0,272.0)*scale; vec2 size = vec2(480.0,272.0)*scale;
vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale; vec2 inv_size = vec2(1.0/480.0,1.0/272.0)/scale;
vec2 OGL2Pos = v_texcoord0 * size; vec2 OGL2Pos = v_texcoord0 * size;
vec2 fp = fract(OGL2Pos); vec2 fp = fract(OGL2Pos);
vec2 dx = vec2(inv_size.x,0.0); vec2 dx = vec2(inv_size.x,0.0);
vec2 dy = vec2(0.0, inv_size.y); vec2 dy = vec2(0.0, inv_size.y);
vec2 g1 = vec2(inv_size.x,inv_size.y); vec2 g1 = vec2(inv_size.x,inv_size.y);
vec2 g2 = vec2(-inv_size.x,inv_size.y); vec2 g2 = vec2(-inv_size.x,inv_size.y);
vec2 pC4 = floor(OGL2Pos) * inv_size + 0.5*inv_size; vec2 pC4 = floor(OGL2Pos) * inv_size + 0.5*inv_size;
// Reading the texels // Reading the texels
vec3 C0 = texture2d(pC4 - g1); vec3 C0 = texture2d(pC4 - g1);
vec3 C1 = texture2d(pC4 - dy); vec3 C1 = texture2d(pC4 - dy);
vec3 C2 = texture2d(pC4 - g2); vec3 C2 = texture2d(pC4 - g2);
vec3 C3 = texture2d(pC4 - dx); vec3 C3 = texture2d(pC4 - dx);
vec3 C4 = texture2d(pC4 ); vec3 C4 = texture2d(pC4 );
vec3 C5 = texture2d(pC4 + dx); vec3 C5 = texture2d(pC4 + dx);
vec3 C6 = texture2d(pC4 + g2); vec3 C6 = texture2d(pC4 + g2);
vec3 C7 = texture2d(pC4 + dy); vec3 C7 = texture2d(pC4 + dy);
vec3 C8 = texture2d(pC4 + g1); vec3 C8 = texture2d(pC4 + g1);
vec3 ul, ur, dl, dr; vec3 ul, ur, dl, dr;
float m1, m2; float m1, m2;
m1 = dot(abs(C0-C4),dt)+0.001; m1 = dot(abs(C0-C4),dt)+0.001;
m2 = dot(abs(C1-C3),dt)+0.001; m2 = dot(abs(C1-C3),dt)+0.001;
ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2); ul = (m2*(C0+C4)+m1*(C1+C3))/(m1+m2);
m1 = dot(abs(C1-C5),dt)+0.001; m1 = dot(abs(C1-C5),dt)+0.001;
m2 = dot(abs(C2-C4),dt)+0.001; m2 = dot(abs(C2-C4),dt)+0.001;
ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2); ur = (m2*(C1+C5)+m1*(C2+C4))/(m1+m2);
m1 = dot(abs(C3-C7),dt)+0.001; m1 = dot(abs(C3-C7),dt)+0.001;
m2 = dot(abs(C6-C4),dt)+0.001; m2 = dot(abs(C6-C4),dt)+0.001;
dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2); dl = (m2*(C3+C7)+m1*(C6+C4))/(m1+m2);
m1 = dot(abs(C4-C8),dt)+0.001; m1 = dot(abs(C4-C8),dt)+0.001;
m2 = dot(abs(C5-C7),dt)+0.001; m2 = dot(abs(C5-C7),dt)+0.001;
dr = (m2*(C4+C8)+m1*(C5+C7))/(m1+m2); dr = (m2*(C4+C8)+m1*(C5+C7))/(m1+m2);
vec3 result = vec3(0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y))); vec3 result = vec3(0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y)));
if(filtro){ if(filtro){
vec3 c11 = 0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y)); vec3 c11 = 0.5*((dr*fp.x+dl*(1.0-fp.x))*fp.y+(ur*fp.x+ul*(1.0-fp.x))*(1.0-fp.y));
inv_size = vec2(2.0/480.0,2.0/272.0)/scale;; inv_size = vec2(2.0/480.0,2.0/272.0)/scale;;
dx = vec2(inv_size.x,0.0); dx = vec2(inv_size.x,0.0);
dy = vec2(0.0,inv_size.y); dy = vec2(0.0,inv_size.y);
g1 = vec2( inv_size.x,inv_size.y); g1 = vec2( inv_size.x,inv_size.y);
g2 = vec2(-inv_size.x,inv_size.y); g2 = vec2(-inv_size.x,inv_size.y);
pC4 = v_texcoord0; pC4 = v_texcoord0;
C0 = texture2dd(pC4-g1); C0 = texture2dd(pC4-g1);
C1 = texture2dd(pC4-dy); C1 = texture2dd(pC4-dy);
C2 = texture2dd(pC4-g2); C2 = texture2dd(pC4-g2);
C3 = texture2dd(pC4-dx); C3 = texture2dd(pC4-dx);
C4 = texture2dd(pC4 ); C4 = texture2dd(pC4 );
C5 = texture2dd(pC4+dx); C5 = texture2dd(pC4+dx);
C6 = texture2dd(pC4+g2); C6 = texture2dd(pC4+g2);
C7 = texture2dd(pC4+dy); C7 = texture2dd(pC4+dy);
C8 = texture2dd(pC4+g1); C8 = texture2dd(pC4+g1);
vec3 mn1 = min(min(C0,C1),C2); vec3 mn1 = min(min(C0,C1),C2);
vec3 mn2 = min(min(C3,C4),C5); vec3 mn2 = min(min(C3,C4),C5);
vec3 mn3 = min(min(C6,C7),C8); vec3 mn3 = min(min(C6,C7),C8);
vec3 mx1 = max(max(C0,C1),C2); vec3 mx1 = max(max(C0,C1),C2);
vec3 mx2 = max(max(C3,C4),C5); vec3 mx2 = max(max(C3,C4),C5);
vec3 mx3 = max(max(C6,C7),C8); vec3 mx3 = max(max(C6,C7),C8);
mn1 = min(min(mn1,mn2),mn3); mn1 = min(min(mn1,mn2),mn3);
mx1 = max(max(mx1,mx2),mx3); mx1 = max(max(mx1,mx2),mx3);
vec3 dif1 = abs(c11-mn1) + 0.0001*dt; vec3 dif1 = abs(c11-mn1) + 0.0001*dt;
vec3 dif2 = abs(c11-mx1) + 0.0001*dt; vec3 dif2 = abs(c11-mx1) + 0.0001*dt;
float filterparam = 2.0; float filterparam = 2.0;
dif1=vec3(pow(dif1.x,filterparam),pow(dif1.y,filterparam),pow(dif1.z,filterparam)); dif1=vec3(pow(dif1.x,filterparam),pow(dif1.y,filterparam),pow(dif1.z,filterparam));
dif2=vec3(pow(dif2.x,filterparam),pow(dif2.y,filterparam),pow(dif2.z,filterparam)); dif2=vec3(pow(dif2.x,filterparam),pow(dif2.y,filterparam),pow(dif2.z,filterparam));
c11.r = (dif1.x*mx1.x + dif2.x*mn1.x)/(dif1.x + dif2.x); c11.r = (dif1.x*mx1.x + dif2.x*mn1.x)/(dif1.x + dif2.x);
c11.g = (dif1.y*mx1.y + dif2.y*mn1.y)/(dif1.y + dif2.y); c11.g = (dif1.y*mx1.y + dif2.y*mn1.y)/(dif1.y + dif2.y);
c11.b = (dif1.z*mx1.z + dif2.z*mn1.z)/(dif1.z + dif2.z); c11.b = (dif1.z*mx1.z + dif2.z*mn1.z)/(dif1.z + dif2.z);
result = c11; result = c11;
} }
gl_FragColor.xyz=result.xyz; gl_FragColor.xyz=result.xyz;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

View File

@@ -1,16 +1,16 @@
// Simple vignette shader - darker towards the corners like in the unprocessed output of a real camera. // Simple vignette shader - darker towards the corners like in the unprocessed output of a real camera.
#ifdef GL_ES #ifdef GL_ES
precision mediump float; precision mediump float;
precision mediump int; precision mediump int;
#endif #endif
uniform sampler2D sampler0; uniform sampler2D sampler0;
varying vec2 v_texcoord0; varying vec2 v_texcoord0;
void main() { void main() {
float vignette = 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0); float vignette = 1.1 - 0.6 * (dot(v_texcoord0 - 0.5, v_texcoord0 - 0.5) * 2.0);
vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz; vec3 rgb = texture2D(sampler0, v_texcoord0.xy).xyz;
gl_FragColor.rgb = vignette * rgb; gl_FragColor.rgb = vignette * rgb;
gl_FragColor.a = 1.0; gl_FragColor.a = 1.0;
} }

Binary file not shown.

Binary file not shown.

View File

@@ -1,212 +1,212 @@
The two fonts in this directory (font_western.bin and font_japanese.bin) were The two fonts in this directory (font_western.bin and font_japanese.bin) were
generated using gc-font-tool which can be found in the docs/ directory in the generated using gc-font-tool which can be found in the docs/ directory in the
dolphin source code. dolphin source code.
Both fonts are based on Droid Sans Both fonts are based on Droid Sans
Copyright 2006-2014, Google Corporation Copyright 2006-2014, Google Corporation
Licensed under the Apache License 2.0 Licensed under the Apache License 2.0
==== ====
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions. 1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, "License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document. and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by "Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License. the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all "Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition, control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the "control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity. outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity "You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License. exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, "Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation including but not limited to software source code, documentation
source, and configuration files. source, and configuration files.
"Object" form shall mean any form resulting from mechanical "Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation, not limited to compiled object code, generated documentation,
and conversions to other media types. and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or "Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work copyright notice that is included in or attached to the work
(an example is provided in the Appendix below). (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object "Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of, separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof. the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including "Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted" the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution." designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity "Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work. subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of 2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual, this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of, copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form. Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of 3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual, this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made, (except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work, use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s) Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate granted to You under this License for that Work shall terminate
as of the date such litigation is filed. as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the 4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You modifications, and in Source or Object form, provided that You
meet the following conditions: meet the following conditions:
(a) You must give any other recipients of the Work or (a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices (b) You must cause any modified files to carry prominent notices
stating that You changed the files; and stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works (c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work, attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of excluding those notices that do not pertain to any part of
the Derivative Works; and the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its (d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or, documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed that such additional attribution notices cannot be construed
as modifying the License. as modifying the License.
You may add Your own copyright statement to Your modifications and You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use, for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License. the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, 5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions. this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions. with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade 6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor, names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file. origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or 7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS, Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License. risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, 8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise, whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill, Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages. has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing 9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer, the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity, and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify, of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability. of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work. APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]" boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier same "printed page" as the copyright notice for easier
identification within third-party archives. identification within third-party archives.
Copyright [yyyy] [name of copyright owner] Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
You may obtain a copy of the License at You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.

View File

@@ -1,16 +1,16 @@
# 1-2 - Wii System Menu # 1-2 - Wii System Menu
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Settings] [Video_Settings]
SafeTextureCacheColorSamples = 0 SafeTextureCacheColorSamples = 0

View File

@@ -1,14 +1,14 @@
# 1-2 - System Menu (v1, Startup Disc Menu) # 1-2 - System Menu (v1, Startup Disc Menu)
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
DSPHLE = False DSPHLE = False
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.

View File

@@ -1,10 +1,10 @@
# Cxxxxx All Virtual Console Commodore 64 games # Cxxxxx All Virtual Console Commodore 64 games
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[Video] [Video]
[Video_Settings] [Video_Settings]
SuggestedAspectRatio = 2 SuggestedAspectRatio = 2
SafeTextureCacheColorSamples = 0 SafeTextureCacheColorSamples = 0

View File

@@ -1,16 +1,16 @@
# D43E01, D43J01, D43P01, D43U01 - ZELDA OCARINA MULTI PACK # D43E01, D43J01, D43P01, D43U01 - ZELDA OCARINA MULTI PACK
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Hacks] [Video_Hacks]
EFBToTextureEnable = False EFBToTextureEnable = False

View File

@@ -1,105 +1,105 @@
# D43E01 - Legend of Zelda, The - Ocarina of Time - Master Quest # D43E01 - Legend of Zelda, The - Ocarina of Time - Master Quest
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
$Max Hearts $Max Hearts
02BE1816 00000140 02BE1816 00000140
$Infinite Hearts $Infinite Hearts
02BE1818 00000140 02BE1818 00000140
$Infinite Magic $Infinite Magic
08BE1821 00000008 08BE1821 00000008
00BE1890 00000007 00BE1890 00000007
00BE1822 00000001 00BE1822 00000001
00BE1824 00000001 00BE1824 00000001
00BE181B 00000060 00BE181B 00000060
$Infinite Hover When Moving $Infinite Hover When Moving
12132F1A 00000000 12132F1A 00000000
02CA2AB2 0000000F 02CA2AB2 0000000F
$Infinite Rupees $Infinite Rupees
02BE181C 000003E7 02BE181C 000003E7
$Swords/Shields/boots/tunics $Swords/Shields/boots/tunics
02BE1884 00007777 02BE1884 00007777
$Have Quiver (Adult) $Have Quiver (Adult)
00BE1889 00000001 00BE1889 00000001
$Golden Gauntlets (Adult) $Golden Gauntlets (Adult)
00BE188B 000000C0 00BE188B 000000C0
$All Quest Items $All Quest Items
04BE188C 30FFFFFF 04BE188C 30FFFFFF
$Biggoron's Sword $Biggoron's Sword
00BE1826 00000001 00BE1826 00000001
$999 Gold Skulltulas $999 Gold Skulltulas
02BE18B8 000003E7 02BE18B8 000003E7
$Have Deku Stick $Have Deku Stick
00BE185C 00000000 00BE185C 00000000
$Infinite Deku Sticks $Infinite Deku Sticks
00BE1874 00000009 00BE1874 00000009
$Flaming Deku Stick $Flaming Deku Stick
02CA2A80 000000C4 02CA2A80 000000C4
$Have Deku Nuts $Have Deku Nuts
00BE185D 00000001 00BE185D 00000001
$Infinite Deku Nuts $Infinite Deku Nuts
00BE1875 0000000A 00BE1875 0000000A
$Have Bombs $Have Bombs
00BE185E 00000002 00BE185E 00000002
$Infinite Bombs $Infinite Bombs
00BE1876 00000009 00BE1876 00000009
$Have Fairy Slingshot $Have Fairy Slingshot
00BE1862 00000006 00BE1862 00000006
$Infinite Slingshot Ammo $Infinite Slingshot Ammo
00BE187A 00000009 00BE187A 00000009
$Have Fairy Ocarina (Not Time) $Have Fairy Ocarina (Not Time)
00BE1863 00000007 00BE1863 00000007
$Have Ocarina Of Time (Not Fairy) $Have Ocarina Of Time (Not Fairy)
00BE1863 00000008 00BE1863 00000008
$Have Bombchu $Have Bombchu
00BE1864 00000009 00BE1864 00000009
$Infinite Bombchu's $Infinite Bombchu's
00BE187C 00000009 00BE187C 00000009
$Have Boomerang $Have Boomerang
00BE1868 0000000E 00BE1868 0000000E
$Have Lens Of Truth $Have Lens Of Truth
00BE1869 0000000F 00BE1869 0000000F
$Have Magic Beans $Have Magic Beans
00BE186A 00000010 00BE186A 00000010
$Infinite Magic Beans $Infinite Magic Beans
00BE1882 00000009 00BE1882 00000009
$Have Fairy Bow $Have Fairy Bow
00BE185F 00000003 00BE185F 00000003
$Infinite Arrows $Infinite Arrows
00BE1877 00000009 00BE1877 00000009
$Have Fire Arrow (MP2) $Have Fire Arrow (MP2)
00BE1860 00000004 00BE1860 00000004
$Have Ice Arrow (MP2) $Have Ice Arrow (MP2)
00BE1866 0000000C 00BE1866 0000000C
$Light Arrow (MP4) $Light Arrow (MP4)
00BE186C 00000012 00BE186C 00000012
$Have Hookshot (Not Longshot) $Have Hookshot (Not Longshot)
00BE1865 0000000A 00BE1865 0000000A
$Have Longshot (Not Hookshot) $Have Longshot (Not Hookshot)
00BE1865 0000000B 00BE1865 0000000B
$Have Megaton Hammer $Have Megaton Hammer
00BE186B 00000011 00BE186B 00000011
$Have Din's Fire (MP6) $Have Din's Fire (MP6)
00BE1861 00000005 00BE1861 00000005
$Have Fairie's Wind (MP6) $Have Fairie's Wind (MP6)
00BE1867 0000000D 00BE1867 0000000D
$Have Nayru's Love (MP12) $Have Nayru's Love (MP12)
00BE186D 00000013 00BE186D 00000013
$Have Empty Bottle 1 $Have Empty Bottle 1
08BE186E 000000FF 08BE186E 000000FF
00BE188E 00000014 00BE188E 00000014
$Have Empty Bottle 2 $Have Empty Bottle 2
08BE186F 000000FF 08BE186F 000000FF
00BE186F 00000014 00BE186F 00000014
$Have Empty Bottle 3 $Have Empty Bottle 3
08BE1870 000000FF 08BE1870 000000FF
00BE1870 00000014 00BE1870 00000014
$Have Empty Bottle 4 $Have Empty Bottle 4
08BE1871 000000FF 08BE1871 000000FF
00BE1871 00000014 00BE1871 00000014

View File

@@ -1,12 +1,12 @@
# D43J01 - ZELDA OCARINA MULTI PACK # D43J01 - ZELDA OCARINA MULTI PACK
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
$loophack $loophack
0x806866E4:word:0x60000000 0x806866E4:word:0x60000000
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.

View File

@@ -1,15 +1,15 @@
# D85E01 - Interactive Multi Game Demo Disc v12 # D85E01 - Interactive Multi Game Demo Disc v12
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
FPRF = True FPRF = True
MMU = True MMU = True
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.

View File

@@ -1,15 +1,15 @@
# D86P01 - Interactive Multi Game Demo Disc v12 # D86P01 - Interactive Multi Game Demo Disc v12
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
FPRF = True FPRF = True
MMU = True MMU = True
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.

View File

@@ -1,4 +0,0 @@
# D93U01 - Interactive Multi-Game Demo Disk: November 2003
[Core]
FPRF = True

View File

@@ -1,14 +1,14 @@
# D95P01 - Interactive Multi Game Demo Disc v5 # D95P01 - Interactive Multi Game Demo Disc v5
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
FPRF = True FPRF = True
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.

View File

@@ -1,20 +1,20 @@
# DAXP01, DAXE01 - The Legend of Zelda Skyward Sword # DAXP01, DAXE01 - The Legend of Zelda Skyward Sword
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Hacks] [Video_Hacks]
EFBAccessEnable = True EFBAccessEnable = True
EFBEmulateFormatChanges = True EFBEmulateFormatChanges = True
[Video_Enhancements] [Video_Enhancements]
ArbitraryMipmapDetection = True ArbitraryMipmapDetection = True

View File

@@ -1,20 +1,20 @@
# DD2P41 - Just Dance 2 (Demo) # DD2P41 - Just Dance 2 (Demo)
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Settings] [Video_Settings]
SafeTextureCacheColorSamples = 512 SafeTextureCacheColorSamples = 512
[Video_Enhancements] [Video_Enhancements]
MaxAnisotropy = 0 MaxAnisotropy = 0
ForceFiltering = False ForceFiltering = False

View File

@@ -1,4 +1,4 @@
# DJU - (unknown title - INI file autogenerated from vWii system menu list of titles without 16:9 support) # DJU - (unknown title - INI file autogenerated from vWii system menu list of titles without 16:9 support)
[Video_Settings] [Video_Settings]
SuggestedAspectRatio = 2 SuggestedAspectRatio = 2

View File

@@ -1,22 +1,22 @@
# DLSE64, DLSP64 - Star Wars: Rogue Squadron III: Rebel Strike: Limited Edition Bonus Disc (Demo) # DLSE64, DLSP64 - Star Wars: Rogue Squadron III: Rebel Strike: Limited Edition Bonus Disc (Demo)
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
MMU = 1 MMU = 1
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video] [Video]
[Video_Settings] [Video_Settings]
[Video_Hacks] [Video_Hacks]
EFBToTextureEnable = False EFBToTextureEnable = False
ImmediateXFBEnable = False ImmediateXFBEnable = False

View File

@@ -1,4 +1,4 @@
# DQAJK2 - Aquarius Baseball # DQAJK2 - Aquarius Baseball
[Video_Settings] [Video_Settings]
SuggestedAspectRatio = 2 SuggestedAspectRatio = 2

View File

@@ -1,8 +1,8 @@
# Exxxxx - All "Virtual Console Arcade" and NeoGeo Virtual Console games # Exxxxx - All "Virtual Console Arcade" and NeoGeo Virtual Console games
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[Video_Settings] [Video_Settings]
SuggestedAspectRatio = 2 SuggestedAspectRatio = 2
SafeTextureCacheColorSamples = 0 SafeTextureCacheColorSamples = 0

View File

@@ -1,16 +1,16 @@
# E52E08 - 1942 # E52E08 - 1942
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Hacks] [Video_Hacks]
EFBToTextureEnable = False EFBToTextureEnable = False

View File

@@ -1,19 +1,19 @@
# E53E08 - BLACK TIGER # E53E08 - BLACK TIGER
[Core] [Core]
# Values set here will override the main Dolphin settings. # Values set here will override the main Dolphin settings.
[OnLoad] [OnLoad]
# Add memory patches to be loaded once on boot here. # Add memory patches to be loaded once on boot here.
[OnFrame] [OnFrame]
# Add memory patches to be applied every frame here. # Add memory patches to be applied every frame here.
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[Video_Hacks] [Video_Hacks]
EFBToTextureEnable = False EFBToTextureEnable = False
[Video_Settings] [Video_Settings]
SafeTextureCacheColorSamples = 0 SafeTextureCacheColorSamples = 0

Some files were not shown because too many files have changed in this diff Show More