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

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

1

08.10.2006, 10:58

Loop in HLSL führt zu <Error>X3511

Ich habe einen loop:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    for(cursample = 0; cursample < sample_count; cursample++)
    {
        relief_height = tex2D(reliefmap_sampler, IN.texcoord + offset).a;
        if(relief_height > height)
        {
            cursample = sample_count + 1;
        }
        else
        {
            offset += view_dir_ts_aligned;
            height -= view_dir_ts_aligned.z;
        }
    }

sample_count wird wie folgt berechnet:

C-/C++-Quelltext

1
2
    int sample_count = (int)lerp(max_samples, min_samples, 
        dot(normal_ts, view_dir_ts));

mit min_samples = 10, max_smaples = 20

Dieser Loop erzeugt mir immer folgenden Fehler:
backup.fx : (107): error X3511: loop does not appear to terminate in a timely manner (1024 iterations)
backup.fx : (133): ID3DXEffectCompiler::CompileEffect: There was an error compiling expression
backup.fx : ID3DXEffectCompiler: Compilation failed

Das ganze wird in FXComposer auf PS_3_0 kompiliert.

Warum bekomme ich diesen Fehler?
Was muss ich ändern?

mfg Philipp

Beiträge: 774

Beruf: Student

  • Private Nachricht senden

2

08.10.2006, 12:02

Ich glaub dem gefällt nicht, das du die Anzahl der Schleifendruchführung im Shader berechnest.

Phil_GDM

Alter Hase

  • »Phil_GDM« ist der Autor dieses Themas

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

3

11.10.2006, 11:44

Sollte eigentlich nix machen sofern man PS_3_0 verwendet.
Geht in http://www.gamedev.net/columns/hardcore/pom/page2.asp
auch.

mfg Philipp

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

11.10.2006, 17:08

Für solche Fragen gibt es eine Shader-Newsgroup von Microsoft.
Da kannst du direkt mit den Leuten sprechen, die den HLSL-Compiler implementiert haben.

In dem Link von dir sehe ich übrigens keine for-Schleife, sondern eine while-Schleife. Probier's doch mal damit. Es wird schon seinen Grund haben, warum es so gemacht ist.

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

11.10.2006, 17:43

Normalerweise sind For und while Schleifen identisch.. Kenn mich zwar nicht mit Shadern aus, aber ich würds da auch anzweifeln dass es Unterschiede gibt:

C-/C++-Quelltext

1
2
for (Start(); End(); Update())
    DoSomething();

=

C-/C++-Quelltext

1
2
3
4
5
6
Start(); 
while (!End())
{
    DoSomething();
    Update();
}

End() ist natürlich vom Typ bool.

Werbeanzeige