Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Mai 26, 2024 17:27

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Selection Operator ( ? : )
BeitragVerfasst: So Mär 03, 2013 20:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab grad ne seltsame Feststellung gemacht die ich mir nicht erklären kann.
Code:
  1.  
  2. //geht nich
  3.     gl_MaterialParameters mat = (s < 0) ? gl_BackMaterial : gl_FrontMaterial;
  4.  
  5. //geht
  6.     gl_MaterialParameters mat = gl_FrontMaterial;
  7.     if (s < 0){
  8.         mat = gl_BackMaterial;
  9.     }
  10.  

Der Shader wird ganz normal kompiliert und läuft auch ohne Fehler durch, doch beim zeichnen hab ich nur schwarze Objekte. Hat jmd ne Ahnung woran das liegt?

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection Operator ( ? : )
BeitragVerfasst: Mo Mär 04, 2013 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
mhhh ja ich meine mich daran zu erinnern das der schon oefters Probleme gemacht hat. Es haengt wohl mit dem Pseudo-Branching der GPU zusammen ....
Theoretisch sollte aber dein zweiter Code sowieso "besser" sein da hier 3 statt 4 Befehle gebraucht werden. :mrgreen:

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection Operator ( ? : )
BeitragVerfasst: Mo Mär 04, 2013 17:05 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
3 statt 4?! :shock: kannst du mir das mal vorzählen? ^^

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection Operator ( ? : )
BeitragVerfasst: Mo Mär 04, 2013 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ich hab hier beide Varianten mal durch AMDs GPUAnalyzer mit ner 6870 als Ziel laufen lassen und bekomme jeweils den gleichen Assemblycode raus, sprich am Ende spielts keine Rolle welchen Code du benutzt. Auf welcher GPU hast du denn probiert?

yunharla hat geschrieben:
mhhh ja ich meine mich daran zu erinnern das der schon oefters Probleme gemacht hat. Es haengt wohl mit dem Pseudo-Branching der GPU zusammen ....
Theoretisch sollte aber dein zweiter Code sowieso "besser" sein da hier 3 statt 4 Befehle gebraucht werden.


Kannst du das belegen? Zumal "Psuedobranching" doch lange Geschichte ist, das war mal auf ner Radeon 9700 so weil dies nicht anders konnte, moderne GPUs können das durchaus.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection Operator ( ? : )
BeitragVerfasst: Mo Mär 04, 2013 21:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab ne HD5970 hier. Treiber is v9.12.0.0.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Selection Operator ( ? : )
BeitragVerfasst: Di Mär 05, 2013 18:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Bergmann89 hat geschrieben:
3 statt 4?! :shock: kannst du mir das mal vorzählen? ^^


Nun ja ich mein natuerlich mit Pseudobranching sowas wie Conditional Move und co. Das ganze ist eigentlich nicht weiter dramatisch, du machst halt dein Vergleich und erhaelst dadurch entweder 1 oder 0 ist. Aus verschiedenen Gruenden ziehst nun davon 1 (also 0 oder -1 jetzt) ab und rufst dein Conditional Move (LessZero existiert immer! -> deswegen das -1).
Code:
  1.  
  2. init
  3. setcond
  4. sub
  5. movcond
  6.  


Im anderen Falle kannst du ja dein erstes Ergebniss schon beim Init uebergeben und musst daher nur einen Vergleich durchfuehren
Code:
  1.  
  2. init
  3. comp
  4. mov
  5.  

(deswegen auch setcond im ersten Fall da sonst 5 Befehle)

Das ist natuerlich nur die allgemeine Variante. Je nachdem was deine GPU bereitstellt und ob der Compiler nett ist wirds dir wie Sasha ergehen. Hier wuerde ich behaupten das der Compiler einfach erkennt das er in beiden Faellen
Code:
  1.  
  2. init
  3. movcond
  4.  

machen sollte.

Die dunkle Seite der Macht hatte ich mal auf meiner alten 7800 gs (man muss dazu wissen das es fuer jede Zeile des Vektors im einzelnen gilt):
Code:
  1.  
  2. init
  3. setcond
  4. sub
  5. movcond (a ??? b) ? truewert : -1
  6. movcond (vorher < 0) ? falswert : vorher
  7.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]