@Slin und Hummel: Danke euch beiden für eure Antworten.
Hier ein paar Kommentare dazu:
Originally Posted By: Slin
Eigentlich brauchst du nämlich auch einen Vertexshader
Sorry, mein Fehler. War etwas verwirrend formuliert. Natürlich verwende ich auch einen Vertexshader. Ich hatte nur einen kleinen Ausschnitt aus dem Shader (die technique fallback) gepostet - die erst gestern zum Testen eingebaut wurde.
Der komplette Shader sieht so aus:
Code:
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewPos;
float4 vecTime;
float4 vecSkill41;

float4 ps_red() : COLOR { return float4(1, 0, 0, 1); }

bool PASS_SOLID;

texture entSkin1;
texture entSkin2;
texture bmp_spiegelung_bmap;

sampler2D smpTextur = sampler_state
{
	Texture = <entSkin1>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Wrap;
	AddressV		= Wrap;
};

sampler2D smpBump = sampler_state
{
	Texture = <entSkin2>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Wrap;
	AddressV		= Wrap;
};

sampler2D smpSpiegelung = sampler_state
{
	Texture = <bmp_spiegelung_bmap>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Mirror;
	AddressV		= Mirror;
};

struct VS_OUT
{
	float4 Pos : POSITION;
	float2 Tex : TEXCOORD0;
	float3 ProjTex : TEXCOORD1;
};

VS_OUT Shader_VS(float4 inPos : POSITION, float2 inTex : TEXCOORD0)
{
	VS_OUT Out = (VS_OUT)0;
	
	Out.Pos = mul(inPos, matWorldViewProj);
	Out.Tex = inTex;
	Out.ProjTex = Out.Pos.xyw;
	
	return Out;
}

float4 Shader_PS(float2 inTex : TEXCOORD0, float3 ProjTex : TEXCOORD1) : COLOR
{
	ProjTex.xy =ProjTex.xy/ProjTex.z; 
	ProjTex.xy = ProjTex.xy*0.5+0.5;
	
	float4 Textur = tex2D(smpTextur, inTex);
 	float4 Bump = tex2D(smpBump, float2(inTex.y,inTex.x))*2.0-1.0;
	float4 Spiegelung = tex2D(smpSpiegelung, ProjTex.xy+vecSkill41.x*0.01*Bump);
	
	float Intensitaet = Spiegelung.rgb;
	
	Intensitaet *= Intensitaet;
	Intensitaet += -0.1+vecSkill41.z;
	
	Textur.a = 1;
	
	float4 Ergebnis = (1-vecSkill41.y)*Textur+vecSkill41.y*Spiegelung*float4(Intensitaet,Intensitaet,Intensitaet,1.0);
	
	Ergebnis = float4(Ergebnis.xyz,1.0)+vecSkill41.y*0.15*float4(Bump.r,Bump.r,Bump.r,0);
	
	return Ergebnis;
}

technique tech_00
{
	pass pass_00
	{
		VertexShader = compile vs_2_0 Shader_VS();
    	PixelShader = compile ps_2_0 Shader_PS();
	}
}


// fallback if nothing works (change color to red for testing)
technique fallback 
{
	 pass one 
	 {
	 	 PixelShader = compile ps_1_0 ps_red(); 
	 } 
}


Der Shader funktioniert auf meiner NVIDIA-Grafikkarte perfekt.
Nur auf der "ATI Mobility Radeon HD 5470" von meinem Laptop wird immer nur die reine Textur, ohne diesem Spiegel-/Verzerrungs-Shader, gerendert. Mein Laptop ist auch noch nicht soooo alt (immerhin war Windows 7 vorinstalliert).

Ich habe vorhin nach dieser Grafikkarte gegoogelt. Interessanterweise soll sie laut Internet das Shader Model 5.0 unterstützen. Aber sie will einfach nicht.

Kann es sein, dass eine Grafikkarte, die Shader Model 5.0 unterstützt, Probleme mit Shader Model 1.0 oder 2.0 hat?
Und hat jemand eine Idee, wie ich im Programmcode erkennen könnte, dass mein Shader nicht unterstützt wird? Damit ich dem Spieler beim Starten des Spieles eine Warnung ausgeben kann, oder im laufenden Spiel andere Models laden kann, die auch ohne Shader gut aussehen.