ID3D11Device::GetImmediateContext() crasht

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

ID3D11Device::GetImmediateContext() crasht

Beitrag von Krishty »

Hi,

ID3D11Device::GetImmediateContext() stürzt ab. Natürlich eine Funktion, die garnicht fehlschlagen kann, und selbstverständlich nur außerhalb des Debuggers, wäre ja sonst zu einfach …

Was soll ich nun machen? Ich meine, ich habe wirklich null Ahnung, was da schiefgeht – der beteiligte Code ist trivial. Bis zu diesem Funktionsaufruf sind alle Objekte in einwandfreiem Zustand, wie mir printf-Debugging flüstert …

(nichtssagend) Debug-Ausgabe in PIX (alles, was ich aus dem just-in-time-Debugger rausgequetscht bekomme ist „Access violation writing location 0x00000014.“):
Frame 000001 ........PRE: D3D11CreateDevice(0x02CCE218, D3D_DRIVER_TYPE_UNKNOWN, NULL, 11, 0x0034F1C4, 1, 7, 0x0034F1A0, 0x0034F144, NULL)
D3D11: INFO: Create Context: Name="unnamed", Addr=0x0227F0FC, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097225: CREATE_CONTEXT ]
D3D11: INFO: Create BlendState: Name="unnamed", Addr=0x0227D4CC, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097270: CREATE_BLENDSTATE ]
D3D11: INFO: Create DepthStencilState: Name="unnamed", Addr=0x0048A90C, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097273: CREATE_DEPTHSTENCILSTATE ]
D3D11: INFO: Create RasterizerState: Name="unnamed", Addr=0x0228B0F4, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097276: CREATE_RASTERIZERSTATE ]
D3D11: INFO: Create Sampler: Name="unnamed", Addr=0x0228B1DC, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097267: CREATE_SAMPLER ]
D3D11: INFO: Create Query: Name="unnamed", Addr=0x0048D604, ExtRef=1, IntRef=0 [ STATE_CREATION INFO #2097279: CREATE_QUERY ]
Frame 000001 ............PRE: AddObject(D3D11 Device, 0x02CCF708, 0x0227E018)
Frame 000001 ............POST: <TRUE> AddObject(D3D11 Device, 0x02CCF708, 0x0227E018)
Frame 000001 ............PRE: AddObject(DXGI Device, 0x02CCF878, 0x0227E308)
Frame 000001 ............POST: <TRUE> AddObject(DXGI Device, 0x02CCF878, 0x0227E308)
Frame 000001 ........POST: <S_OK> D3D11CreateDevice(0x02CCE218, D3D_DRIVER_TYPE_UNKNOWN, NULL, 11, 0x0034F1C4, 1, 7, 0x0034F1A0, 0x0034F144, NULL)
Frame 000001 ........PRE: <this=0x02ccf708>ID3D11Device::GetImmediateContext(NULL)
An unhandled exception occurred.
D3D11: WARNING: Live Device: Name="unnamed", Addr=0x0227E018, ExtRef=2 [ STATE_CREATION WARNING #2097297: LIVE_DEVICE ]
D3D11: WARNING: Live Query: Name="unnamed", Addr=0x0048D604, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097280: LIVE_QUERY ]
D3D11: WARNING: Live Sampler: Name="unnamed", Addr=0x0228B1DC, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097268: LIVE_SAMPLER ]
D3D11: WARNING: Live RasterizerState: Name="unnamed", Addr=0x0228B0F4, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097277: LIVE_RASTERIZERSTATE ]
D3D11: WARNING: Live DepthStencilState: Name="unnamed", Addr=0x0048A90C, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097274: LIVE_DEPTHSTENCILSTATE ]
D3D11: WARNING: Live BlendState: Name="unnamed", Addr=0x0227D4CC, ExtRef=0, IntRef=1 [ STATE_CREATION WARNING #2097271: LIVE_BLENDSTATE ]
D3D11: WARNING: Live Context: Name="unnamed", Addr=0x0227F0FC, ExtRef=1, IntRef=1 [ STATE_CREATION WARNING #2097226: LIVE_CONTEXT ]
D3D11: WARNING: Live Device Child Summary: Device Addr=0x0227E018
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: 0
Live Texture3D: 0
Live ShaderResourceView: 0
Live RenderTargetView: 0
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
(nichtssagend) Ein bisschen Code:

Code: Alles auswählen

class CGPU {
private:
	::ID3D11Device & m_Device;
	::ID3D11DeviceContext & m_ImmediateContext;

	// Erzeugt das D3D-Device.
	static ::ID3D11Device & CreateD3DDevice(
		DXGI::CAdapter &		DXGIAdapter,
		::D3D_FEATURE_LEVEL const	FeatureLevel,
		::UINT const			DeviceFlags
	) {
		// … viel Code (Feature-Level für Debug-Output ermitteln), aber funktioniert soweit. (Siehe PIX-Output.)
	}

	static ::ID3D11DeviceContext & ImmediateContextOf(
		::ID3D11Device & Device
	) {
		::ID3D11DeviceContext * Result = nullptr;
		Device.GetImmediateContext(&Result); // PENG voll in die Fresse!
		return (*Result);
	}

public:

	CGPU(
		DXGI::CAdapter &		DXGIAdapter,
		::D3D_FEATURE_LEVEL const	FeatureLevel,
		::UINT const			DeviceFlags
	)
		: m_Device(CreateD3DDevice(DXGIAdapter, FeatureLevel, DeviceFlags))
		, m_ImmediateContext(ImmediateContextOf(this->m_Device)) // PENG voll in die Fresse!
	{
		return;
	}

}; // class CGPU
Wo soll ich anfangen?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von Dirk Schulz »

Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von Krishty »

HR HR HR HR diese Eierstinker. Da f**k mir doch einer die Füße blutig – ich stürze hier in abgrundtiefe Verzweiflung bevor ich auch nur auf die Idee komme, in die known Bugs zu gucken.

Aber weißt du, was? Ich bin mir fast sicher, dass auch was passiert ist, als ppImmediateContext nicht nullptr war. Ich kann mich nämlich erinnern, letzte nacht fast einen Tobsuchtanfall gekriegt zu haben weil der Zeiger 0xCCCCCCCC war und der Compiler nicht gewarnt hatte, dass ich einer Funktion eine uninitialisierte Variable übergebe …

Nichtdestotrotz schonmal thx, gleich testen …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von Krishty »

Ist doch unfassbar … ich-be-sitze hier Tagelang und suceh und suche, ich kapsle den halben D3D-Müll und mache es wieder rückgängig, ich prüfe mein Prgramm auf drei verschiedene Arten gegen wilde Pointer und dann DAS.

Drecks-PIX wurstet immernoch ab, aber diesmal kriege ich zumindestens ne Warnung. Darf dann zwar raten, wo die afugetreten ist, aber zumindest habe ich jetzt mal ne CHANCE.

Wie kann so ein räudiger Bug überhaupt da reinkommen?!? Warum ist das Mistding überhaupt relevant?!? Ich meine, wenn ich PIX brauche um Debug-Outout zu kriegen weil die be*****ne abge*****te Debug-Runtime, die iuwann in der Beta mal funktioneirt hat und jetzt seit zwei SDKs nicht mehr, im Debugger nur auf Funkstille macht ist da doch fudnamental was schiefgelaufen? D3D 10.1, DAS war ne API die lief. Da ließ sich mit arbeiten. Aber doch nicht mit SOWAS. Die war wenigstens dankbar! Isch mein, isch reshc misch nit üp. ISCH resch misch nit üp. Abba MIR sin dann doch wieder de Asozialn! MIR sin dann de Durschgepeitschte! Ja isch sag halt wie et is!

Schnauze voll. Ich mach mein eigenes D3D–… mit Online-Poker und Camwhores!

Ihr könnt debn Thread jetzt deleten lassen oder sonstwas …
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von Aramis »

Schnauze voll. Ich mach mein eigenes D3D–… mit Online-Poker und Camwhores!
Ihr könnt debn Thread jetzt deleten oder sonstwas …
Wieso denn löschen? Jetzt wird's doch erst interessant! :-)
( … wobei ich deine Aggressionen gegenüber so einem Bug völlig nachvollziehen kann … ein für Microsoft's Vorzeige 3D-API ziemlich fetter Hund).
Dirk Schulz
Establishment
Beiträge: 130
Registriert: 01.03.2009, 14:21
Alter Benutzername: frittentuete

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von Dirk Schulz »

Hi,

mach ruhig weiter, es ist verdient! Mittlerweile macht Microsoft wieder Rückschritte in meinen Augen.
Die D3D11-Doku ist lange nicht so gut wie bei D3D9, wobei ich allgemein noch nicht verstehe, warum man nun alle Konzepte umbennen musste. :|

Und durch den D3DCompiler im aktuellen SDK krieg ich auch keine Fehlermeldungen vom Shadercompiler mehr in die Debugausgabe geschrieben. :cry:

Habe den Bug auch nur durch Zufall gefunden! google: "ppimmediatecontext NULL". Bzw. wurde ich stutzig, das kein AddObject(D3D11 Device Context, ..., ...) bei dir im PIX-Log steht.


Veil Erfolg und starke Nerven weiterhin. ;)
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: ID3D11Device::GetImmediateContext() crasht

Beitrag von kimmi »

Immerhin haben sie den Bug gut sichtbar dokumentiert. Da kenne ich andere Software-Hersteller, die da nicht ganz so offen mit umgehen :). Aber ärgerlich ist so etwas allemal. Immerhin kannst du nun einen Workaround einbauen. Und ärgern wird den Bug leider nicht verschwinden lassen. Diese Erfarung musste ich nach gefühlten 100 Tastaturen, die zerschlagen wurden, auch mal machen.

Gruß Kimmi
Antworten