Commit Graph

406 Commits

Author SHA1 Message Date
Zephyron
94119302ec feat: Add OpenGL ZBC clear support and refactor ZBC management
Moved ZBCManager to `video_core/zbc_manager.cpp/h` for modularity. Added
`gl_zbc_clear.cpp/h` for efficient OpenGL color, depth, and stencil clears.
Updated `RasterizerOpenGL::Clear` to use ZBC with fallback. Added stencil
type validation. Fixed color mask and logging. Updated `CMakeLists.txt`.
Enhances performance and code organization.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 20:28:39 +10:00
Zephyron
f819b5d58d nvdrv: Implement ZBC table management with GPU memory integration
- Replace stubbed ZBCSetTable with comprehensive implementation
- Add parameter validation for format and type fields
- Implement detailed logging of ZBC color values for debugging
- Add proper documentation explaining ZBC (Zero Bandwidth Clear) functionality
- Handle color_ds and color_l2 arrays for GPU memory clearing operations
- Validate format parameter range (0-0xFF) and type parameter (0-1)
- Provide clear error handling for invalid parameters
- Add ZBCManager singleton class for global ZBC table management
- Implement ZBCQueryTable with full table lookup functionality
- Add thread-safe ZBC table storage with proper mutex protection
- Create ZBC namespace helper functions for GPU clearing operations
- Fix IoctlGpuCharacteristics struct size (0xA0) by correcting field types
- Add comprehensive logging and error handling for ZBC operations
- Enable ZBC table integration with GPU memory management system
- Store ZBC entries in both local device table and global manager
- Implement reference counting for proper ZBC entry lifecycle management

ZBC (Zero Bandwidth Clear) allows the GPU to perform efficient memory
clearing operations without requiring CPU bandwidth by storing clear
values in a dedicated table that can be referenced during rendering.
This implementation provides the foundation for zero-bandwidth clear
operations, allowing the GPU to efficiently clear color and depth
buffers using pre-defined values stored in the ZBC table.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 18:00:23 +10:00
Zephyron
9f13c0a827 nvdrv: Implement ZBCSetTable with proper parameter validation and logging
- Replace stubbed ZBCSetTable with comprehensive implementation
- Add parameter validation for format and type fields
- Implement detailed logging of ZBC color values for debugging
- Add proper documentation explaining ZBC (Zero Bandwidth Clear) functionality
- Handle color_ds and color_l2 arrays for GPU memory clearing operations
- Validate format parameter range (0-0xFF) and type parameter (0-1)
- Provide clear error handling for invalid parameters

