decomp: merc, merc-vu1 (#1865)

The merc VU1 program is identical to Jak 1. Jak 2's merc is doing some
new texture login stuff and the DMA buffer setup is a bit different, but
overall very similar.
This commit is contained in:
Hat Kid
2022-09-11 01:02:58 +02:00
committed by GitHub
parent 81b6d5fe08
commit 7339b2b965
19 changed files with 7709 additions and 28 deletions
+1 -1
View File
@@ -94,7 +94,7 @@
(defconstant DEFAULT_ALL_RENDERERS
(vu1-renderer-mask
rn3 rn4 rn5 rn6 rn7 rn8 rn9 rn10 rn11 rn12 rn13 rn14 rn15 rn16
rn3 rn4 rn5 rn6 rn7 rn8 rn9 rn10 rn11 rn12 merc emerc rn15 rn16
rn17 rn18 rn19 rn20 rn21 rn22 rn23 rn24 rn25 rn26 rn27 rn28 rn29
rn30 rn31 rn32 rn34
)
+1 -1
View File
@@ -117,7 +117,7 @@
)
(defun emerc-vu1-init-buffers ()
(when (logtest? (-> *display* vu1-enable-user) (vu1-renderer-mask rn14))
(when (logtest? (-> *display* vu1-enable-user) (vu1-renderer-mask emerc))
(emerc-vu1-init-buffer (bucket-id bucket-15) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)) 0)
(emerc-vu1-init-buffer (bucket-id bucket-26) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)) 0)
(emerc-vu1-init-buffer (bucket-id bucket-37) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest greater-equal)) 0)
+1 -1
View File
@@ -49,7 +49,7 @@
:size-assert #x18
:flag-assert #xa00000018
(:methods
(login-adgifs (_type_) none 9)
(login-adgifs (_type_) merc-fragment 9)
)
)
@@ -7,3 +7,4 @@
;; DECOMP BEGINS
(define merc-vu1-block (new 'static 'vu-function :length #x7e5 :qlength #x3f3))
+649
View File
@@ -5,5 +5,654 @@
;; name in dgo: merc
;; dgos: ENGINE, GAME
;; TODO uncomment usages of adgif-shader-login and get-eye-block once their respective files are finished
;; (define-extern adgif-shader-login (function adgif-shader texture))
;; (define-extern get-eye-block (function int int int))
;; DECOMP BEGINS
(format 0 "SKIP: calls to adgif-shader-login and get-eye-block in merc~%")
(deftype texture-login-data (structure)
((default-texture-index int32 :offset-assert 0)
(current-texture-index int32 :offset-assert 4)
(texture-usage-group texture-usage-group :offset-assert 8)
(merc-ctrl-header merc-ctrl-header :offset-assert 12)
(name basic :offset-assert 16)
)
:method-count-assert 9
:size-assert #x14
:flag-assert #x900000014
)
(define *texture-login-data* (new 'global 'texture-login-data))
(defmethod login art-joint-geo ((obj art-joint-geo))
(let ((s5-0 *texture-login-data*))
(set! (-> s5-0 default-texture-index)
(res-lump-value (-> obj extra) 'texture-bucket int :default (the-as uint128 1) :time -1000000000.0)
)
)
obj
)
(defun texture-usage-init ((arg0 merc-ctrl))
"Initialize texture login data."
(let ((gp-0 *texture-login-data*))
(set! (-> arg0 header texture-usage-group) (new 'loading-level 'texture-usage-group))
(set! (-> gp-0 texture-usage-group) (-> arg0 header texture-usage-group))
(set! (-> gp-0 merc-ctrl-header) (-> arg0 header))
(set! (-> gp-0 name) (-> arg0 name))
(dotimes (v1-4 7)
(dotimes (a0-2 3)
(set! (-> (the-as
texture-mask
(+ (the-as uint (the-as texture-masks (+ (the-as uint (-> gp-0 texture-usage-group)) (* 48 v1-4))))
(* a0-2 16)
)
)
mask
quad
)
(the-as uint128 0)
)
)
)
)
#f
)
(defun texture-usage-update ((arg0 texture))
(local-vars (a3-3 uint128))
(let* ((v1-0 *texture-login-data*)
(a1-0 (-> v1-0 current-texture-index))
(v1-2 (-> v1-0 texture-usage-group data a1-0))
)
(dotimes (a1-3 3)
(let* ((a2-3 (-> v1-2 data a1-3))
(t1-0 (-> arg0 masks data a1-3))
(a3-2 (-> a2-3 mask quad))
(t0-0 (-> t1-0 mask quad))
(f0-0 (-> a2-3 dist))
(f1-0 (-> t1-0 dist))
)
(.por a3-3 a3-2 t0-0)
(let ((f0-1 (fmax f0-0 f1-0)))
(set! (-> a2-3 mask quad) a3-3)
(set! (-> a2-3 mask w) (the-as int f0-1))
)
)
)
)
#f
)
(defmethod asize-of merc-fragment ((obj merc-fragment))
(the-as int (* (-> obj header mm-quadword-size) 16))
)
(defmethod login-adgifs merc-fragment ((obj merc-fragment))
(let* ((s5-0 (merc-fragment-fp-data obj))
(v1-1 (-> *texture-login-data* merc-ctrl-header))
(s4-0 (if (nonzero? (-> v1-1 eye-ctrl))
(-> v1-1 eye-ctrl)
(the-as merc-eye-ctrl #f)
)
)
(s3-0 (the-as adgif-shader (&+ s5-0 16)))
)
(dotimes (s2-0 (the-as int (-> s5-0 shader-cnt)))
(cond
((and s4-0 (= (logand (the-as texture-id -256) (-> s3-0 texture-id)) #x70c00700))
(let ((v1-6 (/ (-> s4-0 eye-slot) 20))
(s1-0 (mod (-> s4-0 eye-slot) 20))
)
(cond
((< v1-6 3)
;; (adgif-shader-login s3-0)
;; (let ((v1-8 (get-eye-block s1-0 0)))
;; (set! (-> s3-0 tex0 tbp0) v1-8)
;; )
(set! (-> s3-0 tex0 tw) 5)
(set! (-> s3-0 tex0 th) 5)
(set! (-> s3-0 tex0 tcc) 1)
(set! (-> s3-0 tex0 tbw) 1)
(set! (-> s3-0 tex0 psm) 0)
(set! (-> s3-0 tex1 mxl) 0)
(set! (-> s3-0 clamp)
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp) :maxu #x1f :maxv #x1f)
)
)
(else
;; (adgif-shader-login s3-0)
(let ((v1-34 (+ (-> *eyes-texture-base* vram-block) (* s1-0 32))))
(set! (-> s3-0 tex0 tbp0) v1-34)
)
(set! (-> s3-0 tex0 tw) 6)
(set! (-> s3-0 tex0 th) 6)
(set! (-> s3-0 tex0 tcc) 1)
(set! (-> s3-0 tex0 tbw) 2)
(set! (-> s3-0 tex0 psm) 0)
(set! (-> s3-0 tex1 mxl) 0)
(set! (-> s3-0 clamp)
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp) :maxu #x3f :maxv #x3f)
)
)
)
)
)
((and s4-0 (= (logand (the-as texture-id -256) (-> s3-0 texture-id)) #x70c00800))
(let ((v1-61 (/ (-> s4-0 eye-slot) 20))
(s1-1 (mod (-> s4-0 eye-slot) 20))
)
(cond
((< v1-61 3)
;; (adgif-shader-login s3-0)
;; (let ((v1-63 (get-eye-block s1-1 1)))
;; (set! (-> s3-0 tex0 tbp0) v1-63)
;; )
(set! (-> s3-0 tex0 tw) 5)
(set! (-> s3-0 tex0 th) 5)
(set! (-> s3-0 tex0 tcc) 1)
(set! (-> s3-0 tex0 tbw) 1)
(set! (-> s3-0 tex0 psm) 0)
(set! (-> s3-0 tex1 mxl) 0)
(set! (-> s3-0 clamp)
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp) :maxu #x1f :maxv #x1f)
)
)
(else
;; (adgif-shader-login s3-0)
(let ((v1-89 (+ (-> *eyes-texture-base* vram-block) (* (+ s1-1 1) 32))))
(set! (-> s3-0 tex0 tbp0) v1-89)
)
(set! (-> s3-0 tex0 tw) 6)
(set! (-> s3-0 tex0 th) 6)
(set! (-> s3-0 tex0 tcc) 1)
(set! (-> s3-0 tex0 tbw) 2)
(set! (-> s3-0 tex0 psm) 0)
(set! (-> s3-0 tex1 mxl) 0)
(set! (-> s3-0 clamp)
(new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp) :maxu #x3f :maxv #x3f)
)
)
)
)
)
(else
;; (let ((a0-69 (adgif-shader-login s3-0)))
;; (if a0-69
;; (texture-usage-update a0-69)
;; )
;; )
)
)
(&+! s3-0 80)
)
)
obj
)
(defmethod asize-of merc-fragment-control ((obj merc-fragment-control))
(the-as int (+ (* (-> obj mat-xfer-count) 2) 4))
)
(defmethod login-adgifs merc-effect ((obj merc-effect))
(let* ((data *texture-login-data*)
(a0-1 (-> data default-texture-index))
)
(when (= (-> obj merc-effect-version) 1)
(if (!= (-> obj texture-index) 255)
(set! a0-1 (the-as int (-> obj texture-index)))
)
)
(set! (-> data current-texture-index) a0-1)
(set! (-> obj texture-index) (the-as uint a0-1))
)
(let ((tex (-> obj extra-info)))
(when (nonzero? tex)
(when (nonzero? (-> tex shader-offset))
;; (let ((a0-6 (adgif-shader-login (the-as adgif-shader (+ (the-as uint tex) (* (-> tex shader-offset) 16))))))
;; (if a0-6
;; (texture-usage-update a0-6)
;; )
;; )
)
)
)
(let ((ctrl (-> obj frag-ctrl))
(geo (-> obj frag-geo))
)
(dotimes (frag-idx (the-as int (-> obj frag-count)))
(let ((ctrl-size (asize-of ctrl)))
(let ((geo-size (asize-of geo)))
(login-adgifs geo)
(set! geo (the-as merc-fragment (&+ (the-as pointer geo) geo-size)))
)
(set! ctrl (the-as merc-fragment-control (&+ (the-as pointer ctrl) ctrl-size)))
)
)
)
(none)
)
;; definition for method 8 of type merc-ctrl
(defmethod mem-usage merc-ctrl ((obj merc-ctrl) (arg0 memory-usage-block) (arg1 int))
(if (-> obj extra)
(mem-usage (-> obj extra) arg0 arg1)
)
(let ((s4-0 (+ 32 128 (* (-> obj header effect-count) 32))))
(dotimes (s3-0 (the-as int (-> obj header effect-count)))
(let ((s2-0 (the-as object (-> obj effect s3-0 frag-ctrl))))
(dotimes (s1-0 (the-as int (-> obj effect s3-0 frag-count)))
(set! s4-0 (+ s4-0
(* (shr (+ (-> (the-as merc-fragment-control s2-0) unsigned-four-count) 3) 2) 16)
(* (shr (+ (-> (the-as merc-fragment-control s2-0) lump-four-count) 3) 2) 16)
(* (-> (the-as merc-fragment-control s2-0) fp-qwc) 16)
(asize-of (the-as merc-fragment-control s2-0))
)
)
(set! s2-0 (&+ (the-as pointer s2-0) (asize-of (the-as merc-fragment-control s2-0))))
)
)
)
(set! (-> arg0 length) (max 79 (-> arg0 length)))
(set! (-> arg0 data 78 name) "merc-ctrl")
(+! (-> arg0 data 78 count) 1)
(+! (-> arg0 data 78 used) s4-0)
(+! (-> arg0 data 78 total) (logand -16 (+ s4-0 15)))
)
(let ((v1-35 0))
(dotimes (a0-15 (the-as int (-> obj header effect-count)))
(when (nonzero? (-> obj effect a0-15 blend-frag-count))
(let ((a1-9 (the-as object (-> obj effect a0-15 blend-ctrl))))
(dotimes (a2-1 (the-as int (-> obj effect a0-15 blend-frag-count)))
(let ((v1-36
(+ v1-35
(* (+ (-> (the-as merc-blend-ctrl a1-9) nonzero-index-count) 1)
(the-as uint (logand (+ (* (the-as uint 6) (-> (the-as merc-blend-ctrl a1-9) blend-vtx-count)) 15) #xfff0))
)
)
)
)
(set! v1-35 (the-as int (+ (-> obj header blend-target-count) 2 v1-36)))
)
(set! a1-9 (&+ (the-as pointer a1-9) (+ (-> obj header blend-target-count) 2)))
)
)
)
)
(when (nonzero? v1-35)
(set! (-> arg0 length) (max 81 (-> arg0 length)))
(set! (-> arg0 data 80 name) "blend-shape")
(+! (-> arg0 data 80 count) 1)
(+! (-> arg0 data 80 used) v1-35)
(+! (-> arg0 data 80 total) (logand -16 (+ v1-35 15)))
)
)
(when (and (-> obj header eye-ctrl) (nonzero? (-> obj header eye-ctrl)))
(let ((a0-29 (-> obj header eye-ctrl)))
(set! (-> arg0 length) (max 112 (-> arg0 length)))
(set! (-> arg0 data 111 name) "eye-anim")
(+! (-> arg0 data 111 count) 1)
(let ((v1-49 (asize-of a0-29)))
(+! (-> arg0 data 111 used) v1-49)
(+! (-> arg0 data 111 total) (logand -16 (+ v1-49 15)))
)
)
)
obj
)
;; definition for method 9 of type merc-ctrl
(defmethod login merc-ctrl ((obj merc-ctrl))
(set! (-> *kernel-context* login-object) obj)
(texture-usage-init obj)
(dotimes (s5-0 (the-as int (-> obj header effect-count)))
(login-adgifs (-> obj effect s5-0))
)
(when (and (-> obj header eye-ctrl) (nonzero? (-> obj header eye-ctrl)))
(let ((s5-1 (-> obj header eye-ctrl)))
(dotimes (s4-0 (-> s5-1 shader-count))
;; (let ((a0-5 (adgif-shader-login (-> s5-1 shader s4-0))))
;; (if a0-5
;; (texture-usage-update a0-5)
;; )
;; )
)
)
)
(set! (-> *kernel-context* login-object) #f)
obj
)
(defun-debug merc-stats-display ((arg0 merc-ctrl))
"Print merc debug stats."
(format #t "~30s:" (-> arg0 name))
(let ((s5-0 (-> arg0 header st-int-scale))
(s4-0 (ash 1 (- 12 (the-as int (-> arg0 header st-int-scale)))))
)
(format #t " ST ~3D, " s4-0)
(cond
((>= s5-0 (the-as uint 5))
(format #t "RANGE ~D+," (/ 128 s4-0))
)
((= s5-0 4)
(format #t "RANGE 0.5+,")
)
)
)
(dotimes (s5-1 (the-as int (-> arg0 header effect-count)))
(let ((s3-0 (-> arg0 effect s5-1)))
(if (nonzero? s5-1)
(format #t "~48s " " ")
)
(let ((a2-4 (-> s3-0 frag-count))
(s4-1 (-> s3-0 tri-count))
(f30-0 (the float (-> s3-0 frag-count)))
(f28-0 (the float (-> s3-0 dvert-count)))
(f26-0 (the float (-> s3-0 tri-count)))
)
(if (>= (/ (+ 50.0 f28-0) f30-0) 50.0)
(format #t "~3D frags, ~2,,1f dverts/frag " a2-4 (/ f28-0 f30-0))
(format #t "~3D frags, ~2,,1f ******/**** " a2-4 (/ f28-0 f30-0))
)
(format
#t
"(~4D tris, striplen ~2,,2f, ~2,,1f tris/frag)~%"
s4-1
(/ (* 2.0 f26-0) (- f28-0 f26-0))
(/ f26-0 f30-0)
)
)
)
)
(none)
)
(defun-debug merc-stats ()
(dotimes (gp-0 7)
(let ((s5-0 (-> *level* level gp-0 art-group)))
(when (nonzero? s5-0)
(dotimes (s4-0 (-> s5-0 art-group-array length))
(let ((s3-0 (-> s5-0 art-group-array s4-0)))
(dotimes (s2-0 (-> s3-0 length))
(let* ((s1-0 (-> s3-0 data s2-0))
(a0-3 (if (type? s1-0 merc-ctrl)
s1-0
)
)
)
(if a0-3
(merc-stats-display (the-as merc-ctrl a0-3))
)
)
)
)
)
)
)
)
0
(none)
)
(defun-debug merc-edge-stats ()
(dotimes (gp-0 7)
(let ((s5-0 (-> *level* level gp-0 art-group)))
(when (nonzero? s5-0)
(dotimes (s4-0 (-> s5-0 art-group-array length))
(let ((s3-0 (-> s5-0 art-group-array s4-0)))
(dotimes (s2-0 (-> s3-0 length))
(let* ((s1-0 (-> s3-0 data s2-0))
(v1-9 (if (type? s1-0 merc-ctrl)
s1-0
)
)
)
(if v1-9
(format #t "~30s: ~f~%" (-> v1-9 name) (-> (the-as merc-ctrl v1-9) header longest-edge))
)
)
)
)
)
)
)
)
0
(none)
)
;; definition for function merc-vu1-add-vu-function
;; WARN: Return type mismatch dma-packet vs dma-gif-packet.
(defun merc-vu1-add-vu-function ((dma dma-packet) (func vu-function) (flush-mode int))
"Add VU1 function to DMA chain."
(let ((func-data (&-> func data 4))
(qwc (-> func qlength))
(dst (-> func origin))
)
(while (> qwc 0)
(let ((qwc-this-time (min 127 qwc)))
(set! (-> dma dma)
(new 'static 'dma-tag :id (dma-tag-id ref) :qwc qwc-this-time :addr (the-as int func-data))
)
(set! (-> dma vif0) (new 'static 'vif-tag :cmd (if (zero? flush-mode) 16 19)))
(set! (-> dma vif1) (new 'static 'vif-tag :cmd (vif-cmd mpg) :num (* qwc-this-time 2) :imm dst))
(&+! dma 16)
(&+! func-data (* qwc-this-time 16))
(set! qwc (- qwc qwc-this-time))
(+! dst (* qwc-this-time 2))
)
)
)
(the-as dma-gif-packet dma)
)
(defun merc-vu1-initialize-chain ((arg0 dma-gif-packet) (arg1 int))
"Init a merc DMA chain."
(let ((gp-0 (the-as object (merc-vu1-add-vu-function (the-as dma-packet arg0) merc-vu1-block 1))))
(set! (-> (the-as dma-gif-packet gp-0) dma-vif dma) (new 'static 'dma-tag :qwc #xa :id (dma-tag-id cnt)))
(set! (-> (the-as dma-gif-packet gp-0) dma-vif vif0) (new 'static 'vif-tag :imm #x404 :cmd (vif-cmd stcycl)))
(set! (-> (the-as dma-gif-packet gp-0) dma-vif vif1) (new 'static 'vif-tag :cmd (vif-cmd stmod)))
(set! (-> (the-as (pointer vif-tag) gp-0) 4) (new 'static 'vif-tag :imm #x1ba :cmd (vif-cmd base)))
(set! (-> (the-as (pointer vif-tag) gp-0) 5) (new 'static 'vif-tag :imm #xfe46 :cmd (vif-cmd offset)))
(set! (-> (the-as (pointer vif-tag) gp-0) 6) (new 'static 'vif-tag))
(set! (-> (the-as (pointer vif-tag) gp-0) 7) (new 'static 'vif-tag :num #x8 :cmd (vif-cmd unpack-v4-32)))
(let ((s5-0 (the-as merc-vu1-low-mem (&+ (the-as dma-gif-packet gp-0) 32))))
(case *subdivide-foreground-draw-mode*
(((subdivide-setting textured))
(set! (-> s5-0 tri-strip-gif 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! (-> s5-0 tri-strip-gif regs)
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
)
(set! (-> s5-0 tri-strip-gif word 3) (shr (make-u128 0 (shl #x303e4000 32)) 32))
)
(((subdivide-setting outline))
(set! (-> s5-0 tri-strip-gif 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! (-> s5-0 tri-strip-gif regs)
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
)
(set! (-> s5-0 tri-strip-gif word 3) (shr (make-u128 0 (shl #x303d4000 32)) 32))
)
(((subdivide-setting gouraud))
(set! (-> s5-0 tri-strip-gif 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! (-> s5-0 tri-strip-gif regs)
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
)
(set! (-> s5-0 tri-strip-gif word 3) (shr (make-u128 0 (shl #x30364000 32)) 32))
)
(((subdivide-setting hack))
(set! (-> s5-0 tri-strip-gif 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! (-> s5-0 tri-strip-gif regs)
(new 'static 'gif-tag-regs :regs0 (gif-reg-id st) :regs1 (gif-reg-id rgbaq) :regs2 (gif-reg-id xyzf2))
)
(set! (-> s5-0 tri-strip-gif word 3) (shr (make-u128 0 (shl #x303d4000 32)) 32))
)
)
(set! (-> s5-0 ad-gif tag) (new 'static 'gif-tag64 :nloop #x5 :nreg #x1))
(set! (-> s5-0 ad-gif regs) (new 'static 'gif-tag-regs :regs0 (gif-reg-id a+d)))
(set! (-> s5-0 hvdf-offset quad) (-> *math-camera* hvdf-off quad))
(quad-copy! (-> s5-0 perspective) (the-as pointer (-> *math-camera* perspective)) 4)
(set-vector! (-> s5-0 fog) (-> *math-camera* pfog0) (-> *math-camera* fog-min) (-> *math-camera* fog-max) 0.0)
)
(let ((v1-50 (-> (the-as (inline-array dma-packet) gp-0) 10)))
(set! (-> v1-50 dma) (new 'static 'dma-tag :id (dma-tag-id cnt)))
(set! (-> v1-50 vif0) (new 'static 'vif-tag))
(set! (-> v1-50 vif1) (new 'static 'vif-tag :cmd (vif-cmd mscal) :msk #x1 :imm #x0))
(&+ v1-50 16)
)
)
)
(defun merc-vu1-init-buffer ((dma-bucket bucket-id) (arg1 int) (arg2 symbol))
"Set up a merc DMA buffer."
(let ((bucket (-> *display* frames (-> *display* on-screen) bucket-group dma-bucket)))
(when (!= bucket (-> bucket last))
(let* ((dma-buf (-> *display* frames (-> *display* on-screen) global-buf))
(s3-1 (-> dma-buf base))
)
(set! (-> dma-buf base)
(the-as
pointer
(merc-vu1-initialize-chain (the-as dma-gif-packet (the-as dma-packet (-> dma-buf base))) arg1)
)
)
(let* ((v1-12 dma-buf)
(a0-4 (the-as dma-packet (-> v1-12 base)))
)
(set! (-> a0-4 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
(set! (-> a0-4 vif0) (new 'static 'vif-tag))
(set! (-> a0-4 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
(set! (-> v1-12 base) (the-as pointer (the-as dma-packet (&+ a0-4 16))))
)
(let* ((v1-13 dma-buf)
(a0-6 (the-as object (-> v1-13 base)))
)
(set! (-> (the-as gs-gif-tag a0-6) tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
(set! (-> (the-as gs-gif-tag a0-6) 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-13 base) (&+ (the-as pointer a0-6) 16))
)
(let* ((v1-14 dma-buf)
(a0-8 (-> v1-14 base))
)
(set! (-> (the-as (pointer gs-test) a0-8) 0) (new 'static 'gs-test
:ate #x1
:atst (gs-atest greater-equal)
:aref #x26
:zte #x1
:ztst (gs-ztest greater-equal)
)
)
(set! (-> (the-as (pointer gs-reg64) a0-8) 1) (gs-reg64 test-1))
(set! (-> (the-as (pointer gs-test) a0-8) 2) (if arg2
(the-as gs-test #x1000130)
(the-as gs-test (the-as uint #x101000130))
)
)
(set! (-> (the-as (pointer gs-test) a0-8) 3) (new 'static 'gs-test :atst (gs-atest not-equal) :aref #x4))
(set! (-> v1-14 base) (&+ a0-8 32))
)
(let ((v1-15 (the-as object (-> dma-buf base))))
(set! (-> (the-as dma-packet v1-15) dma) (new 'static 'dma-tag :id (dma-tag-id next) :addr (-> bucket next)))
(set! (-> (the-as dma-packet v1-15) vif0) (new 'static 'vif-tag))
(set! (-> (the-as dma-packet v1-15) vif1) (new 'static 'vif-tag))
(set! (-> dma-buf base) (the-as pointer (the-as dma-packet (&+ (the-as dma-packet v1-15) 16))))
)
(set! (-> bucket next) (the-as uint s3-1))
)
)
)
0
)
(defun merc-vu1-init-buffers ()
"Init merc DMA buffers."
(when (logtest? (-> *display* vu1-enable-user) (vu1-renderer-mask merc))
(merc-vu1-init-buffer (bucket-id bucket-14) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-25) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-36) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-47) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-58) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-69) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-188) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-197) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-201) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-205) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-209) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-213) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-217) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-221) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-79) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-88) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-97) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-106) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-115) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-124) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-192) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-131) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-141) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-151) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-161) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-171) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-181) 1 #t)
(merc-vu1-init-buffer (bucket-id bucket-225) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-229) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-233) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-237) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-241) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-245) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-249) 0 #t)
(merc-vu1-init-buffer (bucket-id bucket-253) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-262) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-271) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-280) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-289) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-298) 1 #f)
(merc-vu1-init-buffer (bucket-id bucket-307) 1 #f)
)
0
(none)
)
+2 -2
View File
@@ -382,8 +382,8 @@
(rn10)
(rn11)
(rn12)
(rn13)
(rn14)
(merc)
(emerc)
(rn15)
(rn16)
(rn17)