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

Aktuelle Zeit: Sa Jun 08, 2024 08:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: GLSL und Bit Operatoren
BeitragVerfasst: Mi Aug 08, 2012 20:17 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Wie ist denn das in GLSL und if´s mit Bit-Operatoren, bricht sowas arg die Performance vom Shader oder wird das gut vom Compiler optimiert?

int materialValue = int(texture2D(positionTex, texcoord).w);
if ((materialValue & MATERIALFLAG_NOLIGHT) == MATERIALFLAG_NOLIGHT) {
... mach was ohne licht
} else {
... mach was mit licht
}


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Do Aug 09, 2012 09:38 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
meines wissens ist das schlimmste was passieren kann, dass der Shader komplett auf SM 2 Karten durchgerechnet wird. Da wird dann sowohl der if, als auch der else-Zweig komplett durchgerechnet, was natürlich, abhängig von den Rechen-Operationen, bei solchen Karten auf die Performanz schlägt.

Bit-Dinger sollten eigentlich kein Problem sein, kann mich aber auch irren :?

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Do Aug 09, 2012 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
Benchmarked es doch einmal auf unterschiedlichen Karten, danach sind wir alle schlauer.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Do Aug 09, 2012 16:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn der Shader schon Bit-Ops kann sollte das von der Performance kein Problem sein. Eingeführt wurden die mit GLSL 1.3, alte Grafikhardware sollte dir den Shader um die Ohren hauen und einfach nicht kompilieren.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Sa Aug 11, 2012 13:44 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Hmm, genau das ist mir gerade passiert, bzw. habe ich Hardware die OpenGL 4.2 kann, aber die Integrierte GPU kann nur 3.0, welches ja eigentlich auch gehen sollte... aber...

Habe nun eine umständiche Situation. Ich habe das ganze mal unter Ubuntu 12.04 gebaut (Eclipse/GCC).
Funktioniert und lässt sich starten, aber ich sehe nichts... bzw. seh in meinem Log das hier beim Kompilieren von Shadern die Bit-Operationen nutzen:

(Intel HD 3000, integrierte GPU)
Code:
  1.  
  2. OpenGL Renderer: Mesa DRI Intel(R) Sandybridge Mobile
  3. OpenGL Vendor: Tungsten Graphics, Inc
  4. OpenGL Version: 3.0 Mesa 8.0.2
  5. OpenGL Shading Language Version: 1.30
  6.  
  7. error: bit operations require GLSL 1.30
  8.  


Lass ich das ganze über Bumblebee (optirun) laufen, das Linux die Dedizierte GPU (NVIDIA GTX 580M) verwendet, dann bleibt das Bild ebenfalls schwarz, aber es gibt keinen direkten Fehler vom GLSL Compiler oder Linker.

Code:
  1.  
  2. OpenGL Renderer: GeForce GTX 580M/PCIe/SSE2
  3. OpenGL Vendor: NVIDIA Corporation
  4. OpenGL Version: 4.2.0 NVIDIA 302.17
  5. OpenGL Shading Language Version: 4.20 NVIDIA via Cg compiler
  6.  


Das einzige was mir aufgefallen hier, was ebenfalls bei der Sandybridge GPU macht, das er keine Uniform Locations anlegt (Habe mir einen kleinen Uniform Parser gebaut, der anspringt wenn Vertex und Fragment Shader Kompiliert wurden).

Ich vermute stark das unter Linux die NVIDIA Treiber nicht so ignorant wie Windows sind, denn unter Windows läuft der gleiche Code mit der NVIDIA Karte problemlos.

Eigentich muss ja #version 130 ganz oben in die shader rein. Was bedeutet, umstellung auf vertex attribs und gl_fragdata locations im code definieren und in und out verwenden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: So Aug 12, 2012 11:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Eigentich muss ja #version 130 ganz oben in die shader rein. Was bedeutet, umstellung auf vertex attribs und gl_fragdata locations im code definieren und in und out verwenden.

Richtig, das brauchst du....sonst kann er nicht GLSL 1.3 benutzen ;)

Du kannst aber auch die Shader 4.0-Extension benutzen:
Zitat:
#extension GL_EXT_gpu_shader4 : enable


Dann solltest du die Bit-Ops auch mit altem GLSL benutzen können, sofern die Hardware die Extension kann versteht sich. Aber die Performance wird natürlich besser sein je höher deine GLSL-Version ist weil der Shader-Compiler besser optimieren kann.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Mo Aug 13, 2012 14:19 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
ich denke es gibt aber keine Grafikkarte die nicht GLSL 1.3 hat, aber die GPU_Shader_4 Extension. :wink:

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: GLSL und Bit Operatoren
BeitragVerfasst: Mo Aug 13, 2012 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@end: Ich zitiere mal Finalspace:
Zitat:
umstellung auf vertex attribs und gl_fragdata locations im code definieren und in und out verwenden.

Das kannst du mit der Extension vermeiden, weil du damit eben die Bit-Ops auch in älteren GLSL-Versionen erlaubst.

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 21 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.033s | 15 Queries | GZIP : On ]