What does HRESULT 0x88990023 (D2DERR_ORIGINAL_TARGET_NOT_BOUND) mean?

 
Previous Next
D2DERR_OUTSTANDING_BITMAP_REFERENCES D2DERR_INVALID_TARGET

D2DERR_ORIGINAL_TARGET_NOT_BOUND

D2DERR_ORIGINAL_TARGET_NOT_BOUND belongs to Direct2D targets, device capabilities, and intermediates. An operation requires the device context’s original target, but that target is no longer bound. The diagnostic goal for D2DERR_ORIGINAL_TARGET_NOT_BOUND is to identify the first rejecting object and transition, not merely the final high-level symptom.

Where the failure occurs

For D2DERR_ORIGINAL_TARGET_NOT_BOUND, a device context has target identity and is backed by a Direct3D device with format, feature, shader, and maximum-size limits. When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, temporarily changing targets, requesting unsupported capabilities, or propagating huge effect bounds are different problems. Record target history and capability queries before allocating or drawing in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path.

For D2DERR_ORIGINAL_TARGET_NOT_BOUND, inspect the following boundary: setTarget changes, BeginDraw/EndDraw scope, and effect or command-list rendering.

Telemetry with explanatory value

RecordWhy it matters here
Original and current target identitiesFor D2DERR_ORIGINAL_TARGET_NOT_BOUND, recording original and current target identities separates the Direct2D targets, device capabilities, and intermediates boundary from a later wrapper symptom.
SetTarget call historyIn D2DERR_ORIGINAL_TARGET_NOT_BOUND diagnostics, recording SetTarget call history ties the HRESULT to the Direct2D targets, device capabilities, and intermediates boundary rather than to the final visible failure.
Draw scope and nested rendering operationsComparing draw scope and nested rendering operations shows whether D2DERR_ORIGINAL_TARGET_NOT_BOUND follows input, object state, or environment.
Target options and device-context generationPreserving target options and device-context generation provides the evidence needed to test this distinction: iNVALID_TARGET concerns whether an image can be used as a target; ORIGINAL_TARGET_NOT_BOUND concerns restoring the context’s expected original target.

Smallest faithful reproducer

Use the original target and a small supported bitmap or effect region first in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, then change one target, capability, format, or spatial expansion at a time while logging device and context generations.

  1. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, bind the original target before the operation.
  2. When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, balance temporary SetTarget changes with restoration.
  3. Test without command-list or offscreen rendering in the D2DERR_ORIGINAL_TARGET_NOT_BOUND path.
  4. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, assert current target at each helper boundary.

Separate object, input, and environment

TestInterpretationHold constant
Same environment, reduced inputIf D2DERR_ORIGINAL_TARGET_NOT_BOUND disappears with a smaller faithful case, complexity within Direct2D targets, device capabilities, and intermediates is implicated.For D2DERR_ORIGINAL_TARGET_NOT_BOUND, keep original and current target identities fixed while simplifying draw scope and nested rendering operations.
Same input, fresh object generationIf D2DERR_ORIGINAL_TARGET_NOT_BOUND changes after rebuilding state, examine ownership across the caller’s object graph, custom effect or renderer, Direct2D validation layer, backing device, and deferred draw boundary.For D2DERR_ORIGINAL_TARGET_NOT_BOUND, place SetTarget call history on the timeline of the last successful transition.
Same operation on a controlled second pathIf D2DERR_ORIGINAL_TARGET_NOT_BOUND follows one environment, the failure is not explained by source data alone.For D2DERR_ORIGINAL_TARGET_NOT_BOUND, compare adapter and feature level, factory and device generations, target identity, debug-layer output, and thread ownership while preserving target options and device-context generation.

Avoid broad resets

INVALID_TARGET concerns whether an image can be used as a target; ORIGINAL_TARGET_NOT_BOUND concerns restoring the context’s expected original target. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, do not respond with a universal render-target recreation loop unless the returned status specifically documents device-loss recovery; graph, property, numeric, lifetime, and print-state errors require correcting their contract.

Completion test

A correction for D2DERR_ORIGINAL_TARGET_NOT_BOUND should let the operation at the Direct2D targets, device capabilities, and intermediates boundary complete repeatedly under the original supported conditions. Repeat the control that begins with “Bind the original target before the operation” and confirm that the following lifecycle step also succeeds. For D2DERR_ORIGINAL_TARGET_NOT_BOUND, keep the original failing sample and one deliberate negative case so fallback cannot be mistaken for repair.

Technical references

When D2DERR_ORIGINAL_TARGET_NOT_BOUND is returned, these references define the public API family, object model, or error list used to interpret this status.


Looking for a different code? Search another status or error code.