123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073 |
- #ifndef __FXAA3_INC__
- #define __FXAA3_INC__
- #ifndef FXAA_PS3
- #define FXAA_PS3 0
- #endif
- #ifndef FXAA_360
- #define FXAA_360 0
- #endif
- #ifndef FXAA_360_OPT
- #define FXAA_360_OPT 0
- #endif
- #ifndef FXAA_PC
- #define FXAA_PC 0
- #endif
- #ifndef FXAA_PC_CONSOLE
- #define FXAA_PC_CONSOLE 0
- #endif
- #ifndef FXAA_GLSL_120
- #define FXAA_GLSL_120 0
- #endif
- #ifndef FXAA_GLSL_130
- #define FXAA_GLSL_130 0
- #endif
- #ifndef FXAA_HLSL_3
- #define FXAA_HLSL_3 0
- #endif
- #ifndef FXAA_HLSL_4
- #define FXAA_HLSL_4 0
- #endif
- #ifndef FXAA_HLSL_5
- #define FXAA_HLSL_5 0
- #endif
- #ifndef FXAA_GREEN_AS_LUMA
- #define FXAA_GREEN_AS_LUMA 0
- #endif
- #ifndef FXAA_EARLY_EXIT
- #define FXAA_EARLY_EXIT 1
- #endif
- #ifndef FXAA_DISCARD
- #define FXAA_DISCARD 0
- #endif
- #ifndef FXAA_FAST_PIXEL_OFFSET
- #ifdef GL_EXT_gpu_shader4
- #define FXAA_FAST_PIXEL_OFFSET 1
- #endif
- #ifdef GL_NV_gpu_shader5
- #define FXAA_FAST_PIXEL_OFFSET 1
- #endif
- #ifdef GL_ARB_gpu_shader5
- #define FXAA_FAST_PIXEL_OFFSET 1
- #endif
- #ifndef FXAA_FAST_PIXEL_OFFSET
- #define FXAA_FAST_PIXEL_OFFSET 0
- #endif
- #endif
- #ifndef FXAA_GATHER4_ALPHA
- #if (FXAA_HLSL_5 == 1)
- #define FXAA_GATHER4_ALPHA 1
- #endif
- #ifdef GL_ARB_gpu_shader5
- #define FXAA_GATHER4_ALPHA 1
- #endif
- #ifdef GL_NV_gpu_shader5
- #define FXAA_GATHER4_ALPHA 1
- #endif
- #ifndef FXAA_GATHER4_ALPHA
- #define FXAA_GATHER4_ALPHA 0
- #endif
- #endif
- #ifndef FXAA_CONSOLE__PS3_EDGE_SHARPNESS
- #if 1
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 8.0
- #endif
- #if 0
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 4.0
- #endif
- #if 0
- #define FXAA_CONSOLE__PS3_EDGE_SHARPNESS 2.0
- #endif
- #endif
- #ifndef FXAA_CONSOLE__PS3_EDGE_THRESHOLD
- #if 1
- #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.125
- #else
- #define FXAA_CONSOLE__PS3_EDGE_THRESHOLD 0.25
- #endif
- #endif
- #ifndef FXAA_QUALITY__PRESET
- #define FXAA_QUALITY__PRESET 12
- #endif
- #if (FXAA_QUALITY__PRESET == 10)
- #define FXAA_QUALITY__PS 3
- #define FXAA_QUALITY__P0 1.5
- #define FXAA_QUALITY__P1 3.0
- #define FXAA_QUALITY__P2 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 11)
- #define FXAA_QUALITY__PS 4
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 3.0
- #define FXAA_QUALITY__P3 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 12)
- #define FXAA_QUALITY__PS 5
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 4.0
- #define FXAA_QUALITY__P4 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 13)
- #define FXAA_QUALITY__PS 6
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 4.0
- #define FXAA_QUALITY__P5 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 14)
- #define FXAA_QUALITY__PS 7
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 4.0
- #define FXAA_QUALITY__P6 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 15)
- #define FXAA_QUALITY__PS 8
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 4.0
- #define FXAA_QUALITY__P7 12.0
- #endif
- #if (FXAA_QUALITY__PRESET == 20)
- #define FXAA_QUALITY__PS 3
- #define FXAA_QUALITY__P0 1.5
- #define FXAA_QUALITY__P1 2.0
- #define FXAA_QUALITY__P2 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 21)
- #define FXAA_QUALITY__PS 4
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 22)
- #define FXAA_QUALITY__PS 5
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 23)
- #define FXAA_QUALITY__PS 6
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 24)
- #define FXAA_QUALITY__PS 7
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 3.0
- #define FXAA_QUALITY__P6 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 25)
- #define FXAA_QUALITY__PS 8
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 4.0
- #define FXAA_QUALITY__P7 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 26)
- #define FXAA_QUALITY__PS 9
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 2.0
- #define FXAA_QUALITY__P7 4.0
- #define FXAA_QUALITY__P8 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 27)
- #define FXAA_QUALITY__PS 10
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 2.0
- #define FXAA_QUALITY__P7 2.0
- #define FXAA_QUALITY__P8 4.0
- #define FXAA_QUALITY__P9 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 28)
- #define FXAA_QUALITY__PS 11
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 2.0
- #define FXAA_QUALITY__P7 2.0
- #define FXAA_QUALITY__P8 2.0
- #define FXAA_QUALITY__P9 4.0
- #define FXAA_QUALITY__P10 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 29)
- #define FXAA_QUALITY__PS 12
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.5
- #define FXAA_QUALITY__P2 2.0
- #define FXAA_QUALITY__P3 2.0
- #define FXAA_QUALITY__P4 2.0
- #define FXAA_QUALITY__P5 2.0
- #define FXAA_QUALITY__P6 2.0
- #define FXAA_QUALITY__P7 2.0
- #define FXAA_QUALITY__P8 2.0
- #define FXAA_QUALITY__P9 2.0
- #define FXAA_QUALITY__P10 4.0
- #define FXAA_QUALITY__P11 8.0
- #endif
- #if (FXAA_QUALITY__PRESET == 39)
- #define FXAA_QUALITY__PS 12
- #define FXAA_QUALITY__P0 1.0
- #define FXAA_QUALITY__P1 1.0
- #define FXAA_QUALITY__P2 1.0
- #define FXAA_QUALITY__P3 1.0
- #define FXAA_QUALITY__P4 1.0
- #define FXAA_QUALITY__P5 1.5
- #define FXAA_QUALITY__P6 2.0
- #define FXAA_QUALITY__P7 2.0
- #define FXAA_QUALITY__P8 2.0
- #define FXAA_QUALITY__P9 2.0
- #define FXAA_QUALITY__P10 4.0
- #define FXAA_QUALITY__P11 8.0
- #endif
- #if (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)
- #define FxaaBool bool
- #define FxaaDiscard discard
- #define FxaaFloat float
- #define FxaaFloat2 vec2
- #define FxaaFloat3 vec3
- #define FxaaFloat4 vec4
- #define FxaaHalf float
- #define FxaaHalf2 vec2
- #define FxaaHalf3 vec3
- #define FxaaHalf4 vec4
- #define FxaaInt2 ivec2
- #define FxaaSat(x) clamp(x, 0.0, 1.0)
- #define FxaaTex sampler2D
- #else
- #define FxaaBool bool
- #define FxaaDiscard clip(-1)
- #define FxaaFloat float
- #define FxaaFloat2 float2
- #define FxaaFloat3 float3
- #define FxaaFloat4 float4
- #define FxaaHalf half
- #define FxaaHalf2 half2
- #define FxaaHalf3 half3
- #define FxaaHalf4 half4
- #define FxaaSat(x) saturate(x)
- #endif
- #if (FXAA_GLSL_120 == 1)
- #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)
- #if (FXAA_FAST_PIXEL_OFFSET == 1)
- #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)
- #else
- #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)
- #endif
- #if (FXAA_GATHER4_ALPHA == 1)
- #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)
- #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)
- #define FxaaTexGreen4(t, p) textureGather(t, p, 1)
- #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)
- #endif
- #endif
- #if (FXAA_GLSL_130 == 1)
- #define FxaaTexTop(t, p) textureLod(t, p, 0.0)
- #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)
- #if (FXAA_GATHER4_ALPHA == 1)
- #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)
- #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)
- #define FxaaTexGreen4(t, p) textureGather(t, p, 1)
- #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)
- #endif
- #endif
- #if (FXAA_HLSL_3 == 1) || (FXAA_360 == 1) || (FXAA_PS3 == 1)
- #define FxaaInt2 float2
- #define FxaaTex sampler2D
- #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))
- #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))
- #endif
- #if (FXAA_HLSL_4 == 1)
- #define FxaaInt2 int2
- struct FxaaTex { SamplerState smpl; Texture2D tex; };
- #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)
- #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)
- #endif
- #if (FXAA_HLSL_5 == 1)
- #define FxaaInt2 int2
- struct FxaaTex { SamplerState smpl; Texture2D tex; };
- #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)
- #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)
- #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)
- #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)
- #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)
- #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)
- #endif
- #if (FXAA_GREEN_AS_LUMA == 0)
- FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }
- #else
- FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }
- #endif
- #if (FXAA_PC == 1)
- FxaaFloat4 FxaaPixelShader(
-
-
-
- FxaaFloat2 pos,
-
-
-
-
-
- FxaaFloat4 fxaaConsolePosPos,
-
-
-
-
-
- FxaaTex tex,
-
-
-
-
-
- FxaaTex fxaaConsole360TexExpBiasNegOne,
-
-
-
-
-
- FxaaTex fxaaConsole360TexExpBiasNegTwo,
-
-
-
-
-
- FxaaFloat2 fxaaQualityRcpFrame,
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat4 fxaaConsoleRcpFrameOpt,
-
-
-
-
-
-
-
-
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,
-
-
-
-
-
-
-
-
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaQualitySubpix,
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaQualityEdgeThreshold,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaQualityEdgeThresholdMin,
-
-
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaConsoleEdgeSharpness,
-
-
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaConsoleEdgeThreshold,
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- FxaaFloat fxaaConsoleEdgeThresholdMin,
-
-
-
-
-
-
- FxaaFloat4 fxaaConsole360ConstDir
- ) {
-
- FxaaFloat2 posM;
- posM.x = pos.x;
- posM.y = pos.y;
- #if (FXAA_GATHER4_ALPHA == 1)
- #if (FXAA_DISCARD == 0)
- FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);
- #if (FXAA_GREEN_AS_LUMA == 0)
- #define lumaM rgbyM.w
- #else
- #define lumaM rgbyM.y
- #endif
- #endif
- #if (FXAA_GREEN_AS_LUMA == 0)
- FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);
- FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));
- #else
- FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);
- FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));
- #endif
- #if (FXAA_DISCARD == 1)
- #define lumaM luma4A.w
- #endif
- #define lumaE luma4A.z
- #define lumaS luma4A.x
- #define lumaSE luma4A.y
- #define lumaNW luma4B.w
- #define lumaN luma4B.z
- #define lumaW luma4B.x
- #else
- FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);
- #if (FXAA_GREEN_AS_LUMA == 0)
- #define lumaM rgbyM.w
- #else
- #define lumaM rgbyM.y
- #endif
- FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(0, 1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, 0), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(0, -1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));
- #endif
-
- FxaaFloat maxSM = max(lumaS, lumaM);
- FxaaFloat minSM = min(lumaS, lumaM);
- FxaaFloat maxESM = max(lumaE, maxSM);
- FxaaFloat minESM = min(lumaE, minSM);
- FxaaFloat maxWN = max(lumaN, lumaW);
- FxaaFloat minWN = min(lumaN, lumaW);
- FxaaFloat rangeMax = max(maxWN, maxESM);
- FxaaFloat rangeMin = min(minWN, minESM);
- FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;
- FxaaFloat range = rangeMax - rangeMin;
- FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);
- FxaaBool earlyExit = range < rangeMaxClamped;
-
- if (earlyExit)
- #if (FXAA_DISCARD == 1)
- FxaaDiscard;
- #else
- return rgbyM;
- #endif
-
- #if (FXAA_GATHER4_ALPHA == 0)
- FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, -1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, 1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));
- #else
- FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));
- FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));
- #endif
-
- FxaaFloat lumaNS = lumaN + lumaS;
- FxaaFloat lumaWE = lumaW + lumaE;
- FxaaFloat subpixRcpRange = 1.0 / range;
- FxaaFloat subpixNSWE = lumaNS + lumaWE;
- FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;
- FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;
-
- FxaaFloat lumaNESE = lumaNE + lumaSE;
- FxaaFloat lumaNWNE = lumaNW + lumaNE;
- FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;
- FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;
-
- FxaaFloat lumaNWSW = lumaNW + lumaSW;
- FxaaFloat lumaSWSE = lumaSW + lumaSE;
- FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);
- FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);
- FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;
- FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;
- FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;
- FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;
-
- FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;
- FxaaFloat lengthSign = fxaaQualityRcpFrame.x;
- FxaaBool horzSpan = edgeHorz >= edgeVert;
- FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;
-
- if (!horzSpan) lumaN = lumaW;
- if (!horzSpan) lumaS = lumaE;
- if (horzSpan) lengthSign = fxaaQualityRcpFrame.y;
- FxaaFloat subpixB = (subpixA * (1.0 / 12.0)) - lumaM;
-
- FxaaFloat gradientN = lumaN - lumaM;
- FxaaFloat gradientS = lumaS - lumaM;
- FxaaFloat lumaNN = lumaN + lumaM;
- FxaaFloat lumaSS = lumaS + lumaM;
- FxaaBool pairN = abs(gradientN) >= abs(gradientS);
- FxaaFloat gradient = max(abs(gradientN), abs(gradientS));
- if (pairN) lengthSign = -lengthSign;
- FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);
-
- FxaaFloat2 posB;
- posB.x = posM.x;
- posB.y = posM.y;
- FxaaFloat2 offNP;
- offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;
- offNP.y = (horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;
- if (!horzSpan) posB.x += lengthSign * 0.5;
- if (horzSpan) posB.y += lengthSign * 0.5;
-
- FxaaFloat2 posN;
- posN.x = posB.x - offNP.x * FXAA_QUALITY__P0;
- posN.y = posB.y - offNP.y * FXAA_QUALITY__P0;
- FxaaFloat2 posP;
- posP.x = posB.x + offNP.x * FXAA_QUALITY__P0;
- posP.y = posB.y + offNP.y * FXAA_QUALITY__P0;
- FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;
- FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));
- FxaaFloat subpixE = subpixC * subpixC;
- FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));
-
- if (!pairN) lumaNN = lumaSS;
- FxaaFloat gradientScaled = gradient * 1.0 / 4.0;
- FxaaFloat lumaMM = lumaM - lumaNN * 0.5;
- FxaaFloat subpixF = subpixD * subpixE;
- FxaaBool lumaMLTZero = lumaMM < 0.0;
-
- lumaEndN -= lumaNN * 0.5;
- lumaEndP -= lumaNN * 0.5;
- FxaaBool doneN = abs(lumaEndN) >= gradientScaled;
- FxaaBool doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P1;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P1;
- FxaaBool doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P1;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P1;
-
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P2;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P2;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P2;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P2;
-
- #if (FXAA_QUALITY__PS > 3)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P3;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P3;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P3;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P3;
-
- #if (FXAA_QUALITY__PS > 4)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P4;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P4;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P4;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P4;
-
- #if (FXAA_QUALITY__PS > 5)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P5;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P5;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P5;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P5;
-
- #if (FXAA_QUALITY__PS > 6)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P6;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P6;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P6;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P6;
-
- #if (FXAA_QUALITY__PS > 7)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P7;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P7;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P7;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P7;
-
- #if (FXAA_QUALITY__PS > 8)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P8;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P8;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P8;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P8;
-
- #if (FXAA_QUALITY__PS > 9)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P9;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P9;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P9;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P9;
-
- #if (FXAA_QUALITY__PS > 10)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P10;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P10;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P10;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P10;
-
- #if (FXAA_QUALITY__PS > 11)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P11;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P11;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P11;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P11;
-
- #if (FXAA_QUALITY__PS > 12)
- if (doneNP)
- {
- if (!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));
- if (!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));
- if (!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;
- if (!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;
- doneN = abs(lumaEndN) >= gradientScaled;
- doneP = abs(lumaEndP) >= gradientScaled;
- if (!doneN) posN.x -= offNP.x * FXAA_QUALITY__P12;
- if (!doneN) posN.y -= offNP.y * FXAA_QUALITY__P12;
- doneNP = (!doneN) || (!doneP);
- if (!doneP) posP.x += offNP.x * FXAA_QUALITY__P12;
- if (!doneP) posP.y += offNP.y * FXAA_QUALITY__P12;
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
- #endif
-
- }
-
- FxaaFloat dstN = posM.x - posN.x;
- FxaaFloat dstP = posP.x - posM.x;
- if (!horzSpan) dstN = posM.y - posN.y;
- if (!horzSpan) dstP = posP.y - posM.y;
-
- FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;
- FxaaFloat spanLength = (dstP + dstN);
- FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;
- FxaaFloat spanLengthRcp = 1.0 / spanLength;
-
- FxaaBool directionN = dstN < dstP;
- FxaaFloat dst = min(dstN, dstP);
- FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;
- FxaaFloat subpixG = subpixF * subpixF;
- FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;
- FxaaFloat subpixH = subpixG * fxaaQualitySubpix;
-
- FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;
- FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);
- if (!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;
- if (horzSpan) posM.y += pixelOffsetSubpix * lengthSign;
- #if (FXAA_DISCARD == 1)
- return FxaaTexTop(tex, posM);
- #else
- return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);
- #endif
- }
- #endif
- #if (FXAA_PC_CONSOLE == 1)
- FxaaFloat4 FxaaPixelShader(
-
- FxaaFloat2 pos,
- FxaaFloat4 fxaaConsolePosPos,
- FxaaTex tex,
- FxaaTex fxaaConsole360TexExpBiasNegOne,
- FxaaTex fxaaConsole360TexExpBiasNegTwo,
- FxaaFloat2 fxaaQualityRcpFrame,
- FxaaFloat4 fxaaConsoleRcpFrameOpt,
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,
- FxaaFloat fxaaQualitySubpix,
- FxaaFloat fxaaQualityEdgeThreshold,
- FxaaFloat fxaaQualityEdgeThresholdMin,
- FxaaFloat fxaaConsoleEdgeSharpness,
- FxaaFloat fxaaConsoleEdgeThreshold,
- FxaaFloat fxaaConsoleEdgeThresholdMin,
- FxaaFloat4 fxaaConsole360ConstDir
- )
- {
-
- FxaaFloat lumaNw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xy));
- FxaaFloat lumaSw = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.xw));
- FxaaFloat lumaNe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zy));
- FxaaFloat lumaSe = FxaaLuma(FxaaTexTop(tex, fxaaConsolePosPos.zw));
-
- FxaaFloat4 rgbyM = FxaaTexTop(tex, pos.xy);
- #if (FXAA_GREEN_AS_LUMA == 0)
- FxaaFloat lumaM = rgbyM.w;
- #else
- FxaaFloat lumaM = rgbyM.y;
- #endif
-
- FxaaFloat lumaMaxNwSw = max(lumaNw, lumaSw);
- lumaNe += 1.0 / 384.0;
- FxaaFloat lumaMinNwSw = min(lumaNw, lumaSw);
-
- FxaaFloat lumaMaxNeSe = max(lumaNe, lumaSe);
- FxaaFloat lumaMinNeSe = min(lumaNe, lumaSe);
-
- FxaaFloat lumaMax = max(lumaMaxNeSe, lumaMaxNwSw);
- FxaaFloat lumaMin = min(lumaMinNeSe, lumaMinNwSw);
-
- FxaaFloat lumaMaxScaled = lumaMax * fxaaConsoleEdgeThreshold;
-
- FxaaFloat lumaMinM = min(lumaMin, lumaM);
- FxaaFloat lumaMaxScaledClamped = max(fxaaConsoleEdgeThresholdMin, lumaMaxScaled);
- FxaaFloat lumaMaxM = max(lumaMax, lumaM);
- FxaaFloat dirSwMinusNe = lumaSw - lumaNe;
- FxaaFloat lumaMaxSubMinM = lumaMaxM - lumaMinM;
- FxaaFloat dirSeMinusNw = lumaSe - lumaNw;
- if (lumaMaxSubMinM < lumaMaxScaledClamped) return rgbyM;
-
- FxaaFloat2 dir;
- dir.x = dirSwMinusNe + dirSeMinusNw;
- dir.y = dirSwMinusNe - dirSeMinusNw;
-
- FxaaFloat2 dir1 = normalize(dir.xy);
- FxaaFloat4 rgbyN1 = FxaaTexTop(tex, pos.xy - dir1 * fxaaConsoleRcpFrameOpt.zw);
- FxaaFloat4 rgbyP1 = FxaaTexTop(tex, pos.xy + dir1 * fxaaConsoleRcpFrameOpt.zw);
-
- FxaaFloat dirAbsMinTimesC = min(abs(dir1.x), abs(dir1.y)) * fxaaConsoleEdgeSharpness;
- FxaaFloat2 dir2 = clamp(dir1.xy / dirAbsMinTimesC, -2.0, 2.0);
-
- FxaaFloat4 rgbyN2 = FxaaTexTop(tex, pos.xy - dir2 * fxaaConsoleRcpFrameOpt2.zw);
- FxaaFloat4 rgbyP2 = FxaaTexTop(tex, pos.xy + dir2 * fxaaConsoleRcpFrameOpt2.zw);
-
- FxaaFloat4 rgbyA = rgbyN1 + rgbyP1;
- FxaaFloat4 rgbyB = ((rgbyN2 + rgbyP2) * 0.25) + (rgbyA * 0.25);
-
- #if (FXAA_GREEN_AS_LUMA == 0)
- FxaaBool twoTap = (rgbyB.w < lumaMin) || (rgbyB.w > lumaMax);
- #else
- FxaaBool twoTap = (rgbyB.y < lumaMin) || (rgbyB.y > lumaMax);
- #endif
- if (twoTap) rgbyB.xyz = rgbyA.xyz * 0.5;
- return rgbyB;
- }
- #endif
- #if (FXAA_360 == 1)
- [reduceTempRegUsage(4)]
- float4 FxaaPixelShader(
-
- FxaaFloat2 pos,
- FxaaFloat4 fxaaConsolePosPos,
- FxaaTex tex,
- FxaaTex fxaaConsole360TexExpBiasNegOne,
- FxaaTex fxaaConsole360TexExpBiasNegTwo,
- FxaaFloat2 fxaaQualityRcpFrame,
- FxaaFloat4 fxaaConsoleRcpFrameOpt,
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,
- FxaaFloat fxaaQualitySubpix,
- FxaaFloat fxaaQualityEdgeThreshold,
- FxaaFloat fxaaQualityEdgeThresholdMin,
- FxaaFloat fxaaConsoleEdgeSharpness,
- FxaaFloat fxaaConsoleEdgeThreshold,
- FxaaFloat fxaaConsoleEdgeThresholdMin,
- FxaaFloat4 fxaaConsole360ConstDir
- )
- {
-
- float4 lumaNwNeSwSe;
- #if (FXAA_GREEN_AS_LUMA == 0)
- asm
- {
- tfetch2D lumaNwNeSwSe.w___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe._w__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe.__w_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe.___w, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD = false
- };
- #else
- asm
- {
- tfetch2D lumaNwNeSwSe.y___, tex, pos.xy, OffsetX = -0.5, OffsetY = -0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe._y__, tex, pos.xy, OffsetX = 0.5, OffsetY = -0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe.__y_, tex, pos.xy, OffsetX = -0.5, OffsetY = 0.5, UseComputedLOD = false
- tfetch2D lumaNwNeSwSe.___y, tex, pos.xy, OffsetX = 0.5, OffsetY = 0.5, UseComputedLOD = false
- };
- #endif
-
- lumaNwNeSwSe.y += 1.0 / 384.0;
- float2 lumaMinTemp = min(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw);
- float2 lumaMaxTemp = max(lumaNwNeSwSe.xy, lumaNwNeSwSe.zw);
- float lumaMin = min(lumaMinTemp.x, lumaMinTemp.y);
- float lumaMax = max(lumaMaxTemp.x, lumaMaxTemp.y);
-
- float4 rgbyM = tex2Dlod(tex, float4(pos.xy, 0.0, 0.0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- float lumaMinM = min(lumaMin, rgbyM.w);
- float lumaMaxM = max(lumaMax, rgbyM.w);
- #else
- float lumaMinM = min(lumaMin, rgbyM.y);
- float lumaMaxM = max(lumaMax, rgbyM.y);
- #endif
- if ((lumaMaxM - lumaMinM) < max(fxaaConsoleEdgeThresholdMin, lumaMax * fxaaConsoleEdgeThreshold)) return rgbyM;
-
- float2 dir;
- dir.x = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.yyxx);
- dir.y = dot(lumaNwNeSwSe, fxaaConsole360ConstDir.xyxy);
- dir = normalize(dir);
-
- float4 dir1 = dir.xyxy * fxaaConsoleRcpFrameOpt.xyzw;
-
- float4 dir2;
- float dirAbsMinTimesC = min(abs(dir.x), abs(dir.y)) * fxaaConsoleEdgeSharpness;
- dir2 = saturate(fxaaConsole360ConstDir.zzww * dir.xyxy / dirAbsMinTimesC + 0.5);
- dir2 = dir2 * fxaaConsole360RcpFrameOpt2.xyxy + fxaaConsole360RcpFrameOpt2.zwzw;
-
- float4 rgbyN1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.xy, 0.0, 0.0));
- float4 rgbyP1 = tex2Dlod(fxaaConsole360TexExpBiasNegOne, float4(pos.xy + dir1.zw, 0.0, 0.0));
- float4 rgbyN2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.xy, 0.0, 0.0));
- float4 rgbyP2 = tex2Dlod(fxaaConsole360TexExpBiasNegTwo, float4(pos.xy + dir2.zw, 0.0, 0.0));
-
- float4 rgbyA = rgbyN1 + rgbyP1;
- float4 rgbyB = rgbyN2 + rgbyP2 + rgbyA * 0.5;
-
- float4 rgbyR = ((FxaaLuma(rgbyB) - lumaMax) > 0.0) ? rgbyA : rgbyB;
- rgbyR = ((FxaaLuma(rgbyB) - lumaMin) > 0.0) ? rgbyR : rgbyA;
- return rgbyR;
- }
- #endif
- #if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 0)
- #pragma regcount 7
- #pragma disablepc all
- #pragma option O3
- #pragma option OutColorPrec=fp16
- #pragma texformat default RGBA8
- half4 FxaaPixelShader(
-
- FxaaFloat2 pos,
- FxaaFloat4 fxaaConsolePosPos,
- FxaaTex tex,
- FxaaTex fxaaConsole360TexExpBiasNegOne,
- FxaaTex fxaaConsole360TexExpBiasNegTwo,
- FxaaFloat2 fxaaQualityRcpFrame,
- FxaaFloat4 fxaaConsoleRcpFrameOpt,
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,
- FxaaFloat fxaaQualitySubpix,
- FxaaFloat fxaaQualityEdgeThreshold,
- FxaaFloat fxaaQualityEdgeThresholdMin,
- FxaaFloat fxaaConsoleEdgeSharpness,
- FxaaFloat fxaaConsoleEdgeThreshold,
- FxaaFloat fxaaConsoleEdgeThresholdMin,
- FxaaFloat4 fxaaConsole360ConstDir
- )
- {
-
-
- half4 dir;
- half4 lumaNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- lumaNe.w += half(1.0 / 512.0);
- dir.x = -lumaNe.w;
- dir.z = -lumaNe.w;
- #else
- lumaNe.y += half(1.0 / 512.0);
- dir.x = -lumaNe.y;
- dir.z = -lumaNe.y;
- #endif
-
-
- half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- dir.x += lumaSw.w;
- dir.z += lumaSw.w;
- #else
- dir.x += lumaSw.y;
- dir.z += lumaSw.y;
- #endif
-
-
- half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- dir.x -= lumaNw.w;
- dir.z += lumaNw.w;
- #else
- dir.x -= lumaNw.y;
- dir.z += lumaNw.y;
- #endif
-
-
- half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- dir.x += lumaSe.w;
- dir.z -= lumaSe.w;
- #else
- dir.x += lumaSe.y;
- dir.z -= lumaSe.y;
- #endif
-
-
- half4 dir1_pos;
- dir1_pos.xy = normalize(dir.xyz).xz;
- half dirAbsMinTimesC = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS);
-
-
- half4 dir2_pos;
- dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimesC, half(-2.0), half(2.0));
- dir1_pos.zw = pos.xy;
- dir2_pos.zw = pos.xy;
- half4 temp1N;
- temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;
-
-
- temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0));
- half4 rgby1;
- rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;
-
-
- rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0));
- rgby1 = (temp1N + rgby1) * 0.5;
-
-
- half4 temp2N;
- temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;
- temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0));
-
-
- half4 rgby2;
- rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;
- rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0));
- rgby2 = (temp2N + rgby2) * 0.5;
-
-
-
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaMin = min(min(lumaNw.w, lumaSw.w), min(lumaNe.w, lumaSe.w));
- half lumaMax = max(max(lumaNw.w, lumaSw.w), max(lumaNe.w, lumaSe.w));
- #else
- half lumaMin = min(min(lumaNw.y, lumaSw.y), min(lumaNe.y, lumaSe.y));
- half lumaMax = max(max(lumaNw.y, lumaSw.y), max(lumaNe.y, lumaSe.y));
- #endif
- rgby2 = (rgby2 + rgby1) * 0.5;
-
-
- #if (FXAA_GREEN_AS_LUMA == 0)
- bool twoTapLt = rgby2.w < lumaMin;
- bool twoTapGt = rgby2.w > lumaMax;
- #else
- bool twoTapLt = rgby2.y < lumaMin;
- bool twoTapGt = rgby2.y > lumaMax;
- #endif
-
-
- if (twoTapLt || twoTapGt) rgby2 = rgby1;
-
- return rgby2;
- }
- #endif
- #if (FXAA_PS3 == 1) && (FXAA_EARLY_EXIT == 1)
- #pragma regcount 7
- #pragma disablepc all
- #pragma option O2
- #pragma option OutColorPrec=fp16
- #pragma texformat default RGBA8
- half4 FxaaPixelShader(
-
- FxaaFloat2 pos,
- FxaaFloat4 fxaaConsolePosPos,
- FxaaTex tex,
- FxaaTex fxaaConsole360TexExpBiasNegOne,
- FxaaTex fxaaConsole360TexExpBiasNegTwo,
- FxaaFloat2 fxaaQualityRcpFrame,
- FxaaFloat4 fxaaConsoleRcpFrameOpt,
- FxaaFloat4 fxaaConsoleRcpFrameOpt2,
- FxaaFloat4 fxaaConsole360RcpFrameOpt2,
- FxaaFloat fxaaQualitySubpix,
- FxaaFloat fxaaQualityEdgeThreshold,
- FxaaFloat fxaaQualityEdgeThresholdMin,
- FxaaFloat fxaaConsoleEdgeSharpness,
- FxaaFloat fxaaConsoleEdgeThreshold,
- FxaaFloat fxaaConsoleEdgeThresholdMin,
- FxaaFloat4 fxaaConsole360ConstDir
- )
- {
-
-
- half4 rgbyNe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zy, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaNe = rgbyNe.w + half(1.0 / 512.0);
- #else
- half lumaNe = rgbyNe.y + half(1.0 / 512.0);
- #endif
-
-
- half4 lumaSw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xw, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaSwNegNe = lumaSw.w - lumaNe;
- #else
- half lumaSwNegNe = lumaSw.y - lumaNe;
- #endif
-
-
- half4 lumaNw = h4tex2Dlod(tex, half4(fxaaConsolePosPos.xy, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaMaxNwSw = max(lumaNw.w, lumaSw.w);
- half lumaMinNwSw = min(lumaNw.w, lumaSw.w);
- #else
- half lumaMaxNwSw = max(lumaNw.y, lumaSw.y);
- half lumaMinNwSw = min(lumaNw.y, lumaSw.y);
- #endif
-
-
- half4 lumaSe = h4tex2Dlod(tex, half4(fxaaConsolePosPos.zw, 0, 0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- half dirZ = lumaNw.w + lumaSwNegNe;
- half dirX = -lumaNw.w + lumaSwNegNe;
- #else
- half dirZ = lumaNw.y + lumaSwNegNe;
- half dirX = -lumaNw.y + lumaSwNegNe;
- #endif
-
-
- half3 dir;
- dir.y = 0.0;
- #if (FXAA_GREEN_AS_LUMA == 0)
- dir.x = lumaSe.w + dirX;
- dir.z = -lumaSe.w + dirZ;
- half lumaMinNeSe = min(lumaNe, lumaSe.w);
- #else
- dir.x = lumaSe.y + dirX;
- dir.z = -lumaSe.y + dirZ;
- half lumaMinNeSe = min(lumaNe, lumaSe.y);
- #endif
-
-
- half4 dir1_pos;
- dir1_pos.xy = normalize(dir).xz;
- half dirAbsMinTimes8 = min(abs(dir1_pos.x), abs(dir1_pos.y)) * half(FXAA_CONSOLE__PS3_EDGE_SHARPNESS);
-
-
- half4 dir2_pos;
- dir2_pos.xy = clamp(dir1_pos.xy / dirAbsMinTimes8, half(-2.0), half(2.0));
- dir1_pos.zw = pos.xy;
- dir2_pos.zw = pos.xy;
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaMaxNeSe = max(lumaNe, lumaSe.w);
- #else
- half lumaMaxNeSe = max(lumaNe, lumaSe.y);
- #endif
-
-
- half4 temp1N;
- temp1N.xy = dir1_pos.zw - dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;
- temp1N = h4tex2Dlod(tex, half4(temp1N.xy, 0.0, 0.0));
- half lumaMax = max(lumaMaxNwSw, lumaMaxNeSe);
- half lumaMin = min(lumaMinNwSw, lumaMinNeSe);
-
-
- half4 rgby1;
- rgby1.xy = dir1_pos.zw + dir1_pos.xy * fxaaConsoleRcpFrameOpt.zw;
- rgby1 = h4tex2Dlod(tex, half4(rgby1.xy, 0.0, 0.0));
- rgby1 = (temp1N + rgby1) * 0.5;
-
-
- half4 rgbyM = h4tex2Dlod(tex, half4(pos.xy, 0.0, 0.0));
- #if (FXAA_GREEN_AS_LUMA == 0)
- half lumaMaxM = max(lumaMax, rgbyM.w);
- half lumaMinM = min(lumaMin, rgbyM.w);
- #else
- half lumaMaxM = max(lumaMax, rgbyM.y);
- half lumaMinM = min(lumaMin, rgbyM.y);
- #endif
-
-
- half4 temp2N;
- temp2N.xy = dir2_pos.zw - dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;
- temp2N = h4tex2Dlod(tex, half4(temp2N.xy, 0.0, 0.0));
- half4 rgby2;
- rgby2.xy = dir2_pos.zw + dir2_pos.xy * fxaaConsoleRcpFrameOpt2.zw;
- half lumaRangeM = (lumaMaxM - lumaMinM) / FXAA_CONSOLE__PS3_EDGE_THRESHOLD;
-
-
- rgby2 = h4tex2Dlod(tex, half4(rgby2.xy, 0.0, 0.0));
- rgby2 = (temp2N + rgby2) * 0.5;
-
-
- rgby2 = (rgby2 + rgby1) * 0.5;
-
-
- #if (FXAA_GREEN_AS_LUMA == 0)
- bool twoTapLt = rgby2.w < lumaMin;
- bool twoTapGt = rgby2.w > lumaMax;
- #else
- bool twoTapLt = rgby2.y < lumaMin;
- bool twoTapGt = rgby2.y > lumaMax;
- #endif
- bool earlyExit = lumaRangeM < lumaMax;
- bool twoTap = twoTapLt || twoTapGt;
-
-
- if (twoTap) rgby2 = rgby1;
- if (earlyExit) rgby2 = rgbyM;
-
- return rgby2;
- }
- #endif
- #endif
|