From ceb3a88149340776459c7598bb917873e5204c84 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Tue, 22 Aug 2023 22:38:26 +0200 Subject: [PATCH] fix bilinear shader --- inc/d3d9shader.h | 325 +++++++++++++++++++++++------------------------ 1 file changed, 162 insertions(+), 163 deletions(-) diff --git a/inc/d3d9shader.h b/inc/d3d9shader.h index f453597..c97dd6f 100644 --- a/inc/d3d9shader.h +++ b/inc/d3d9shader.h @@ -134,10 +134,7 @@ const BYTE D3D9_PALETTE_SHADER[] = 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 + mad r2.xy, r1, c1.x, t0 add r3.xy, r1, r2 mov r1.z, c1.y add r4.x, r1.z, r2.x @@ -145,26 +142,28 @@ const BYTE D3D9_PALETTE_SHADER[] = 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 + texld r5, r2, 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 r3.y, c1.y + mad r4.x, r5.x, c1.z, c1.w + mov r4.y, c1.y mov r1.y, c1.y - mov r2.y, c1.y - texld r4, r0, s1 + texld r0, r0, s1 texld r3, r3, s1 + texld r4, r4, 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 + mul r2.xy, r2, c0 + frc r2.xy, r2 + lrp r5, r2.x, r0, r3 + lrp r0, r2.x, r1, r4 + lrp r1, r2.y, r5, r0 mov oC0, r1 -// approximately 32 instruction slots used (8 texture, 24 arithmetic) + // approximately 31 instruction slots used (8 texture, 23 arithmetic) // fxc.exe /Tps_2_0 shader.hlsl /Fhshader.h /* @@ -176,24 +175,23 @@ float4 TextureSize : register(c0); 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 pos = coord + size * 0.5; + float2 f = frac(pos / size); + + float tli = tex2D(SurfaceTex, pos).r; + float tri = tex2D(SurfaceTex, pos + float2(size.x, 0.0) ).r; + float bli = tex2D(SurfaceTex, pos + float2(0.0, size.y)).r; + float bri = tex2D(SurfaceTex, pos + float2(size.x, size.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)); float4 br = tex2D(PaletteTex, float2(bri * (255./256) + (0.5/256), 0)); - float4 top = lerp(tl, tr, f.x); - float4 bot = lerp(bl, br, f.x); - - return lerp(top, bot, f.y); + float4 t = lerp(tl, tr, f.x); + float4 b = lerp(bl, br, f.x); + + return lerp(t, b, f.y); } float4 main(float2 texCoords : TEXCOORD) : COLOR @@ -204,142 +202,143 @@ 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, - 228, 128, 255, 255, 0, 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, 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, 4, 0, + 0, 4, 2, 0, 3, 128, + 1, 0, 228, 128, 1, 0, + 0, 160, 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, 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, 66, 0, 0, 3, + 5, 0, 15, 128, 2, 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, 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, 3, 0, + 2, 128, 1, 0, 85, 160, + 4, 0, 0, 4, 4, 0, + 1, 128, 5, 0, 0, 128, + 1, 0, 170, 160, 1, 0, + 255, 160, 1, 0, 0, 2, + 4, 0, 2, 128, 1, 0, + 85, 160, 1, 0, 0, 2, + 1, 0, 2, 128, 1, 0, + 85, 160, 66, 0, 0, 3, + 0, 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, 4, 0, 15, 128, + 4, 0, 228, 128, 1, 8, + 228, 160, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 1, 8, 228, 160, + 5, 0, 0, 3, 2, 0, + 3, 128, 2, 0, 228, 128, + 0, 0, 228, 160, 19, 0, + 0, 2, 2, 0, 3, 128, + 2, 0, 228, 128, 18, 0, + 0, 4, 5, 0, 15, 128, + 2, 0, 0, 128, 0, 0, + 228, 128, 3, 0, 228, 128, + 18, 0, 0, 4, 0, 0, + 15, 128, 2, 0, 0, 128, + 1, 0, 228, 128, 4, 0, + 228, 128, 18, 0, 0, 4, + 1, 0, 15, 128, 2, 0, + 85, 128, 5, 0, 228, 128, + 0, 0, 228, 128, 1, 0, + 0, 2, 0, 8, 15, 128, + 1, 0, 228, 128, 255, 255, + 0, 0 + }; + + + /* catmull rom upscaling */