mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
f42b5ccda0
Attempting to fix the HLSL 'blurriness' reported by a few people. Now HLSL will auto-prescale to the nearest texture size that is greater than the target screen size on both axes and is also an even multiple of the raw bitmap's size.
96 lines
2.2 KiB
HLSL
96 lines
2.2 KiB
HLSL
//-----------------------------------------------------------------------------
|
|
// Passthrough Effect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
texture Diffuse;
|
|
|
|
sampler DiffuseSampler = sampler_state
|
|
{
|
|
Texture = <Diffuse>;
|
|
MipFilter = LINEAR;
|
|
MinFilter = LINEAR;
|
|
MagFilter = LINEAR;
|
|
AddressU = CLAMP;
|
|
AddressV = CLAMP;
|
|
AddressW = CLAMP;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Vertex Definitions
|
|
//-----------------------------------------------------------------------------
|
|
|
|
struct VS_OUTPUT
|
|
{
|
|
float4 Position : POSITION;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
struct VS_INPUT
|
|
{
|
|
float4 Position : POSITION;
|
|
float4 Color : COLOR0;
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
struct PS_INPUT
|
|
{
|
|
float2 TexCoord : TEXCOORD0;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Passthrough Vertex Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
float TargetWidth;
|
|
float TargetHeight;
|
|
|
|
float RawWidth;
|
|
float RawHeight;
|
|
|
|
VS_OUTPUT vs_main(VS_INPUT Input)
|
|
{
|
|
VS_OUTPUT Output = (VS_OUTPUT)0;
|
|
|
|
Output.Position = float4(Input.Position.xyz, 1.0f);
|
|
Output.Position.x /= TargetWidth;
|
|
Output.Position.y /= TargetHeight;
|
|
Output.Position.y = 1.0f - Output.Position.y;
|
|
Output.Position.x -= 0.5f;
|
|
Output.Position.y -= 0.5f;
|
|
Output.Position *= float4(2.0f, 2.0f, 1.0f, 1.0f);
|
|
|
|
Output.TexCoord = Input.TexCoord;
|
|
|
|
return Output;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Passthrough Pixel Shader
|
|
//-----------------------------------------------------------------------------
|
|
|
|
float4 ps_main(PS_INPUT Input) : COLOR
|
|
{
|
|
float2 RawDims = float2(RawWidth, RawHeight);
|
|
float2 TexCoord = Input.TexCoord * RawDims;
|
|
TexCoord -= frac(TexCoord);
|
|
TexCoord += 0.5f;
|
|
TexCoord /= RawDims;
|
|
|
|
float4 Center = tex2D(DiffuseSampler, TexCoord);
|
|
return Center;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Passthrough Effect
|
|
//-----------------------------------------------------------------------------
|
|
|
|
technique DeconvergeTechnique
|
|
{
|
|
pass Pass0
|
|
{
|
|
Lighting = FALSE;
|
|
|
|
VertexShader = compile vs_3_0 vs_main();
|
|
PixelShader = compile ps_3_0 ps_main();
|
|
}
|
|
}
|