PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shader debuggen


PatkIllA
2007-11-01, 14:56:13
Ich möchte gerne einige Shaderprogramme von mir debuggen.
Direkt in Visual Studio scheint das nur mit der 2003 Version zu gehen. Stimmt das? Ich habe allerdings schon einige .NET 2 spezifische Dinge in meinem Projekt.
Also habe ich mir das PIX Programm aus dem SDK angesehen und ein Experiment erstellt, einen Single Frame Capure erstellt und wollte mir dann die Shader anschauen. Aber da kriege ich (auch bei Beispielen aus dem SDK) sobald ich einen DrawCall auswähle und den Mesh anschaue einen Absturz.
Debug View sagt mir [2976] Direct3D9: (ERROR) :Invalid constant data pointer. GetPixelShaderConstantB failed. .
Vorher steht da noch [2976] D3D9 Helper: Enhanced D3DDebugging disabled; Application was not compiled with D3D_DEBUG_INFO liegt es daran? Wenn ja, wie aktiviere ich das denn in einem c# Projekt.

transstilben
2007-11-01, 19:18:38
Hm, sehe ich das richtig, daß im C++-Fall ein simples "#define D3D_DEBUG_INFO" das
Problem löst ? Wenn dem so ist, würde ich mich fragen, ob es einen Präprozessor für C# gibt bzw. was der entsprechende Ersatz dafür ist ...
Hm, die Lösung des Problems würde mich jetzt auch mal interessieren :)

PatkIllA
2007-11-02, 14:39:11
Es scheint definitv auch ohne das Flag zu gehen, denn hier auf dem Laptop läuft es jetzt. Kann es an der Grafkkarte liegen? Zu Hause habe ich eine ATI und im Laptop steckt eine NVidia-Karte.
Der Debugger verhält sich allerdings merkwürdig. Einige Komponenten von Vektoren werden nur als _ dargestellt und manche Variablen tauchen gar nicht auf. Debug und SkipOptimizationsflag vom Shadercompiler sind gesetzt.

PatkIllA
2007-11-14, 11:29:17
Mittlerweile stürzt PIX auch regelmäßig beim Pixelshader debuggen auf der NVIDIA Karte ab.
Kann man das auch in NVIDIAs FX Composer machen?

whtjimbo
2007-11-15, 20:57:08
vielleicht hilft da der ShaderAnalyzer vion ATI, das gibt Dir evtl. aus ob der Code in HW oder SW ausgeführt wird, hilft mir etwas bei GLSL, unterstützt auch HLSL
sonst gibt es noch von 3DLabs einen Checker für Shadervalidierung (GLSLValidate) und den ShaderGen zum Ausprobieren (ohne Uniforms/Attributes), beides nur für GLSL, aber bei ATI gibts ja noch den HLSL -> GLSL Konverter