From afb3d2dea3b92b8881a3bc48799168d27d15b973 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 23 Aug 2023 01:59:51 +0200 Subject: [PATCH] fix bilinear shader (for real this time!) --- inc/d3d9shader.h | 399 +++++++++++++++++++++++++---------------------- 1 file changed, 216 insertions(+), 183 deletions(-) diff --git a/inc/d3d9shader.h b/inc/d3d9shader.h index f453597..5aa0349 100644 --- a/inc/d3d9shader.h +++ b/inc/d3d9shader.h @@ -127,44 +127,48 @@ const BYTE D3D9_PALETTE_SHADER[] = // ps_2_0 - def c1, 0.5, 0, 0.99609375, 0.001953125 - dcl t0.xy - dcl_2d s0 - dcl_2d s1 - mov r0.y, c1.y - rcp r1.x, c0.x - rcp r1.y, c0.y - mul r0.zw, t0.wzyx, c0.wzyx - frc r0.zw, r0 - add r2.xy, -r0.wzyx, c1.x - mad r2.xy, r2, r1, t0 - add r3.xy, r1, r2 - mov r1.z, c1.y - add r4.x, r1.z, r2.x - add r4.y, r1.y, r2.y - add r1.x, r1.x, r2.x - add r1.y, r1.z, r2.y - texld r3, r3, s0 - texld r2, r2, s0 - texld r1, r1, s0 - texld r4, r4, s0 - mad r0.x, r3.x, c1.z, c1.w - mov r3.y, c1.y - mad r2.x, r2.x, c1.z, c1.w - mad r1.x, r1.x, c1.z, c1.w - mad r3.x, r4.x, c1.z, c1.w - mov r1.y, c1.y - mov r2.y, c1.y - texld r4, r0, s1 - texld r3, r3, s1 - texld r1, r1, s1 - texld r2, r2, s1 - lrp r5, r0.w, r4, r3 - lrp r3, r0.w, r1, r2 - lrp r1, r0.z, r5, r3 - mov oC0, r1 + def c1, -0.5, 0.5, 1.5, 0 + def c2, 0.99609375, 0.001953125, 0, 0 + dcl t0.xy + dcl_2d s0 + dcl_2d s1 + mov r0.w, c1.x + mad r0.xy, t0, c0, r0.w + frc r0.zw, r0.wzyx + add r0.xy, -r0.wzyx, r0 + add r0.zw, r0.wzyx, c1.z + add r0.xy, r0, c1.y + rcp r1.x, c0.x + rcp r1.y, c0.y + mul r2.xy, r0.wzyx, r1 + mul r1.xy, r0, r1 + mad r0.xy, t0, c0, -r0 + mov r3.x, r2.x + mov r3.y, r1.y + mov r4.x, r1.x + mov r4.y, r2.y + texld r3, r3, s0 + texld r1, r1, s0 + texld r2, r2, s0 + texld r4, r4, s0 + mad r3.x, r3.x, c2.x, c2.y + mov r3.y, c1.w + mad r1.x, r1.x, c2.x, c2.y + mov r1.y, c1.w + mad r2.x, r2.x, c2.x, c2.y + mad r4.x, r4.x, c2.x, c2.y + mov r4.y, c1.w + mov r2.y, c1.w + texld r3, r3, s1 + texld r1, r1, s1 + texld r4, r4, s1 + texld r2, r2, s1 + lrp r5, r0.x, r3, r1 + lrp r1, r0.x, r2, r4 + lrp r2, r0.y, r1, r5 + mov oC0, r2 -// approximately 32 instruction slots used (8 texture, 24 arithmetic) + // approximately 35 instruction slots used (8 texture, 27 arithmetic) // fxc.exe /Tps_2_0 shader.hlsl /Fhshader.h /* @@ -173,18 +177,24 @@ uniform sampler2D PaletteTex; float4 TextureSize : register(c0); +#define SourceSize float4(TextureSize.xy, 1.0 / TextureSize.xy) + float4 bilinear(float2 coord) { - float2 size = 1.0 / TextureSize.xy; - float2 f = frac(coord * TextureSize.xy); - - coord += (.5 - f) * size; - - float tli = tex2D(SurfaceTex, coord).r; - float tri = tex2D(SurfaceTex, coord + float2(size.x, 0.0) ).r; - float bli = tex2D(SurfaceTex, coord + float2(0.0, size.y)).r; - float bri = tex2D(SurfaceTex, coord + float2(size.x, size.y)).r; - + float2 samplePos = coord * SourceSize.xy; + float2 texPos1 = floor(samplePos - 0.5f) + 0.5f; + float2 texPos2 = texPos1 + 1.0f; + + float2 f = samplePos - texPos1; + + texPos1 *= SourceSize.zw; + texPos2 *= SourceSize.zw; + + float tli = tex2D(SurfaceTex, float2(texPos1.x, texPos1.y)).r; + float tri = tex2D(SurfaceTex, float2(texPos2.x, texPos1.y)).r; + float bli = tex2D(SurfaceTex, float2(texPos1.x, texPos2.y)).r; + float bri = tex2D(SurfaceTex, float2(texPos2.x, texPos2.y)).r; + float4 tl = tex2D(PaletteTex, float2(tli * (255./256) + (0.5/256), 0)); float4 tr = tex2D(PaletteTex, float2(tri * (255./256) + (0.5/256), 0)); float4 bl = tex2D(PaletteTex, float2(bli * (255./256) + (0.5/256), 0)); @@ -192,7 +202,7 @@ float4 bilinear(float2 coord) float4 top = lerp(tl, tr, f.x); float4 bot = lerp(bl, br, f.x); - + return lerp(top, bot, f.y); } @@ -204,142 +214,165 @@ float4 main(float2 texCoords : TEXCOORD) : COLOR #endif const BYTE D3D9_PALETTE_SHADER_BILINEAR[] = -{ - 0, 2, 255, 255, 254, 255, - 56, 0, 67, 84, 65, 66, - 28, 0, 0, 0, 179, 0, - 0, 0, 0, 2, 255, 255, - 3, 0, 0, 0, 28, 0, - 0, 0, 0, 1, 0, 0, - 172, 0, 0, 0, 88, 0, - 0, 0, 3, 0, 1, 0, - 1, 0, 0, 0, 100, 0, - 0, 0, 0, 0, 0, 0, - 116, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 128, 0, 0, 0, 0, 0, - 0, 0, 144, 0, 0, 0, - 2, 0, 0, 0, 1, 0, - 2, 0, 156, 0, 0, 0, - 0, 0, 0, 0, 80, 97, - 108, 101, 116, 116, 101, 84, - 101, 120, 0, 171, 4, 0, - 12, 0, 1, 0, 1, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 83, 117, 114, 102, - 97, 99, 101, 84, 101, 120, - 0, 171, 4, 0, 12, 0, - 1, 0, 1, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 84, 101, 120, 116, 117, 114, - 101, 83, 105, 122, 101, 0, - 1, 0, 3, 0, 1, 0, - 4, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 112, 115, - 95, 50, 95, 48, 0, 77, - 105, 99, 114, 111, 115, 111, - 102, 116, 32, 40, 82, 41, - 32, 72, 76, 83, 76, 32, - 83, 104, 97, 100, 101, 114, - 32, 67, 111, 109, 112, 105, - 108, 101, 114, 32, 49, 48, - 46, 49, 0, 171, 81, 0, - 0, 5, 1, 0, 15, 160, - 0, 0, 0, 63, 0, 0, - 0, 0, 0, 0, 127, 63, - 0, 0, 0, 59, 31, 0, - 0, 2, 0, 0, 0, 128, - 0, 0, 3, 176, 31, 0, - 0, 2, 0, 0, 0, 144, - 0, 8, 15, 160, 31, 0, - 0, 2, 0, 0, 0, 144, - 1, 8, 15, 160, 1, 0, - 0, 2, 0, 0, 2, 128, - 1, 0, 85, 160, 6, 0, - 0, 2, 1, 0, 1, 128, - 0, 0, 0, 160, 6, 0, - 0, 2, 1, 0, 2, 128, - 0, 0, 85, 160, 5, 0, - 0, 3, 0, 0, 12, 128, - 0, 0, 27, 176, 0, 0, - 27, 160, 19, 0, 0, 2, - 0, 0, 12, 128, 0, 0, - 228, 128, 2, 0, 0, 3, - 2, 0, 3, 128, 0, 0, - 27, 129, 1, 0, 0, 160, - 4, 0, 0, 4, 2, 0, - 3, 128, 2, 0, 228, 128, - 1, 0, 228, 128, 0, 0, - 228, 176, 2, 0, 0, 3, - 3, 0, 3, 128, 1, 0, - 228, 128, 2, 0, 228, 128, - 1, 0, 0, 2, 1, 0, - 4, 128, 1, 0, 85, 160, - 2, 0, 0, 3, 4, 0, - 1, 128, 1, 0, 170, 128, - 2, 0, 0, 128, 2, 0, - 0, 3, 4, 0, 2, 128, - 1, 0, 85, 128, 2, 0, - 85, 128, 2, 0, 0, 3, - 1, 0, 1, 128, 1, 0, - 0, 128, 2, 0, 0, 128, - 2, 0, 0, 3, 1, 0, - 2, 128, 1, 0, 170, 128, - 2, 0, 85, 128, 66, 0, - 0, 3, 3, 0, 15, 128, - 3, 0, 228, 128, 0, 8, - 228, 160, 66, 0, 0, 3, - 2, 0, 15, 128, 2, 0, - 228, 128, 0, 8, 228, 160, - 66, 0, 0, 3, 1, 0, - 15, 128, 1, 0, 228, 128, - 0, 8, 228, 160, 66, 0, - 0, 3, 4, 0, 15, 128, - 4, 0, 228, 128, 0, 8, - 228, 160, 4, 0, 0, 4, - 0, 0, 1, 128, 3, 0, - 0, 128, 1, 0, 170, 160, - 1, 0, 255, 160, 1, 0, - 0, 2, 3, 0, 2, 128, - 1, 0, 85, 160, 4, 0, - 0, 4, 2, 0, 1, 128, - 2, 0, 0, 128, 1, 0, - 170, 160, 1, 0, 255, 160, - 4, 0, 0, 4, 1, 0, - 1, 128, 1, 0, 0, 128, - 1, 0, 170, 160, 1, 0, - 255, 160, 4, 0, 0, 4, - 3, 0, 1, 128, 4, 0, - 0, 128, 1, 0, 170, 160, - 1, 0, 255, 160, 1, 0, - 0, 2, 1, 0, 2, 128, - 1, 0, 85, 160, 1, 0, - 0, 2, 2, 0, 2, 128, - 1, 0, 85, 160, 66, 0, - 0, 3, 4, 0, 15, 128, - 0, 0, 228, 128, 1, 8, - 228, 160, 66, 0, 0, 3, - 3, 0, 15, 128, 3, 0, - 228, 128, 1, 8, 228, 160, - 66, 0, 0, 3, 1, 0, - 15, 128, 1, 0, 228, 128, - 1, 8, 228, 160, 66, 0, - 0, 3, 2, 0, 15, 128, - 2, 0, 228, 128, 1, 8, - 228, 160, 18, 0, 0, 4, - 5, 0, 15, 128, 0, 0, - 255, 128, 4, 0, 228, 128, - 3, 0, 228, 128, 18, 0, - 0, 4, 3, 0, 15, 128, - 0, 0, 255, 128, 1, 0, - 228, 128, 2, 0, 228, 128, - 18, 0, 0, 4, 1, 0, - 15, 128, 0, 0, 170, 128, - 5, 0, 228, 128, 3, 0, - 228, 128, 1, 0, 0, 2, - 0, 8, 15, 128, 1, 0, + { + 0, 2, 255, 255, 254, 255, + 56, 0, 67, 84, 65, 66, + 28, 0, 0, 0, 179, 0, + 0, 0, 0, 2, 255, 255, + 3, 0, 0, 0, 28, 0, + 0, 0, 0, 1, 0, 0, + 172, 0, 0, 0, 88, 0, + 0, 0, 3, 0, 1, 0, + 1, 0, 0, 0, 100, 0, + 0, 0, 0, 0, 0, 0, + 116, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 128, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 0, + 2, 0, 0, 0, 1, 0, + 2, 0, 156, 0, 0, 0, + 0, 0, 0, 0, 80, 97, + 108, 101, 116, 116, 101, 84, + 101, 120, 0, 171, 4, 0, + 12, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 83, 117, 114, 102, + 97, 99, 101, 84, 101, 120, + 0, 171, 4, 0, 12, 0, + 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 84, 101, 120, 116, 117, 114, + 101, 83, 105, 122, 101, 0, + 1, 0, 3, 0, 1, 0, + 4, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 112, 115, + 95, 50, 95, 48, 0, 77, + 105, 99, 114, 111, 115, 111, + 102, 116, 32, 40, 82, 41, + 32, 72, 76, 83, 76, 32, + 83, 104, 97, 100, 101, 114, + 32, 67, 111, 109, 112, 105, + 108, 101, 114, 32, 49, 48, + 46, 49, 0, 171, 81, 0, + 0, 5, 1, 0, 15, 160, + 0, 0, 0, 191, 0, 0, + 0, 63, 0, 0, 192, 63, + 0, 0, 0, 0, 81, 0, + 0, 5, 2, 0, 15, 160, + 0, 0, 127, 63, 0, 0, + 0, 59, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 0, + 0, 2, 0, 0, 0, 128, + 0, 0, 3, 176, 31, 0, + 0, 2, 0, 0, 0, 144, + 0, 8, 15, 160, 31, 0, + 0, 2, 0, 0, 0, 144, + 1, 8, 15, 160, 1, 0, + 0, 2, 0, 0, 8, 128, + 1, 0, 0, 160, 4, 0, + 0, 4, 0, 0, 3, 128, + 0, 0, 228, 176, 0, 0, + 228, 160, 0, 0, 255, 128, + 19, 0, 0, 2, 0, 0, + 12, 128, 0, 0, 27, 128, + 2, 0, 0, 3, 0, 0, + 3, 128, 0, 0, 27, 129, + 0, 0, 228, 128, 2, 0, + 0, 3, 0, 0, 12, 128, + 0, 0, 27, 128, 1, 0, + 170, 160, 2, 0, 0, 3, + 0, 0, 3, 128, 0, 0, + 228, 128, 1, 0, 85, 160, + 6, 0, 0, 2, 1, 0, + 1, 128, 0, 0, 0, 160, + 6, 0, 0, 2, 1, 0, + 2, 128, 0, 0, 85, 160, + 5, 0, 0, 3, 2, 0, + 3, 128, 0, 0, 27, 128, + 1, 0, 228, 128, 5, 0, + 0, 3, 1, 0, 3, 128, + 0, 0, 228, 128, 1, 0, + 228, 128, 4, 0, 0, 4, + 0, 0, 3, 128, 0, 0, + 228, 176, 0, 0, 228, 160, + 0, 0, 228, 129, 1, 0, + 0, 2, 3, 0, 1, 128, + 2, 0, 0, 128, 1, 0, + 0, 2, 3, 0, 2, 128, + 1, 0, 85, 128, 1, 0, + 0, 2, 4, 0, 1, 128, + 1, 0, 0, 128, 1, 0, + 0, 2, 4, 0, 2, 128, + 2, 0, 85, 128, 66, 0, + 0, 3, 3, 0, 15, 128, + 3, 0, 228, 128, 0, 8, + 228, 160, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 0, 8, 228, 160, + 66, 0, 0, 3, 2, 0, + 15, 128, 2, 0, 228, 128, + 0, 8, 228, 160, 66, 0, + 0, 3, 4, 0, 15, 128, + 4, 0, 228, 128, 0, 8, + 228, 160, 4, 0, 0, 4, + 3, 0, 1, 128, 3, 0, + 0, 128, 2, 0, 0, 160, + 2, 0, 85, 160, 1, 0, + 0, 2, 3, 0, 2, 128, + 1, 0, 255, 160, 4, 0, + 0, 4, 1, 0, 1, 128, + 1, 0, 0, 128, 2, 0, + 0, 160, 2, 0, 85, 160, + 1, 0, 0, 2, 1, 0, + 2, 128, 1, 0, 255, 160, + 4, 0, 0, 4, 2, 0, + 1, 128, 2, 0, 0, 128, + 2, 0, 0, 160, 2, 0, + 85, 160, 4, 0, 0, 4, + 4, 0, 1, 128, 4, 0, + 0, 128, 2, 0, 0, 160, + 2, 0, 85, 160, 1, 0, + 0, 2, 4, 0, 2, 128, + 1, 0, 255, 160, 1, 0, + 0, 2, 2, 0, 2, 128, + 1, 0, 255, 160, 66, 0, + 0, 3, 3, 0, 15, 128, + 3, 0, 228, 128, 1, 8, + 228, 160, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 1, 8, 228, 160, + 66, 0, 0, 3, 4, 0, + 15, 128, 4, 0, 228, 128, + 1, 8, 228, 160, 66, 0, + 0, 3, 2, 0, 15, 128, + 2, 0, 228, 128, 1, 8, + 228, 160, 18, 0, 0, 4, + 5, 0, 15, 128, 0, 0, + 0, 128, 3, 0, 228, 128, + 1, 0, 228, 128, 18, 0, + 0, 4, 1, 0, 15, 128, + 0, 0, 0, 128, 2, 0, + 228, 128, 4, 0, 228, 128, + 18, 0, 0, 4, 2, 0, + 15, 128, 0, 0, 85, 128, + 1, 0, 228, 128, 5, 0, + 228, 128, 1, 0, 0, 2, + 0, 8, 15, 128, 2, 0, 228, 128, 255, 255, 0, 0 -}; + }; + + + + + + + + + + + + + /* catmull rom upscaling */