jak-project/goal_src/jak2/kernel-defs.gc
Tyler Wilding d819d6da05
Some checks failed
Lint / 📝 Optional Checks (push) Has been cancelled
Build / 🖥️ Windows (push) Has been cancelled
Build / 🐧 Linux (push) Has been cancelled
Build / 🍎 MacOS (push) Has been cancelled
Inform Pages Repo / Generate Documentation (push) Has been cancelled
Lint / 📝 Formatting (push) Has been cancelled
Lint / 📝 Required Checks (push) Has been cancelled
game: cleanup some display settings related code, forbid invalid game-size resolutions (#3601)
Fixes https://github.com/open-goal/jak-project/issues/3563

These users have the following spamming in logs:
> OpenGL error 0x502 S8246 T824C: GL_INVALID_OPERATION error generated.
Source and destination dimensions must be identical with the current
filtering modes.

And the solution is to correctly set their game-size. The way this
change accomplishes that is by confirming whether or not the set
`game-size` is a valid resolution informed by SDL, if not, it defaults
to the monitor's currently set display mode's resolution.

This also moves the selected display id, and the display mode into the
C++ settings -- closer to where it's actually managed and used. I'm
tempted to do this eventually for the resolutions as well but that stuff
is much more burdensome. This hopefully simplifies debugging, reduces
startup flickering, and removes back-and-forth complexity. Hopefully
this makes debugging display related problems easier. It also adds a
bunch more logging to the related code.
2024-07-27 22:29:14 -04:00

377 lines
14 KiB
Common Lisp

;; kernel-defs.gc
;; everything defined in the C Kernel / runtime
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; kscheme - InitHeapAndSymbol
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defenum kmalloc-flags
:bitfield #t
(align-16 4)
(align-64 6)
(align-256 8)
(memset 12)
(top 13)
)
(defenum link-flag
:bitfield #t
:type int32
(output-load-msg 0)
(output-load-true-msg 1)
(execute-login 2)
(print-login 3)
(force-debug 4)
(fast-link 5)
)
(defenum language-enum
:type int64
(english)
(french)
(german)
(spanish)
(italian)
(japanese)
(korean)
(uk-english)
)
(defenum runtime-exit-status
:type uint32
(running)
(restart-runtime)
(exit)
(restart-in-debug)
)
;; fixed symbols
(define-extern #f symbol)
(define-extern #t symbol)
(define-extern function type)
(define-extern basic type)
(define-extern string type)
(define-extern symbol type)
(define-extern type type)
(define-extern object type)
(define-extern link-block type)
(define-extern integer type)
(define-extern sinteger type)
(define-extern uinteger type)
(define-extern binteger type)
(define-extern int8 type)
(define-extern int16 type)
(define-extern int32 type)
(define-extern int64 type)
(define-extern int128 type)
(define-extern uint8 type)
(define-extern uint16 type)
(define-extern uint32 type)
(define-extern uint64 type)
(define-extern uint128 type)
(define-extern float type)
(define-extern process-tree type)
(define-extern process type)
(define-extern thread type)
(define-extern structure type)
(define-extern pair type)
(define-extern pointer type)
(define-extern number type)
(define-extern array type)
(define-extern vu-function type)
(define-extern connectable type)
(define-extern stack-frame type)
(define-extern file-stream type)
(define-extern kheap type)
(define-extern nothing (function none))
(define-extern delete-basic (function basic none))
(define-extern static symbol)
(define-extern global kheap)
(define-extern debug kheap)
(define-extern loading-level kheap) ;; not a kheap at boot
(define-extern loading-package kheap) ;; not a kheap at boot
(define-extern process-level-heap kheap) ;; not a kheap at boot
(define-extern stack symbol)
(define-extern scratch symbol)
(define-extern *scratch-top* pointer)
(define-extern zero-func (function int))
;; InitHeapAndSymbol
(define-extern _format (function _varargs_ object))
(define-extern method-set! (function type int object none)) ;; may actually return function.
(define-extern kmemopen (function kheap string none))
(define-extern kmemclose (function none))
(define-extern *enable-method-set* int)
(define-extern *listener-function* (function object))
(define-extern *debug-segment* symbol)
(define-extern dgo-load (function string kheap link-flag int none))
(define-extern malloc (function symbol int pointer))
(define-extern loado (function string kheap object))
(define-extern link (function pointer pointer int kheap int pointer))
(declare-type cpad-info basic)
(define-extern cpad-open (function cpad-info int cpad-info))
(define-extern cpad-get-data (function cpad-info cpad-info))
(declare-type mouse-info basic)
(define-extern mouse-get-data (function mouse-info none))
(defconstant GAME_TERRITORY_SCEA 0)
(defconstant GAME_TERRITORY_SCEE 1)
(defconstant GAME_TERRITORY_SCEI 2)
(defconstant GAME_TERRITORY_SCEK 3)
(define-extern scf-get-territory (function int)) ;; not actually a scf function...
(define-extern scf-get-volume "Defined in the kernel" (function int))
(define-extern scf-get-language "Defined in the kernel" (function language-enum))
(define-extern scf-get-aspect "Defined in the kernel" (function uint))
(define-extern scf-get-timeout (function int))
(define-extern scf-get-inactive-timeout (function int))
(define-extern kernel-shutdown (function runtime-exit-status none))
(define-extern *boot-video-mode* "Defined in the kernel" int)
(define-extern *kernel-boot-message* symbol)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; PC Port functions
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defenum pc-renderer-tree-type
(none 0)
(tfrag3 1)
(tie3 2)
(invalid))
(defenum pc-collision-mode
(none 0)
(mode 1)
(event 2)
(material 3)
(skip 4)
(skiphide 5))
(defenum pc-gfx-hack
(no-tex 0))
;; TODO - make a common kernel-defs
(define-extern __read-ee-timer (function uint))
(define-extern __mem-move (function pointer pointer uint none))
(define-extern __send-gfx-dma-chain (function object object none))
(define-extern __pc-texture-upload-now (function object object none))
(define-extern __pc-texture-relocate (function object object object none))
(define-extern __pc-get-mips2c (function string function))
(define-extern __pc-set-levels (function (pointer string) none))
(define-extern __pc-set-active-levels (function (pointer string) none))
(define-extern __pc-get-tex-remap (function int int int))
;; Input Related Functions
;; TODO - add get current controller index
(define-extern pc-get-controller-count (function int))
(define-extern pc-get-controller-name (function int string string))
(deftype bind-assignment-info (structure)
((port int32)
(device-type int32)
(for-buttons? symbol)
(input-idx int32)
(analog-min-range? symbol)))
(define-extern pc-get-current-bind (function bind-assignment-info string symbol))
(define-extern pc-waiting-for-bind? (function symbol))
(define-extern pc-set-waiting-for-bind! (function int symbol symbol int none))
(define-extern pc-stop-waiting-for-bind! (function none))
(define-extern pc-get-controller-index (function int int))
(define-extern pc-set-controller! (function int int none))
(define-extern pc-get-keyboard-enabled? (function symbol))
(define-extern pc-set-keyboard-enabled! (function symbol none))
(define-extern pc-set-mouse-options! (function symbol symbol symbol none))
(define-extern pc-set-mouse-camera-sens! (function float float none))
(define-extern pc-current-controller-has-led? (function symbol))
(define-extern pc-current-controller-has-rumble? (function symbol))
(define-extern pc-set-controller-led! (function int int int int none))
(define-extern pc-ignore-background-controller-events! (function symbol none))
(define-extern pc-reset-bindings-to-defaults! (function int int none))
(define-extern pc-set-auto-hide-cursor! (function symbol none))
;; Display Related Functions
(define-extern pc-get-display-mode (function symbol))
(define-extern pc-get-active-display-size (function (pointer int64) (pointer int64) none))
(define-extern pc-get-active-display-refresh-rate (function int))
(define-extern pc-get-display-count (function int))
(define-extern pc-get-display-name (function int string symbol))
(define-extern pc-get-os (function symbol))
(define-extern pc-get-window-size (function (pointer int64) (pointer int64) none))
(define-extern pc-get-window-scale (function (pointer float) (pointer float) none))
(define-extern pc-set-window-size! (function int int none))
(define-extern pc-get-display-id (function int))
(define-extern pc-set-display-id! (function int none))
(define-extern pc-set-display-mode! (function symbol none))
(define-extern pc-get-num-resolutions (function int))
(define-extern pc-get-resolution (function int (pointer int64) (pointer int64) none))
(define-extern pc-is-supported-resolution? (function int int symbol))
(define-extern pc-set-frame-rate (function int none))
(define-extern pc-set-vsync (function symbol none))
(define-extern pc-renderer-tree-set-lod (function pc-renderer-tree-type int none))
(define-extern pc-set-letterbox (function int int none))
(define-extern pc-set-collision (function symbol none))
(define-extern pc-set-collision-wireframe (function symbol none))
(define-extern pc-get-collision-mask (function pc-collision-mode int symbol))
(define-extern pc-set-collision-mask (function pc-collision-mode int symbol none))
(define-extern pc-set-collision-mode (function pc-collision-mode none))
(declare-type discord-info structure)
(define-extern pc-discord-rpc-update (function discord-info none))
(define-extern pc-discord-rpc-set (function int none))
(define-extern pc-init-autosplitter-struct (function none))
(define-extern pc-filepath-exists? (function string symbol))
(define-extern pc-mkdir-file-path (function string none))
(define-extern pc-sound-set-flava-hack (function int none))
(define-extern pc-sound-set-fade-hack (function int none))
(define-extern pc-set-window-lock (function symbol none))
(define-extern pc-set-game-resolution (function int int none))
(define-extern pc-set-msaa (function int none))
(define-extern pc-set-gfx-hack (function pc-gfx-hack symbol none))
(define-extern pc-get-unix-timestamp (function int))
(define-extern pc-filter-debug-string? (function string float symbol))
(define-extern pc-screen-shot (function none))
(declare-type screen-shot-settings structure)
(define-extern pc-register-screen-shot-settings (function screen-shot-settings none))
(define-extern pc-treat-pad0-as-pad1 (function symbol none))
(define-extern pc-is-imgui-visible? (function symbol))
(define-extern pc-rand (function int))
(define-extern pc-encode-utf8-string (function string string none))
;; Jak 2 Specific Kernel Definitions
(define *pc-waiting-on-rpc?* symbol)
(define *pc-rpc-error?* symbol)
(define-extern pc-get-last-rpc-error (function string none))
(define-extern pc-fetch-external-race-times (function string none))
(define-extern pc-fetch-external-speedrun-times (function string none))
(define-extern pc-fetch-external-highscores (function string none))
(define-extern pc-get-external-race-time (function string int string (pointer float) none)) ;; returns the score and the name in the given string ptr
(define-extern pc-get-external-speedrun-time (function string int string (pointer float) none)) ;; returns the score and the name in the given string ptr
(define-extern pc-get-external-highscore (function string int string (pointer float) none)) ;; returns the score and the name in the given string ptr
(define-extern pc-get-num-external-race-times (function string int))
(define-extern pc-get-num-external-speedrun-times (function string int))
(define-extern pc-get-num-external-highscores (function string int))
;; Speedrunner Mode Stuff
(define-extern pc-sr-mode-get-practice-entries-amount (function int))
(define-extern pc-sr-mode-get-practice-entry-name (function int string none))
(define-extern pc-sr-mode-get-practice-entry-continue-point (function int string none))
(define-extern pc-sr-mode-get-practice-entry-history-success (function int int))
(define-extern pc-sr-mode-get-practice-entry-history-attempts (function int int))
(define-extern pc-sr-mode-get-practice-entry-session-success (function int int))
(define-extern pc-sr-mode-get-practice-entry-session-attempts (function int int))
(define-extern pc-sr-mode-get-practice-entry-avg-time (function int string none))
(define-extern pc-sr-mode-get-practice-entry-fastest-time (function int string none))
(define-extern pc-sr-mode-record-practice-entry-attempt! (function int symbol (pointer float) symbol))
(declare-type speedrun-practice-objective structure)
(define-extern pc-sr-mode-init-practice-info! (function int speedrun-practice-objective none))
;; TODO - a menu to dump out the 3 numbers with a pre-generated name to the file
(define-extern pc-sr-mode-get-custom-category-amount (function int))
(define-extern pc-sr-mode-get-custom-category-name (function int string none))
(define-extern pc-sr-mode-get-custom-category-continue-point (function int string none))
(declare-type speedrun-custom-category structure)
(define-extern pc-sr-mode-init-custom-category-info! (function int speedrun-custom-category none))
(define-extern pc-sr-mode-dump-new-custom-category (function speedrun-custom-category none))
(define-extern file-stream-open (function file-stream string symbol file-stream))
(define-extern file-stream-close (function file-stream file-stream))
(define-extern file-stream-length (function file-stream int))
(define-extern file-stream-seek (function file-stream int int int))
(define-extern file-stream-read (function file-stream pointer int int))
(define-extern file-stream-write (function file-stream pointer uint uint))
(define-extern reset-path (function none))
(define-extern install-handler (function int function int))
(define-extern flush-cache (function int none))
(define-extern gs-store-image (function object object object))
(define-extern sync-path (function int int int))
(define-extern kmalloc (function kheap int kmalloc-flags string pointer))
(define-extern *kernel-boot-message* symbol)
(define-extern *user* symbol)
(define-extern new-dynamic-structure (function symbol type int structure))
(define-extern rpc-busy? (function int uint))
(define-extern rpc-call (function int uint uint uint int uint int uint))
(define-extern string->symbol (function string symbol))
(define-extern pc-get-unix-timestamp (function int))
(define-extern link-begin (function pointer (pointer uint8) int kheap link-flag int))
(define-extern link-reset (function none))
(define-extern kset-language (function language-enum int))
(define-extern syncv (function int int))
(define-extern put-display-env (function object none))
;; +++memcard-h:mc-status-code
(defenum mc-status-code
:type uint32
(busy 0)
(ok 1)
(bad-handle 2)
(format-failed 3)
(internal-error 4)
(write-error 5)
(read-error 6)
(new-game 7)
(no-memory 8)
(no-card 9)
(no-last 10)
(no-format 11)
(no-file 12)
(no-save 13)
(no-space 14)
(bad-version 15)
(no-process 16)
(no-auto-save 17)
)
;; ---memcard-h:mc-status-code
(define-extern mc-run (function none))
(define-extern mc-format (function int mc-status-code))
(define-extern mc-unformat (function int mc-status-code))
(define-extern mc-create-file (function int uint mc-status-code))
(define-extern mc-save (function int int pointer int mc-status-code))
(define-extern mc-load (function int int pointer mc-status-code))
(declare-type mc-slot-info structure)
(define-extern mc-sync (function int))
(define-extern mc-get-slot-info (function int mc-slot-info none))
(define-extern mc-check-result (function mc-status-code))
;; mc-makefile
(define-extern __pc-get-mips2c (function string function))
(define-extern dma-sync (function pointer int int int))
(define-extern __pc-texture-upload-now (function object object none))
(define-extern __pc-texture-relocate (function object object object none))
(define-extern link-resume (function int))
(define-extern unload (function string none))
(define-extern reset-graph (function int int int int none))
;; PC stuff
(defenum pc-prof-event
(begin 0)
(end 1)
(instant 2)
)
(define-extern pc-prof (function string pc-prof-event none))
(define-extern *pc-settings-folder* string)
(define-extern *pc-settings-built-sha* string)
(define-extern alloc-vagdir-names (function symbol (pointer uint64)))