Windows 8: A-ha! Через прикрепление другого отладчика к хосту отладки графики VsGraphicsDesktopEngine.exe
(найденный в C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ Extensions \ Microsoft \ VsGraphics \ x86) и принудительный отладчик Direct3D через панель управления DirectX, I есть выход:
DXGI ERROR: No target window specified in DXGI_SWAP_CHAIN_DESC, and no window associated with owning factory. [ UNKNOWN ERROR #7: ]
PIX: IDXGIFactory2::CreateSwapChainForHwnd returned 887a0001
Я подумал, что было довольно странно, так как, хотя я использую CreateSwapChainForHwnd(), он использует DXGI_SWAP_CHAIN_DESC , не даже имеют поле OutputWindow
. Однако я попытался заменить использование CreateSwapChainForHwnd() с CreateSwapChain() с указанным OutputWindow
и все работает!
С дальнейшими испытаниями я обнаружил, что всякая попытка D3D11CreateDeviceAndSwapChain() терпит неудачу, с запущенным нулевым адаптером, но захваты дают bizzare. «Этот механизм диагностики графики не поддерживает D3D9. Воспроизведение вашего приложения может быть неполным.», И с указанного адаптера он падает с этим стеком:
04246c83()
[Frames below may be incorrect and/or missing]
dxgi.dll!CDXGIFactory::CreateSwapChainForHwndImpl(struct IUnknown *,struct DXGI_SWAP_CHAIN_DESC_INTERNAL *,bool,struct IDXGIOutput *,struct IDXGISwapChain1 * *)
dxgi.dll!CDXGIFactory::CreateSwapChain(struct IUnknown *,struct DXGI_SWAP_CHAIN_DESC *,struct IDXGISwapChain * *)
VsGraphicsHelper.dll!CHookedIDXGIFactory::CreateSwapChain(struct IUnknown *,struct DXGI_SWAP_CHAIN_DESC *,struct IDXGISwapChain * *)
VsGraphicsHelper.dll!CSpyHookedIDXGIFactory::CreateSwapChain(struct IUnknown *,struct DXGI_SWAP_CHAIN_DESC *,struct IDXGISwapChain * *)
[email protected]()
VsGraphicsHelper.dll!CHookedD3D11Top::D3D11CreateDeviceAndSwapChain(struct IDXGIAdapter *,enum D3D_DRIVER_TYPE,struct HINSTANCE__ *,unsigned int,enum D3D_FEATURE_LEVEL *,unsigned int,unsigned int,struct DXGI_SWAP_CHAIN_DESC *,struct IDXGISwapChain * *,struct ID3D11Device * *,enum D3D_FEATURE_LEVEL *,struct ID3D11DeviceContext * *)
VsGraphicsHelper.dll!CSpyHookedD3D11Top::D3D11CreateDeviceAndSwapChain(struct IDXGIAdapter *,enum D3D_DRIVER_TYPE,struct HINSTANCE__ *,unsigned int,enum D3D_FEATURE_LEVEL *,unsigned int,unsigned int,struct DXGI_SWAP_CHAIN_DESC *,struct IDXGISwapChain * *,struct ID3D11Device * *,enum D3D_FEATURE_LEVEL *,struct ID3D11DeviceContext * *)
Win32ProjectScratch.exe!Direct3DWindowBase::CreateDeviceResources() Line 363
...
кажется только D3D11CreateDevice(), а затем IDXGIFactory :: CreateSwapChain() работает - либо путем указания адаптера или запрашивая устройство для его фабрики позже.
Windows 7 имеет другой Гоча: вы должны использовать D3D11CreateDevice()
/IDXGIFactory::CreateSwapChain()
еще, но он также вызывает ошибку отладки уровня DirectX на первом Present()
, если вы используете завод в DXGI 1,0 (CreateDXGIFactory()
vs. CreateDXGIFactory
()
):
D3D11: ERROR: ID3D11Device::CreateTexture2D: D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX is only available for devices created off of Dxgi1.1 factories or later. [ STATE_CREATION ERROR #103: CREATETEXTURE2D_INVALIDMISCFLAGS ]
Если у вас есть отладочный слой «сломаться от тяжести» вариант включения (который в общем, вы должны), это вызовет исключение в отладчике, что делает его похожим на другую аварию, однако он безопасно продолжается - однако вы не получаете HUD графического отладчика VS, а в окне таблицы объектов сломан контент. С другой стороны, если вы следуете его советам и используете завод DXGI 1.1, вы получаете настоящий крах в Present().
Таким образом, кажется, что отладчик графики еще не совсем испечен!
Принадлежит к @MrGomez для идеи для отладки отладчика
Вы также рассмотрели сообщение об этой проблеме в качестве обратной связи для Microsoft и на соответствующих форумах предварительного просмотра и списках рассылки? Фактические сотрудники Microsoft могут лучше ответить на этот вопрос. – MrGomez
Здесь есть ссылка на форум отладчика Microsoft VS. Я немного осмотрелся, но еще не нашел письмо/блог для кого-то, близкого к отладчику VS. Я все еще смотрю. –
Я был бы рад попросить моих профессиональных контактов от вашего имени. Я знаю несколько человек, близких к команде отладки, которые могли бы предложить вам лучший ответ, чем, по общему признанию, общий, который я представил ниже. – MrGomez