Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hallöchen,
Ich benutze die Grafikkarte, um meine FFT-Daten nachzubereiten. Das ist eine 1024-Pixel breite 1D-Textur mit GL_LUMINANCE32F als Datentyp. Ich bilde den Durchschnitt über 255 Datenpunkte, die um dem aktuellen Punkt herum liegen, das ganze für alle 1024 Punkte. Warum läuft das immer noch flüssig? Das sind immer hin 255 Texturlookups. Oder werden 1D-Lookups mit nur einer Komponente irgendwie optimiert? Oder sind das einfach zu wenig Daten um im Softwaremodus signifikant langsamer zu sein (kann ich herausfinden, ob der Shader in Hardware läuft? Der Shaderlog spuckt keine Nachrichten aus).
Hier der Shadercode:
Code:
uniformsampler1D fftData;
uniformfloat fftAvgStep;
varyingfloat texCoord0x;
constfloat fftdBLog =3.321928094887362;
constint halfCount =127;
constfloat halfCountf =float(halfCount);
constfloat totalCount =float(halfCount)*2.+1.;
constfloat avgDecay =sqrt(halfCountf /2.0);
float sqr(float value)
{
return value * value;
}
void main(void)
{
float p = texCoord0x;
float s = fftAvgStep;
float value =texture1D(fftData, p).r;
float sum = value, sqsum = sum * sum, weightSum =1.;
float tmp =texture1D(fftData, p + s *float(i)).r* weight;
sqsum += tmp * tmp;
sum += tmp;
weightSum += weight;
}
float rms =sqrt(sqsum / weightSum);
gl_FragColor=vec4(value, rms,0.,0.));
}
grüße
ps: Falls das wichtig sein sollte – geschrieben wird in ein FBO mit nur einem 1×1024 Pixel großen GL_RGBA16F Color Attachment (also kein Depth Attachment oder solche Späße) pps: Wer sich über nicht verwendete Variablen wundert – ich habe ein wenig Code entfernt.
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Jetzt überlege mal wie viele Texturlookups du machst wenn du bei einer Auflösung von 1280x720 ein Fullscreenquad renderst.Des weiteren kann die Grafikkarte in deinem Fall den Texturcache nutzen. Ein Texturlookup aus dem Cache ist etwa doppelt so schnell wie aus dem normalen Speicher. => Deine Grafikkarte langweilt sich
Zitat:
Oder werden 1D-Lookups mit nur einer Komponente irgendwie optimiert?
Nein, abgesehen von Caching-Effekten, weil die Texel nebeneinander liegen. (Bei einer 2D-Textur ist das ja nur entweder auf der X oder Y-Achse der Fall...aber nicht bei beiden)
Generell ist es aber bei Datentexturen sinnvoll (sofern es die Hardware erlaubt) ein TBO zu benutzen. Dann kannst du direkt mit Integer-Koordinaten auf die Textur zugreifen, du sparst dir die Float-Umwandlung und Interpolation zwischen den Texeln.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Coolcat hat geschrieben:
Generell ist es aber bei Datentexturen sinnvoll (sofern es die Hardware erlaubt) ein TBO zu benutzen. Dann kannst du direkt mit Integer-Koordinaten auf die Textur zugreifen, du sparst dir die Float-Umwandlung und Interpolation zwischen den Texeln.
Ja, würde ich gerne – aber ich bin auf eine GeForce 7600 beschränkt. Das Caching erklärt das. Ich hatte früher halt mal nen Blur gebaut und bin schon bei 81 Lookups am Ende gewesen. Ich dachte, es gäbe nen Hardwarelimit was die Anzahl der Lookups betrifft.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Nein, die Anzahl der Texturen ist begrenzt, nicht die der Lookups. Bei deinem Blur-Shader hast du sicher 81 Lookups PRO Pixel gemacht....selbst bei 1024x768 Auflösung sind das deutlich mehr als das was du jetzt machst.
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.