ZBC (Zero Bandwidth Clear) allows the GPU to perform efficient memory
clearing operations without requiring CPU bandwidth by storing clear
values in a dedicated table that can be referenced during rendering.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 17:21:06 +10:00
Zephyron
2fae273e9a nvdrv: Add dummy support for ioctl 0x13 in nvhost_ctrl_gpu
- This adds implementations for ioctl command 0x13 in both Ioctl1 and Ioctl3 functions, allowing newer titles like Super Mario Party Jamboree to boot by properly handling this command with a NotImplemented response rather than failing.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-07 18:39:17 +10:00
Zephyron
b2d9cf4a01 chore: update project branding to CITRON
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-05-06 16:11:33 +10:00
Liam
d66ca8b731 video_core: make gpu context aware of rendering program 2024-02-26 11:16:14 -05:00
FearlessTobi
310c1f50be scope_exit: Make constexpr
Allows the use of the macro in constexpr-contexts.
Also avoids some potential problems when nesting braces inside it.
2024-02-19 16:00:46 +01:00
Liam
812f23d05c vi: manage resources independently of nvnflinger and refactor 2024-02-17 18:08:38 -05:00
Liam
ee8eccc5fa nvnflinger: convert to process 2024-02-17 18:01:41 -05:00
Liam
962c82540c nvnflinger/gpu: implement blending 2024-02-09 09:20:53 -05:00
Liam
06fd7f2012 nvservices: unmap only on last container free 2024-02-09 09:20:53 -05:00
liamwhite
263dfa95e4 Merge pull request #12914 from FernandoS27/vc-refactor
VideoCore Refactor Part 1.
2024-02-08 10:59:59 -05:00
liamwhite
c10e720ba9 Merge pull request #12883 from FernandoS27/memory_manager_mem
MemoryManager: Reduce the page table size based on last big page address.
2024-02-06 10:25:03 -05:00
Fernando Sahmkow
fa47ac1c9f Common: Rename SplitRangeSet to OverlapRangeSet 2024-02-05 23:01:17 +01:00
Fernando Sahmkow
accccc0cbf NVDRV: Refactor HeapMapper to use RangeSets 2024-02-04 20:01:50 +01:00
Fernando Sahmkow
f740d8b9be MemoryManager: Reduce the page table size based on last big page address. 2024-02-01 13:00:36 +01:00
Liam
a595e9e8a7 nvnflinger/gpu: implement layer stack composition 2024-01-31 11:27:21 -05:00
Fernando Sahmkow
aaab11e36f NVDRV: Join the heaper optimization blocks 2024-01-31 16:38:51 +01:00
liamwhite
e04368ad7c Merge pull request #12759 from liamwhite/mp-misc
core: miscellaneous fixes
2024-01-25 16:21:38 -05:00
Narr the Reg
fc5d76e6e2 service: properly convert buffers to strings 2024-01-23 10:24:05 -06:00
Liam
a120f8ff4d nvservices: close map handles on session close 2024-01-22 21:18:52 -05:00
Liam
04867e2456 nvhost_vic: use map erase by key 2024-01-18 21:12:30 -05:00
Liam
32f623e029 nvdrv: clean up preallocation 2024-01-18 21:12:30 -05:00
Liam
b6c6534c30 nvdrv: use correct names for interface factory 2024-01-18 21:12:30 -05:00
Liam
beb438bb0b nvdrv: use static typing for SessionId, smmu Asid types 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
590d9b7e1d Core: Clang format and other small issues. 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
b0bca0f8b0 SMMU: Fix software rendering and cleanup 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
d8f1ce2f76 SMMU: Add continuity tracking optimization. 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
303cd31162 SMMU: Add Android compatibility 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
0adc09e0af GPU-SMMU: Estimate game leak and preallocate device region. 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
96fd1348ae GPU SMMU: Expand to 34 bits 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
34a8d0cc8e SMMU: Implement physical memory mirroring 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
0a2536a0df SMMU: Initial adaptation to video_core. 2024-01-18 21:12:30 -05:00
Fernando Sahmkow
7a9d1ad2f8 NVDRV: Implement sessions and initial implementation of SMMU 2024-01-18 21:12:30 -05:00
Viktor Szépe
f124461674 Fix typos in src/core (#12625)
* Fix typos in src/core

* Fix typo correction

* Fix indentation of MemoryStateNames

* Fix indent
2024-01-08 13:31:48 -06:00
Liam
723df0f368 nvdrv: rework to remove memcpy 2023-10-25 13:05:56 -04:00
Liam
94b7ac50bb nvdrv: fix up remaining copy calls 2023-10-25 13:05:56 -04:00
Liam
18450ebd78 nvdrv: convert nvmap 2023-10-25 13:05:56 -04:00
Liam
efdb2e8f3d nvdrv: convert codec devices 2023-10-25 13:05:56 -04:00
Liam
7a84a1a974 nvdrv: convert nvhost_gpu 2023-10-25 13:05:56 -04:00
Liam
789d9c8af9 nvdrv: convert nvhost_ctrl 2023-10-25 13:05:56 -04:00
Liam
4df063209b nvdrv: convert nvhost_ctrl_gpu 2023-10-25 13:05:55 -04:00
Liam
6256e3ca8e nvdrv: add ioctl command serialization, convert nvhost_as_gpu 2023-10-25 13:05:55 -04:00
Narr the Reg
35f25882e0 service: nvnflinger: Implement shared buffer
Co-authored-by: Liam <byteslice@airmail.cc>
2023-10-01 11:38:30 -06:00
Danila Malyutin
785e480b62 msvc: set warning level to /W4 globally
And fix a bunch of warnings
2023-09-03 18:42:10 +04:00
Liam
9e134c3da2 nvhost_as_gpu: ensure mappings are aligned to big page size when deallocated 2023-08-25 09:39:18 -04:00
Liam
a85ce8ea56 k_process: PageTable -> GetPageTable 2023-07-14 21:43:15 -04:00
Morph
310b6cf4af general: Use ScratchBuffer where possible 2023-06-30 21:49:59 -04:00
Kelebek1
5da70f7197 Remove memory allocations in some hot paths 2023-06-22 08:05:10 +01:00
bunnei
e3122c5b46 Merge pull request #10086 from Morph1984/coretiming-ng-1
core_timing: Use CNTPCT as the guest CPU tick
2023-06-21 21:12:46 -07:00