Jump to content
  • Advertisement
Sign in to follow this  
Icebone1000

ctrl alt del in fullscreen results on not released objects

This topic is 2413 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

If I ctrl alt del, open the task manager, then return back to my app, quit fullscreen, and then quit the app, the dx debug output will report live objects.
If I dont ctrl alt del, I can go and return back from fs as many time as I want and it finishes cleanly..

Im error handling all dx calls, theres no error being reported..Since theres no more device lost...I dont have a clue of whats going on..Theres any topic about this on the sdk? Any guess about whats going on?

Share this post


Link to post
Share on other sites
Advertisement
Also, doing alt + tab while in full screen also cause live objects...I dont get this...All the lost device stuff of previous dx was mostly used to prevent shit at those exactly situations wasnt it? (alt tab or ctrl alt del while in full screen). Now its gonne, but Im having this problem with this, what Im suppose to do?

Im not doing anything besides creating swap chain, a device context and binding the render target as the swc back buffer..My app have no real time stuff yet, it only call present at wm_paint, theres no other resources being created, and everything is being released at the destructors, so whats keeping alive or being created when I alt tab or ctrl alt del while in full screen?

Share this post


Link to post
Share on other sites

The debug trace should tell you what objects are alive and what is keeping them alive so that would be the first place to look for answers..


You mean the debug output? Thats how I figured out things are kept alive..But what do you mean by telling whats keeping them alive? they just show the reference count:

