Commit Graph

9673 Commits

Author SHA1 Message Date
GPUCode
26d6f9d1c6
Rasterizer cache refactor (#6375)
* rasterizer_cache: Remove custom texture code

* It's a hacky buggy mess, will be reimplemented later when the cache is in a better state

* rasterizer_cache: Refactor surface upload/download

* Switch to the texture_codec header which was written as part of the vulkan backend by steveice and me

* Move most of the upload logic to the rasterizer cache and out of the surface object

* Scaled uploads/downloads have been disabled for now since they require more runtime infrastructure

* rasterizer_cache: Refactor runtime interface

* Remove aspect enum which is the same as SurfaceType

* Replace Subresource with specific structures for each operation (blit/copy/clear). This mimics moderns APIs vulkan much better

* Pass the surface to the runtime instead of the texture

* Implement CopyTextures with glCopyImageSubData which is available on 4.3 and gles.
  This function also has an overload for cubes which will be removed later.

* rasterizer_cache: Move texture allocation to the runtime

* renderer_opengl: Remove TextureDownloaderES

* It's overly compilcated and unused at the moment. Will be replaced with a simple compute shader in a later commit

* rasterizer_cache: Split CachedSurface

* This commit splits CachedSurface into two classes, SurfaceBase which contains the backend agnostic functions and Surface which is the opengl specific part

* For now the cache uses the opengl surface directly and there are a few ugly casts with watchers, those will be taken care of when the template convertion and watcher removal are added respectively

* rasterizer_cache: Move reinterpreters to the runtime

* rasterizer_cache: Move some pixel format function to the cpp file

* rasterizer_cache: Common texture acceleration functions

* They don't contain any backend specific code so they shouldn't be duplicated

* rasterizer_cache: Remove BlitSurfaces

* It's better to prefer copy/blit in the caller anyway

* rasterizer_cache: Only allocate needed levels

* rasterizer_cache: Move texture runtime out of common dir

* Also shorten the util header filename

* surface_params: Cleanup code

* Add more comments, organize it a bit etc

* rasterizer_cache: Move texture filtering to the runtime

* rasterizer_cache: Move to VideoCore

* renderer_opengl: Reimplement scaled uploads/downloads

* Instead of looking up for temporary textures, each allocation now contains both a scaled and unscaled handle
  This allows the scale operations to be done inside the surface object itself and improves performance in general

* In particular the scaled download code has been expanded to use ARB_get_texture_sub_image when possible
  which is faster and more convenient than glReadPixels. The latter is still relevant for OpenGLES though.

* Finally allocations are now given a handy debug name that can be viewed from renderdoc.

* rasterizer_cache: Remove global state

* gl_rasterizer: Abstract common draw operations to Framebuffer

* This also allows to cache framebuffer objects instead of always swapping the textures, something that particularly benefits mali gpus

* rasterizer_cache: Implement multi-level surfaces

* With this commit the cache can now directly upload and use mipmaps
  without needing to sync them with watchers. By using native mimaps
  directly this also adds support for mipmap for cube

* Texture cubes have also been updated to drop the watcher requirement

* host_shaders: Add CMake integration for string shaders

* Improves build time shader generation making it much less prone to errors.
  Also moves the presentation shaders here to avoid embedding them to the cpp file.

* Texture filter shaders now make explicit use of uniform bindings for better vulkan compatibility

* renderer_opengl: Emulate lod bias in the shader

* This way opengles can emulate it correctly

* gl_rasterizer: Respect GL_MAX_TEXTURE_BUFFER_SIZE

* Older Bifrost Mali GPUs only support up to 64kb texture buffers. Citra would try to allocate a much larger buffer the first 64kb of which would work fine but after that the driver starts misbehaving and showing various graphical glitches

* rasterizer_cache: Cleanup CopySurface

* renderer_opengl: Keep frames synchronized when using a GPU debugger

* rasterizer_cache: Rename Surface to SurfaceRef

* Makes it clear that surface is a shared_ptr and not an object

* rasterizer_cache: Cleanup

* Move constructor to the top of the file

* Move FindMatch to the top as well and remove the Invalid flag which was redudant;
  all FindMatch calls used it expect from MatchFlags::Copy which ignores it anyway

* gl_texture_runtime: Make driver const

* gl_texture_runtime: Fix RGB8 format handling

* The texture_codec header, being written with vulkan in mind converts RGB8 to RGBA8. The backend wasn't adjusted to account for this though and treated the data as RGB8.

* Also remove D16 convertions, both opengl and vulkan are required to support this format so these are not needed

* gl_texture_runtime: Reduce state switches during FBO blits

* glBlitFramebuffer is only affected by the scissor rectangle so just disable scissor testing instead of resetting our entire state

* surface_params: Prevent texcopy that spans multiple levels

* It would have failed before as well, with multi-level surfaces it triggers the assert though

* renderer_opengl: Centralize texture filters

* A lot of code is shared between the filters thus is makes it sense to centralize them

* Also fix an issue with partial texture uploads

* Address review comments

* rasterizer_cache: Use leading return types

* rasterizer_cache: Cleanup null checks

* renderer_opengl: Add additional logging

* externals: Actually downgrade glad

* For some reason I missed adding the files to git

* surface_params: Do not check for levels in exact match

* Some games will try to use the base level of a multi level surface. Checking for levels forces another surface to be created and a copy to be made which is both unncessary and breaks custom textures

---------

Co-authored-by: bunnei <bunneidev@gmail.com>
2023-04-21 10:14:55 +03:00
bunnei
9414db4f65
Merge pull request #6439 from t895/theme-adjustments
citra_android: Theme adjustments
2023-04-20 17:02:46 -07:00
SachinVin
89db2e323a
.ci\android\upload.sh: follow naming convention of other artifacts (#6440) 2023-04-16 19:53:17 +02:00
SachinVin
0da25736d9
renderer_opengl.cpp: Draw{Top, Bottom}Screen Clean up (#6422) 2023-04-16 19:51:21 +02:00
SachinVin
5f81940e63
Merge pull request #6419 from vitor-k/states
Update zstd and improve savestates logging
2023-04-15 10:11:40 +05:30
Charles Lombardo
2e23a75fac citra_android: Fix top app bar color in cheats activity 2023-04-14 21:12:34 -04:00
Charles Lombardo
9aed0a14c7 citra_android: Reduce the primary color's influence on the surface color in dark mode 2023-04-14 21:08:15 -04:00
Charles Lombardo
8a3afaf9e6 citra_android: Fix background color on first launch
The incorrect background color could appear when the games fragment is not initialized as it is during first boot. Now it appears correctly as colorSurface.
2023-04-14 20:49:47 -04:00
Charles Lombardo
1adf631725 citra_android: Use primary color for FAB 2023-04-14 20:46:48 -04:00
SachinVin
2a2ee8bc96
Merge pull request #6395 from ian-h-chamberlain/feature/gdbstub-hio
Initial port of luma3ds' gdb_hio to Citra
2023-04-11 20:32:48 +05:30
Ian Chamberlain
025913a734
Fix string_view constructor for macOS clang
Some versions of clang 14 (macOS+android) don't implement
`string_view(It first, It last)`, so let's use
`string_view(const CharT*, size_type)` instead.

Also remove unused header leftover from old code that uses std::string.
2023-04-11 10:06:08 -04:00
Vitor Kiguchi
dccd89b796 savestates: various changes
The header doesn't need to be serialized.
GetSaveStatePath may be static.
Remove unused includes.
Name the CryptoPP stringsource.
2023-04-10 00:51:02 -03:00
Vitor Kiguchi
c79acdd88d savestates: validate states before load 2023-04-10 00:51:02 -03:00
Vitor Kiguchi
8e8c8fa37a savestates: log slot on load and save 2023-04-10 00:51:02 -03:00
Vitor Kiguchi
7b8832cebb externals: update zstd to v1.5.5 2023-04-10 00:51:01 -03:00
Charles Lombardo
cdb157f58a
citra_android: Night mode fixes (#6416) 2023-04-09 21:18:28 +02:00
SachinVin
e283de9b6d
gl_shader_disk_cache.cpp: Invalidate Tranferable cache on error (#6392) 2023-04-09 21:16:44 +02:00
Steveice10
b6e73f0d49
Add consolidated GodMode9 key dumping script. (#6396) 2023-04-09 21:16:31 +02:00
SachinVin
8d19483b7e
externals: bump dynarmic to 6.4.6 (#6423) 2023-04-09 21:03:48 +02:00
SachinVin
a94acde519
core\frontend\framebuffer_layout: GetCardboardSettings: clean up floa… (#6399)
* core\frontend\framebuffer_layout: GetCardboardSettings: clean up float to u32 conversion warnings + style fixes

* clang format

* fix signedness
2023-04-09 10:59:25 +05:30
Narr the Reg
90bcf49db0
android: Clean up overlay controls and avoid triggering touch screen when a button is pressed (#6391) 2023-04-09 10:58:42 +05:30
Jake Downs
bc5b065abe
android: replace jcenter with mavenCentral (#6417)
* replace jcenter with mavenCentral https://github.com/citra-emu/citra/issues/6232

* add back jcenter as fallback for billing
2023-04-09 10:55:37 +05:30
SachinVin
563c77154e
citra_qt/bootmanager.cpp: Fix scaling on QT with SW rasteriser (#6424) 2023-04-08 21:28:03 +05:30
SachinVin
e4e9fb4aed
Merge pull request #6412 from GPUCode/wayland-oops
Port yuzu-emu/yuzu#7410: "Wayland fixes"
2023-04-08 16:51:56 +05:30
SachinVin
6a0baef239
Merge pull request #6410 from vitor-k/qt-vsync
citra_qt: fix vsync issues
2023-04-08 16:51:29 +05:30
Vitor K
8b93db0841
Updates to github actions (#6358) 2023-04-06 14:34:35 +02:00
SachinVin
9c81dc0dd8
externals\CMakeLists.txt: dynarmic, fmt, xbyak: add EXCLUDE_FROM_ALL property (#6398) 2023-04-06 14:31:28 +02:00
Steveice10
287ce1e56f
kernel: Skip address range checks for privileged memory (un)map. (#6407) 2023-04-06 14:30:13 +02:00
hank121314
495e5dadd7
citra_android: fix config is getting overwritten by default (#6408) 2023-04-05 18:51:05 +02:00
hank121314
7d64c654cc
citra_android: fix select root as citra directory cause crash (#6400) 2023-04-05 18:50:53 +02:00
Ian Chamberlain
4cc181e5b8
Address review comments
Use more modern C++ style casts + std::array, clean up some log
messages, and rename some functions.
2023-04-05 12:41:17 -04:00
GPUCode
31cd8120b6
transifex: Remove python client (#6401) 2023-04-05 00:26:58 +02:00
PolarZero
29aed69734
gl_rasterizer: HP Bar Fix for some games (#6334)
* HP Bar Fix for some games

Can fix #5139 #5563 and log spam

* HP Bar Fix for some games

Can fix #5139 #5563 and log spam

* Add TODO about HP Bar Fix
2023-04-04 20:32:14 +03:00
Ian Chamberlain
696c0904f8
Update some c-style casts -> reinterpret_cast 2023-04-04 13:21:25 -04:00
Ian Chamberlain
6e45de760e
Cleanup new code, add docs and error handling 2023-04-04 13:13:24 -04:00
SeleDreams
62d58f669a
kernel: Adjusted resource limits for more accuracy to the running 3DS model (#6393)
Co-authored-by: Tobias <thm.frey@gmail.com>
2023-04-04 19:03:08 +02:00
Steveice10
5f90c9816d
apt: Add stub for ns:c service. (#6409) 2023-04-04 19:01:37 +02:00
Ian Chamberlain
0d4c93d1c2
Undo some changes exposing unused functions 2023-04-04 12:20:41 -04:00
zhaobot
55c1710dd6
Update translations (2023-04-04) (#6414)
Co-authored-by: The Citra Community <noreply-fake@community.citra-emu.org>
2023-04-04 14:28:24 +05:30
Steveice10
9cbefa468a
qt: Disable system update downloader in per-game settings. (#6402) 2023-04-03 22:59:56 +02:00
Vitor Kiguchi
b4ef3cdeff bootmanager: set the surface format based on vsync 2023-04-03 17:25:39 -03:00
Vitor Kiguchi
5c50a26b38 bootmanager: make main_context a unique_ptr 2023-04-03 17:25:39 -03:00
Vitor Kiguchi
40849a8fa8 bootmanager: remove unnecessary includes 2023-04-03 17:25:39 -03:00
Vitor Kiguchi
4e0f78dfa0 citra_qt: fix vsync configuration being possible while a game is running 2023-04-03 17:25:39 -03:00
Alexander Orzechowski
aac0e07d1e emu_window_sdl2: Respect hidpi
Use SDL_GL_GetDrawableSize instead of SDL_GetWindowSize which
will return the true size our swapchain needs to be in even
for hidpi displays.
2023-04-03 14:34:45 +03:00
Alexander Orzechowski
06c426883f OpenGL: Check for threading support
We need this.
2023-04-03 14:33:15 +03:00
GPUCode
71d4a85957 video_core: Disable async shader loading with strict contexts 2023-04-03 14:32:13 +03:00
Alexander Orzechowski
3846d0c2cd RenderWidget: Set WA_DontCreateNativeAncestors
Some windowing systems like wayland are designed to show hardware accellerated
surfaces as subsurfaces and not native windows.
2023-04-03 13:59:06 +03:00
Steveice10
041252ba36
file_sys: Attempt to open New 3DS variant NCCH if available. (#6383) 2023-04-02 08:57:56 +05:30
Steveice10
a74d7a0e6b
qt: Hide system titles with invisible or invalid SMDH data. (#6381) 2023-04-02 08:57:22 +05:30