Gfx GX Fn GXSetTevIndWarp - wowjinxy/libPorpoise GitHub Wiki

GXSetTevIndWarp

  • Category: Indirect Texturing
  • Matrix Status: Implemented
  • Matrix Notes: Parity-checked convenience wrapper over GXSetTevIndirect with canonical signed-bias and replace/wrap mapping.
  • Matrix Link: Gfx-GX-API-Matrix

Official SDK (Reference)

  • Manual page: reference/man/gfx/gx/Indirect/GXSetTevIndWarp.html
  • SDK source: reference/gx/GXBump.c (GXSetTevIndWarp, around lines 390+)
  • Verified SDK behavior:
    • Computes wrap = replace_mode ? GX_ITW_0 : GX_ITW_OFF.
    • Forwards to GXSetTevIndirect using:
      • format = GX_ITF_8
      • bias = signed_offset ? GX_ITB_STU : GX_ITB_NONE
      • wrap_s = wrap_t = wrap
      • add_prev = FALSE
      • utc_lod = FALSE
      • alpha_sel = GX_ITBA_OFF
    • Uses CHECK_IN_BGN semantics (through the call path).

libPorpoise Implementation

  • Runtime implementation area: src/gx
  • Public API surface: include/dolphin/gx
  • Current implementation:
    • src/gx/pc_gx.c: GXSetTevIndWarp matches SDK wrapper mapping exactly and forwards to GXSetTevIndirect.
    • Begin-safe behavior is inherited via GXSetTevIndirect (which handles pending-begin flush).

SDK vs Porpoise Diff

  • Signature parity:
    • SDK: void GXSetTevIndWarp(GXTevStageID, GXIndTexStageID, GXBool, GXBool, GXIndTexMtxID)
    • Porpoise: same
  • Behavioral parity:
    • SDK and Porpoise both implement identical wrapper semantics over GXSetTevIndirect.
  • Known divergence:
    • None for wrapper behavior.

Validation Checklist

  • GX demo coverage checked (indirect warp setup path)
  • Pikmin usage path checked (wrapper forwarding path)
  • Matrix status updated if needed
  • Notes updated with concrete file/function references

Working Notes

  • No runtime patch required; implementation already matched SDK behavior.