D3D11: WARNING: Live Device: Name="unnamed", Addr=0x000000000059C160, ExtRef=1 [ STATE_CREATION WARNING #2097297: LIVE_DEVICE ]
D3D11: WARNING: Live Texture2D: Name="unnamed", Addr=0x0000000001E42030, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097235: LIVE_TEXTURE2D ]
D3D11: WARNING: Live RenderTargetView: Name="unnamed", Addr=0x0000000001E3FC50, ExtRef=0, IntRef=0 [ STATE_CREATION WARNING #2097244: LIVE_RENDERTARGETVIEW ]
D3D11: WARNING: Live Texture2D: Name="unnamed", Addr=0x0000000001E40360, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097235: LIVE_TEXTURE2D ]
D3D11: WARNING: Live Query: Name="unnamed", Addr=0x0000000001E3F0D0, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097280: LIVE_QUERY ]
D3D11: WARNING: Live Sampler: Name="unnamed", Addr=0x0000000001E3EE50, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097268: LIVE_SAMPLER ]
D3D11: WARNING: Live RasterizerState: Name="unnamed", Addr=0x0000000001E3EBE0, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097277: LIVE_RASTERIZERSTATE ]
D3D11: WARNING: Live DepthStencilState: Name="unnamed", Addr=0x0000000001E3E9C0, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097274: LIVE_DEPTHSTENCILSTATE ]
D3D11: WARNING: Live BlendState: Name="unnamed", Addr=0x0000000001E3E520, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097271: LIVE_BLENDSTATE ]
D3D11: WARNING: Live Context: Name="unnamed", Addr=0x0000000001E20420, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097226: LIVE_CONTEXT ]
D3D11: WARNING: Live Device Child Summary: Device Addr=0x000000000059C160
Using ID3D11Debug::ReportLiveDeviceObjects with D3D11_RLDO_DETAIL will help drill into object lifetimes. Objects with ExtRef=0 and IntRef=0 will be eventually destroyed through typical Immediate Context usage. However, if the application requires these objects to be destroyed sooner, ClearState followed by Flush on the Immediate Context will realize their destruction.
Live Context: 1
Live Buffer: 0
Live Texture1D: 0
Live Texture2D: 2
Live Texture3D: 0
Live ShaderResourceView: 0
Live RenderTargetView: 1
Live DepthStencilView: 0
Live VertexShader: 0
Live GeometryShader: 0
Live PixelShader: 0
Live InputLayout: 0
Live Sampler: 1
Live BlendState: 1
Live DepthStencilState: 1
Live RasterizerState: 1
Live Query: 1
Live Predicate: 0
Live Counter: 0
Live CommandList: 0
Live HullShader: 0
Live DomainShader: 0
Live ClassInstance: 0
Live ClassLinkage: 0
Live ComputeShader: 0
Live UnorderedAccessView: 0
[ STATE_CREATION WARNING #2097298: LIVE_OBJECT_SUMMARY ]


This tells you anything? Icant figure out much as nothing is reported when I dont do alt tab/ctrl alt del on fulllscreen..
But one thing weird is this:
Live Sampler: 1
Live BlendState: 1
Live DepthStencilState: 1
Live RasterizerState: 1
Live Query: 1

I dont create those objects...But is not THAT weird, cause the weird thing is the fact that there are objects alive, since Im releasing all the ones I create.

-edit-
Also, if I keep going fullscreen and alt tabing, quiting fullscreen and going back fullscreen, just to out tab again, this does NOT increase the number of live objects..

Share this post


Link to post
Share on other sites
Right, that output is telling me that at the point you are calling that dump code you still have a reference to a device (extRef=1) which is holding the reference to the other objects (intRef=1 on them).

As to how this is happening and why it only happens in the situation you describe isn't very easy to work out without some code to see what your application is doing. The only reference I could find to something like this however was down to the user not calling 'ClearState' on the D3D11IDeviceContext object before doing the dump out.

Share this post


Link to post
Share on other sites
Just in case, remember to do swapchain->SetFullscreenState(FALSE, NULL) before exiting when in fullscreen mode. You should get a warning in the debug output if you don't do that though..

Share this post


Link to post
Share on other sites

Right, that output is telling me that at the point you are calling that dump code you still have a reference to a device (extRef=1) which is holding the reference to the other objects (intRef=1 on them).

As to how this is happening and why it only happens in the situation you describe isn't very easy to work out without some code to see what your application is doing. The only reference I could find to something like this however was down to the user not calling 'ClearState' on the D3D11IDeviceContext object before doing the dump out.

Ah..good to know what those means..


Just in case, remember to do swapchain->SetFullscreenState(FALSE, NULL) before exiting when in fullscreen mode. You should get a warning in the debug output if you don't do that though..



I can only quit the app while in windowed mode, so I never quit the app without calling SetFullscreenState(FALSE, NULL), thats what I do to quit fullscreen..

Share this post


Link to post
Share on other sites
Is there any other output in the debug window besides this live object summary? Specifically I wonder if there is any exceptions listed in the output window... I had a similar experience to yours when trying to exit from full screen at one point, and I ended up figuring out the issue only by enabling breaking on Win32 exceptions in Visual Studio 2010. If you don't already have it configured for it, then go to Debug -> Exceptions, and then check the Win32 exceptions. This should make the debugger break if you are getting some erroneous exit to the program, which would otherwise get lost and the program would just exit.

Share this post


Link to post
Share on other sites

Is there any other output in the debug window besides this live object summary? Specifically I wonder if there is any exceptions listed in the output window... I had a similar experience to yours when trying to exit from full screen at one point, and I ended up figuring out the issue only by enabling breaking on Win32 exceptions in Visual Studio 2010. If you don't already have it configured for it, then go to Debug -> Exceptions, and then check the Win32 exceptions. This should make the debugger break if you are getting some erroneous exit to the program, which would otherwise get lost and the program would just exit.

Its a very clean output, the only info displayed is the load dlls, unload dlls, thread exits(all zeroes) and then the dx ones I posted earlier..And I just tried breaking on all win32 exceptions( nice to know about that too ;) )..

So frustrating..Can it be due the fact Im not creating any renderable stuff but still calling present? I dont call clear render target, because I dont have any, but still my present clears to black, witch I believe its just the bbuffer initial values..Maybe the driver handles lost device by creating some stuff that Im not yet using..?.....This sounds stupid doesnt it? But where those came from:

Live Sampler: 1
Live BlendState: 1
Live DepthStencilState: 1
Live RasterizerState: 1
Live Query: 1

It gotta be the ones holding the reference count..Whats that Query anyway? And is this sampler automatically created by the swapchain to present the bbuffer? Raster, Blend and Depth states are active by default even if you dont set any, does it mean theres live objects of those anywhere?

Share this post


Link to post
Share on other sites
How can I do my program check those live objects and report it( say by a dlg box), so I can give it to other ppl test..Maybe its a driver error?
Theres a way to do this? There is this ID3D11Debug::ReportLiveDeviceObjects, but I dont get how to use this..I want to report the same thing the debug output reports, is possible?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!