Previous Thread
Next Thread
Print Thread
Page 2 of 35 1 2 3 4 34 35
#69644 - 05/17/11 12:42 AM Re: It's dangerous to go alone - take this! (NEW LIBS) [Re: Dr.Zer0]  
Joined: May 2009
Posts: 1,580
Just Desserts Offline
Very Senior Member
Just Desserts  Offline
Very Senior Member

Joined: May 2009
Posts: 1,580
http://icips.us/emulation/crt/fling.png

Code:
hlsl_enable               1
hlslpath                  hlsl
shadow_mask_alpha         0.4
shadow_mask_texture       aperture.png
shadow_mask_pix_width     3.0
shadow_mask_pix_height    3.0
shadow_mask_usize         0.1875
shadow_mask_vsize         0.1875
oversample_x              3.0
oversample_y              3.0
pincushion_x              0.04
pincushion_y              0.04
scanline_alpha            1.0
scanline_size             1.0
scanline_bright_scale     1.3
scanline_bright_offset    0.7
scanline_jitter           0.0
defocus_x                 3.0
defocus_y                 3.0
red_converge_x            0.5
red_converge_y            0.0
green_converge_x          0.0
green_converge_y          0.0
blue_converge_x           0.0
blue_converge_y           0.0
red_radial_converge_x     0.5
red_radial_converge_y     0.5
green_radial_converge_x   0.0
green_radial_converge_y   0.0
blue_radial_converge_x    0.0
blue_radial_converge_y    0.0
red_from_r                1.0
red_from_g                0.2
red_from_b                0.2
green_from_r              0.2
green_from_g              1.0
green_from_b              0.3
blue_from_r               0.3
blue_from_g               0.3
blue_from_b               1.0
saturation                1.6
red_offset                0.0
green_offset              0.0
blue_offset               0.0
red_scale                 1.25
green_scale               1.25
blue_scale                1.25
red_power                 1.0
green_power               1.0
blue_power                1.0
red_floor                 0.05
green_floor               0.05
blue_floor                0.05
red_phosphor_life         0.4
green_phosphor_life       0.4
blue_phosphor_life        0.4
y_from_y                  1.0
y_from_i                  0.0
y_from_q                  0.0
i_from_y                  0.0
i_from_i                  1.0
i_from_q                  0.0
q_from_y                  0.0
q_from_i                  0.0
q_from_q                  1.0
y_scale                   1.0
i_scale                   1.0
q_scale                   1.0
y_offset                  0.0
i_offset                  0.0
q_offset                  0.0
subsample_length          1.0
dot_crawl_width           0.0
dot_crawl_height          2.0
dot_crawl_rate            2
dot_crawl_skip            2
edge_amount               1.0
edge_ratio                0.0


Note: Moiré is *much* less noticeable when oversampling, but it's only for some cards, so YMMV.

#69645 - 05/17/11 01:22 AM Re: It's dangerous to go alone - take this! (NEW LIBS) [Re: Just Desserts]  
Joined: May 2009
Posts: 1,580
Just Desserts Offline
Very Senior Member
Just Desserts  Offline
Very Senior Member

Joined: May 2009
Posts: 1,580
And here's a more lightweight shader that rips out all the NTSC-related stuff for people who want a faster MAME experience. This took Tapper at 3x oversampling from 330% to 410% on my Radeon 5970.

Code:
//-----------------------------------------------------------------------------
// Post-Processing Effect
//-----------------------------------------------------------------------------

texture Diffuse;

sampler DiffuseSampler = sampler_state
{
	Texture   = <Diffuse>;
	MipFilter = LINEAR;
	MinFilter = LINEAR;
	MagFilter = LINEAR;
	AddressU = CLAMP;
	AddressV = CLAMP;
	AddressW = CLAMP;
};

texture Shadow;

sampler ShadowSampler = sampler_state
{
	Texture   = <Shadow>;
	MipFilter = LINEAR;
	MinFilter = LINEAR;
	MagFilter = LINEAR;
	AddressU = WRAP;
	AddressV = WRAP;
	AddressW = WRAP;
};

//-----------------------------------------------------------------------------
// Vertex Definitions
//-----------------------------------------------------------------------------

struct VS_OUTPUT
{
	float4 Position : POSITION;
	float4 Color : COLOR0;
	float2 TexCoord : TEXCOORD0;
	float2 ExtraInfo : TEXCOORD1;
	float3 CoordX : TEXCOORD2;
	float3 CoordY : TEXCOORD3;
};

struct VS_INPUT
{
	float4 Position : POSITION;
	float4 Color : COLOR0;
	float2 TexCoord : TEXCOORD0;
	float2 ExtraInfo : TEXCOORD1;
};

