Commit Graph
68 Commits
Author SHA1 Message Date
Wunkolo e2e49b7291 Add in-place swapchain recreation
Lots of todos, this should probably just be its own self-contained
object to allow the emulator to render "headlessly" regardless of a
swapchain existing or not.
2023-07-23 21:44:39 -07:00
Wunkolo c49fd71722 Use numeric_limits rather than ~0ULL 2023-07-22 19:44:09 -07:00
Wunkolo af4163de19 Implement simple swapchain image clearing
Creates a swapchain, and per-swapchain image data for safe parallelism and synchronization.
2023-07-22 19:41:41 -07:00
Wunkolo 90a4c9cf8d Initialize command buffer allocationFix SDL_Vulkan_GetDrawableSize call 2023-07-22 17:13:13 -07:00
Wunkolo fa804ae4c7 Implement swapchain draw loop
Verified on Windows and MacOS(M2)
2023-07-22 16:44:54 -07:00
Wunkolo 26c97eb716 Implement initial swapchain creation 2023-07-22 15:24:41 -07:00
Wunkolo 197e2a4bbd Allocate present/graphics/compute/transfer queue families 2023-07-22 14:23:37 -07:00
Wunkolo da6f880128 Disable timeline semaphore features
This is an optional feature that can be supported conditionally later
2023-07-22 13:34:10 -07:00
Wunkolo 8ace959d72 Fix RendererSW initGraphicsContext prototype 2023-07-22 13:20:57 -07:00
Wunkolo f715cb9478 Install VulkanSDK into CI environment 2023-07-22 13:16:23 -07:00
Wunkolo 428a9d1f1a Fix SDL_Window forward declaration
Should be struct, not class.
2023-07-22 13:16:23 -07:00
Wunkolo 165134ca40 Consider surface-support in device partitions
Use a stable_partitioning of the list of devices the driver gave us with
the addition of checking of the physical device supports the
display-surface that SDL gave us as well.
2023-07-22 13:16:23 -07:00
Wunkolo 0ada1f4e38 Include additional vulkan-extensions that SDL requests
Required for proper surface creation. This gets the surface-creation
call to pass now.
2023-07-22 13:16:23 -07:00
Wunkolo c7a93c4f52 Warn on failed surface creation for vulkan
Vulkan can technically work just fine without presenting to the user, so
consider these failed window procedures as "warnings" during iteration.
2023-07-22 13:16:23 -07:00
Wunkolo 444d50eaf5 Fix instance extensions on MacOS
These preprocessors were combining into a singular string rather than
the name of two individual extensions. Whoops.
2023-07-22 13:16:23 -07:00
Wunkolo eff62d3de7 Disable asserts on Vulkan result codes 2023-07-22 13:16:23 -07:00
Wunkolo d9afb12daf Fix MacOS build 2023-07-22 13:16:23 -07:00
Wunkolo b048d4dd6e Add SDL_Window to initGraphicsContext prototype
This value is needed for vulkan to properly allocate a surface, and would benefit OpenGL to move more of its initialization code into here rather than in `emulator.cpp`.
2023-07-22 13:16:23 -07:00
Wunkolo 870b6a21bf Add initial vulkan instance creation
Headlessly creates a new vulkan instance, with conditional MacOS
support, and enables the `VK_EXT_debug_utils` instance-extension with a
debug-messenger to hook onto validation layer messages.
2023-07-22 13:16:23 -07:00
Wunkolo d2241a25bc Stub Vulkan backend support
A lot of the architecture of the emulator here does not allow for vulkan
to initialize easily since it involves a bit of data to be exchanged
between SDL and Vulkan. This commit just adds the foundational linkage
and library code for vulkan support.
2023-07-22 13:16:23 -07:00
Wunkolo 19a77c2a85 Add missing algorithm header 2023-07-18 10:24:06 -07:00
Wunkolo 0b60cf6901 Migrate RenderType string functions to static Renderer functions
Also fix some IWYU build errors
2023-07-18 10:02:07 -07:00
Wunkolo 528ed510c2 Add string-based renderer backend configuration
Rather than using integer-indices, just use plaintext case-insensitive
names and leave the actual enum indexes as an implementation detail.
2023-07-17 18:02:01 -07:00
Wunkolo 2c57936c50 Fix EmulatorConfig initialization order
`config` was being consumed much too early before it has a chance to
call `load`. This caused GPU to read weird uninitialized data, and then
`load` called, and then further initialization to occur based on default
data and the data inside of `config.toml`. `EmulatorConfig` needs to be
loaded in first before any sort of initialization happens, by adding a
new constructor so that it can be initialized sooner.
2023-07-17 10:23:19 -07:00
Wunkolo ceff20f57f Add configurable Renderer backend
There are still some initialization errors to work through, such as
config not being initialized properly by the time GPU tries to utilize
it too. Also some life-time issues. But manually forcing it to use the
Null backnd successfully works and allows games to be "played"
headlessly.
2023-07-17 10:13:34 -07:00
Wunkolo 1becbef811 Add Null rendering backend
Doesn't implement any functions, currently not selectable or
configurable
2023-07-17 09:34:10 -07:00
Wunkolo b10e69de0e Add virtual deconstructor override
Virtual classes need to override the base-type deconstructor so that they are proper called when referred to by their base-type.
2023-07-17 09:30:12 -07:00
Wunkolo 413a03c8a3 Use https protocol for cmrc submodule 2023-07-15 19:21:26 -07:00
Wunkolo a9bb11e4b3 Migrate OpenGL string-literals to embedded files
Rather than declaring a big C++ literal for these strings, they are now
proper `.vert` and `.frag` files that will become embedded into the
application at build-time. It also allows for clang-format to format the
glsl files the same as our C++ code. CMake will also automatically track
and re-embed the file if it detects that the glsl source files have
changed since the last build. Ex, making a change to
`opengl_display.frag` and compiling will automatically recompile and
link the resource-target that it is associated with.
2023-07-15 19:12:07 -07:00
Wunkolo c294786846 Add cmrc submodule 2023-07-15 19:00:48 -07:00
Wunkolo 2f45714240 Add override-specifier to renderer implementation 2023-07-11 11:28:06 -07:00
Wunkolo 666fd96e7f Move color/depth format and size to Renderer interface
The state of these values are not specific to any rendering backend and
can be moved to be part of the interface itself
2023-07-11 11:28:06 -07:00
Wunkolo 5b7fa5be7e Remove redundant Renderer::screenshot definition 2023-07-11 11:28:06 -07:00
Wunkolo 0f3d77768d Fix array declarations to use block-formatting 2023-07-11 11:28:06 -07:00
Wunkolo 0a605339a3 Conditionally compile and link glad
Only include this library in the case that the OpenGL backend is
enabled.
2023-07-11 11:28:06 -07:00
Wunkolo 4864c51125 Migrate OpenGL specific headers to renderer_gl 2023-07-11 11:28:06 -07:00
Wunkolo a636a0d1da Replace ENABLE_OPENGL with PANDA3DS_ENABLE_OPENGL 2023-07-11 11:28:06 -07:00
Wunkolo c53080b444 Fix HTTPServer gpu-renderer interfacing
Fixing some compilation issues that occur when enabling the HTTP server
2023-07-11 11:28:06 -07:00
Wunkolo 9e32b6d4bf Remove OpenGL-specific vector-types
Removes dependency on the OpenGL header and rendering backen for its
`OpenGL::Vector` type in favor of a more standard array.
2023-07-11 11:27:35 -07:00
Wunkolo 2a1683ba62 Introduce "Renderer" abstraction layer
Adds a `renderer` class for which a rendering backend must implement and
will conditionally use OpenGL in the case that `ENABLE_GL` is enabled.
2023-07-11 11:27:35 -07:00
Wunkolo d664d5caf0 Emulator: Conditional OpenGL compilation 2023-07-11 11:27:04 -07:00
Wunkolo 0009b0817d Add ENABLE_OPENGL build option
Allows the OpenGL backend to be fully disabled, continuing a modular
pattern of having multiple possible rendering backends. Also defines the
`ENABLE_OPENGL` preprocessor in the case of conditional source-file
changes depending on the rendering backend.
2023-07-11 11:27:04 -07:00
WunkandGitHub 7382e29fa7 Merge pull request #105 from Wunkolo/tunit-stb_image_write
Move `stb_image_write` into its own translation unit
2023-07-11 11:03:08 -07:00
Wunkolo e4e8e7ce26 Move stb_image_write into its own translation unit
Rather than having the entire implementation within `emulator.cpp`,
causing incremental builds to be much slower, give it its own
translation unit `stb_image_write.c`.
2023-07-11 10:43:20 -07:00
WunkandGitHub 72252fc702 Merge pull request #102 from Wunkolo/sdl-test-disable
Disable compilation of SDL tests
2023-07-10 13:02:23 -07:00
Wunkolo d96289cc05 Address remaining C4244 warnings
Remaining warnings regarding an implicit cast from `double` to `float`.
2023-07-10 12:33:37 -07:00
Wunkolo 119c908aa7 Add explicit return-type overload for getBits
Allows the return-type to be specified, allowing a concise final cast
after extracting the bit-type.  Addresses the remaining `C4244` warnings
regarding `getBits`.
2023-07-10 12:33:37 -07:00
Wunkolo 37b75f0928 Fix C4267/C4244 warnings
Address warnings involving lossy conversions from larger integer-types into smaller integer-types
2023-07-10 12:33:37 -07:00
Wunkolo 1cb5513716 Disable compilation of SDL tests
Speed up our compilation by about 20 files by removing the need to
compile all of SDL's test suite.
2023-07-10 12:31:10 -07:00
Wunkolo 5372fe6e43 config: Use error_code prototype of filesystem::exists
The non-error-code version of these functions are susceptible to
throwing an exception in the case of system errors like permission
issues or underlying device errors.
2023-07-10 11:33:29 -07:00
Wunkolo 9746dd5eb2 Add TexEnv PICA register offsets 2023-06-20 14:55:12 -07:00
Wunkolo 62fdb29646 Add GPU_DEBUG_INFO CMake-Option
Adds a project-wide setting for allowing renderer code to add additional
diagnostic data.  Currently used to allow `opengl.hpp` to conditionally
implement debug-labeling and scopes.
2023-06-20 11:04:52 -07:00
Wunkolo dbf0597bd8 Add DebugScope utility-class for RAII-based OpenGL debug-scopes
Simply define this object in a C++ scope like:
```cpp
OpenGL::DebugScope glScope("Renderer::display");
```
and it will associate all functions within the current scope within a
named group. Supports `printf` formatting.
2023-06-20 10:10:11 -07:00
Wunkolo 1251cecc88 Add setObjectLabel for naming OpenGL functions
Add `OPENGL_PRINTF_FORMAT` and `OPENGL_PRINTF_FORMAT_ATTR` macros for providing
printf diagnostic information across platforms.
2023-06-19 23:48:16 -07:00
Wunkolo 1b9f270b19 Migrate IOFile implementation to io_file.cpp
Makes the implementation of `IOFile` private, allowing inclusions and
defines such as `#define fseeko` and `#include <io.h>` to not poison
client-code or the global namespace.
2023-06-19 19:37:36 -07:00
Wunkolo 6ee3f73335 Bisect TextureFmt and ColorFmt
Makes framebuffer-formats unrepresentable from texture formats while
allowing them to alias each other. Add utility functions as well that
just re-use the `TextureFmt` ones.
2023-06-18 08:22:14 -07:00
Wunkolo 134e16d8ea Replace Texture::Formats with PICA::ColorFmt
This enum was a duplicate of the PICA one. Now the PICA one is more
complete. Migrate `textureFormatToString` to be next to the enums
definition.
2023-06-18 00:10:04 -07:00
Wunkolo 5f07f77c94 Move hasStencil to regs.hpp 2023-06-17 23:27:19 -07:00
Wunkolo 838d3f27f9 Migrate PICA-types into PICA namespace
Rather than prefixing these types with `PICA`, a namespace is used instead.
2023-06-17 18:23:47 -07:00
Wunkolo 78a3f9fa23 Add PICA texel-format and topology types
Slowly stepping the codebase towards having renderer-agnostic types and keeping the translation of PICA-types to OpenGL/VK/DX/Software/etc to the renderer-backend.
2023-06-17 12:26:41 -07:00
Wunkolo 553d23974a Use std::span to pass vertex data
Starts utilizing
[std::span](https://en.cppreference.com/w/cpp/container/span) to
indicate a non-owning view of a contiguous array of elements rather than
`T* data, usize count`.
2023-06-16 07:28:35 -07:00
Wunkolo fde93381a5 Use std::span for CPU register-state
Following the trend of #33: `std::span` provides some useful utility
functions like `size_bytes()` and `as_bytes()` and serves as a better
non-owning "chunk of data"-type over just passing around an
`std::array&`.
2023-06-16 07:24:37 -07:00
Wunkolo 0199918cd2 Add missing header for regs.hpp
This enum was using the `u32` type without including `helpers.hpp`, causing weird intermediate compiler errors when making incremental builds.
2023-06-16 05:48:33 -07:00
Wunkolo dd0831361d Add .clang-format
Use the command `clang-format -i tests/**/*.c src/**/*.cpp include/**/*.hpp`
to process all of the project's files.
Using the one from [pcsx-redux](https://github.com/grumpycoders/pcsx-redux/blob/main/src/.clang-format)
as a basis and then made additional edits to be the _least_ disruptive
to the pre-existing formatting patterns.
2023-06-15 00:37:49 -07:00
Wunkolo 8a852d2cab Implement SaveDataArchive::createFile
Based on `ExtSaveDataArchive::createFile`. Gets some games farther that
try to create save-data upon boot.
2023-06-11 01:05:48 -07:00
Wunkolo 2c94d0d683 Add Helpers:{getBits,getBit}
`constexpr` functions for extractint bitfields that lends itself a bit
better to emitting instructions like `bextr` on x86 or `ubfx` on arm64.
And may subjectively make things a bit more readable.
"Extract `5` bits" rather than `& 0x1F`.
2023-06-10 00:48:06 -07:00
Wunkolo 2edc9d5fb7 Remove #pragma once from source file 2023-06-09 20:31:25 -07:00
Wunkolo e0af6969c6 Fix cmake out-of-source build instructions
These directions are incorrectly using `cmake .` when it should be
`cmake ..`.
2023-06-09 20:23:14 -07:00