[jak2] combined shadow work PR (#2632)

This PR is a combination of
https://github.com/open-goal/jak-project/pull/2507 and some additional
changes to port Shadow VU1 to OpenGL. As far as I can tell, it's
working.

---------

Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
This commit is contained in:
water111
2023-05-07 12:12:21 -04:00
committed by GitHub
parent 40b2e93be7
commit b79f28fe07
39 changed files with 9659 additions and 111 deletions
+41 -47
View File
@@ -12567,12 +12567,14 @@
:flag-assert #x9000025b0
)
(declare-type shadow-vu1-constants structure)
(deftype shadow-bucket (structure)
((first uint32 :offset-assert 0)
(next uint32 :offset-assert 4)
((first pointer :offset-assert 0)
(next pointer :offset-assert 4)
(bucket-id int32 :offset-assert 8)
(shadow-color rgba :offset-assert 12)
(constants basic :offset-assert 16)
(constants shadow-vu1-constants :offset-assert 16)
)
:allow-misaligned
:method-count-assert 9
@@ -12702,9 +12704,9 @@
)
(define-extern *shadow-globals* shadow-globals)
(define-extern *shadow* object) ;; symbol
(define-extern *shadow-object* object)
(define-extern *shadow-debug* object)
(define-extern *shadow* symbol) ;; symbol
(define-extern *shadow-object* symbol)
(define-extern *shadow-debug* symbol)
(define-extern *shadow-dma-buf* dma-buffer)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -24582,7 +24584,6 @@
;; shadow-cpu ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#|
(deftype shadow-stats (structure)
((num-single-tris uint32 :offset-assert 0)
(num-double-tris uint32 :offset-assert 4)
@@ -24595,9 +24596,7 @@
:size-assert #x14
:flag-assert #x900000014
)
|#
#|
(deftype shadow-dcache (structure)
((vtx-table uint32 :offset-assert 0)
(single-edge-table uint32 :offset-assert 4)
@@ -24625,40 +24624,38 @@
:size-assert #xb0
:flag-assert #x9000000b0
)
|#
;; (define-extern *shadow-data* object) ;; shadow-data
;; (define-extern shadow-invert-z-buf function)
;; (define-extern shadow-make-invert-buf function)
;; (define-extern *shadow-dma-invert-call* object)
;; (define-extern shadow-dma-init function) ;; (function dma-buffer none)
;; (define-extern shadow-dma-end function) ;; (function dma-buffer none)
;; (define-extern shadow-vu0-block object) ;; vu-function
;; (define-extern shadow-xform-verts function) ;; function
;; (define-extern shadow-calc-dual-verts function) ;; function
;; (define-extern shadow-scissor-edges function) ;; function
;; (define-extern shadow-scissor-top function) ;; function
;; (define-extern shadow-init-vars function) ;; function
;; (define-extern shadow-find-facing-single-tris function) ;; function
;; (define-extern shadow-find-single-edges function) ;; function
;; (define-extern shadow-find-facing-double-tris function) ;; function
;; (define-extern shadow-find-double-edges function) ;; function
;; (define-extern shadow-add-verts function) ;; function
;; (define-extern shadow-add-facing-single-tris function) ;; function
;; (define-extern shadow-add-single-edges function) ;; function
;; (define-extern shadow-add-single-tris function)
;; (define-extern shadow-add-double-tris function) ;; function
;; (define-extern shadow-add-double-edges function) ;; function
;; (define-extern debug-draw-settings function)
;; (define-extern shadow-execute function) ;; (function shadow-dma-packet pointer pointer)
;; (define-extern shadow-vu0-upload function) ;; (function none)
(define-extern *shadow-data* shadow-data)
(define-extern shadow-invert-z-buf (function dma-buffer none))
(define-extern shadow-make-invert-buf (function none))
(define-extern *shadow-dma-invert-call* pointer)
(define-extern shadow-dma-init (function dma-buffer none))
(define-extern shadow-dma-end (function dma-buffer gs-rgbaq symbol int none))
(define-extern shadow-vu0-block vu-function)
(define-extern shadow-xform-verts function)
(define-extern shadow-calc-dual-verts function)
(define-extern shadow-scissor-edges function)
(define-extern shadow-scissor-top function)
(define-extern shadow-init-vars function)
(define-extern shadow-find-facing-single-tris function)
(define-extern shadow-find-single-edges function)
(define-extern shadow-find-facing-double-tris function)
(define-extern shadow-find-double-edges function)
(define-extern shadow-add-verts function)
(define-extern shadow-add-facing-single-tris function)
(define-extern shadow-add-single-edges function)
(define-extern shadow-add-single-tris function)
(define-extern shadow-add-double-tris function)
(define-extern shadow-add-double-edges function)
(define-extern debug-draw-settings (function matrix none))
(define-extern shadow-execute (function shadow-dma-packet pointer pointer))
(define-extern shadow-vu0-upload (function none))
(define-extern shadow-execute-all (function dma-buffer none))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; shadow-vu1 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#|
(deftype shadow-vu1-constants (structure)
((hmgescale vector :inline :offset-assert 0)
(invhscale vector :inline :offset-assert 16)
@@ -24666,7 +24663,7 @@
(texscale vector :inline :offset-assert 48)
(hvdfoff vector :inline :offset-assert 64)
(fog vector :inline :offset-assert 80)
(clrs vector 2 :offset-assert 96) ;; guessed by decompiler
(clrs vector 2 :inline :offset-assert 96) ;; guessed by decompiler
(adgif gs-gif-tag :inline :offset-assert 128)
(texflush gs-adcmd :inline :offset-assert 144) ;; ad-cmd :inline
(flush gs-adcmd :inline :offset-assert 160) ;; ad-cmd :inline
@@ -24677,9 +24674,7 @@
:size-assert #xd0
:flag-assert #x9000000d0
)
|#
#|
(deftype shadow-vu1-data (structure)
((adgif gs-gif-tag :inline :offset-assert 0)
(ad gs-adcmd :inline :offset-assert 16)
@@ -24688,20 +24683,19 @@
(quadgif gs-gif-tag :inline :offset-assert 64)
(texoffset vector :inline :offset-assert 80)
(texscale vector :inline :offset-assert 96)
(clrs UNKNOWN 2 :offset-assert 112)
(clrs qword 2 :inline :offset-assert 112)
)
:method-count-assert 9
:size-assert #x90
:flag-assert #x900000090
)
|#
;; (define-extern *shadow-vu1-data* object)
;; (define-extern shadow-vu1-block object) ;; vu-function
;; (define-extern shadow-vu1-add-constants function) ;; (function dma-buffer none)
;; (define-extern shadow-vu1-patch-consts function)
;; (define-extern shadow-vu1-add-matrix function) ;; (function dma-buffer math-camera none)
;; (define-extern shadow-vu1-init-buffer function) ;; (function dma-buffer none)
(define-extern *shadow-vu1-data* shadow-vu1-data)
(define-extern shadow-vu1-block vu-function)
(define-extern shadow-vu1-add-constants (function dma-buffer int none))
(define-extern shadow-vu1-patch-consts (function symbol int none))
(define-extern shadow-vu1-add-matrix (function dma-buffer math-camera none))
(define-extern shadow-vu1-init-buffer (function dma-buffer int none))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; warp ;;
+18 -1
View File
@@ -741,7 +741,24 @@
"generic-warp-dest",
"generic-warp-envmap-dest",
"generic-no-light-proc",
"foreground-draw-hud"
"foreground-draw-hud",
// shadow
"shadow-execute",
"shadow-add-double-edges",
"shadow-add-double-tris",
"shadow-add-single-tris",
"shadow-add-single-edges",
"shadow-add-facing-single-tris",
"shadow-add-verts",
"shadow-find-double-edges",
"shadow-find-facing-double-tris",
"shadow-find-single-edges",
"shadow-find-facing-single-tris",
"shadow-init-vars",
"shadow-scissor-top",
"shadow-scissor-edges",
"shadow-calc-dual-verts",
"shadow-xform-verts"
],
"mips2c_jump_table_functions": {},
+136 -2
View File
@@ -4560,7 +4560,15 @@
"foreground-add-mtx-calc": [[1, "v1", "foreground-work"]],
"foreground-shadow": [
[2, "v1", "foreground-work"],
[[13, 19], "t1", "vector"]
[[13, 19], "t1", "vector"],
[[44, 110], "a3", "shadow-dma-packet"],
[54, "t3", "(pointer shadow-dma-packet)"],
[[67, 72], "t5", "(inline-array vector)"],
[[77, 83], "v1", "vector"],
[[127, 193], "t2", "shadow-dma-packet"],
[137, "t5", "(pointer shadow-dma-packet)"],
[[150, 155], "t7", "(inline-array vector)"],
[[160, 166], "t7", "vector"]
],
"dma-add-process-drawable": [
[433, "a0", "foreground-work"],
@@ -10237,5 +10245,131 @@
[4, "v1", "generic-work"]
],
"generic-warp-source": [[2, "at", "generic-work"]],
"birth-func-whack-score": [[[0, 29], "v1", "(array int32)"]]
"birth-func-whack-score": [[[0, 29], "v1", "(array int32)"]],
"shadow-vu1-init-buffer": [[[18, 27], "a0", "dma-packet"]],
"shadow-vu1-add-constants": [
[[7, 16], "a2", "dma-packet"],
[[20, 66], "v1", "shadow-vu1-constants"],
[[72, 77], "a1", "dma-packet"],
[[82, 94], "a1", "shadow-vu1-data"]
],
"shadow-vu1-add-matrix": [
[[11, 19], "a3", "dma-packet"],
[[26, 30], "v1", "matrix"]
],
"shadow-vu0-upload": [[[16, 18], "a0", "dma-packet"]],
"shadow-make-invert-buf": [[[13, 16], "v1", "dma-packet"]],
"shadow-invert-z-buf": [
[[4, 8], "a2", "dma-packet"],
[[13, 16], "a2", "gs-gif-tag"],
[27, "t1", "(pointer gs-reg)"],
[28, "t1", "(pointer gs-reg64)"],
[30, "t1", "(pointer gs-reg)"],
[32, "t1", "(pointer gs-frame)"],
[34, "t1", "(pointer gs-reg)"],
[38, "t1", "(pointer gs-reg)"],
[42, "t1", "(pointer gs-reg)"],
[36, "t1", "(pointer gs-zbuf)"],
[40, "t1", "(pointer gs-test)"],
[44, "t1", "(pointer gs-alpha)"],
[45, "t1", "(pointer gs-reg)"],
[47, "t1", "(pointer gs-reg64)"],
[49, "t1", "(pointer gs-reg)"],
[51, "t1", "(pointer gs-rgbaq)"],
[[61, 64], "t2", "gs-gif-tag"],
[89, "t4", "(pointer gs-xyzf)"],
[79, "t4", "(pointer gs-xyzf)"],
[[106, 117], "v1", "(pointer uint64)"]
],
"shadow-dma-init": [
[[18, 21], "t4", "dma-packet"],
[[27, 31], "t6", "dma-packet"],
[[36, 39], "t6", "gs-gif-tag"],
[43, "t4", "(pointer gs-reg64)"],
[47, "t4", "(pointer gs-test)"],
[45, "t4", "(pointer gs-reg64)"],
[49, "t4", "(pointer gs-reg64)"],
[51, "t4", "(pointer gs-alpha)"],
[53, "t4", "(pointer gs-reg64)"],
[58, "t4", "(pointer gs-frame)"],
[60, "t4", "(pointer gs-reg64)"],
[64, "t4", "(pointer gs-reg64)"],
[73, "t4", "(pointer gs-reg64)"],
[81, "t4", "(pointer gs-reg)"],
[84, "t4", "(pointer gs-reg)"],
[62, "t4", "(pointer gs-zbuf)"],
[71, "t4", "(pointer gs-xy-offset)"],
[79, "t4", "(pointer gs-tex0)"],
[82, "t4", "(pointer gs-tex1)"],
[85, "t4", "(pointer gs-miptbp)"],
[87, "t4", "(pointer gs-reg)"],
[96, "t4", "(pointer gs-clamp)"],
[[103, 106], "t3", "gs-gif-tag"],
[[122, 125], "t3", "gs-gif-tag"],
[111, "t3", "(pointer gs-prim)"],
[113, "t3", "(pointer gs-rgbaq)"],
[143, "t5", "(pointer gs-xyzf)"],
[156, "t5", "(pointer gs-xyzf)"],
[[167, 170], "a3", "gs-gif-tag"],
[177, "a3", "(pointer gs-test)"],
[179, "a3", "(pointer gs-reg64)"],
[183, "a3", "(pointer gs-reg64)"],
[193, "a3", "(pointer gs-reg64)"],
[190, "a3", "(pointer gs-reg64)"],
[202, "a3", "(pointer gs-reg64)"],
[181, "a3", "(pointer gs-zbuf)"],
[188, "a3", "(pointer gs-frame)"],
[191, "a3", "(pointer uint64)"],
[206, "a3", "(pointer gs-reg64)"],
[213, "a3", "(pointer gs-reg64)"],
[214, "a3", "(pointer uint64)"],
[216, "a3", "(pointer gs-reg64)"],
[211, "a3", "(pointer gs-frame)"],
[204, "a3", "(pointer gs-zbuf)"],
[200, "a3", "(pointer gs-test)"],
[229, "v1", "(pointer uint64)"],
[225, "v1", "(pointer uint64)"],
[230, "v1", "(pointer uint64)"],
[235, "v1", "(pointer uint64)"]
],
"shadow-dma-end": [
[33, "a1", "dma-packet"],
[32, "a1", "dma-packet"],
[35, "a1", "dma-packet"],
[24, "v1", "(pointer uint64)"],
[40, "v1", "dma-packet"],
[41, "v1", "(pointer uint64)"],
[[62, 65], "a0", "gs-gif-tag"],
[[51, 56], "a0", "dma-packet"],
[69, "a0", "(pointer uint64)"],
[71, "a0", "(pointer gs-reg64)"],
[75, "a0", "(pointer gs-reg64)"],
[82, "a0", "(pointer gs-reg64)"],
[83, "a0", "(pointer uint64)"],
[85, "a0", "(pointer gs-reg64)"],
[86, "a0", "(pointer uint64)"],
[88, "a0", "(pointer gs-reg64)"],
[73, "a0", "(pointer gs-test)"],
[80, "a0", "(pointer gs-frame)"],
[[95, 100], "a1", "dma-packet"],
[150, "t0", "(pointer uint64)"],
[163, "t0", "(pointer uint64)"],
[186, "t0", "(pointer uint64)"],
[199, "t0", "(pointer uint64)"],
[[105, 108], "a1", "gs-gif-tag"],
[109, "a1", "(pointer gs-prim)"],
[110, "a1", "(pointer gs-rgbaq)"],
[[115, 118], "a1", "(inline-array gs-gif-tag)"],
[217, "v1", "(pointer uint64)"],
[213, "v1", "(pointer uint64)"],
[218, "v1", "(pointer uint64)"],
[223, "v1", "(pointer uint64)"]
],
"shadow-execute-all": [
[[53, 60], "v1", "shadow-dcache"],
[111, "v1", "shadow-dcache"],
[116, "a0", "uint32"],
[[188, 246], "gp", "shadow-dcache"],
[93, "v1", "shadow-dcache"]
]
}
@@ -4222,5 +4222,13 @@
},
"(method 55 nav-enemy)": {
"args": ["self"]
},
"foreground-shadow": {
"args": ["draw-ctrl", "arg1"],
"vars": {
"v1-3": "shadow-settings",
"a3-0": "shadow-geo",
"t0-0": "dist"
}
}
}