struct PS_INPUT
{
	float4 Color : COLOR0;
	float2 TexCoord : TEXCOORD0;
	float2 ExtraInfo : TEXCOORD1;
	float3 CoordX : TEXCOORD2;
	float3 CoordY : TEXCOORD3;
};

//-----------------------------------------------------------------------------
// Post-Processing Vertex Shader
//-----------------------------------------------------------------------------

uniform float RedConvergeX;
uniform float RedConvergeY;
uniform float GrnConvergeX;
uniform float GrnConvergeY;
uniform float BluConvergeX;
uniform float BluConvergeY;

uniform float TargetWidth;
uniform float TargetHeight;

uniform float RawWidth;
uniform float RawHeight;

uniform float WidthRatio;
uniform float HeightRatio;

uniform float RedRadialConvergeX;
uniform float RedRadialConvergeY;
uniform float GrnRadialConvergeX;
uniform float GrnRadialConvergeY;
uniform float BluRadialConvergeX;
uniform float BluRadialConvergeY;

VS_OUTPUT vs_main(VS_INPUT Input)
{
	VS_OUTPUT Output = (VS_OUTPUT)0;
	
	float2 invDims = float2(1.0f / RawWidth, 1.0f / RawHeight);
	float2 Ratios = float2(1.0f / WidthRatio, 1.0f / HeightRatio);
	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.Color = Input.Color;
	Output.TexCoord = Input.TexCoord;//(Input.TexCoord - float2(0.5f, 0.5f)) / 8.0f + float2(0.25f, 0.125f);
	Output.ExtraInfo = Input.ExtraInfo;
	
	Output.CoordX.x = ((((Output.TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + RedRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + RedConvergeX * invDims.x;
	Output.CoordX.y = ((((Output.TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + GrnRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + GrnConvergeX * invDims.x;
	Output.CoordX.z = ((((Output.TexCoord.x / Ratios.x) - 0.5f)) * (1.0f + BluRadialConvergeX / RawWidth) + 0.5f) * Ratios.x + GrnConvergeX * invDims.x;
	
	Output.CoordY.x = ((((Output.TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + RedRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + RedConvergeY * invDims.y;
	Output.CoordY.y = ((((Output.TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + GrnRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + BluConvergeY * invDims.y;
	Output.CoordY.z = ((((Output.TexCoord.y / Ratios.y) - 0.5f)) * (1.0f + BluRadialConvergeY / RawHeight) + 0.5f) * Ratios.y + BluConvergeY * invDims.y;
	return Output;
}

//-----------------------------------------------------------------------------
// Post-Processing Pixel Shader
//-----------------------------------------------------------------------------

uniform float PI = 3.14159265f;

uniform float PincushionAmountX = 0.1f;
uniform float PincushionAmountY = 0.1f;

uniform float ScanlineAmount = 1.0f;
uniform float ScanlineScale = 1.0f;
uniform float ScanlineBrightScale = 1.0f;
uniform float ScanlineBrightOffset = 1.0f;
uniform float ScanlineOffset = 1.0f;

uniform float RedFromRed = 1.0f;
uniform float RedFromGrn = 0.0f;
uniform float RedFromBlu = 0.0f;
uniform float GrnFromRed = 0.0f;
uniform float GrnFromGrn = 1.0f;
uniform float GrnFromBlu = 0.0f;
uniform float BluFromRed = 0.0f;
uniform float BluFromGrn = 0.0f;
uniform float BluFromBlu = 1.0f;

uniform float YfromY = 1.0f;
uniform float YfromI = 0.0f;
uniform float YfromQ = 0.0f;
uniform float IfromY = 0.0f;
uniform float IfromI = 1.0f;
uniform float IfromQ = 0.0f;
uniform float QfromY = 0.0f;
uniform float QfromI = 0.0f;
uniform float QfromQ = 1.0f;

uniform float RedOffset = 0.0f;
uniform float GrnOffset = 0.0f;
uniform float BluOffset = 0.0f;

uniform float RedScale = 1.0f;
uniform float GrnScale = 1.0f;
uniform float BluScale = 1.0f;

uniform float RedFloor = 0.0f;
uniform float GrnFloor = 0.0f;
uniform float BluFloor = 0.0f;

uniform float Saturation = 1.0f;

uniform float YScale = 1.0f;
uniform float IScale = 1.0f;
uniform float QScale = 1.0f;
uniform float YOffset = 0.0f;
uniform float IOffset = 0.0f;
uniform float QOffset = 0.0f;

uniform float RedPower = 2.2f;
uniform float GrnPower = 2.2f;
uniform float BluPower = 2.2f;

uniform float EdgeDetectScale = 1.0f;
uniform float EdgeToBaseRatio = 0.0f;

uniform float SubsampleLength = 3.0f;

uniform float CurrFrame = 0.0f;
uniform float CrawlWidth = 3.0f;
uniform float CrawlHeight = 3.0f;
uniform float CrawlRate = 3.0f;

uniform float UseShadow = 0.0f;
uniform float ShadowBrightness = 1.0f;
uniform float ShadowPixelSizeX = 3.0f;
uniform float ShadowPixelSizeY = 3.0f;
uniform float ShadowU = 0.375f;
uniform float ShadowV = 0.375f;
uniform float ShadowWidth = 8.0f;
uniform float ShadowHeight = 8.0f;

float4 ps_main(PS_INPUT Input) : COLOR
{
	float2 Ratios = float2(WidthRatio, HeightRatio);

	// -- Screen Pincushion Calculation --
	float2 UnitCoord = Input.TexCoord * Ratios * 2.0f - 1.0f;

	float PincushionR2 = pow(length(UnitCoord),2.0f) / pow(length(Ratios), 2.0f);
	float2 PincushionCurve = UnitCoord * PincushionAmountX * PincushionR2;
	float2 BaseCoord = Input.TexCoord + PincushionCurve;

	// RGB Pincushion Calculation
	float3 PincushionCurveX = UnitCoord.x * PincushionAmountX * PincushionR2;
	float3 PincushionCurveY = UnitCoord.y * PincushionAmountX * PincushionR2;

	float4 BaseTexel = tex2D(DiffuseSampler, BaseCoord);

	// -- Alpha Clipping (1px border in drawd3d does not work for some reason) --
	clip((BaseCoord.x < 2.0f / RawWidth) ? -1 : 1);
	clip((BaseCoord.y < 1.0f / RawHeight) ? -1 : 1);
	clip((BaseCoord.x > (2.0f / WidthRatio - 2.0f / RawWidth)) ? -1 : 1);
	clip((BaseCoord.y > 1.0f / HeightRatio) ? -1 : 1);

	// -- RGB Deconvergence --
	float3 CoordX = Input.CoordX + PincushionCurveX;
	float3 CoordY = Input.CoordY + PincushionCurveY;
	float RedTexel = tex2D(DiffuseSampler, float2(CoordX.x, CoordY.x)).r;
	float GrnTexel = tex2D(DiffuseSampler, float2(CoordX.y, CoordY.y)).g;
	float BluTexel = tex2D(DiffuseSampler, float2(CoordX.z, CoordY.z)).b;

	float3 Texel = float3(RedTexel, GrnTexel, BluTexel);

	// -- RGB Tint & Shift --
	float ShiftedRed = dot(Texel, float3(RedFromRed, RedFromGrn, RedFromBlu));
	float ShiftedGrn = dot(Texel, float3(GrnFromRed, GrnFromGrn, GrnFromBlu));
	float ShiftedBlu = dot(Texel, float3(BluFromRed, BluFromGrn, BluFromBlu));
	
	// -- RGB Offset & Scale --
	float3 OutTexel = float3(ShiftedRed, ShiftedGrn, ShiftedBlu) * float3(RedScale, GrnScale, BluScale) + float3(RedOffset, GrnOffset, BluOffset);
	
	// -- Saturation --
	float OutLuma = dot(OutTexel, float3(0.3f, 0.59f, 0.11f));
	float3 OutChroma = OutTexel - float3(OutLuma, OutLuma, OutLuma);
	float3 Saturated = OutLuma + OutChroma * Saturation;
	
	float3 OutRGB = Saturated;

	float3 Power = float3(RedPower, GrnPower, BluPower);
	OutRGB = pow(OutRGB, Power);

	// -- Color Compression (increasing the floor of the signal without affecting the ceiling) --
	float3 Floor = float3(RedFloor, GrnFloor, BluFloor);
	OutRGB = Floor + (1.0f - Floor) * OutRGB;

	// -- Scanline Simulation --
	float3 ScanBrightness = lerp(1.0f, abs(sin(((CoordY * RawHeight * ScanlineScale) * PI + ScanlineOffset * RawHeight))) * ScanlineBrightScale + ScanlineBrightOffset, ScanlineAmount);
	float3 Scanned = OutRGB * ScanBrightness;

	float2 ShadowCoord = BaseCoord * float2(RawWidth, RawHeight);
	float ShadowCoordX = frac(ShadowCoord.x / ShadowPixelSizeX) * ShadowU + 2.0f / ShadowWidth;
	float ShadowCoordY = frac(ShadowCoord.y / ShadowPixelSizeY) * ShadowV + 2.0f / ShadowHeight;
	float3 ShadowTexel = lerp(1.0f, tex2D(ShadowSampler, float2(ShadowCoordX, ShadowCoordY)), UseShadow);
	
	// -- Final Pixel --
	float4 Output = lerp(Input.Color, float4(Scanned * lerp(1.0f, ShadowTexel * 1.0f, ShadowBrightness), BaseTexel.a) * Input.Color, Input.ExtraInfo.x);
	
	return Output;
}

//-----------------------------------------------------------------------------
// Post-Processing Effect
//-----------------------------------------------------------------------------

technique TestTechnique
{
	pass Pass0
	{
		Lighting = FALSE;

		//Sampler[0] = <DiffuseSampler>;

		VertexShader = compile vs_3_0 vs_main();
		PixelShader  = compile ps_3_0 ps_main();
	}
}


#69647 - 05/17/11 01:54 AM READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Mar 2001
Posts: 15,519
R. Belmont Offline
R. Belmont  Offline

Very Senior Member

Joined: Mar 2001
Posts: 15,519
USA
no text

#69650 - 05/17/11 01:21 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Aug 2004
Posts: 1,306
Robbbert Offline
Very Senior Member
Robbbert  Offline
Very Senior Member

Joined: Aug 2004
Posts: 1,306
The headers are one thing (your location is the same as mine), but the SDK is another, as you still need d3dx9_43.dll for it to actually run.

>mess <system> -verbose

and make sure there isn't any error messages.


Now, I normally run with all filters disabled. So, I tried this HLSL with the default settings (which I don't pretend to understand), and got a slight blurriness, and the speed was about the same (i used the Jaguar driver which gives about 42%). The only thing I noticed was when frameskip is set to Auto, HLSL will not skip any frames. Manually selecting a frameskip results in skipped frames (as expected), but there was no increase in overall speed. Perhaps it is working as designed, only JD could say.

Next, I purposely set the dx setting to 8, verbose said could not start d3d (as expected), but it appeared HLSL was still running?

It would be good if verbose said if HLSL was able to start successfully. Just a suggestion..

#69651 - 05/17/11 01:53 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Mar 2001
Posts: 15,519
R. Belmont Offline
R. Belmont  Offline

Very Senior Member

Joined: Mar 2001
Posts: 15,519
USA
You don't need the SDK to get the DLL. Just go to http://microsoft.com/directx, click "Latest directX downloads for gamers", and install "DirectX End User Runtime".

#69653 - 05/17/11 06:56 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Sep 2008
Posts: 64
John IV Offline
Member
John IV  Offline
Member

Joined: Sep 2008
Posts: 64
WA, USA
Out of curiosity, why is it necessary to install the DirectX 9 redist on a Win7 box w/ baked in DirectX11?

#69654 - 05/17/11 07:05 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: May 2004
Posts: 1,341
Haze Offline
Very Senior Member
Haze  Offline
Very Senior Member

Joined: May 2004
Posts: 1,341
I believe W7 only ships with the newer versions of DX, not the older ones. You have to do it even for some games.

DX10/11 are a new technology, not directly compatible.

#69658 - 05/17/11 08:56 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Mar 2001
Posts: 15,519
R. Belmont Offline
R. Belmont  Offline

Very Senior Member

Joined: Mar 2001
Posts: 15,519
USA
There were about 40 updates to DX9, each with a different d3d9x_*.dll. It's easier for MS to make that part of the DX redist than to bake it into Win7. (Incidentally, the redist will also update DX10/DX11 if/when updates of those things happen).

And yes, DX10/11 are not back compatible with DX9. The entire API model is quite different.

#69670 - 05/18/11 03:13 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Just Desserts]  
Joined: Feb 2005
Posts: 447
Curt Coder Offline
Senior Member
Curt Coder  Offline
Senior Member

Joined: Feb 2005
Posts: 447
Finland
Can we have a new preset with less moire?

Last edited by Curt Coder; 05/18/11 03:19 PM.
#69673 - 05/18/11 05:49 PM Re: READ THIS THREAD if you can't compile latest SVN [Re: Curt Coder]  
Joined: May 2009
Posts: 1,580
Just Desserts Offline
Very Senior Member
Just Desserts  Offline
Very Senior Member

Joined: May 2009
Posts: 1,580
Yes, the old presets are broken with latest SVN. Please hold.

Page 2 of 35 1 2 3 4 34 35

Who's Online Now
4 registered members (Praxis, Xenphor, rfka01, Dorando), 27 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Shout Box
Forum Statistics
Forums9
Topics8,308
Posts107,353
Members4,731
Most Online225
May 26th, 2014
Powered by UBB.threads™ PHP Forum Software 7.6.0
Page Time: 0.072s Queries: 14 (0.012s) Memory: 5.0405 MB (Peak: 5.2650 MB) Zlib enabled. Server Time: 2017-03-26 16:55:53 UTC