mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	add support for HLSL/FX
Add support for DirectX HLSL / FX files. The FX files are just HLSL files with some additional syntax to set render-states and define multiple shader stages in one file. Samples are either written by me, or taken from Chromium.
This commit is contained in:
		@@ -1323,6 +1323,16 @@ HCL:
 | 
				
			|||||||
  ace_mode: ruby
 | 
					  ace_mode: ruby
 | 
				
			||||||
  tm_scope: source.ruby
 | 
					  tm_scope: source.ruby
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HLSL:
 | 
				
			||||||
 | 
					  type: programming
 | 
				
			||||||
 | 
					  extensions:
 | 
				
			||||||
 | 
					    - .fx
 | 
				
			||||||
 | 
					    - .fxh
 | 
				
			||||||
 | 
					    - .hlsl
 | 
				
			||||||
 | 
					    - .hlsli
 | 
				
			||||||
 | 
					  ace_mode: text
 | 
				
			||||||
 | 
					  tm_scope: none
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HTML:
 | 
					HTML:
 | 
				
			||||||
  type: markup
 | 
					  type: markup
 | 
				
			||||||
  tm_scope: text.html.basic
 | 
					  tm_scope: text.html.basic
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								samples/HLSL/accelerated_surface_win.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								samples/HLSL/accelerated_surface_win.hlsl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					// Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
				
			||||||
 | 
					// Use of this source code is governed by a BSD-style license that can be
 | 
				
			||||||
 | 
					// found in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// To compile these two shaders:
 | 
				
			||||||
 | 
					// fxc /E pixelMain /T ps_2_0 accelerated_surface_win.hlsl
 | 
				
			||||||
 | 
					// fxc /E vertexMain /T vs_2_0 accelerated_surface_win.hlsl
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// fxc is in the DirectX SDK.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Vertex {
 | 
				
			||||||
 | 
					  float4 position : POSITION;
 | 
				
			||||||
 | 
					  float2 texCoord : TEXCOORD0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture t;
 | 
				
			||||||
 | 
					sampler s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Passes a position and texture coordinate to the pixel shader.
 | 
				
			||||||
 | 
					Vertex vertexMain(Vertex input) {
 | 
				
			||||||
 | 
					  return input;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Samples a texture at the given texture coordinate and returns the result.
 | 
				
			||||||
 | 
					float4 pixelMain(float2 texCoord : TEXCOORD0) : COLOR0 {
 | 
				
			||||||
 | 
					  return tex2D(s, texCoord);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										105
									
								
								samples/HLSL/corridor.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								samples/HLSL/corridor.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					float4x4 matWorldView : WORLDVIEW;
 | 
				
			||||||
 | 
					float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct VS_INPUT {
 | 
				
			||||||
 | 
						float4 Position : POSITION0;
 | 
				
			||||||
 | 
						float3 Normal : NORMAL;
 | 
				
			||||||
 | 
						float3 Tangent : TANGENT;
 | 
				
			||||||
 | 
						float3 Binormal : BINORMAL;
 | 
				
			||||||
 | 
						float2 TexCoord0 : TEXCOORD0;
 | 
				
			||||||
 | 
						float2 TexCoord1 : TEXCOORD1;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct VS_OUTPUT {
 | 
				
			||||||
 | 
						float4 Position : POSITION0;
 | 
				
			||||||
 | 
						float2 TexCoord0 : TEXCOORD0;
 | 
				
			||||||
 | 
						float2 TexCoord1 : TEXCOORD1;
 | 
				
			||||||
 | 
						float3x3 TangentToView : TEXCOORD2;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VS_OUTPUT vs_main(VS_INPUT input)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VS_OUTPUT output;
 | 
				
			||||||
 | 
						output.Position = mul(input.Position, matWorldViewProjection);
 | 
				
			||||||
 | 
						output.TexCoord0 = input.TexCoord0 * 5;
 | 
				
			||||||
 | 
						output.TexCoord1 = input.TexCoord1;
 | 
				
			||||||
 | 
						output.TangentToView[0] = mul(float4(input.Tangent, 0), matWorldView).xyz;
 | 
				
			||||||
 | 
						output.TangentToView[1] = mul(float4(input.Binormal, 0), matWorldView).xyz;
 | 
				
			||||||
 | 
						output.TangentToView[2] = mul(float4(input.Normal, 0), matWorldView).xyz;
 | 
				
			||||||
 | 
						return output;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct PS_OUTPUT {
 | 
				
			||||||
 | 
						float4 gbuffer0 : COLOR0;
 | 
				
			||||||
 | 
						float4 gbuffer1 : COLOR1;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture albedo_tex;
 | 
				
			||||||
 | 
					sampler albedo_samp = sampler_state {
 | 
				
			||||||
 | 
						Texture = (albedo_tex);
 | 
				
			||||||
 | 
						MipFilter = Linear;
 | 
				
			||||||
 | 
						MinFilter = Linear;
 | 
				
			||||||
 | 
						MagFilter = Linear;
 | 
				
			||||||
 | 
						AddressU = Wrap;
 | 
				
			||||||
 | 
						AddressV = Wrap;
 | 
				
			||||||
 | 
						sRGBTexture = True;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture normal_tex;
 | 
				
			||||||
 | 
					sampler normal_samp = sampler_state {
 | 
				
			||||||
 | 
						Texture = (normal_tex);
 | 
				
			||||||
 | 
						MipFilter = Linear;
 | 
				
			||||||
 | 
						MinFilter = Linear;
 | 
				
			||||||
 | 
						MagFilter = Linear;
 | 
				
			||||||
 | 
						AddressU = Wrap;
 | 
				
			||||||
 | 
						AddressV = Wrap;
 | 
				
			||||||
 | 
						sRGBTexture = False;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture specular_tex;
 | 
				
			||||||
 | 
					sampler specular_samp = sampler_state {
 | 
				
			||||||
 | 
						Texture = (specular_tex);
 | 
				
			||||||
 | 
						MipFilter = Linear;
 | 
				
			||||||
 | 
						MinFilter = Linear;
 | 
				
			||||||
 | 
						MagFilter = Linear;
 | 
				
			||||||
 | 
						AddressU = Wrap;
 | 
				
			||||||
 | 
						AddressV = Wrap;
 | 
				
			||||||
 | 
						sRGBTexture = True;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture ao_tex;
 | 
				
			||||||
 | 
					sampler ao_samp = sampler_state {
 | 
				
			||||||
 | 
						Texture = (ao_tex);
 | 
				
			||||||
 | 
						MipFilter = Linear;
 | 
				
			||||||
 | 
						MinFilter = Linear;
 | 
				
			||||||
 | 
						MagFilter = Linear;
 | 
				
			||||||
 | 
						AddressU = Wrap;
 | 
				
			||||||
 | 
						AddressV = Wrap;
 | 
				
			||||||
 | 
						sRGBTexture = True;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PS_OUTPUT ps_main(VS_OUTPUT Input)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						PS_OUTPUT o;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float3 tangentNormal = normalize(tex2D(normal_samp, Input.TexCoord0).xyz * 2 - 1);
 | 
				
			||||||
 | 
						float3 eyeNormal = normalize(mul(tangentNormal, Input.TangentToView));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float3 albedo = tex2D(albedo_samp, Input.TexCoord0).rgb;
 | 
				
			||||||
 | 
						float ao = tex2D(ao_samp, Input.TexCoord1).r * 0.75;
 | 
				
			||||||
 | 
						float spec = tex2D(specular_samp, Input.TexCoord0).r;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						o.gbuffer0 = float4(eyeNormal, spec * ao);
 | 
				
			||||||
 | 
						o.gbuffer1 = float4(albedo, 1 - ao);
 | 
				
			||||||
 | 
						return o;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					technique mesh {
 | 
				
			||||||
 | 
						pass Geometry {
 | 
				
			||||||
 | 
							VertexShader = compile vs_3_0 vs_main();
 | 
				
			||||||
 | 
							PixelShader  = compile ps_3_0 ps_main();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							AlphaBlendEnable = False;
 | 
				
			||||||
 | 
							ZWriteEnable = True;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										119
									
								
								samples/HLSL/jellyfish.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								samples/HLSL/jellyfish.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
 | 
				
			||||||
 | 
					float4x4 matWorldView : WORLDVIEW;
 | 
				
			||||||
 | 
					float4x4 matWorld : WORLD;
 | 
				
			||||||
 | 
					float4x4 matView : VIEW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform float4 vViewPosition;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct VS_INPUT 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						float3 Pos:      POSITION;
 | 
				
			||||||
 | 
						float3 Normal:   NORMAL;
 | 
				
			||||||
 | 
						float3 Tangent:  TANGENT;
 | 
				
			||||||
 | 
						float3 Binormal: BINORMAL;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct VS_OUTPUT 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						float4 Pos        : POSITION;
 | 
				
			||||||
 | 
						float3 reflection : TEXCOORD1; 
 | 
				
			||||||
 | 
						float3 refraction : TEXCOORD2; 
 | 
				
			||||||
 | 
						float  fresnel    : TEXCOORD3;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					uniform float3 amt;
 | 
				
			||||||
 | 
					uniform float3 scale;
 | 
				
			||||||
 | 
					uniform float3 phase;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float3 deform(float3 p)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						float s = 3;
 | 
				
			||||||
 | 
						float3 p2 = p * scale + phase;
 | 
				
			||||||
 | 
						s += sin(p2.x) * amt.x;
 | 
				
			||||||
 | 
						s += sin(p2.y) * amt.y;
 | 
				
			||||||
 | 
						s += sin(p2.z) * amt.z;
 | 
				
			||||||
 | 
						return p * s / 3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VS_OUTPUT vs_main( VS_INPUT In )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VS_OUTPUT Out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float3 pos = In.Pos;
 | 
				
			||||||
 | 
						float3 norm = In.Normal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float3 p1 = pos + In.Tangent * 0.05;
 | 
				
			||||||
 | 
						float3 p2 = pos + In.Binormal * 0.05;
 | 
				
			||||||
 | 
						pos = deform(pos);
 | 
				
			||||||
 | 
						p1  = deform(p1);
 | 
				
			||||||
 | 
						p2  = deform(p2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						p1 -= pos;
 | 
				
			||||||
 | 
						p2 -= pos;
 | 
				
			||||||
 | 
						norm = normalize(cross(p1, p2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						float3 view = normalize(pos - vViewPosition.xyz);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						Out.Pos           = mul(float4(pos,  1.0), matWorldViewProjection);
 | 
				
			||||||
 | 
						Out.reflection    = reflect(view, norm);
 | 
				
			||||||
 | 
						Out.refraction    = reflect(view, norm * 0.4f); /* fake, but who cares? */
 | 
				
			||||||
 | 
						Out.fresnel       = dot(view, norm);
 | 
				
			||||||
 | 
						norm = mul(float4(norm, 0.0), matWorldViewProjection);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return Out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define PS_INPUT VS_OUTPUT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
 | 
					textureCUBE reflectionMap;
 | 
				
			||||||
 | 
					samplerCUBE reflectionMapSampler = sampler_state
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Texture = (reflectionMap);
 | 
				
			||||||
 | 
						MipFilter = LINEAR;
 | 
				
			||||||
 | 
						MinFilter = LINEAR;
 | 
				
			||||||
 | 
						MagFilter = LINEAR;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					// textures
 | 
				
			||||||
 | 
					texture reflectionMap 
 | 
				
			||||||
 | 
					< 
 | 
				
			||||||
 | 
					    string type = "CUBE";
 | 
				
			||||||
 | 
					    string name = "test_cube.dds";
 | 
				
			||||||
 | 
					>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					samplerCUBE reflectionMapSampler = sampler_state
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Texture = (reflectionMap);
 | 
				
			||||||
 | 
						MipFilter = LINEAR;
 | 
				
			||||||
 | 
						MinFilter = LINEAR;
 | 
				
			||||||
 | 
						MagFilter = LINEAR;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct PS_OUTPUT 
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					   float4 color    : COLOR0;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PS_OUTPUT ps_main( PS_INPUT In )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						PS_OUTPUT Out;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						float4 reflection = texCUBE(reflectionMapSampler, normalize(In.reflection)) * 1.5;
 | 
				
			||||||
 | 
						float4 refraction = texCUBE(reflectionMapSampler, normalize(In.refraction));
 | 
				
			||||||
 | 
						float fresnel = In.fresnel;
 | 
				
			||||||
 | 
					//	float fresnel = abs(normalize(In.normal).z);
 | 
				
			||||||
 | 
						Out.color = lerp(reflection, refraction, fresnel) *  pow(1.0 - fresnel * 0.75, 1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return Out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					technique blur_ps_vs_2_0
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						pass P0
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							VertexShader = compile vs_2_0 vs_main();
 | 
				
			||||||
 | 
							PixelShader  = compile ps_2_0 ps_main();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										41
									
								
								samples/HLSL/noise.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								samples/HLSL/noise.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					float alpha = 1.f;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					texture tex;
 | 
				
			||||||
 | 
					sampler tex_sampler = sampler_state
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Texture = (tex);
 | 
				
			||||||
 | 
						MipFilter = LINEAR;
 | 
				
			||||||
 | 
						MinFilter = LINEAR;
 | 
				
			||||||
 | 
						MagFilter = LINEAR;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						AddressU = WRAP;
 | 
				
			||||||
 | 
						AddressV = WRAP;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct VS_OUTPUT
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						float4 pos  : POSITION;
 | 
				
			||||||
 | 
						float2 tex  : TEXCOORD1;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VS_OUTPUT vertex(float4 ipos : POSITION, float2 tex  : TEXCOORD0)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VS_OUTPUT Out;
 | 
				
			||||||
 | 
						Out.pos = ipos;
 | 
				
			||||||
 | 
						Out.tex = tex * 2;
 | 
				
			||||||
 | 
						return Out;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					float4 pixel(VS_OUTPUT In) : COLOR
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return tex2D(tex_sampler, In.tex) * alpha;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					technique blur_ps_vs_2_0
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						pass P0
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							VertexShader = compile vs_2_0 vertex();
 | 
				
			||||||
 | 
							PixelShader  = compile ps_2_0 pixel();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user