Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Urk

Frischling

  • »Urk« ist der Autor dieses Themas
  • Private Nachricht senden

11

29.06.2011, 02:20

Die Schleife als ganzes sieht im Moment so aus:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
kernelsizesquared=(float)kernelSize*(float)kernelSize;
float3 LuminanceConv = { 0.2125f, 0.7154f, 0.0721f };
...
float 4 PS_HDR
{
 //diverse variablendeklaration

 for (int j=-kernelSize; j<=kernelSize; ++j) 
 {
  samp.y = IN.texCoord.y + j * pixelToTexely;
  for (int i=-kernelSize; i<=kernelSize; ++i) 
  {
   d = 1/(3.1415926*kernelsizesquared) * exp ( -(i*i+j*j) / (kernelsizesquared) );

   samp.x = IN.texCoord.x + i * pixelToTexelx;

   lum1+= (dot (tex2D(inputh1, samp.xy),LuminanceConv))*d;
   lum2+= (dot (tex2D(inputh2, samp.xy),LuminanceConv))*d;
   lum3+= (dot (tex2D(inputh3, samp.xy),LuminanceConv))*d;
   lumd+=d;
  }
 }
 lum1/=lumd;
 lum2/=lumd;
 lum3/=lumd;
 ...

 return color;
}


Berechnet wird hier die Durchschnittsluminanz mit einem Gaußfilter der Größe kernelsize um den aktuellen Pixel herum.
Eine Manipulation der Schleifenzähler sehe ich nicht, möglicherweise sehe ich aber auch den Wald vor lauter Bäumen nicht mehr ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

29.06.2011, 02:22

Versuch mal die Schleifenbedingung umzuformulieren, vielleicht kommt der Compiler mit dieser konkreten Kombination (start bei negativem Wert, <=) irgendwie nicht zurecht!?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

13

29.06.2011, 02:27

Versuch vielleicht auch mal vor deine Schleifen ein [loop] Attribute zu setzen sodass der Compiler weiß dass er nicht versuchen soll zu unrollen:

HLSL-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 [loop]
 for (int j=-kernelSize; j<=kernelSize; ++j) 
 {
  samp.y = IN.texCoord.y + j * pixelToTexely;

  [loop]
  for (int i=-kernelSize; i<=kernelSize; ++i) 
  {
   d = 1/(3.1415926*kernelsizesquared) * exp ( -(i*i+j*j) / (kernelsizesquared) );

   samp.x = IN.texCoord.x + i * pixelToTexelx;

   lum1+= (dot (tex2D(inputh1, samp.xy),LuminanceConv))*d;
   lum2+= (dot (tex2D(inputh2, samp.xy),LuminanceConv))*d;
   lum3+= (dot (tex2D(inputh3, samp.xy),LuminanceConv))*d;
   lumd+=d;
  }
 }

Urk

Frischling

  • »Urk« ist der Autor dieses Themas
  • Private Nachricht senden

14

29.06.2011, 02:30

Das war eine gute Idee.

Ändert man die Schleifen auf

C-/C++-Quelltext

1
2
3
4
5
for (int j=0; j<kernelSize; ++j) 
{
  samp.y = IN.texCoord.y + j * pixelToTexely;
  for (int i=0; i<kernelSize; ++i) 
  {

kommt der damit klar und die Größe kann von außen übergeben werden.

Ergo: Schleifen dürfen offenbar nicht negativ starten und der <= Operator auf eine Variable scheint auch nicht erlaubt zu sein.

Wieder was gelernt :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

29.06.2011, 02:33

Theoretisch sollte das mit den negativen Werten und <= kein Problem sein. Das würde ich als Compilerbug einstufen. Rein aus Interesse: Versuchs vielleicht trotzdem auch noch mit dem [loop] Attribute. Ich könnte mir vorstellen dass es dann auch mit negativem Startwert und <= funktioniert da die problematische Heuristik im Compiler damit überbrückt werden sollte...

Urk

Frischling

  • »Urk« ist der Autor dieses Themas
  • Private Nachricht senden

16

29.06.2011, 02:36

Das werde ich mal ausprobieren, aber ich glaube vorher nehme ich mal eine Mütze voll Schlaf :)

Vielen Dank für deine Hilfe!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

29.06.2011, 02:38

Sag mir dann obs geklappt hat ;)

Urk

Frischling

  • »Urk« ist der Autor dieses Themas
  • Private Nachricht senden

18

29.06.2011, 02:40

Werde ich machen :)

Urk

Frischling

  • »Urk« ist der Autor dieses Themas
  • Private Nachricht senden

19

29.06.2011, 11:09

Update auf ein neueres SDK und einsetzen des [loop] commands, ergab folgenden Fehler:


(Link)


Funktioniert also scheinbar auch nicht mit einer Schleife von "-Variable" bis <= Variable

Noch ein Nebeneffekt, die Compilezeiten meiner .fx files sind nach dem Umstellen vom 2004SDK auf das 2009SDK von 9 Sekunden auf gewaltige 68 Sekunden angewachsen. Das ist echt gruselig :)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

29.06.2011, 11:17

Ok, das ist merkwürdig, aber naja. Der Anstieg der Compiletime wird wohl dadurch erklärbar sein dass der neue Compiler viel mehr kann und vermutlich besser optimiert ;)

Werbeanzeige