[D3D10] HLSL PCF compiler Fehler?

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

[D3D10] HLSL PCF compiler Fehler?

Beitrag von witziok »

Hallo,
habe compiler fehler was ich nicht verstehe.

Code: Alles auswählen

float2 projectTexCoord;
float depthValue;



//PCF sampling for shadow map
		float sum = 0;
		float x, y;
		float2 smTex;

		//perform PCF filtering on a 4 x 4 texel
		for (y = -1.5; y <= 1.5; y += 1.0)
		{
			  for (x = -1.5; x <= 1.5; x += 1.0)
			  {
			 	    smTex = projectTexCoord.xy + texOffset(x,y);
				    sum += shaderShadowMapTexture.Sample( SMSampleType, smTex).r;
			  }
		}

		float sunFactor = sum / 16.0f;
		depthValue += sunFactor; // so geht nicht?? fehler! obwohl beides float ist
sobald die Variable sum irgendwo im spiel ist kommt compiler Fehler wenn ich z.b. addieren will: depthValue += sunFactor;
depthValue ist auch float



wenn ich so mache geht alles:

Code: Alles auswählen

float sunFactor = 0.01f / 16.0f;
depthValue += sunFactor;

und so kommt compiler Fehler?!:

Code: Alles auswählen

float sunFactor = sum / 16.0f;
depthValue += sunFactor;

wenn ich das hier auskommentiere: depthValue += sunFactor; geht wieder alles??

Code: Alles auswählen

float sunFactor = sum / 16.0f;
//depthValue += sunFactor;
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von RazorX »

Naja wenn du willst, dass dir einer hilft, solltest vlt auch mal den konkreten Compiler-Fehler posten. Nur an Hand des Codes hab ich jetzt keine Lust irgendeinen Fehler zu finden.

Edit: Würde aber einfach mal drauf tippen, dass depthValue nicht initialisiert ist.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von witziok »

RazorX hat geschrieben:Naja wenn du willst, dass dir einer hilft, solltest vlt auch mal den konkreten Compiler-Fehler posten. Nur an Hand des Codes hab ich jetzt keine Lust irgendeinen Fehler zu finden.

Edit: Würde aber einfach mal drauf tippen, dass depthValue nicht initialisiert ist.

es ist alles da..

Code: Alles auswählen

float depthValue;
depthValue wird vor diese Aktion wo fehler macht bereits gesetzt.

es ist alles im Bereich wo normal funktionieren sollte
wenn du genau meine Beispiele anschaust, siehst du was ich meine.
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von eXile »

Zu geringe Shader-Target-Version?

Wenn du sum auskommentierst, dann wird die gesamte innere Schleife wegoptimiert, und damit sinkt die Anzahl Operationen dramatisch.
witziok hat geschrieben:es ist alles da..
Nein, ich kann nicht erkennen, wo du hier die Fehlermeldung des Compilers gepostet hättest. ;)
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von RazorX »

witziok hat geschrieben:
RazorX hat geschrieben:Naja wenn du willst, dass dir einer hilft, solltest vlt auch mal den konkreten Compiler-Fehler posten. Nur an Hand des Codes hab ich jetzt keine Lust irgendeinen Fehler zu finden.

Edit: Würde aber einfach mal drauf tippen, dass depthValue nicht initialisiert ist.

es ist alles da..

Code: Alles auswählen

float depthValue;
depthValue wird vor diese Aktion wo fehler macht bereits gesetzt.

es ist alles im Bereich wo normal funktionieren sollte
wenn du genau meine Beispiele anschaust, siehst du was ich meine.
Nein es ist nicht alles da! Du schreibst von einem Compiler-Fehler, warum ist es denn zu schwer die Ausgabe des Compilers zu posten? Wie gesagt wird hier niemand gern sich irgendwelche Fehler in deinen geschriebenen Quellcode reininterpretieren wollen. Bezüglich des depthValue: Was du gepostet hast ist eine Deklaration und keine Initialisierung (ich hoffe der Unterschied ist klar).
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von witziok »

