Reorganized for running out of handler space

This commit is contained in:
Sauraen
2024-05-30 22:53:28 -07:00
parent bd55089c0c
commit 139dd25785
4 changed files with 321 additions and 324 deletions

View File

@@ -84,10 +84,14 @@ breaking changes.**
buffers, **saving some DRAM traffic** (maybe around 100 us per frame). The
bits used for this are ignored by HLE.
- Segment addresses are now resolved relative to other segments (feature by
Tharo). This enables a strategy for skipping repeated material DLs: call
Tharo). This enables a strategy for **skipping repeated material DLs**: call
a segment to run the material, remap the segment in the material to a
display list that immediately returns, and so if the material is called again
it won't run.
- New `SPMemset` command fills a specified RDRAM region with a repeated 16-bit
value. This can be used for clearing the Z buffer or filling the framebuffer
or the letterbox with a solid color **faster than the RDP can in fill mode**.
Practical performance may vary due to scheduling constraints.
### Miscellaneous

620
f3dex3.s

File diff suppressed because it is too large Load Diff

3
gbi.h
View File

@@ -2388,6 +2388,9 @@ _DW({ \
/**
* Use RSP DMAs to set a region of memory to a repeated 16-bit value. This can
* clear the color framebuffer or Z-buffer faster than the RDP can in fill mode.
* SPMemset overwrites the DMEM vertex buffer, so vertices loaded before this
* command cannot be used after it (though this would not normally be done).
*
* dram: Segmented or physical start address. Must be aligned to 16 bytes.
* value: 16-bit value to fill the memory with. e.g. 0 for color, 0xFFFC for Z.
* size: Size in bytes to fill, must be nonzero and a multiple of 16 bytes.

View File

@@ -14,18 +14,18 @@ YDF_OFFSET_TASKDATAPTR equ 0x10
YDF_OFFSET_UCODE equ 0x14
// OSTask data member offsets
OSTask_type equ 0x0000
OSTask_flags equ 0x0004 // see note below
OSTask_ucode_boot equ 0x0008
OSTask_ucode_boot_size equ 0x000C
OSTask_type equ 0x0000 // EX3: fourthQWMVP ^
OSTask_flags equ 0x0004 // see note below |
OSTask_ucode_boot equ 0x0008 // |
OSTask_ucode_boot_size equ 0x000C // v
OSTask_ucode equ 0x0010 // used in F3D, S2D, and boot
OSTask_ucode_size equ 0x0014
OSTask_ucode_data equ 0x0018 // used in boot only
OSTask_ucode_data_size equ 0x001C // used in boot only
OSTask_ucode_size equ 0x0014 // EX3: startCounterTime
OSTask_ucode_data equ 0x0018 // used in boot only. EX3: xfrmLookatDirs ^
OSTask_ucode_data_size equ 0x001C // used in boot only v
OSTask_dram_stack equ 0x0020 // used in F3D and S2D at first startup
OSTask_dram_stack_size equ 0x0024
OSTask_output_buff equ 0x0028 // used in F3D and S2D
OSTask_output_buff_size equ 0x002C // actually end pointer; used in F3D and S2D
OSTask_output_buff_size equ 0x002C // used in F3D and S2D; actually end pointer not size
OSTask_data_ptr equ 0x0030 // used in F3D and S2D
OSTask_data_size equ 0x0034
OSTask_yield_data_ptr equ 0x0038 // used in F3D and S2D