From 28b6584cd4c09533643eb21b317f596450a7d59c Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Sat, 4 Dec 2021 13:14:40 -0500 Subject: [PATCH] add ref tests for tfrag (#989) --- decompiler/config/all-types.gc | 4 +- decompiler/config/jak1_ntsc_black_label.jsonc | 2 +- .../jak1_ntsc_black_label/label_types.jsonc | 4 + .../stack_structures.jsonc | 5 + .../jak1_ntsc_black_label/type_casts.jsonc | 6 + game/fake_iso.txt | 1 + goal_src/dgos/sun.gd | 63 + goal_src/engine/camera/cam-debug.gc | 20 + goal_src/engine/gfx/tfrag/tfrag-near.gc | 87 +- goal_src/game.gp | 72 + .../engine/gfx/tfrag/tfrag-methods_REF.gc | 1474 +++++++++++++++++ .../engine/gfx/tfrag/tfrag-near_REF.gc | 96 ++ .../reference/engine/gfx/tfrag/tfrag_REF.gc | 753 +++++++++ 13 files changed, 2583 insertions(+), 4 deletions(-) create mode 100644 goal_src/dgos/sun.gd create mode 100644 test/decompiler/reference/engine/gfx/tfrag/tfrag-methods_REF.gc create mode 100644 test/decompiler/reference/engine/gfx/tfrag/tfrag-near_REF.gc create mode 100644 test/decompiler/reference/engine/gfx/tfrag/tfrag_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 7f3c73b8f3..af1e131d78 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -16685,8 +16685,8 @@ ;; - Functions -(define-extern tfrag-details function) -(define-extern clip-restore function) +(define-extern tfrag-details (function tfragment none)) +(define-extern clip-restore (function none)) ;; - Unknowns diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index 942758b0a4..8ea050f7c6 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -15,7 +15,7 @@ "disassemble_code": false, // Run the decompiler - "decompile_code": false, + "decompile_code": true, //////////////////////////// // DATA ANALYSIS OPTIONS diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 270492cb79..c4adfeb1bd 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1861,6 +1861,10 @@ ["L2", "(array array)"] ], + "tfrag-near": [ + ["L1", "vu-function"] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index f89d79594e..64cd24a635 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -5036,5 +5036,10 @@ [64, "vector"] ], + "clip-restore": [ + [16, "vector"], + [32, "matrix"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 076726003a..161d270f4a 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -4986,6 +4986,7 @@ "tfrag-near-init-buffer": [ [[11, 15], "a0", "dma-packet"], [[21, 24], "a0", "gs-gif-tag"], + [28, "a0", "(pointer gs-test)"], [30, "a0", "(pointer gs-reg64)"], [[45, 50], "v1", "dma-packet"] ], @@ -5000,6 +5001,7 @@ "tfrag-init-buffer": [ [[11, 15], "a0", "dma-packet"], [[21, 24], "a0", "gs-gif-tag"], + [28, "a0", "(pointer gs-test)"], [30, "a0", "(pointer gs-reg64)"], [[45, 50], "v1", "dma-packet"] ], @@ -6371,5 +6373,9 @@ [40, "t9", "(function none :behavior target)"] ], + "tfrag-details":[ + [49, "gp", "(pointer uint32)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/game/fake_iso.txt b/game/fake_iso.txt index 4f41203d1d..dfd3081541 100644 --- a/game/fake_iso.txt +++ b/game/fake_iso.txt @@ -27,6 +27,7 @@ JUN.DGO out/iso/JUN.DGO MAI.DGO out/iso/MAI.DGO BEA.DGO out/iso/BEA.DGO CIT.DGO out/iso/CIT.DGO +SUN.DGO out/iso/SUN.DGO FUCVICTO.STR out/iso/FUCVICTO.STR FUCV2.STR out/iso/FUCV2.STR FUCV3.STR out/iso/FUCV3.STR diff --git a/goal_src/dgos/sun.gd b/goal_src/dgos/sun.gd new file mode 100644 index 0000000000..76a8c5c7f0 --- /dev/null +++ b/goal_src/dgos/sun.gd @@ -0,0 +1,63 @@ +("SUN.DGO" + ("sunken-part.o" "sunken-part") + ("sunken-part2.o" "sunken-part2") + ("sunken-part3.o" "sunken-part3") + ("sunken-part4.o" "sunken-part4") + ("sunken-part5.o" "sunken-part5") + ("target-tube.o" "target-tube") + ("eichar-tube+0-ag-SUN.go" "eichar-tube+0") + ("sunken-obs.o" "sunken-obs") + ("shover.o" "shover") + ("launcherdoor.o" "launcherdoor") + ("square-platform.o" "square-platform") + ("sun-iris-door.o" "sun-iris-door") + ("orbit-plat.o" "orbit-plat") + ("wedge-plats.o" "wedge-plats") + ("wall-plat.o" "wall-plat") + ("qbert-plat.o" "qbert-plat") + ("steam-cap.o" "steam-cap") + ("sun-exit-chamber.o" "sun-exit-chamber") + ("floating-launcher.o" "floating-launcher") + ("sunken-water.o" "sunken-water") + ("whirlpool.o" "whirlpool") + ("sunken-pipegame.o" "sunken-pipegame") + ("bully.o" "bully") + ("double-lurker.o" "double-lurker") + ("helix-water.o" "helix-water") + ("puffer.o" "puffer") + ("sunken-fish.o" "sunken-fish") + ("tpage-661.go" "tpage-661") + ("tpage-663.go" "tpage-663") + ("tpage-714.go" "tpage-714") + ("tpage-662.go" "tpage-662") + ("tpage-766.go" "tpage-766") + ("babak-ag.go" "babak") + ("bully-ag.go" "bully") + ("double-lurker-ag.go" "double-lurker") + ("double-lurker-top-ag.go" "double-lurker-top") + ("exit-chamber-ag.go" "exit-chamber") + ("generic-button-ag.go" "generic-button") + ("launcherdoor-ag-SUN.go" "launcherdoor") + ("orb-cache-top-ag-SUN.go" "orb-cache-top") + ("orbit-plat-ag.go" "orbit-plat") + ("orbit-plat-bottom-ag.go" "orbit-plat-bottom") + ("plat-sunken-ag.go" "plat-sunken") + ("puffer-ag.go" "puffer") + ("qbert-plat-ag.go" "qbert-plat") + ("qbert-plat-on-ag.go" "qbert-plat-on") + ("seaweed-ag.go" "seaweed") + ("shover-ag-SUN.go" "shover") + ("side-to-side-plat-ag.go" "side-to-side-plat") + ("square-platform-ag.go" "square-platform") + ("steam-cap-ag-SUN.go" "steam-cap") + ("sun-iris-door-ag.go" "sun-iris-door") + ("sunkencam-ag-SUN.go" "sunkencam") + ("sunkenfisha-ag.go" "sunkenfisha") + ("wall-plat-ag.go" "wall-plat") + ("water-anim-sunken-ag.go" "water-anim-sunken") + ("water-anim-sunken-dark-eco-ag.go" "water-anim-sunken-dark-eco") + ("wedge-plat-ag.go" "wedge-plat") + ("wedge-plat-outer-ag.go" "wedge-plat-outer") + ("whirlpool-ag.go" "whirlpool") + ("sunken-vis.go" "sunken-vis") + ) \ No newline at end of file diff --git a/goal_src/engine/camera/cam-debug.gc b/goal_src/engine/camera/cam-debug.gc index 08fc78f96b..dee1df8482 100644 --- a/goal_src/engine/camera/cam-debug.gc +++ b/goal_src/engine/camera/cam-debug.gc @@ -29,4 +29,24 @@ (none) ) +(defun debug-set-camera-pos-rot! ((arg0 vector) (arg1 matrix)) + (when (and *camera* *camera-combiner*) + (send-event *camera* 'change-state cam-free-floating 0) + (set! (-> *camera-combiner* trans quad) (-> arg0 quad)) + (let ((a2-0 (-> *camera-combiner* inv-camera-rot)) + (v1-10 (-> arg1 vector 0 quad)) + (a0-4 (-> arg1 vector 1 quad)) + (a1-2 (-> arg1 vector 2 quad)) + (a3-0 (-> arg1 vector 3 quad)) + ) + (set! (-> a2-0 vector 0 quad) v1-10) + (set! (-> a2-0 vector 1 quad) a0-4) + (set! (-> a2-0 vector 2 quad) a1-2) + (set! (-> a2-0 vector 3 quad) a3-0) + ) + (send-event *camera* 'change-state cam-fixed 0) + ) + arg0 + ) + ) diff --git a/goal_src/engine/gfx/tfrag/tfrag-near.gc b/goal_src/engine/gfx/tfrag/tfrag-near.gc index e091eb398e..ffff10fa4a 100644 --- a/goal_src/engine/gfx/tfrag/tfrag-near.gc +++ b/goal_src/engine/gfx/tfrag/tfrag-near.gc @@ -5,4 +5,89 @@ ;; name in dgo: tfrag-near ;; dgos: GAME, ENGINE -(define tnear-vu1-block (new 'static 'vu-function :length #x0 :qlength #x0)) \ No newline at end of file +(define tnear-vu1-block (new 'static 'vu-function :length #x0 :qlength #x0)) + +(defun-debug tfrag-details ((arg0 tfragment)) + "Print some stats about tfrag. It accessest past the end of the dma chain array, + so I think this is from a slightly older tfrag format" + (format 0 "id = ~d~%" (-> arg0 id)) + (format 0 "common:~%") + (let ((s5-0 (-> arg0 dma-qwc 0)) + (s4-0 (-> arg0 dma-common)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-0 s4-0) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-0) + (the-as int (* s5-0 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "base:~%") + (let ((s5-1 (-> arg0 dma-qwc 1)) + (s4-1 (-> arg0 dma-base)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-1 s4-1) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-1) + (the-as int (* s5-1 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "level-0:~%") + (let ((s5-2 (-> arg0 dma-qwc 3)) + (s4-2 (-> (the-as (pointer uint32) arg0) 10)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-2 s4-2) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-2) + (the-as int (* s5-2 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "level-1:~%") + (let ((s5-3 (-> arg0 dma-qwc 2)) + (gp-1 (-> arg0 dma-level-1)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-3 gp-1) + (disasm-vif-tag + (the-as (pointer vif-tag) gp-1) + (the-as int (* s5-3 4)) + (the-as symbol 0) + #t + ) + ) + (none) + ) + +(defun-debug clip-restore () + "Move the camera to a place in sandover" + (let ((a0-0 (new-stack-vector0)) + (a1-0 (new-stack-matrix0)) + ) + (set! (-> a0-0 x) 92648.22) + (set! (-> a0-0 y) 238025.03) + (set! (-> a0-0 z) 199836.31) + (set! (-> a0-0 w) 1.0) + (set! (-> a1-0 vector 0 x) -0.9283) + (set! (-> a1-0 vector 0 y) 0.0) + (set! (-> a1-0 vector 0 z) 0.3716) + (set! (-> a1-0 vector 0 w) 0.0) + (set! (-> a1-0 vector 1 x) -0.2257) + (set! (-> a1-0 vector 1 y) 0.7945) + (set! (-> a1-0 vector 1 z) -0.5637) + (set! (-> a1-0 vector 1 w) 0.0) + (set! (-> a1-0 vector 2 x) -0.2952) + (set! (-> a1-0 vector 2 y) -0.6072) + (set! (-> a1-0 vector 2 z) -0.7375) + (set! (-> a1-0 vector 2 w) 0.0) + (set! (-> a1-0 vector 3 x) 0.0) + (set! (-> a1-0 vector 3 y) 0.0) + (set! (-> a1-0 vector 3 z) 0.0) + (set! (-> a1-0 vector 3 w) 1.0) + (debug-set-camera-pos-rot! a0-0 a1-0) + ) + (none) + ) \ No newline at end of file diff --git a/goal_src/game.gp b/goal_src/game.gp index 3a72f15fe3..4252e31a58 100644 --- a/goal_src/game.gp +++ b/goal_src/game.gp @@ -219,6 +219,7 @@ "out/iso/MAI.DGO" "out/iso/BEA.DGO" "out/iso/CIT.DGO" + "out/iso/SUN.DGO" ) @@ -600,6 +601,77 @@ "water-anim-village2-ag" "village2-vis" ) + + +;;;;;;;;;;;;;;;;;;;;; +;; LPC +;;;;;;;;;;;;;;;;;;;;; + +(cgo "SUN.DGO" "sun.gd") + +(goal-src-sequence + "levels/sunken/" + :deps ("out/obj/default-menu.o") + "sunken-part.gc" + "sunken-part2.gc" + "sunken-part3.gc" + "sunken-part4.gc" + "sunken-part5.gc" + "target-tube.gc" + "sunken-obs.gc" + "shover.gc" + "square-platform.gc" + "sun-iris-door.gc" + "orbit-plat.gc" + "wedge-plats.gc" + "wall-plat.gc" + "qbert-plat.gc" + "steam-cap.gc" + "sun-exit-chamber.gc" + "floating-launcher.gc" + "sunken-water.gc" + "whirlpool.gc" + "sunken-pipegame.gc" + "bully.gc" + "double-lurker.gc" + "helix-water.gc" + "puffer.gc" + "sunken-fish.gc" + ) + +(copy-textures 661 663 714 662 766) + +(copy-gos + "eichar-tube+0-ag-SUN" + "bully-ag" + "double-lurker-ag" + "double-lurker-top-ag" + "exit-chamber-ag" + "generic-button-ag" + "launcherdoor-ag-SUN" + "orb-cache-top-ag-SUN" + "orbit-plat-ag" + "orbit-plat-bottom-ag" + "plat-sunken-ag" + "puffer-ag" + "qbert-plat-ag" + "qbert-plat-on-ag" + "seaweed-ag" + "shover-ag-SUN" + "side-to-side-plat-ag" + "square-platform-ag" + "steam-cap-ag-SUN" + "sun-iris-door-ag" + "sunkencam-ag-SUN" + "sunkenfisha-ag" + "wall-plat-ag" + "water-anim-sunken-ag" + "water-anim-sunken-dark-eco-ag" + "wedge-plat-ag" + "wedge-plat-outer-ag" + "whirlpool-ag" + "sunken-vis" + ) ;;;;;;;;;;;;;;;;;;;;; ;; Village 3 diff --git a/test/decompiler/reference/engine/gfx/tfrag/tfrag-methods_REF.gc b/test/decompiler/reference/engine/gfx/tfrag/tfrag-methods_REF.gc new file mode 100644 index 0000000000..c3fe7296be --- /dev/null +++ b/test/decompiler/reference/engine/gfx/tfrag/tfrag-methods_REF.gc @@ -0,0 +1,1474 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function edge-debug-lines +;; INFO: Return type mismatch symbol vs none. +(defun edge-debug-lines ((arg0 (array vector-array))) + (when (nonzero? arg0) + (dotimes (s5-0 (-> arg0 length)) + (when (logtest? *display-strip-lines* (ash 1 s5-0)) + (let ((s4-0 (-> arg0 s5-0))) + (dotimes (s3-0 (/ (-> s4-0 length) 2)) + (add-debug-line + #t + (bucket-id debug-draw1) + (-> s4-0 data (* s3-0 2)) + (-> s4-0 data (+ (* s3-0 2) 1)) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + #f + (the-as rgba -1) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function draw-drawable-tree-tfrag +;; INFO: Return type mismatch drawable-tree-tfrag vs none. +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +(defun draw-drawable-tree-tfrag ((arg0 drawable-tree-tfrag)) + (local-vars + (r0-0 none) + (a0-20 int) + (a0-22 int) + (a0-38 int) + (a0-40 int) + (sv-16 (pointer uint8)) + ) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (let ((s5-0 (+ (-> arg0 length) -1))) + (when (nonzero? s5-0) + (dotimes (s4-0 s5-0) + (let* ((v1-7 (-> arg0 arrays s4-0)) + (a0-4 (-> arg0 arrays (+ s4-0 1))) + (a1-1 + (/ (-> (the-as drawable-inline-array-node v1-7) data 0 id) 8) + ) + (a0-6 + (/ (-> (the-as drawable-inline-array-node a0-4) data 0 id) 8) + ) + (a1-3 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a1-1 + ) + ) + (a0-8 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a0-6 + ) + ) + ) + (draw-node-cull + a0-8 + a1-3 + (-> (the-as drawable-inline-array-node v1-7) data) + (-> (the-as drawable-inline-array-node v1-7) length) + ) + ) + ) + ) + (let* ((v1-13 (the-as drawable-inline-array-tfrag (-> arg0 arrays s5-0))) + (s4-1 (-> v1-13 data)) + (s3-0 (-> v1-13 length)) + ) + (set! + sv-16 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + (/ (-> s4-1 0 id) 8) + ) + ) + (let + ((s5-1 + (-> *display* frames (-> *display* on-screen) frame global-buf base) + ) + ) + (let* + ((s1-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s2-0 (-> s1-0 base)) + ) + (set! (-> *tfrag-work* wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* wait-from-spr) (the-as uint 0)) + (tfrag-init-buffer + s1-0 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (let* ((v1-28 (-> *perf-stats* data 5)) + (a0-17 (-> v1-28 ctrl)) + ) + (+! (-> v1-28 count) 1) + (b! (zero? a0-17) cfg-8 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-17) + ) + (.sync.l) + (.sync.p) + (label cfg-8) + 0 + (draw-inline-array-tfrag + sv-16 + (the-as drawable-inline-array s4-1) + s3-0 + s1-0 + ) + (let ((v1-31 (-> *perf-stats* data 5))) + (b! (zero? (-> v1-31 ctrl)) cfg-10 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-20 pcr0) + (+! (-> v1-31 accum0) a0-20) + (.mfpc a0-22 pcr1) + (+! (-> v1-31 accum1) a0-22) + ) + (label cfg-10) + 0 + (update-wait-stats + (-> *perf-stats* data 5) + (the-as uint 0) + (-> *tfrag-work* wait-to-spr) + (-> *tfrag-work* wait-from-spr) + ) + (tfrag-end-buffer s1-0) + (let ((a3-3 (-> s1-0 base))) + (let ((v1-38 (the-as object (-> s1-0 base)))) + (set! + (-> (the-as dma-packet v1-38) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-38) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-38) vif1) (new 'static 'vif-tag)) + (set! (-> s1-0 base) (&+ (the-as pointer v1-38) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 6 + 13 + ) + ) + s2-0 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + (let* + ((s1-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s2-1 (-> s1-1 base)) + ) + (set! (-> *tfrag-work* near-wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* near-wait-from-spr) (the-as uint 0)) + (tfrag-near-init-buffer + s1-1 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 0 + ) + (let* ((v1-52 (-> *perf-stats* data 6)) + (a0-35 (-> v1-52 ctrl)) + ) + (+! (-> v1-52 count) 1) + (b! (zero? a0-35) cfg-15 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-35) + ) + (.sync.l) + (.sync.p) + (label cfg-15) + 0 + (draw-inline-array-tfrag-near + sv-16 + (the-as drawable-inline-array s4-1) + s3-0 + s1-1 + ) + (let ((v1-55 (-> *perf-stats* data 6))) + (b! (zero? (-> v1-55 ctrl)) cfg-17 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-38 pcr0) + (+! (-> v1-55 accum0) a0-38) + (.mfpc a0-40 pcr1) + (+! (-> v1-55 accum1) a0-40) + ) + (label cfg-17) + 0 + (update-wait-stats + (-> *perf-stats* data 6) + (the-as uint 0) + (-> *tfrag-work* near-wait-to-spr) + (-> *tfrag-work* near-wait-from-spr) + ) + (tfrag-near-end-buffer s1-1) + (let ((a3-6 (-> s1-1 base))) + (let ((v1-62 (the-as object (-> s1-1 base)))) + (set! + (-> (the-as dma-packet v1-62) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-62) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-62) vif1) (new 'static 'vif-tag)) + (set! (-> s1-1 base) (&+ (the-as pointer v1-62) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 7 + 14 + ) + ) + s2-1 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + (let ((v1-69 *dma-mem-usage*)) + (when (nonzero? v1-69) + (set! (-> v1-69 length) (max 2 (-> v1-69 length))) + (set! (-> v1-69 data 1 name) "tfragment") + (+! (-> v1-69 data 1 count) 1) + (+! + (-> v1-69 data 1 used) + (&- + (-> *display* frames (-> *display* on-screen) frame global-buf base) + (the-as uint s5-1) + ) + ) + (set! (-> v1-69 data 1 total) (-> v1-69 data 1 used)) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function draw-drawable-tree-trans-tfrag +;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none. +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +(defun draw-drawable-tree-trans-tfrag ((arg0 drawable-tree-trans-tfrag)) + (local-vars + (r0-0 none) + (a0-18 int) + (a0-20 int) + (a0-35 int) + (a0-37 int) + (sv-16 (pointer uint8)) + ) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (let ((s5-0 (+ (-> arg0 length) -1))) + (when (nonzero? s5-0) + (dotimes (s4-0 s5-0) + (let* ((v1-7 (-> arg0 arrays s4-0)) + (a0-4 (-> arg0 arrays (+ s4-0 1))) + (a1-1 + (/ (-> (the-as drawable-inline-array-node v1-7) data 0 id) 8) + ) + (a0-6 + (/ (-> (the-as drawable-inline-array-node a0-4) data 0 id) 8) + ) + (a1-3 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a1-1 + ) + ) + (a0-8 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a0-6 + ) + ) + ) + (draw-node-cull + a0-8 + a1-3 + (-> (the-as drawable-inline-array-node v1-7) data) + (-> (the-as drawable-inline-array-node v1-7) length) + ) + ) + ) + ) + (let* ((v1-13 (-> arg0 arrays s5-0)) + (s5-1 (&+ v1-13 32)) + (s4-1 (-> v1-13 length)) + ) + (set! + sv-16 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + (/ (-> s5-1 id) 8) + ) + ) + (let* + ((s2-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-0 (-> s2-0 base)) + ) + (set! (-> *tfrag-work* wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* wait-from-spr) (the-as uint 0)) + (tfrag-init-buffer + s2-0 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x7e + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-24 (-> *perf-stats* data 5)) + (a0-14 (-> v1-24 ctrl)) + ) + (+! (-> v1-24 count) 1) + (b! (zero? a0-14) cfg-8 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-14) + ) + (.sync.l) + (.sync.p) + (label cfg-8) + 0 + (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0) + (update-wait-stats + (-> *perf-stats* data 5) + (the-as uint 0) + (-> *tfrag-work* wait-to-spr) + (-> *tfrag-work* wait-from-spr) + ) + (let ((v1-32 (-> *perf-stats* data 5))) + (b! (zero? (-> v1-32 ctrl)) cfg-10 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-18 pcr0) + (+! (-> v1-32 accum0) a0-18) + (.mfpc a0-20 pcr1) + (+! (-> v1-32 accum1) a0-20) + ) + (label cfg-10) + 0 + (tfrag-end-buffer s2-0) + (let ((a3-3 (-> s2-0 base))) + (let ((v1-34 (the-as object (-> s2-0 base)))) + (set! + (-> (the-as dma-packet v1-34) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-34) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-34) vif1) (new 'static 'vif-tag)) + (set! (-> s2-0 base) (&+ (the-as pointer v1-34) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 32 + 39 + ) + ) + s3-0 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + (let* + ((s2-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-1 (-> s2-1 base)) + ) + (set! (-> *tfrag-work* near-wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* near-wait-from-spr) (the-as uint 0)) + (tfrag-near-init-buffer + s2-1 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x7e + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-48 (-> *perf-stats* data 6)) + (a0-32 (-> v1-48 ctrl)) + ) + (+! (-> v1-48 count) 1) + (b! (zero? a0-32) cfg-15 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-32) + ) + (.sync.l) + (.sync.p) + (label cfg-15) + 0 + (draw-inline-array-tfrag-near sv-16 s5-1 s4-1 s2-1) + (let ((v1-51 (-> *perf-stats* data 6))) + (b! (zero? (-> v1-51 ctrl)) cfg-17 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-35 pcr0) + (+! (-> v1-51 accum0) a0-35) + (.mfpc a0-37 pcr1) + (+! (-> v1-51 accum1) a0-37) + ) + (label cfg-17) + 0 + (update-wait-stats + (-> *perf-stats* data 6) + (the-as uint 0) + (-> *tfrag-work* near-wait-to-spr) + (-> *tfrag-work* near-wait-from-spr) + ) + (tfrag-near-end-buffer s2-1) + (let ((a3-6 (-> s2-1 base))) + (let ((v1-58 (the-as object (-> s2-1 base)))) + (set! + (-> (the-as dma-packet v1-58) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-58) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-58) vif1) (new 'static 'vif-tag)) + (set! (-> s2-1 base) (&+ (the-as pointer v1-58) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 33 + 40 + ) + ) + s3-1 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function draw-drawable-tree-dirt-tfrag +;; INFO: Return type mismatch drawable-tree-dirt-tfrag vs none. +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +(defun draw-drawable-tree-dirt-tfrag ((arg0 drawable-tree-dirt-tfrag)) + (local-vars + (r0-0 none) + (a0-18 int) + (a0-20 int) + (a0-35 int) + (a0-37 int) + (sv-16 (pointer uint8)) + ) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (let ((s5-0 (+ (-> arg0 length) -1))) + (when (nonzero? s5-0) + (dotimes (s4-0 s5-0) + (let* ((v1-7 (-> arg0 arrays s4-0)) + (a0-4 (-> arg0 arrays (+ s4-0 1))) + (a1-1 + (/ (-> (the-as drawable-inline-array-node v1-7) data 0 id) 8) + ) + (a0-6 + (/ (-> (the-as drawable-inline-array-node a0-4) data 0 id) 8) + ) + (a1-3 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a1-1 + ) + ) + (a0-8 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a0-6 + ) + ) + ) + (draw-node-cull + a0-8 + a1-3 + (-> (the-as drawable-inline-array-node v1-7) data) + (-> (the-as drawable-inline-array-node v1-7) length) + ) + ) + ) + ) + (let* ((v1-13 (-> arg0 arrays s5-0)) + (s5-1 (&+ v1-13 32)) + (s4-1 (-> v1-13 length)) + ) + (set! + sv-16 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + (/ (-> s5-1 id) 8) + ) + ) + (let* + ((s2-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-0 (-> s2-0 base)) + ) + (set! (-> *tfrag-work* wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* wait-from-spr) (the-as uint 0)) + (tfrag-init-buffer + s2-0 + (new 'static 'gs-test + :ate #x1 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-24 (-> *perf-stats* data 5)) + (a0-14 (-> v1-24 ctrl)) + ) + (+! (-> v1-24 count) 1) + (b! (zero? a0-14) cfg-8 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-14) + ) + (.sync.l) + (.sync.p) + (label cfg-8) + 0 + (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0) + (update-wait-stats + (-> *perf-stats* data 5) + (the-as uint 0) + (-> *tfrag-work* wait-to-spr) + (-> *tfrag-work* wait-from-spr) + ) + (let ((v1-32 (-> *perf-stats* data 5))) + (b! (zero? (-> v1-32 ctrl)) cfg-10 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-18 pcr0) + (+! (-> v1-32 accum0) a0-18) + (.mfpc a0-20 pcr1) + (+! (-> v1-32 accum1) a0-20) + ) + (label cfg-10) + 0 + (tfrag-end-buffer s2-0) + (let ((a3-3 (-> s2-0 base))) + (let ((v1-34 (the-as object (-> s2-0 base)))) + (set! + (-> (the-as dma-packet v1-34) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-34) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-34) vif1) (new 'static 'vif-tag)) + (set! (-> s2-0 base) (&+ (the-as pointer v1-34) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 34 + 41 + ) + ) + s3-0 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + (let* + ((s2-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-1 (-> s2-1 base)) + ) + (set! (-> *tfrag-work* near-wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* near-wait-from-spr) (the-as uint 0)) + (tfrag-near-init-buffer + s2-1 + (new 'static 'gs-test + :ate #x1 + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-48 (-> *perf-stats* data 6)) + (a0-32 (-> v1-48 ctrl)) + ) + (+! (-> v1-48 count) 1) + (b! (zero? a0-32) cfg-15 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-32) + ) + (.sync.l) + (.sync.p) + (label cfg-15) + 0 + (draw-inline-array-tfrag-near sv-16 s5-1 s4-1 s2-1) + (let ((v1-51 (-> *perf-stats* data 6))) + (b! (zero? (-> v1-51 ctrl)) cfg-17 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-35 pcr0) + (+! (-> v1-51 accum0) a0-35) + (.mfpc a0-37 pcr1) + (+! (-> v1-51 accum1) a0-37) + ) + (label cfg-17) + 0 + (update-wait-stats + (-> *perf-stats* data 6) + (the-as uint 0) + (-> *tfrag-work* near-wait-to-spr) + (-> *tfrag-work* near-wait-from-spr) + ) + (tfrag-near-end-buffer s2-1) + (let ((a3-6 (-> s2-1 base))) + (let ((v1-58 (the-as object (-> s2-1 base)))) + (set! + (-> (the-as dma-packet v1-58) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-58) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-58) vif1) (new 'static 'vif-tag)) + (set! (-> s2-1 base) (&+ (the-as pointer v1-58) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 35 + 42 + ) + ) + s3-1 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function draw-drawable-tree-ice-tfrag +;; INFO: Return type mismatch drawable-tree-ice-tfrag vs none. +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr0, r0] +;; WARN: Unsupported inline assembly instruction kind - [mtpc pcr1, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, a0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mtc0 Perf, r0] +;; WARN: Unsupported inline assembly instruction kind - [sync.l] +;; WARN: Unsupported inline assembly instruction kind - [sync.p] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr0] +;; WARN: Unsupported inline assembly instruction kind - [mfpc a0, pcr1] +(defun draw-drawable-tree-ice-tfrag ((arg0 drawable-tree-ice-tfrag)) + (local-vars + (r0-0 none) + (a0-18 int) + (a0-20 int) + (a0-35 int) + (a0-37 int) + (sv-16 (pointer uint8)) + ) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (let ((s5-0 (+ (-> arg0 length) -1))) + (when (nonzero? s5-0) + (dotimes (s4-0 s5-0) + (let* ((v1-7 (-> arg0 arrays s4-0)) + (a0-4 (-> arg0 arrays (+ s4-0 1))) + (a1-1 + (/ (-> (the-as drawable-inline-array-node v1-7) data 0 id) 8) + ) + (a0-6 + (/ (-> (the-as drawable-inline-array-node a0-4) data 0 id) 8) + ) + (a1-3 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a1-1 + ) + ) + (a0-8 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + a0-6 + ) + ) + ) + (draw-node-cull + a0-8 + a1-3 + (-> (the-as drawable-inline-array-node v1-7) data) + (-> (the-as drawable-inline-array-node v1-7) length) + ) + ) + ) + ) + (let* ((v1-13 (-> arg0 arrays s5-0)) + (s5-1 (&+ v1-13 32)) + (s4-1 (-> v1-13 length)) + ) + (set! + sv-16 + (&-> + (the-as terrain-context #x70000000) + work + background + vis-list + (/ (-> s5-1 id) 8) + ) + ) + (let* + ((s2-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-0 (-> s2-0 base)) + ) + (set! (-> *tfrag-work* wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* wait-from-spr) (the-as uint 0)) + (tfrag-init-buffer + s2-0 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest always) + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-24 (-> *perf-stats* data 5)) + (a0-14 (-> v1-24 ctrl)) + ) + (+! (-> v1-24 count) 1) + (b! (zero? a0-14) cfg-8 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-14) + ) + (.sync.l) + (.sync.p) + (label cfg-8) + 0 + (draw-inline-array-tfrag sv-16 s5-1 s4-1 s2-0) + (update-wait-stats + (-> *perf-stats* data 5) + (the-as uint 0) + (-> *tfrag-work* wait-to-spr) + (-> *tfrag-work* wait-from-spr) + ) + (let ((v1-32 (-> *perf-stats* data 5))) + (b! (zero? (-> v1-32 ctrl)) cfg-10 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-18 pcr0) + (+! (-> v1-32 accum0) a0-18) + (.mfpc a0-20 pcr1) + (+! (-> v1-32 accum1) a0-20) + ) + (label cfg-10) + 0 + (tfrag-end-buffer s2-0) + (let ((a3-3 (-> s2-0 base))) + (let ((v1-34 (the-as object (-> s2-0 base)))) + (set! + (-> (the-as dma-packet v1-34) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-34) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-34) vif1) (new 'static 'vif-tag)) + (set! (-> s2-0 base) (&+ (the-as pointer v1-34) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 36 + 43 + ) + ) + s3-0 + (the-as (pointer dma-tag) a3-3) + ) + ) + ) + (let* + ((s2-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s3-1 (-> s2-1 base)) + ) + (set! (-> *tfrag-work* near-wait-to-spr) (the-as uint 0)) + (set! (-> *tfrag-work* near-wait-from-spr) (the-as uint 0)) + (tfrag-near-init-buffer + s2-1 + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest always) + :afail #x1 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + 1 + ) + (let* ((v1-48 (-> *perf-stats* data 6)) + (a0-32 (-> v1-48 ctrl)) + ) + (+! (-> v1-48 count) 1) + (b! (zero? a0-32) cfg-15 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 r0-0) + (.mtpc pcr1 r0-0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-32) + ) + (.sync.l) + (.sync.p) + (label cfg-15) + 0 + (draw-inline-array-tfrag-near sv-16 s5-1 s4-1 s2-1) + (let ((v1-51 (-> *perf-stats* data 6))) + (b! (zero? (-> v1-51 ctrl)) cfg-17 :delay (nop!)) + (.mtc0 Perf r0-0) + (.sync.l) + (.sync.p) + (.mfpc a0-35 pcr0) + (+! (-> v1-51 accum0) a0-35) + (.mfpc a0-37 pcr1) + (+! (-> v1-51 accum1) a0-37) + ) + (label cfg-17) + 0 + (update-wait-stats + (-> *perf-stats* data 6) + (the-as uint 0) + (-> *tfrag-work* near-wait-to-spr) + (-> *tfrag-work* near-wait-from-spr) + ) + (tfrag-near-end-buffer s2-1) + (let ((a3-6 (-> s2-1 base))) + (let ((v1-58 (the-as object (-> s2-1 base)))) + (set! + (-> (the-as dma-packet v1-58) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-58) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-58) vif1) (new 'static 'vif-tag)) + (set! (-> s2-1 base) (&+ (the-as pointer v1-58) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (the-as + bucket-id + (if (zero? (-> (the-as terrain-context #x70000000) bsp lev-index)) + 37 + 44 + ) + ) + s3-1 + (the-as (pointer dma-tag) a3-6) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for method 10 of type drawable-tree-tfrag +;; INFO: Return type mismatch drawable-tree-tfrag vs none. +(defmethod + draw + drawable-tree-tfrag + ((obj drawable-tree-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* tfrag-trees v1-1) obj) + (set! (-> *background-work* tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* tfrag-tree-count) 1) + (none) + ) + +;; definition for method 10 of type drawable-tree-trans-tfrag +;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none. +(defmethod + draw + drawable-tree-trans-tfrag + ((obj drawable-tree-trans-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* trans-tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* trans-tfrag-trees v1-1) obj) + (set! (-> *background-work* trans-tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* trans-tfrag-tree-count) 1) + (none) + ) + +;; definition for method 10 of type drawable-tree-dirt-tfrag +;; INFO: Return type mismatch drawable-tree-dirt-tfrag vs none. +(defmethod + draw + drawable-tree-dirt-tfrag + ((obj drawable-tree-dirt-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* dirt-tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* dirt-tfrag-trees v1-1) obj) + (set! (-> *background-work* dirt-tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* dirt-tfrag-tree-count) 1) + (none) + ) + +;; definition for method 10 of type drawable-tree-ice-tfrag +;; INFO: Return type mismatch drawable-tree-ice-tfrag vs none. +(defmethod + draw + drawable-tree-ice-tfrag + ((obj drawable-tree-ice-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* ice-tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* ice-tfrag-trees v1-1) obj) + (set! (-> *background-work* ice-tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* ice-tfrag-tree-count) 1) + (none) + ) + +;; definition for method 10 of type drawable-tree-lowres-tfrag +;; INFO: Return type mismatch drawable-tree-lowres-tfrag vs none. +(defmethod + draw + drawable-tree-lowres-tfrag + ((obj drawable-tree-lowres-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* lowres-tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* lowres-tfrag-trees v1-1) obj) + (set! (-> *background-work* lowres-tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* lowres-tfrag-tree-count) 1) + (none) + ) + +;; definition for method 10 of type drawable-tree-lowres-trans-tfrag +;; INFO: Return type mismatch drawable-tree-lowres-trans-tfrag vs none. +(defmethod + draw + drawable-tree-lowres-trans-tfrag + ((obj drawable-tree-lowres-trans-tfrag) (arg0 drawable) (arg1 display-frame)) + (let* ((v1-1 (-> *background-work* lowres-trans-tfrag-tree-count)) + (a1-2 (-> (the-as terrain-context #x70000000) bsp lev-index)) + (a1-5 (-> *level* level a1-2)) + ) + (set! (-> *background-work* lowres-trans-tfrag-trees v1-1) obj) + (set! (-> *background-work* lowres-trans-tfrag-levels v1-1) a1-5) + ) + (+! (-> *background-work* lowres-trans-tfrag-tree-count) 1) + (none) + ) + +;; definition for method 14 of type tfragment +(defmethod collect-stats tfragment ((obj tfragment)) + (stats-tfrag-asm obj) + (none) + ) + +;; definition for method 14 of type drawable-tree-tfrag +;; INFO: Return type mismatch drawable-tree-tfrag vs none. +;; Used lq/sq +(defmethod collect-stats drawable-tree-tfrag ((obj drawable-tree-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask tfrag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask tfrag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* tfrag)) + (set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* tfrag-near)) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-tree-lowres-tfrag +;; INFO: Return type mismatch drawable-tree-lowres-tfrag vs none. +;; Used lq/sq +(defmethod + collect-stats + drawable-tree-lowres-tfrag + ((obj drawable-tree-lowres-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask tfrag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask tfrag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* tfrag)) + (set! (-> *tfrag-work* tr-stat-tfrag-near) (-> *terrain-stats* tfrag-near)) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-tree-trans-tfrag +;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none. +;; Used lq/sq +(defmethod + collect-stats + drawable-tree-trans-tfrag + ((obj drawable-tree-trans-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag)) + (set! + (-> *tfrag-work* tr-stat-tfrag-near) + (-> *terrain-stats* trans-tfrag-near) + ) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-tree-lowres-trans-tfrag +;; INFO: Return type mismatch drawable-tree-lowres-trans-tfrag vs none. +;; Used lq/sq +(defmethod + collect-stats + drawable-tree-lowres-trans-tfrag + ((obj drawable-tree-lowres-trans-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag)) + (set! + (-> *tfrag-work* tr-stat-tfrag-near) + (-> *terrain-stats* trans-tfrag-near) + ) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-tree-dirt-tfrag +;; INFO: Return type mismatch drawable-tree-dirt-tfrag vs none. +;; Used lq/sq +(defmethod + collect-stats + drawable-tree-dirt-tfrag + ((obj drawable-tree-dirt-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag)) + (set! + (-> *tfrag-work* tr-stat-tfrag-near) + (-> *terrain-stats* trans-tfrag-near) + ) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-tree-ice-tfrag +;; INFO: Return type mismatch drawable-tree-ice-tfrag vs none. +;; Used lq/sq +(defmethod collect-stats drawable-tree-ice-tfrag ((obj drawable-tree-ice-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (set! + (-> *tfrag-work* vu1-enable-tfrag) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! + (-> *tfrag-work* vu1-enable-tfrag-near) + (the-as int (logand *vu1-enable-user* (vu1-renderer-mask trans-frag))) + ) + (set! (-> *tfrag-work* tr-stat-tfrag) (-> *terrain-stats* trans-tfrag)) + (set! + (-> *tfrag-work* tr-stat-tfrag-near) + (-> *terrain-stats* trans-tfrag-near) + ) + (let ((v1-12 (-> *tfrag-work* frag-dists quad))) + (set! (-> *tfrag-work* frag-dists quad) v1-12) + ) + (dotimes (s5-0 (-> obj length)) + (collect-stats (-> obj arrays s5-0)) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-inline-array-tfrag +;; INFO: Return type mismatch drawable-inline-array-tfrag vs none. +(defmethod + collect-stats + drawable-inline-array-tfrag + ((obj drawable-inline-array-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (dotimes (s5-0 (-> obj length)) + (let ((s4-0 (-> obj data s5-0))) + (if (vis-cull (-> s4-0 id)) + (collect-stats s4-0) + ) + ) + ) + ) + (none) + ) + +;; definition for method 14 of type drawable-inline-array-trans-tfrag +;; INFO: Return type mismatch drawable-inline-array-trans-tfrag vs none. +(defmethod + collect-stats + drawable-inline-array-trans-tfrag + ((obj drawable-inline-array-trans-tfrag)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask trans-frag)) + (dotimes (s5-0 (-> obj length)) + (let ((s4-0 (-> obj data s5-0))) + (if (vis-cull (-> s4-0 id)) + (collect-stats s4-0) + ) + ) + ) + ) + (none) + ) + +;; definition for method 15 of type drawable-tree-tfrag +;; INFO: Return type mismatch drawable-tree-tfrag vs none. +(defmethod + debug-draw + drawable-tree-tfrag + ((obj drawable-tree-tfrag) (arg0 drawable) (arg1 display-frame)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (dotimes (s4-0 (-> obj length)) + (let ((a1-1 (-> obj arrays s4-0))) + (debug-draw a1-1 a1-1 arg1) + ) + ) + ) + (none) + ) + +;; definition for method 15 of type drawable-tree-trans-tfrag +;; INFO: Return type mismatch drawable-tree-trans-tfrag vs none. +(defmethod + debug-draw + drawable-tree-trans-tfrag + ((obj drawable-tree-trans-tfrag) (arg0 drawable) (arg1 display-frame)) + (when (logtest? *vu1-enable-user* (vu1-renderer-mask tfrag)) + (dotimes (s4-0 (-> obj length)) + (let ((a1-1 (-> obj arrays s4-0))) + (debug-draw a1-1 a1-1 arg1) + ) + ) + ) + (none) + ) + +;; definition for method 15 of type drawable-inline-array-tfrag +;; INFO: Return type mismatch drawable-inline-array-tfrag vs none. +(defmethod + debug-draw + drawable-inline-array-tfrag + ((obj drawable-inline-array-tfrag) (arg0 drawable) (arg1 display-frame)) + (dotimes (s4-0 (-> obj length)) + (let ((s3-0 (-> obj data s4-0))) + (if (vis-cull (-> s3-0 id)) + (debug-draw s3-0 s3-0 arg1) + ) + ) + ) + (none) + ) + +;; definition for method 15 of type tfragment +(defmethod + debug-draw + tfragment + ((obj tfragment) (arg0 drawable) (arg1 display-frame)) + (-> arg1 global-buf) + (edge-debug-lines (-> obj debug-data debug-lines)) + (none) + ) + + + + diff --git a/test/decompiler/reference/engine/gfx/tfrag/tfrag-near_REF.gc b/test/decompiler/reference/engine/gfx/tfrag/tfrag-near_REF.gc new file mode 100644 index 0000000000..6e94cdcdc5 --- /dev/null +++ b/test/decompiler/reference/engine/gfx/tfrag/tfrag-near_REF.gc @@ -0,0 +1,96 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol tnear-vu1-block, type vu-function +(define tnear-vu1-block (new 'static 'vu-function :length #x388 :qlength #x1c4)) + +;; definition (debug) for function tfrag-details +;; INFO: Return type mismatch symbol vs none. +(defun-debug tfrag-details ((arg0 tfragment)) + (format 0 "id = ~d~%" (-> arg0 id)) + (format 0 "common:~%") + (let ((s5-0 (-> arg0 dma-qwc 0)) + (s4-0 (-> arg0 dma-common)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-0 s4-0) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-0) + (the-as int (* s5-0 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "base:~%") + (let ((s5-1 (-> arg0 dma-qwc 1)) + (s4-1 (-> arg0 dma-base)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-1 s4-1) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-1) + (the-as int (* s5-1 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "level-0:~%") + (let ((s5-2 (-> arg0 dma-qwc 3)) + (s4-2 (-> (the-as (pointer uint32) arg0) 10)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-2 s4-2) + (disasm-vif-tag + (the-as (pointer vif-tag) s4-2) + (the-as int (* s5-2 4)) + (the-as symbol 0) + #t + ) + ) + (format 0 "level-1:~%") + (let ((s5-3 (-> arg0 dma-qwc 2)) + (gp-1 (-> arg0 dma-level-1)) + ) + (format 0 "qwc = ~d, ref = ~x~%" s5-3 gp-1) + (disasm-vif-tag + (the-as (pointer vif-tag) gp-1) + (the-as int (* s5-3 4)) + (the-as symbol 0) + #t + ) + ) + (none) + ) + +;; definition (debug) for function clip-restore +;; INFO: Return type mismatch vector vs none. +;; Used lq/sq +(defun-debug clip-restore () + (let ((a0-0 (new-stack-vector0)) + (a1-0 (new-stack-matrix0)) + ) + (set! (-> a0-0 x) 92648.22) + (set! (-> a0-0 y) 238025.03) + (set! (-> a0-0 z) 199836.31) + (set! (-> a0-0 w) 1.0) + (set! (-> a1-0 vector 0 x) -0.9283) + (set! (-> a1-0 vector 0 y) 0.0) + (set! (-> a1-0 vector 0 z) 0.3716) + (set! (-> a1-0 vector 0 w) 0.0) + (set! (-> a1-0 vector 1 x) -0.2257) + (set! (-> a1-0 vector 1 y) 0.7945) + (set! (-> a1-0 vector 1 z) -0.5637) + (set! (-> a1-0 vector 1 w) 0.0) + (set! (-> a1-0 vector 2 x) -0.2952) + (set! (-> a1-0 vector 2 y) -0.6072) + (set! (-> a1-0 vector 2 z) -0.7375) + (set! (-> a1-0 vector 2 w) 0.0) + (set! (-> a1-0 vector 3 x) 0.0) + (set! (-> a1-0 vector 3 y) 0.0) + (set! (-> a1-0 vector 3 z) 0.0) + (set! (-> a1-0 vector 3 w) 1.0) + (debug-set-camera-pos-rot! a0-0 a1-0) + ) + (none) + ) + + + + diff --git a/test/decompiler/reference/engine/gfx/tfrag/tfrag_REF.gc b/test/decompiler/reference/engine/gfx/tfrag/tfrag_REF.gc new file mode 100644 index 0000000000..c41faa06c9 --- /dev/null +++ b/test/decompiler/reference/engine/gfx/tfrag/tfrag_REF.gc @@ -0,0 +1,753 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 9 of type tfragment +(defmethod login tfragment ((obj tfragment)) + (dotimes (s5-0 (the-as int (-> obj num-shaders))) + (adgif-shader-login-no-remap (-> obj shader s5-0)) + ) + obj + ) + +;; definition for method 8 of type tfragment +(defmethod + mem-usage + tfragment + ((obj tfragment) (arg0 memory-usage-block) (arg1 int)) + (when (logtest? arg1 2) + (+! (-> arg0 data 19 count) 1) + (let + ((v1-6 + (+ + (-> obj num-base-colors) + (-> obj num-level0-colors) + (-> obj num-level1-colors) + ) + ) + ) + (+! (-> arg0 data 19 used) v1-6) + (+! (-> arg0 data 19 total) (logand -4 (+ v1-6 3))) + ) + (set! obj obj) + (goto cfg-16) + ) + (let ((s4-0 1)) + (set! (-> arg0 length) (max (-> arg0 length) (+ s4-0 8))) + (set! (-> arg0 data s4-0 name) (symbol->string 'tfragment)) + (+! (-> arg0 data s4-0 count) 1) + (let ((v1-22 (asize-of obj))) + (+! (-> arg0 data s4-0 used) v1-22) + (+! (-> arg0 data s4-0 total) (logand -16 (+ v1-22 15))) + ) + (set! (-> arg0 data (+ s4-0 1) name) "tfragment-base") + (+! (-> arg0 data (+ s4-0 1) count) 1) + (let ((v1-33 (* (-> obj dma-qwc 0) 16))) + (+! (-> arg0 data (+ s4-0 1) used) v1-33) + (+! (-> arg0 data (+ s4-0 1) total) v1-33) + ) + (set! (-> arg0 data (+ s4-0 2) name) "tfragment-common") + (+! (-> arg0 data (+ s4-0 2) count) 1) + (let ((v1-43 (* (- (-> obj dma-qwc 1) (-> obj dma-qwc 0)) 16))) + (+! (-> arg0 data (+ s4-0 2) used) v1-43) + (+! (-> arg0 data (+ s4-0 2) total) v1-43) + ) + (set! (-> arg0 data (+ s4-0 3) name) "tfragment-level0") + (when (nonzero? (-> obj num-level0-colors)) + (+! (-> arg0 data (+ s4-0 3) count) 1) + (let ((v1-55 (* (- (-> obj dma-qwc 2) (-> obj dma-qwc 0)) 16))) + (+! (-> arg0 data (+ s4-0 3) used) v1-55) + (+! (-> arg0 data (+ s4-0 3) total) v1-55) + ) + ) + (set! (-> arg0 data (+ s4-0 4) name) "tfragment-level1") + (when + (not + (or + (= (-> obj dma-level-1) (-> obj dma-common)) + (= (-> obj dma-level-1) (-> obj dma-base)) + (zero? (-> obj num-level1-colors)) + ) + ) + (+! (-> arg0 data (+ s4-0 4) count) 1) + (let + ((v1-70 + (* + (- + (-> obj dma-qwc 3) + (the-as + uint + (- + (/ (the-as int (- (-> obj dma-level-1) (-> obj dma-common))) 16) + (the-as int (-> obj dma-qwc 0)) + ) + ) + ) + 16 + ) + ) + ) + (+! (-> arg0 data (+ s4-0 4) used) v1-70) + (+! (-> arg0 data (+ s4-0 4) total) v1-70) + ) + ) + (set! (-> arg0 data (+ s4-0 5) name) "tfragment-color") + (+! (-> arg0 data (+ s4-0 5) count) 1) + (let ((v1-79 (if (logtest? arg1 1) + 0 + (the-as + int + (* + (+ + (-> obj num-base-colors) + (-> obj num-level0-colors) + (-> obj num-level1-colors) + ) + 2 + ) + ) + ) + ) + ) + (+! (-> arg0 data (+ s4-0 5) used) v1-79) + (+! (-> arg0 data (+ s4-0 5) total) (logand -16 (+ v1-79 15))) + ) + (set! (-> arg0 data (+ s4-0 6) name) "tfragment-debug") + ) + (label cfg-16) + obj + ) + +;; definition for method 3 of type drawable-inline-array-tfrag +(defmethod + inspect + drawable-inline-array-tfrag + ((obj drawable-inline-array-tfrag)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data)) + (dotimes (s5-0 (-> obj length)) + (format #t "~T [~D] ~A~%" s5-0 (-> obj data s5-0)) + ) + obj + ) + +;; definition for method 9 of type drawable-inline-array-tfrag +(defmethod login drawable-inline-array-tfrag ((obj drawable-inline-array-tfrag)) + (dotimes (s5-0 (-> obj length)) + (login (-> obj data s5-0)) + ) + obj + ) + +;; definition for method 8 of type drawable-inline-array-tfrag +(defmethod + mem-usage + drawable-inline-array-tfrag + ((obj drawable-inline-array-tfrag) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + obj + ) + +;; definition for method 8 of type drawable-tree-tfrag +(defmethod + mem-usage + drawable-tree-tfrag + ((obj drawable-tree-tfrag) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) "drawable-group") + (+! (-> arg0 data 0 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 0 used) v1-6) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-6 15))) + ) + (when (nonzero? (-> obj time-of-day-pal)) + (set! (-> arg0 length) (max 9 (-> arg0 length))) + (set! (-> arg0 data 8 name) "tfragment-pal") + (+! (-> arg0 data 8 count) 1) + (let ((v1-18 (asize-of (-> obj time-of-day-pal)))) + (+! (-> arg0 data 8 used) v1-18) + (+! (-> arg0 data 8 total) (logand -16 (+ v1-18 15))) + ) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj arrays s3-0) arg0 arg1) + ) + obj + ) + +;; definition for method 5 of type drawable-inline-array-tfrag +;; INFO: Return type mismatch uint vs int. +(defmethod + asize-of + drawable-inline-array-tfrag + ((obj drawable-inline-array-tfrag)) + (the-as + int + (+ (-> drawable-inline-array-tfrag size) (* (+ (-> obj length) -1) 64)) + ) + ) + +;; definition for symbol *tfrag-display-stats*, type symbol +(define *tfrag-display-stats* #f) + +;; definition for symbol tfrag-vu1-block, type vu-function +(define tfrag-vu1-block (new 'static 'vu-function :length #x74b :qlength #x3a6)) + +;; definition for function tfrag-data-setup +;; INFO: Return type mismatch tfrag-data vs none. +;; Used lq/sq +(defun tfrag-data-setup ((arg0 tfrag-data) (arg1 int)) + (let ((v1-0 *math-camera*)) + (set-vector! + (-> arg0 fog) + (-> v1-0 pfog0) + (-> v1-0 fog-min) + (-> v1-0 fog-max) + 3072.0 + ) + (set-vector! (-> arg0 val) 0.5 1.0 2048.0 0.0) + (set-vector! (-> arg0 ambient) 1.0 1.0 1.0 1.0) + (cond + ((zero? *subdivide-draw-mode*) + (set! + (-> arg0 strgif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :iip #x1 :tme #x1 :fge #x1 :abe arg1) + ) + ) + (set! + (-> arg0 fangif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :iip #x1 :tme #x1 :fge #x1 :abe arg1) + ) + ) + ) + ((= *subdivide-draw-mode* 1) + (set! + (-> arg0 strgif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type line-strip) :iip #x1 :tme #x1 :fge #x1 :abe arg1) + ) + ) + (set! + (-> arg0 fangif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type line-strip) :iip #x1 :tme #x1 :fge #x1 :abe arg1) + ) + ) + ) + ((= *subdivide-draw-mode* 2) + (set! + (-> arg0 strgif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-strip) :iip #x1 :fge #x1 :abe arg1) + ) + ) + (set! + (-> arg0 fangif tag) + (new 'static 'gif-tag64 + :pre #x1 + :nreg #x3 + :prim (new 'static 'gs-prim :prim (gs-prim-type tri-fan) :iip #x1 :fge #x1 :abe arg1) + ) + ) + ) + ) + (set! + (-> arg0 strgif regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id st) + :regs1 (gif-reg-id rgbaq) + :regs2 (gif-reg-id xyzf2) + ) + ) + (set! + (-> arg0 fangif regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id st) + :regs1 (gif-reg-id rgbaq) + :regs2 (gif-reg-id xyzf2) + ) + ) + (set! (-> arg0 adgif tag) (new 'static 'gif-tag64 :nloop #x5 :nreg #x1)) + (set! + (-> arg0 adgif regs) + (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d)) + ) + (set! (-> arg0 hvdf-offset quad) (-> v1-0 hvdf-off quad)) + (set! (-> arg0 hmge-scale quad) (-> v1-0 hmge-scale quad)) + (set! (-> arg0 invh-scale quad) (-> v1-0 inv-hmge-scale quad)) + (set! (-> arg0 guard quad) (-> v1-0 guard quad)) + ) + (set-tfrag-dists! (-> arg0 dists)) + (none) + ) + +;; definition for function add-tfrag-mtx-0 +;; INFO: Return type mismatch pointer vs none. +(defun add-tfrag-mtx-0 ((arg0 dma-buffer)) + (let* ((a1-0 4) + (v1-0 arg0) + (a0-1 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a0-1) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc a1-0) + ) + (set! + (-> (the-as dma-packet a0-1) vif0) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! + (-> (the-as dma-packet a0-1) vif1) + (new 'static 'vif-tag :imm #x5 :cmd (vif-cmd unpack-v4-32) :num a1-0) + ) + (set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16)) + ) + (column-scale-matrix! + (the-as matrix (-> arg0 base)) + (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0) + (-> *math-camera* camera-temp) + ) + (&+! (-> arg0 base) 64) + (none) + ) + +;; definition for function add-tfrag-mtx-1 +;; INFO: Return type mismatch pointer vs none. +(defun add-tfrag-mtx-1 ((arg0 dma-buffer)) + (let* ((a1-0 4) + (v1-0 arg0) + (a0-1 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a0-1) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc a1-0) + ) + (set! + (-> (the-as dma-packet a0-1) vif0) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! + (-> (the-as dma-packet a0-1) vif1) + (new 'static 'vif-tag :imm #x14d :cmd (vif-cmd unpack-v4-32) :num a1-0) + ) + (set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16)) + ) + (column-scale-matrix! + (the-as matrix (-> arg0 base)) + (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0) + (-> *math-camera* camera-temp) + ) + (&+! (-> arg0 base) 64) + (none) + ) + +;; definition for function add-tfrag-data +;; INFO: Return type mismatch pointer vs none. +(defun add-tfrag-data ((arg0 dma-buffer) (arg1 int)) + (let* ((a2-0 14) + (v1-0 arg0) + (a0-1 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a0-1) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc a2-0) + ) + (set! + (-> (the-as dma-packet a0-1) vif0) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! + (-> (the-as dma-packet a0-1) vif1) + (new 'static 'vif-tag :imm #x290 :cmd (vif-cmd unpack-v4-32) :num a2-0) + ) + (set! (-> v1-0 base) (&+ (the-as pointer a0-1) 16)) + ) + (tfrag-data-setup (the-as tfrag-data (-> arg0 base)) arg1) + (&+! (-> arg0 base) 224) + (let ((v1-3 (the-as object (-> arg0 base)))) + (set! + (-> (the-as dma-packet v1-3) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt)) + ) + (set! (-> (the-as dma-packet v1-3) vif0) (new 'static 'vif-tag)) + (set! + (-> (the-as dma-packet v1-3) vif1) + (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1) + ) + (set! (-> arg0 base) (&+ (the-as pointer v1-3) 16)) + ) + (none) + ) + +;; definition for symbol t-stat, type tfrag-stats +(define t-stat (new 'global 'tfrag-stats)) + +;; definition for function tfrag-print-stats +;; INFO: Return type mismatch symbol vs none. +(defun tfrag-print-stats ((arg0 symbol)) + (when (and *tfrag-display-stats* (!= *master-mode* 'menu)) + (format arg0 "~%") + (format arg0 "tris: ~8d~%" (-> t-stat tris)) + (format + arg0 + "verts: ~8d~%" + (+ (-> t-stat base-verts) (-> t-stat level0-verts) (-> t-stat level1-verts)) + ) + (format arg0 " base: ~8d~%" (-> t-stat base-verts)) + (format arg0 " lev0: ~8d~%" (-> t-stat level0-verts)) + (format arg0 " lev1: ~8d~%" (-> t-stat level1-verts)) + (format arg0 "tfaces: ~8d~%" (-> t-stat tfaces)) + (format arg0 "tfrags: ~8d~%" (-> t-stat tfrags)) + (format arg0 "dtris: ~8d~%" (-> t-stat dtris)) + (format arg0 "dps: ~8d~%" (-> t-stat drawpoints)) + (format arg0 "strips: ~8d~%" (-> t-stat strips)) + (format arg0 "shaders:~8d~%" (-> t-stat dma-tex)) + (format + arg0 + "tri/str:~8f~%" + (/ (the float (-> t-stat dtris)) (the float (-> t-stat strips))) + ) + (format + arg0 + "dma-cnt:~8d (~8d)~%" + (-> t-stat dma-cnt) + (* (-> t-stat dma-cnt) 32) + ) + (format + arg0 + "dma-dta:~8d (~8d)~%" + (-> t-stat dma-dta) + (/ (* 33 (-> t-stat dma-dta)) 10) + ) + (let ((f0-4 (* 32.0 (the float (-> t-stat dma-cnt)))) + (f1-5 (* 3.3 (the float (-> t-stat dma-dta)))) + (f2-3 (* 30.0 (the float (-> t-stat tfrags)))) + ) + (+ f0-4 f1-5 f2-3) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(set! (-> t-stat from) 0) + +;; failed to figure out what this is: +(set! (-> t-stat to) 0) + +;; failed to figure out what this is: +(set! (-> t-stat cnt) 0) + +;; definition for function tfrag-init-buffer +;; INFO: Return type mismatch symbol vs none. +(defun tfrag-init-buffer ((arg0 dma-buffer) (arg1 gs-test) (arg2 int)) + (dma-buffer-add-vu-function arg0 tfrag-vu1-block 1) + (let* ((v1-0 arg0) + (a0-2 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a0-2) dma) + (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)) + ) + (set! (-> (the-as dma-packet a0-2) vif0) (new 'static 'vif-tag)) + (set! + (-> (the-as dma-packet a0-2) vif1) + (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1) + ) + (set! (-> v1-0 base) (&+ (the-as pointer a0-2) 16)) + ) + (let* ((v1-1 arg0) + (a0-4 (the-as object (-> v1-1 base))) + ) + (set! + (-> (the-as gs-gif-tag a0-4) tag) + (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1) + ) + (set! + (-> (the-as gs-gif-tag a0-4) regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id a+d) + :regs1 (gif-reg-id a+d) + :regs2 (gif-reg-id a+d) + :regs3 (gif-reg-id a+d) + :regs4 (gif-reg-id a+d) + :regs5 (gif-reg-id a+d) + :regs6 (gif-reg-id a+d) + :regs7 (gif-reg-id a+d) + :regs8 (gif-reg-id a+d) + :regs9 (gif-reg-id a+d) + :regs10 (gif-reg-id a+d) + :regs11 (gif-reg-id a+d) + :regs12 (gif-reg-id a+d) + :regs13 (gif-reg-id a+d) + :regs14 (gif-reg-id a+d) + :regs15 (gif-reg-id a+d) + ) + ) + (set! (-> v1-1 base) (&+ (the-as pointer a0-4) 16)) + ) + (let* ((v1-2 arg0) + (a0-6 (-> v1-2 base)) + ) + (set! (-> (the-as (pointer gs-test) a0-6) 0) arg1) + (set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 test-1)) + (set! (-> v1-2 base) (&+ a0-6 16)) + ) + (add-tfrag-mtx-0 arg0) + (add-tfrag-mtx-1 arg0) + (add-tfrag-data arg0 arg2) + (let ((v1-3 (the-as object (-> arg0 base)))) + (set! + (-> (the-as dma-packet v1-3) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt)) + ) + (set! + (-> (the-as dma-packet v1-3) vif0) + (new 'static 'vif-tag :cmd (vif-cmd base)) + ) + (set! + (-> (the-as dma-packet v1-3) vif1) + (new 'static 'vif-tag :imm #x148 :cmd (vif-cmd offset)) + ) + (set! (-> arg0 base) (&+ (the-as pointer v1-3) 16)) + ) + (set! (-> *tfrag-work* last-call) (the-as uint 0)) + (set! (-> t-stat cnt) 0) + (set! (-> t-stat tris) 0) + (set! (-> t-stat tfaces) 0) + (set! (-> t-stat tfrags) 0) + (set! (-> t-stat dtris) 0) + (set! (-> t-stat dma-cnt) 0) + (set! (-> t-stat dma-dta) 0) + (set! (-> t-stat dma-tex) 0) + (set! (-> t-stat strips) 0) + (set! (-> t-stat drawpoints) 0) + (set! (-> t-stat base-verts) 0) + (set! (-> t-stat level0-verts) 0) + (set! (-> t-stat level1-verts) 0) + (none) + ) + +;; definition for function tfrag-end-buffer +;; INFO: Return type mismatch symbol vs none. +(defun tfrag-end-buffer ((arg0 dma-buffer)) + (let* ((v1-0 arg0) + (a1-0 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a1-0) dma) + (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)) + ) + (set! + (-> (the-as dma-packet a1-0) vif0) + (new 'static 'vif-tag :cmd (vif-cmd stmask)) + ) + (set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag)) + (set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16)) + ) + (let* ((v1-1 arg0) + (a0-1 (-> v1-1 base)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 0) + (the-as vif-tag (-> *tfrag-work* last-call)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 1) + (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 2) + (new 'static 'vif-tag :cmd (vif-cmd stmod)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 3) + (new 'static 'vif-tag :cmd (vif-cmd strow) :msk #x1) + ) + (set! (-> (the-as (pointer uint32) a0-1) 4) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 5) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 6) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 7) (the-as uint 0)) + (set! + (-> (the-as (pointer vif-tag) a0-1) 8) + (new 'static 'vif-tag :cmd (vif-cmd base)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 9) + (new 'static 'vif-tag :cmd (vif-cmd offset)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 10) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! (-> (the-as (pointer vif-tag) a0-1) 11) (new 'static 'vif-tag)) + (set! (-> v1-1 base) (&+ a0-1 48)) + ) + (none) + ) + +;; definition for function draw-inline-array-tfrag +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function tfrag-near-init-buffer +;; INFO: Return type mismatch symbol vs none. +(defun tfrag-near-init-buffer ((arg0 dma-buffer) (arg1 gs-test) (arg2 int)) + (dma-buffer-add-vu-function arg0 tnear-vu1-block 1) + (let* ((v1-0 arg0) + (a0-2 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a0-2) dma) + (new 'static 'dma-tag :qwc #x2 :id (dma-tag-id cnt)) + ) + (set! (-> (the-as dma-packet a0-2) vif0) (new 'static 'vif-tag)) + (set! + (-> (the-as dma-packet a0-2) vif1) + (new 'static 'vif-tag :imm #x2 :cmd (vif-cmd direct) :msk #x1) + ) + (set! (-> v1-0 base) (&+ (the-as pointer a0-2) 16)) + ) + (let* ((v1-1 arg0) + (a0-4 (the-as object (-> v1-1 base))) + ) + (set! + (-> (the-as gs-gif-tag a0-4) tag) + (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x1) + ) + (set! + (-> (the-as gs-gif-tag a0-4) regs) + (new 'static 'gif-tag-regs + :regs0 (gif-reg-id a+d) + :regs1 (gif-reg-id a+d) + :regs2 (gif-reg-id a+d) + :regs3 (gif-reg-id a+d) + :regs4 (gif-reg-id a+d) + :regs5 (gif-reg-id a+d) + :regs6 (gif-reg-id a+d) + :regs7 (gif-reg-id a+d) + :regs8 (gif-reg-id a+d) + :regs9 (gif-reg-id a+d) + :regs10 (gif-reg-id a+d) + :regs11 (gif-reg-id a+d) + :regs12 (gif-reg-id a+d) + :regs13 (gif-reg-id a+d) + :regs14 (gif-reg-id a+d) + :regs15 (gif-reg-id a+d) + ) + ) + (set! (-> v1-1 base) (&+ (the-as pointer a0-4) 16)) + ) + (let* ((v1-2 arg0) + (a0-6 (-> v1-2 base)) + ) + (set! (-> (the-as (pointer gs-test) a0-6) 0) arg1) + (set! (-> (the-as (pointer gs-reg64) a0-6) 1) (gs-reg64 test-1)) + (set! (-> v1-2 base) (&+ a0-6 16)) + ) + (add-tfrag-mtx-0 arg0) + (add-tfrag-mtx-1 arg0) + (add-tfrag-data arg0 arg2) + (let ((v1-3 (the-as object (-> arg0 base)))) + (set! + (-> (the-as dma-packet v1-3) dma) + (new 'static 'dma-tag :id (dma-tag-id cnt)) + ) + (set! + (-> (the-as dma-packet v1-3) vif0) + (new 'static 'vif-tag :cmd (vif-cmd base)) + ) + (set! + (-> (the-as dma-packet v1-3) vif1) + (new 'static 'vif-tag :imm #x148 :cmd (vif-cmd offset)) + ) + (set! (-> arg0 base) (&+ (the-as pointer v1-3) 16)) + ) + (set! (-> *tfrag-work* last-call) (the-as uint 0)) + (none) + ) + +;; definition for function tfrag-near-end-buffer +;; INFO: Return type mismatch symbol vs none. +(defun tfrag-near-end-buffer ((arg0 dma-buffer)) + (let* ((v1-0 arg0) + (a1-0 (the-as object (-> v1-0 base))) + ) + (set! + (-> (the-as dma-packet a1-0) dma) + (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)) + ) + (set! + (-> (the-as dma-packet a1-0) vif0) + (new 'static 'vif-tag :cmd (vif-cmd stmask)) + ) + (set! (-> (the-as dma-packet a1-0) vif1) (new 'static 'vif-tag)) + (set! (-> v1-0 base) (&+ (the-as pointer a1-0) 16)) + ) + (let* ((v1-1 arg0) + (a0-1 (-> v1-1 base)) + ) + (set! (-> (the-as (pointer uint32) a0-1)) (-> *tfrag-work* last-call)) + (set! + (-> (the-as (pointer vif-tag) a0-1) 1) + (new 'static 'vif-tag :cmd (vif-cmd flusha) :msk #x1) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 2) + (new 'static 'vif-tag :cmd (vif-cmd stmod)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 3) + (new 'static 'vif-tag :cmd (vif-cmd strow) :msk #x1) + ) + (set! (-> (the-as (pointer uint32) a0-1) 4) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 5) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 6) (the-as uint 0)) + (set! (-> (the-as (pointer uint32) a0-1) 7) (the-as uint 0)) + (set! + (-> (the-as (pointer vif-tag) a0-1) 8) + (new 'static 'vif-tag :cmd (vif-cmd base)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 9) + (new 'static 'vif-tag :cmd (vif-cmd offset)) + ) + (set! + (-> (the-as (pointer vif-tag) a0-1) 10) + (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)) + ) + (set! (-> (the-as (pointer vif-tag) a0-1) 11) (new 'static 'vif-tag)) + (set! (-> v1-1 base) (&+ a0-1 48)) + ) + (none) + ) + +;; definition for function draw-inline-array-tfrag-near +;; ERROR: function was not converted to expressions. Cannot decompile. + +;; definition for function stats-tfrag-asm +;; ERROR: function was not converted to expressions. Cannot decompile. + + + +