ok hier die Fehler von Compiler

error X4014: cannot have gradient operations inside loops with divergent flow control

aber warum geht es im Beispiel code? seltsam
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von RazorX »

Füge mal ein "[unroll]" vor beiden for-Schleifen hinzu.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von witziok »

vielen Dank.. fehler ist weg... :)

shadow ist aber immer noch net weich :(
da muss ich noch bisle rumbasteln :)
Benutzeravatar
eXile
Establishment
Beiträge: 1136
Registriert: 28.02.2009, 13:27

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von eXile »

witziok hat geschrieben:error X4014: cannot have gradient operations inside loops with divergent flow control
Das liegt am Sample. Sample benutzt die partiellen Ableitungen in \($x \text{/} y$\)-Bildschirmrichtung im lokalen \($2 \times 2$\)-Quad um das Mip-Map-Level zu bestimmen. Dies ist jedoch bei unterschiedlichen Ausführungsverläufen bei benachbarten Pixeln logischerweise nicht möglich; daher kommt der Compilerfehler.

Genauer wird das Basis-Mip-Map-Level (ohne Bias oder Clamping) berechnet als:\($$\lambda_{\text{base}}(x,y)=\log_{2} \! \big(\varrho(x,y)\big)$$\)wobei \($\varrho(x,y)$\) die maximale Ausdehnung des Parallelepipeds der partiellen Ableitungen der Texturkoordinaten bzgl. der beiden Bildschirmrichtungen bei \($(x,y)$\) ist:\($$\varrho = \max \left( \! \sqrt{ \bigg( \!\! \frac{\partial u}{\partial x} \!\! \bigg)^{\!\!2} + \bigg( \!\! \frac{\partial v}{\partial x} \!\! \bigg)^{\!\!2}}, \quad \sqrt{\bigg( \!\! \frac{\partial u}{\partial y} \!\! \bigg)^{\!\!2} + \bigg( \!\! \frac{\partial v}{\partial y} \!\! \bigg)^{\!\!2}} \right)$$\)Du kann man diesen Fehler umgehen, indem du das Mip-Map-Level explizit angibst (beispielsweise via Load, SampleLevel, SampleCmpLevelZero oder auch Gather). So wie ich das sehe, sollte hier auch ein einfacher Load ausreichend sein, weil du keine Mip-Map-Level berücksichtigen willst, und auch nur an ganzen Texelpositionen die Texturdaten laden willst.

Oder eben via Loop-Unrolling. ;)
Zuletzt geändert von eXile am 16.02.2013, 14:41, insgesamt 6-mal geändert.
RazorX
Establishment
Beiträge: 156
Registriert: 23.12.2010, 14:13
Kontaktdaten:

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von RazorX »

witziok hat geschrieben:shadow ist aber immer noch net weich :(
da muss ich noch bisle rumbasteln :)
Naja wenn man sich deine Schleifen oben anschaut ist das nicht weiter verwunderlich. Du möchtest über einen 4x4 Kernel den Schatten annähern, soweit so gut. Dabei muss man sich jedoch vor Augen halten, dass die Texturkoordinaten im Bereich [0,1] x [0,1] liegen, du hingegen einen Offset von [-1.5,1.5] x [-1.5,1.5] addierst. Was du eigentlich möchtest: Den Offset im Texturraum abbilden, das bedeutet, dass der Offset durch die Dimension der Textur geteilt werden muss (beispielsweise bei einer 512x512 Shadow-Map eben den Offset durch float2(512, 512) dividieren).

Edit: Wobei ich gerade sehe, dass du wohl eine Funktion "texOffset" benutzt, hab das gerade übersehen.
witziok
Beiträge: 38
Registriert: 06.02.2013, 09:42
Alter Benutzername: witziok
Echter Name: Sebastian W.

Re: [D3D10] HLSL PCF compiler Fehler?

Beitrag von witziok »

ok danke euch :)

werde mal heut/morgen testen
Antworten