Отладка шейдеров в Visual Studio 2012, не удается найти символы
Я не знаю, многие ли из вас пробовали новую отличную функцию Visual Studio 2012 для отладки приложений на основе Direct3D.
Я успешно захватываю фрейм моего приложения, затем я хочу отладить выполнение шейдера вершин:
Я нажимаю на зеленый треугольник, чтобы отладить данную вершину, но я получил сообщение "символ не найден", которое мешает мне отлаживать его.
кто-то знает, что делать для Visual Studio, чтобы найти символы?
спасибо.
4 ответов
с в MSDN:
невозможно одновременно отлаживать приложение и его шейдерный код. Тем не менее, вы можете чередовать между ними
возможно, что вы одновременно отлаживаете приложение и пытаетесь отладить шейдер.
вам необходимо скомпилировать шейдеры с отладочной информацией. И для того, чтобы надежно отлаживать, вы, вероятно, захотите отключить оптимизацию. В зависимости от того, как вы компилируете шейдеры, это будет один из двух способов:
D3DCompile / D3DCompileFromFile: передать D3DCOMPILE_DEBUG
и D3DCOMPILE_SKIP_OPTIMIZATION
флаги D3DCompile. Обратите внимание, что в зависимости от версии D3D и того, используете ли вы D3DX, эти флаги могут иметь различные префиксы.
fxc.exe: Флаги компиляции имеют эквиваленты коммутаторов. Для D3DCOMPILE_DEBUG
, передать /Zi
в fxc. Для D3DCOMPILE_SKIP_OPTIMIZATION
, передать /Od
.
Visual Studio 2012 достаточно умна в поиске источника для шейдеров на основе встроенной отладочной информации, но если это не удастся сделать, вам будет предложено указать соответствующий файл.
при использовании SlimDX вы можете пройти ShaderFlags
шейдера компилятор. Проходя ShaderFlags.Debug
вызывает включение символов отладки.
var bytecode = ShaderBytecode.CompileFromFile("shader.fx", "VShader", "vs_4_0", ShaderFlags.Debug, EffectFlags.None)
надеюсь, что это что-то подобное в родном Direct3D.
я смог отладить шейдеры в VS2012.
я использовал командную строку:
fxc /TTargetProfile /EShaderMainFunctionName /Od /Zi /FdMyShader.pdb MyShaderFile
в коде я использовал:
D3DX11CompileFromFile(filename, NULL, NULL, "ShaderMainFunctionName, "TargetProfile", D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION, ...);
TargetProfile-это что-то вроде vs_5_0
или ps_5_0
.
Я уверен, что это будет работать с D3DCompile.
когда я забыл поставить D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION
, и я попытался загрузить файл pdb вручную, он сказал, что символы не совпадают.
когда я правильно понял, пиксельный шейдер в представлении истории пикселей был синим ссылка на сайт. Когда я щелкнул по нему, он автоматически загрузил правильный файл, и я мог начать отладку.
Я не смог найти эквивалент в коде /Fd, который создал файл pdb, поэтому мне пришлось пройти через командную строку.