2012-06-21 22 views
7

Nie wiem, czy wielu z was próbował nową doskonałą funkcję Visual Studio 2012 do debugowania aplikacji opartych na Direct3D.Debugowania shaderów na Visual Studio 2012, nie można znaleźć symbole

pomyślnie przechwycić klatkę mojej aplikacji, a następnie chcę debugować wykonanie Vertex Shader: enter image description here

kliknięciu na zielony trójkąt do debugowania danego wierzchołka, ale mam „No Symbol Znaleziono "wiadomość, która uniemożliwia mi debugowanie.

Ktoś wie, co zrobić w Visual Studio, aby znaleźć symbole?

Dzięki.

+0

Czy debugujesz to na tym samym komputerze, na którym została zbudowana Twoja aplikacja? – reuben

Odpowiedz

3

Od msdn:

To nie jest możliwe, aby debugować aplikację i jej kod shaderów w tym samym czasie. Można jednak naprzemiennie je wymieniać:

Możliwe, że debugujesz aplikację i próbujesz debugować moduł cieniujący w tym samym czasie.

+0

To jest inny problem. Gdy znajdujesz się w trybie diagnostyki graficznej i używasz opcji debugowania w przechwytywaniu grafiki, domyślnie debugujesz już grafikę. Punkt punktowy MSDN oznacza, że ​​nie można umieścić punktów przerwania procesora podczas przechodzenia przez kod HLSL i na odwrót. – Camille

3

Korzystając z SlimDX można przekazać ShaderFlags do kompresora cieniowania. Przekazanie ShaderFlags.Debug powoduje dołączenie symboli debugowania.

var bytecode = ShaderBytecode.CompileFromFile("shader.fx", "VShader", "vs_4_0", ShaderFlags.Debug, EffectFlags.None) 

Mam nadzieję, że jest to coś podobnego w macierzystym Direct3D.

+0

Coś podobnego jest dla SharpDX (Toolkit), np. Var compiledEffect = (new EffectCompiler()) .CompileFromFile (@ "Content \ MiniTri - Copy.fx", EffectCompilerFlags.Debug | EffectCompilerFlags.SkipOptimization); –

3

Musisz skompilować swoje shadery z informacjami debugowania. Aby niezawodnie debugować, prawdopodobnie będziesz chciał wyłączyć również optymalizacje. W zależności od sposobu kompilowania shaderów, będzie to jeden z dwóch sposobów:

D3DCompile/D3DCompileFromFile: Przepuścić D3DCOMPILE_DEBUG i D3DCOMPILE_SKIP_OPTIMIZATION flagi D3DCompile. Zauważ, że w zależności od wersji D3D i tego, czy używasz D3DX, te flagi mogą mieć inne prefiksy.

fxc.exe: Flagi kompilacji mają odpowiedniki przełączników. Dla D3DCOMPILE_DEBUG należy przekazać /Zi do fxc. Dla D3DCOMPILE_SKIP_OPTIMIZATION należy podać /Od.

Program Visual Studio 2012 jest dość inteligentny w wyszukiwaniu źródła dla shaderów na podstawie osadzonych informacji debugowania, ale jeśli tego nie zrobi, poprosi o wskazanie odpowiedniego pliku.

1

Udało mi się debugować shadery w VS2012.

użyłem tego wiersza polecenia:

fxc /TTargetProfile /EShaderMainFunctionName /Od /Zi /FdMyShader.pdb MyShaderFile 

W kodzie użyłem:

D3DX11CompileFromFile(filename, NULL, NULL, "ShaderMainFunctionName, "TargetProfile", D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, ...); 

TargetProfile jest coś takiego jak vs_5_0 lub ps_5_0.

Jestem prawie pewien, że będzie działać z D3DCompile.

Kiedy zapomniałem wstawić D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, a ja próbowałem załadować plik pdb ręcznie, powiedział, że symbole nie pasują.

Po poprawieniu, Pixel Shader w widoku Historia pikseli było niebieskim łączem. Kiedy go kliknąłem, automatycznie załadował poprawny plik i mogłem rozpocząć debugowanie go.

Nie mogłem znaleźć kodu źródłowego odpowiadającego/Fd, który wygenerował plik pdb, dlatego musiałem przejść przez linię poleceń.

Powiązane problemy