summaryrefslogtreecommitdiffstats
path: root/src/video_core/CMakeLists.txt (unfollow)
Commit message (Collapse)AuthorFilesLines
2023-05-01renderer_vulkan: Async presentationGPUCode1-0/+2
2023-04-29Buffer Cache: Fully rework the buffer cache.Fernando Sahmkow1-0/+5
2023-02-27Partially apply LTO to only core and video_core projects.Matías Locatti1-0/+4
2023-01-26video_core/opengl: Add FSR upscaling filter to the OpenGL rendererWollnashorn1-0/+4
2023-01-05video_core: Cache GPU internal writes.Fernando Sahmkow1-0/+1
2023-01-05video_core: Implement opengl/vulkan draw_textureFeng Chen1-0/+2
2023-01-05vulkan: implement 'turbo mode' clock boosterLiam1-0/+2
2023-01-01RasterizerMemory: Add filtering for flushing/invalidation operations.Fernando Sahmkow1-0/+1
2022-12-08video_core: Integrate SMAALiam1-0/+4
Co-authored-by: goldenx86 <goldenx86@users.noreply.github.com> Co-authored-by: BreadFish64 <breadfish64@users.noreply.github.com>
2022-12-08video_core: Implement maxwell3d draw manager and split draw logicFeng Chen1-0/+2
2022-12-04cmake: prefer system librariesAlexandre Bouvier1-4/+3
2022-12-04externals: update dynarmic, SDL2Liam1-2/+8
2022-11-30CMake: Use precompiled headersameerj1-0/+5
2022-11-29video_core: add null backendLiam1-0/+4
2022-11-24Fermi2D: Rework blit engine and add a software blitter.Fernando Sahmkow1-0/+4
2022-11-09Initial ARM64 supportLiam1-3/+12
2022-10-22CMakeLists: Remove all redundant warningsMorph1-7/+1
These are already explicitly or implicitly set in src/CMakeLists.txt
2022-10-17video_core: Implement memory manager page kindFengChen1-0/+1
2022-10-06NVDRV: Refactor Host1xFernando Sahmkow1-0/+2
2022-10-06VideoCore: Refactor syncing.Fernando Sahmkow1-19/+21
2022-10-06Refactor VideoCore to use AS sepparate from Channel.Fernando Sahmkow1-0/+1
2022-10-06VideoCore: implement channels on gpu caches.Fernando Sahmkow1-0/+8
2022-07-27chore: make yuzu REUSE compliantAndrea Pappacoda1-0/+3
[REUSE] is a specification that aims at making file copyright information consistent, so that it can be both human and machine readable. It basically requires that all files have a header containing copyright and licensing information. When this isn't possible, like when dealing with binary assets, generated files or embedded third-party dependencies, it is permitted to insert copyright information in the `.reuse/dep5` file. Oh, and it also requires that all the licenses used in the project are present in the `LICENSES` folder, that's why the diff is so huge. This can be done automatically with `reuse download --all`. The `reuse` tool also contains a handy subcommand that analyzes the project and tells whether or not the project is (still) compliant, `reuse lint`. Following REUSE has a few advantages over the current approach: - Copyright information is easy to access for users / downstream - Files like `dist/license.md` do not need to exist anymore, as `.reuse/dep5` is used instead - `reuse lint` makes it easy to ensure that copyright information of files like binary assets / images is always accurate and up to date To add copyright information of files that didn't have it I looked up who committed what and when, for each file. As yuzu contributors do not have to sign a CLA or similar I couldn't assume that copyright ownership was of the "yuzu Emulator Project", so I used the name and/or email of the commit author instead. [REUSE]: https://reuse.software Follow-up to 01cf05bc75b1e47beb08937439f3ed9339e7b254
2022-06-14CMakeLists: Make variable shadowing a compile-time errorMorph1-5/+0
Now that the entire project is free of variable shadowing, we can enforce this as a compile time error to prevent any further introduction of this logic bug.
2022-06-01core/debugger: Improved stepping mechanism and misc fixesLiam1-0/+4
2021-12-03video_core/cmake: link against libva explicitly ...liushuyu1-0/+1
... to fix build on Flatpak (and self-builds)
2021-11-16Vulkan: Reimplement FSR constant generation functions to avoid GCC warningsMarshall Mohror1-1/+0
2021-11-16Presentation: Only use FP16 in scaling shaders on supported devices in VulkanMarshall Mohror1-0/+1
2021-11-16vulkan: Implement FidelityFX Super ResolutionMarshall Mohror1-0/+2
2021-11-13codecs: Add VP8 codec classameerj1-0/+2
2021-08-16cmake: Add VDPAU and NVDEC support to FFmpeglat9nq1-0/+1
Adds {h264_,vp9_}{nvdec,vdpau} hwaccels.
2021-08-05texture_cache: Address ameerj's reviewyzct123451-3/+3
2021-08-05texture_cache: Split templates outyzct123451-0/+3
2021-08-04nvdec: Implement VA-API hardware video acceleration (#6713)yzct123451-0/+5
* nvdec: VA-API * Verify formatting * Forgot a semicolon for Windows * Clarify comment about AV_PIX_FMT_NV12 * Fix assert log spam from missing negation * vic: Remove forgotten debug code * Address lioncash's review * Mention VA-API is Intel/AMD * Address v1993's review * Hopefully fix CMakeLists style this time * vic: Improve cache locality * vic: Fix off-by-one error * codec: Async * codec: Forgot the GetValue() * nvdec: Address ameerj's review * codec: Fallback to CPU without VA-API support * cmake: Address lat9nq's review * cmake: Make VA-API optional * vaapi: Multiple GPU * Apply suggestions from code review Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com> * nvdec: Address ameerj's review * codec: Use anonymous instead of static * nvdec: Remove enum and fix memory leak * nvdec: Address ameerj's review * codec: Remove preparation for threading Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com>
2021-07-28renderer_vulkan: Add setting to log pipeline statisticsReinUsesLisp1-0/+2
Use VK_KHR_pipeline_executable_properties when enabled and available to log statistics about the pipeline cache in a game. For example, this is on Turing GPUs when generating a pipeline cache from Super Smash Bros. Ultimate: Average pipeline statistics ========================================== Code size: 6433.167 Register count: 32.939 More advanced results could be presented, at the moment it's just an average of all 3D and compute pipelines.
2021-07-23gl_shader_cache: Implement async shadersameerj1-0/+1
2021-07-23gl_shader_cache: Rename Program abstractions into PipelineReinUsesLisp1-4/+4
2021-07-23video_core: Abstract transform feedback translation utilityReinUsesLisp1-0/+2
2021-07-23shader: Initial OpenGL implementationReinUsesLisp1-0/+4
2021-07-23shader: Move pipeline cache logic to separate filesReinUsesLisp1-0/+3
Move code to separate files to be able to reuse it from OpenGL. This greatly simplifies the pipeline cache logic on Vulkan. Transform feedback state is not yet abstracted and it's still intrusively stored inside vk_pipeline_cache. It will be moved when needed on OpenGL.
2021-07-23shader_recompiler,video_core: Cleanup some GCC and Clang errorslat9nq1-1/+1
Mostly fixing unused *, implicit conversion, braced scalar init, fpermissive, and some others. Some Clang errors likely remain in video_core, and std::ranges is still a pertinent issue in shader_recompiler shader_recompiler: cmake: Force bracket depth to 1024 on Clang Increases the maximum fold expression depth thread_worker: Include condition_variable Don't use list initializers in control flow Co-authored-by: ReinUsesLisp <reinuseslisp@airmail.cc>
2021-07-23shader: Add partial rasterizer integrationReinUsesLisp1-1/+5
2021-07-23shader: Primitive Vulkan integrationReinUsesLisp1-4/+2
2021-07-23shader: Remove old shader managementReinUsesLisp1-64/+0
2021-06-28video_core: Enforce C4242Morph1-3/+2
2021-06-26video_core: Enforce C4244ReinUsesLisp1-0/+1
Enforce implicit integer casts to a smaller type as errors.
2021-06-16textures: Reintroduce CPU ASTC decoderameerj1-0/+1
Users may want to fall back to the CPU ASTC texture decoder due to hangs and crashes that may be caused by keeping the GPU under compute heavy loads for extended periods of time. This is especially the case in games such as Astral Chain which make extensive use of ASTC textures.
2021-03-25astc_decoder: Refactor for style and more efficient memory useameerj1-1/+0
2021-02-13video_core: Reimplement the buffer cacheReinUsesLisp1-5/+1
Reimplement the buffer cache using cached bindings and page level granularity for modification tracking. This also drops the usage of shared pointers and virtual functions from the cache. - Bindings are cached, allowing to skip work when the game changes few bits between draws. - OpenGL Assembly shaders no longer copy when a region has been modified from the GPU to emulate constant buffers, instead GL_EXT_memory_object is used to alias sub-buffers within the same allocation. - OpenGL Assembly shaders stream constant buffer data using glProgramBufferParametersIuivNV, from NV_parameter_buffer_object. In theory this should save one hash table resolve inside the driver compared to glBufferSubData. - A new OpenGL stream buffer is implemented based on fences for drivers that are not Nvidia's proprietary, due to their low performance on partial glBufferSubData calls synchronized with 3D rendering (that some games use a lot). - Most optimizations are shared between APIs now, allowing Vulkan to cache more bindings than before, skipping unnecesarry work. This commit adds the necessary infrastructure to use Vulkan object from OpenGL. Overall, it improves performance and fixes some bugs present on the old cache. There are still some edge cases hit by some games that harm performance on some vendors, this are planned to be fixed in later commits.
2021-02-08video_core: Delete mortonChloe Marcec1-2/+0
moron.h & morton.cpp are not used anywhere and are just empty files
2021-02-05CMake: Port citra-emu/citra FindFFmpeg.cmakelat9nq1-2/+2
Also renames related CMake variables to match both the Find*FFmpeg* and variables defined within the file. Fixes odd errors produced by the old FindFFmpeg. Citra's FindFFmpeg is slightly modified here: adds Citra's copyright at the beginning, renames FFmpeg_INCLUDES to FFmpeg_INCLUDE_DIR, disables a few components in _FFmpeg_ALL_COMPONENTS, and adds the missing avutil component to the comment above.
2021-02-05CMake: Implement YUZU_USE_BUNDLED_FFMPEGlat9nq1-6/+5
For Linux, instructs CMake to use the FFmpeg submodule in externals. This is HEAVILY based on our usage of the late Unicorn. Minimal change to MSVC as it uses the yuzu-emu/ext-windows-bin. MinGW now targets the same ext-windows-bin libraries as MSVC for FFmpeg. Adds FFMPEG_LIBRARIES to WIN32 and simplifies video_core/CMakeLists.txt a bit.
2021-01-24cmake: Enforce -Warray-bounds and -Wmissing-field-initializers globallyReinUsesLisp1-2/+0
2021-01-24video_core/cmake: Enforce -Warray-bounds and -Wmissing-field-initializersReinUsesLisp1-0/+2
2021-01-23video_core/cmake: Properly generate fatal errors on AftermathReinUsesLisp1-2/+2
Fix "message(ERROR ..." to "message(FATAL_ERROR ..." to properly stop cmake when Nsight Aftermath can't be configured.
2021-01-15vulkan_common: Move allocator to the common directoryReinUsesLisp1-2/+2
Allow using the abstraction from the OpenGL backend.
2021-01-15video_core/cmake: Remove Werror flags already defined code-base wideReinUsesLisp1-2/+0
These flags are already defined in src/cmake.
2021-01-15cmake: Enforce -Wunused-function code-base wideReinUsesLisp1-1/+0
2021-01-15video_core: Enforce -Wunused-functionReinUsesLisp1-0/+1
Stops us from merging code with unused functions in the future. If something is invoked behind conditionally evaluated code in a way that the language can't see it (e.g. preprocessor macros), the potentially unused function should use [[maybe_unused]].
2021-01-13buffer_cache/buffer_base: Add a range tracking buffer containerReinUsesLisp1-0/+1
It keeps track of the modified CPU and GPU ranges on a CPU page granularity, notifying the given rasterizer about state changes in the tracking behavior of the buffer. Use a small vector optimization to store buffers smaller than 256 KiB locally instead of using free store memory allocations.
2021-01-04renderer_vulkan/nsight_aftermath_tracker: Move to vulkan_commonReinUsesLisp1-2/+2
2021-01-04renderer_vulkan: Move device abstraction to vulkan_commonReinUsesLisp1-2/+2
2020-12-31renderer_vulkan: Initialize surface in separate fileReinUsesLisp1-0/+2
Move surface initialization code to a separate file. It's unlikely to use this code outside of Vulkan, but keeping platform-specific code (Win32, Xlib, Wayland) in its own translation unit keeps things cleaner.
2020-12-31renderer_vulkan: Create debug callback on separate file and throwReinUsesLisp1-0/+2
Initialize debug callbacks (messenger) from a separate file. This allows sharing code with different backends. Change our Vulkan error handling to use exceptions instead of error codes, simplifying the initialization process.
2020-12-31renderer_vulkan: Move instance initialization to a separate fileReinUsesLisp1-0/+2
Simplify Vulkan's backend initialization code by moving it to a separate file, allowing us to initialize a Vulkan instance from different backends.
2020-12-31vulkan_common: Rename renderer_vulkan/wrapper.h to vulkan_common/vulkan_wrapper.hReinUsesLisp1-2/+2
Allows sharing Vulkan wrapper code between different rendering backends.
2020-12-31vulkan_common: Move dynamic library load to a separate fileReinUsesLisp1-0/+2
Allows us to initialize a Vulkan dynamic library from different backends without duplicating code.
2020-12-30video_core: Rewrite the texture cacheReinUsesLisp1-22/+25
The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage.The current texture cache has several points that hurt maintainability and performance. It's easy to break unrelated parts of the cache when doing minor changes. The cache can easily forget valuable information about the cached textures by CPU writes or simply by its normal usage. This commit aims to address those issues.
2020-12-30video_core: Add a delayed destruction ring abstractionReinUsesLisp1-0/+1
2020-12-29video_core: gpu: Refactor out synchronous/asynchronous GPU implementations.bunnei1-4/+1
- We must always use a GPU thread now, even with synchronous GPU.
2020-12-25cmake: Always enable VulkanReinUsesLisp1-75/+66
Removes the unnecesary burden of maintaining separate #ifdef paths and allows us sharing generic Vulkan code across APIs.
2020-12-25video_core: Enforce C4715 (not all control paths return a value)ReinUsesLisp1-0/+1
Most of the time people write code that always returns a value, terminates execution, throws an exception, or uses an unconventional jump primitive. This is not always true when we build without asserts on mainline builds. To avoid introducing undefined behavior on our most used builds, enforce this warning signalling an error and stopping the build from shipping.
2020-12-05video_core: Resolve more variable shadowing scenarios pt.3Lioncash1-1/+8
Cleans out the rest of the occurrences of variable shadowing and makes any further occurrences of shadowing compiler errors.
2020-10-28video_core: Enforce -Wredundant-move and -Wpessimizing-moveReinUsesLisp1-0/+2
Silence three warnings and make them errors to avoid introducing more in the future.
2020-10-28video_core: Enforce -Werror=type-limitsReinUsesLisp1-0/+1
Silences one warning and avoids introducing more in the future.
2020-10-27video_core: NVDEC Implementationameerj1-0/+26
This commit aims to implement the NVDEC (Nvidia Decoder) functionality, with video frame decoding being handled by the FFmpeg library. The process begins with Ioctl commands being sent to the NVDEC and VIC (Video Image Composer) emulated devices. These allocate the necessary GPU buffers for the frame data, along with providing information on the incoming video data. A Submit command then signals the GPU to process and decode the frame data. To decode the frame, the respective codec's header must be manually composed from the information provided by NVDEC, then sent with the raw frame data to the ffmpeg library. Currently, H264 and VP9 are supported, with VP9 having some minor artifacting issues related mainly to the reference frame composition in its uncompressed header. Async GPU is not properly implemented at the moment. Co-Authored-By: David <25727384+ogniK5377@users.noreply.github.com>
2020-10-21video_core: Conditially activate relevant compiler warningsLioncash1-2/+4
These compiler flags aren't shared with clang, so specifying these flags unconditionally can lead to a bit of warning spam. While we're in the area, we can also enable -Wunused-but-set-parameter given this is almost always a bug.
2020-10-09video_core: Enforce -Wclass-memaccessReinUsesLisp1-0/+1
2020-10-03video_core: Enforce -Wunused-variable and -Wunused-but-set-variableReinUsesLisp1-1/+7
2020-09-19renderer_vulkan: Make unconditional use of VK_KHR_timeline_semaphoreReinUsesLisp1-2/+6
This reworks how host<->device synchronization works on the Vulkan backend. Instead of "protecting" resources with a fence and signalling these as free when the fence is known to be signalled by the host GPU, use timeline semaphores. Vulkan timeline semaphores allow use to work on a subset of D3D12 fences. As far as we are concerned, timeline semaphores are a value set by the host or the device that can be waited by either of them. Taking advantange of this, we can have a monolithically increasing atomic value for each submission to the graphics queue. Instead of protecting resources with a fence, we simply store the current logical tick (the atomic value stored in CPU memory). When we want to know if a resource is free, it can be compared to the current GPU tick. This greatly simplifies resource management code and the free status of resources should have less false negatives. To workaround bugs in validation layers, when these are attached there's a thread waiting for timeline semaphores.
2020-09-16video_core: Enforce -Werror=switchReinUsesLisp1-1/+1
This forces us to fix all -Wswitch warnings in video_core.
2020-08-24video_core/host_shaders: Add CMake integration for string shadersReinUsesLisp1-0/+5
Add the necessary CMake code to copy the contents in a string source shader (GLSL or GLASM) to a header file then consumed by video_core files. This allows editting GLSL in its own files without having to maintain them in source files. For now, only OpenGL presentation shaders are moved, but we can add GLASM presentation shaders and static SPIR-V generation through glslangValidator in the future.
2020-07-17async shadersDavid Marcec1-0/+4
2020-06-27video_core/compatible_formats: Table to test if two formats are legal to view or copyReinUsesLisp1-0/+2
Add a flat table to test if it's legal to create a texture view between two formats or copy betweem them. This table is based on ARB_copy_image and ARB_texture_view. Copies are more permissive than views.
2020-06-24Macro HLE supportDavid Marcec1-0/+2
2020-06-12gl_arb_decompiler: Implement an assembly shader decompilerReinUsesLisp1-0/+2
Emit code compatible with NV_gpu_program5. This should emit code compatible with Fermi, but it wasn't tested on that architecture. Pascal has some issues not present on Turing GPUs.
2020-06-07rasterizer_cache: Remove files and includesReinUsesLisp1-2/+0
The rasterizer cache is no longer used. Each cache has its own generic implementation optimized for the cached data.
2020-06-07shader_cache: Implement a generic shader cacheReinUsesLisp1-0/+1
Implement a generic shader cache for fast lookups and invalidations. Invalidations are cheap but expensive when a shader is invalidated. Use two mutexes instead of one to avoid locking invalidations for lookups and vice versa. When a shader has to be removed, lookups are locked as expected.
2020-05-30Implement macro JITDavid Marcec1-2/+6
2020-05-30Add xbyak externalDavid Marcec1-1/+1
2020-05-21map_interval: Add interval allocator and drop hackReinUsesLisp1-0/+1
Drop the std::list hack to allocate memory indefinitely. Instead use a custom allocator that keeps references valid until destruction. This allocates fixed chunks of memory and puts pointers in a free list. When an allocation is no longer used put it back to the free list, this doesn't heap allocate because std::vector doesn't change the capacity. If the free list is empty, allocate a new chunk.
2020-04-28Clang Format and Documentation.Fernando Sahmkow1-0/+1
2020-04-26shader/memory_util: Deduplicate codeReinUsesLisp1-0/+2
Deduplicate code shared between vk_pipeline_cache and gl_shader_cache as well as shader decoder code. While we are at it, fix a bug in gl_shader_cache where compute shaders had an start offset of a stage shader.
2020-04-22vk_fence_manager: Initial implementationReinUsesLisp1-0/+2
2020-04-22GPU: Implement a Fence Manager.Fernando Sahmkow1-0/+3
2020-04-14renderer_vulkan: Integrate Nvidia Nsight Aftermath on WindowsReinUsesLisp1-3/+16
Adds optional support for Nsight Aftermath. It is enabled through ENABLE_NSIGHT_AFTERMATH in cmake. A path to the SDK has to be provided by the environment variable NSIGHT_AFTERMATH_SDK. Nsight Aftermath allows an application to generate "minidumps" of the GPU state when a device loss happens. By analysing these on Nsight we can know what a game was doing and why it triggered a device loss. The dump is generated inside %APPDATA%\yuzu\log\gpucrash and this directory is deleted every time a new instance is initialized with Nsight enabled. To enable it on yuzu there has a to be a driver and device capable of running Nsight Aftermath on Vulkan. That means only Turing based GPUs on the latest stable driver, beta drivers won't work for now. It is manually enabled in Configuration>Debug>Enable Graphics Debugging because when using all debugging capabilities there is a runtime cost.
2020-04-11renderer_vulkan: Drop Vulkan-HppReinUsesLisp1-1/+0
2020-04-08video_core/texture: Use a LUT to convert sRGB texture bordersReinUsesLisp1-0/+1
This is a reversed look up table extracted from https://gist.github.com/rygorous/2203834#file-gistfile1-cpp-L41-L62 that is used in https://github.com/devkitPro/deko3d/blob/04d4e9e587fa3dc5447b43d273bc45f440226e41/source/maxwell/tsc_generate.cpp#L38 Games usually bind 0xFD expecting a float texture border of 1.0f. The conversion previous to this commit was multiplying the uint8 sRGB texture border color by 255. This is close to 1.0f but when that difference matters, some graphical glitches appear. This look up table is manually changed in the edges, clamping towards 0.0f and 1.0f. While we are at it, move this logic to its own translation unit.
2020-03-27renderer_vulkan/wrapper: Add ToString function for VkResultReinUsesLisp1-0/+1
2020-03-27renderer_vulkan/wrapper: Add Vulakn wrapper and a span helperReinUsesLisp1-0/+1
The intention behind a Vulkan wrapper is to drop Vulkan-Hpp. The issues with Vulkan-Hpp are: - Regular breaks of the API. - Copy constructors that do the same as the aggregates (fixed recently) - External dynamic dispatch that is hard to remove - Alias KHR handles with non-KHR handles making it impossible to use smart handles on Vulkan 1.0 instances with extensions that were included on Vulkan 1.1. - Dynamic dispatchers silently change size depending on preprocessor definitions. Different files will have different dispatch definitions, generating all kinds of hard to debug memory issues. In other words, Vulkan-Hpp is not "production ready" for our needs and this wrapper aims to replace it without losing RAII and exception safety.
2020-03-13shader/transform_feedback: Add host API friendly TFB builderReinUsesLisp1-0/+2
2020-03-09video_core: Rename "const buffer locker" to "registry"ReinUsesLisp1-2/+2
2020-03-09gl_shader_cache: Rework shader cache and remove post-specializationsReinUsesLisp1-2/+0
Instead of pre-specializing shaders and then post-specializing them, drop the later and only "specialize" the shader while decoding it.
2020-02-28dirty_flags: Deduplicate code between OpenGL and VulkanReinUsesLisp1-0/+1
2020-02-28vk_state_tracker: Initial implementationReinUsesLisp1-0/+2
Add support for render targets and viewports.
2020-02-28video_core: Reintroduce dirty flags infrastructureReinUsesLisp1-0/+1
2020-02-28gl_state: Remove completelyReinUsesLisp1-2/+0
2020-02-28gl_rasterizer: Remove dirty flagsReinUsesLisp1-0/+2
2020-02-14vk_query_cache: Implement generic query cache on VulkanReinUsesLisp1-0/+2
2020-02-14query_cache: Abstract OpenGL implementationReinUsesLisp1-0/+1
Abstract the current OpenGL implementation into the VideoCommon namespace and reimplement it on top of that. Doing this avoids repeating code and logic in the Vulkan implementation.
2020-02-14maxwell_3d: Slow implementation of passed samples (query 21)ReinUsesLisp1-0/+2
Implements GL_SAMPLES_PASSED by waiting immediately for queries.
2020-01-29yuzu: Implement Vulkan frontendReinUsesLisp1-0/+1
Adds a Qt and SDL2 frontend for Vulkan. It also finishes the missing bits on Vulkan initialization.
2020-01-24GPU: Implement guest driver profile and deduce texture handler sizes.Fernando Sahmkow1-0/+2
2020-01-20vk_blit_screen: Initial implementationReinUsesLisp1-0/+2
This abstraction takes care of presenting accelerated and non-accelerated or "framebuffer" images to the Vulkan swapchain.
2020-01-17vk_rasterizer: Implement Vulkan's rasterizerReinUsesLisp1-0/+1
This abstraction is Vulkan's equivalent to OpenGL's rasterizer. It takes care of joining all parts of the backend and rendering accordingly on demand.
2020-01-17renderer_vulkan: Add header as placeholderReinUsesLisp1-0/+1
2020-01-14vk_texture_cache: Implement generic texture cache on VulkanReinUsesLisp1-1/+4
It currently ignores PBO linearizations since these should be dropped as soon as possible on OpenGL.
2020-01-08vk_compute_pass: Add compute passes to emulate missing Vulkan featuresReinUsesLisp1-0/+2
This currently only supports quad arrays and u8 indices. In the future we can remove quad arrays with a table written from the CPU, but this was used to bootstrap the other passes helpers and it was left in the code. The blob code is generated from the "shaders/" directory. Read the instructions there to know how to generate the SPIR-V.
2020-01-08vk_shader_util: Add helper to build SPIR-V shadersReinUsesLisp1-0/+2
2020-01-07vk_graphics_pipeline: Initial implementationReinUsesLisp1-0/+2
This abstractio represents the state of the 3D engine at a given draw. Instead of changing individual bits of the pipeline how it's done in APIs like D3D11, OpenGL and NVN; on Vulkan we are forced to put everything together into a single, immutable object. It takes advantage of the few dynamic states Vulkan offers.
2020-01-07vk_compute_pipeline: Initial implementationReinUsesLisp1-0/+2
This abstraction represents a Vulkan compute pipeline.
2020-01-07vk_pipeline_cache: Add file and define descriptor update template fillerReinUsesLisp1-0/+2
This function allows us to share code between compute and graphics pipelines compilation.
2020-01-07vk_rasterizer: Add placeholderReinUsesLisp1-0/+1
2020-01-06vk_renderpass_cache: Initial implementationReinUsesLisp1-0/+2
The renderpass cache is used to avoid creating renderpasses on each draw. The hashed structure is not currently optimized.
2020-01-06vk_update_descriptor: Initial implementationReinUsesLisp1-1/+3
The update descriptor is used to store in flat memory a large chunk of staging data used to update descriptor sets through templates. It provides a push interface to easily insert descriptors following the current pipeline. The order used in the descriptor update template has to be implicitly followed. We can catch bugs here using validation layers.
2020-01-03yuzu: Remove Maxwell debuggerReinUsesLisp1-2/+0
This was carried from Citra and wasn't really used on yuzu. It also adds some runtime overhead. This commit removes it from yuzu's codebase.
2020-01-01vk_descriptor_pool: Initial implementationReinUsesLisp1-0/+2
Create a large descriptor pool where we allocate all our descriptors from. It has to be wide enough to support any pipeline, hence its large numbers. If the descritor pool is filled, we allocate more memory at that moment. This way we can take advantage of permissive drivers like Nvidia's that allocate more descriptors than what the spec requires.
2019-12-25vk_staging_buffer_pool: Add a staging pool for temporary operationsReinUsesLisp1-0/+2
The job of this abstraction is to provide staging buffers for temporary operations. Think of image uploads or buffer uploads to device memory. It automatically deletes unused buffers.
2019-12-25vk_image: Add an image object abstractionReinUsesLisp1-0/+2
This object's job is to contain an image and manage its transitions. Since Nvidia hardware doesn't know what a transition is but Vulkan requires them anyway, we have to state track image subresources individually. To avoid the overhead of tracking each subresource in images with many subresources (think of cubemap arrays with several mipmaps), this commit tracks when subresources have diverged. As long as this doesn't happen we can check the state of the first subresource (that will be shared with all subresources) and update accordingly. Image transitions are deferred to the scheduler command buffer.
2019-12-23fixed_pipeline_state: Define structure and loadersReinUsesLisp1-0/+2
The intention behind this hasheable structure is to describe the state of fixed function pipeline state that gets compiled to a single graphics pipeline state object. This is all dynamic state in OpenGL but Vulkan wants it in an immutable state, even if hardware can edit it freely. In this commit the structure is defined in an optimized state (it uses booleans, has paddings and many data entries that can be packed to single integers). This is intentional as an initial implementation that is easier to debug, implement and review. It will be optimized in later stages, or it might change if Vulkan gets more dynamic states.
2019-11-23video_core: Unify ProgramType and ShaderStage into ShaderTypeReinUsesLisp1-0/+1
2019-11-15texture_cache: Use a table instead of switch for texture formatsReinUsesLisp1-0/+2
Use a large flat array to look up texture formats. This allows us to properly implement formats with different component types. It should also be faster.
2019-11-11video_core: Enable sign conversion warningsRodrigo Locatti1-1/+1
Enable sign conversion warnings but don't treat them as errors.
2019-11-08video_core: Treat implicit conversions as errorsReinUsesLisp1-0/+6
2019-10-27rasterizer_accelerated: Add intermediary for GPU rasterizersReinUsesLisp1-0/+2
Add an intermediary class that implements common functions across GPU accelerated rasterizers. This avoids code repetition on different backends.
2019-10-25VideoCore: Unify const buffer accessing along engines and provide ConstBufferLocker class to shaders.Fernando Sahmkow1-2/+5
2019-10-05Shader_Ir: Refactor Decompilation process and allow multiple decompilation modes.Fernando Sahmkow1-0/+2
2019-10-05shader_ir: Corrections to outward movements and misc stuffsFernando Sahmkow1-0/+1
2019-10-05shader_ir: Initial Decompile SetupFernando Sahmkow1-0/+3
2019-08-21shader_ir: Implement VOTEReinUsesLisp1-0/+1
Implement VOTE using Nvidia's intrinsics. Documentation about these can be found here https://developer.nvidia.com/reading-between-threads-shader-intrinsics Instead of using portable ARB instructions I opted to use Nvidia intrinsics because these are the closest we have to how Tegra X1 hardware renders. To stub VOTE on non-Nvidia drivers (including nouveau) this commit simulates a GPU with a warp size of one, returning what is meaningful for the instruction being emulated: * anyThreadNV(value) -> value * allThreadsNV(value) -> value * allThreadsEqualNV(value) -> true ballotARB, also known as "uint64_t(activeThreadsNV())", emits VOTE.ANY Rd, PT, PT; on nouveau's compiler. This doesn't match exactly to Nvidia's code VOTE.ALL Rd, PT, PT; Which is emulated with activeThreadsNV() by this commit. In theory this shouldn't really matter since .ANY, .ALL and .EQ affect the predicates (set to PT on those cases) and not the registers.
2019-08-21Video_Core: Implement a new Buffer CacheFernando Sahmkow1-1/+3
2019-07-09shader_ir: Implement a new shader scannerFernando Sahmkow1-0/+2
2019-07-06buffer_cache: Implement a generic buffer cacheReinUsesLisp1-0/+1
Implements a templated class with a similar approach to our current generic texture cache. It is designed to be compatible with Vulkan and OpenGL,
2019-07-06gl_rasterizer: Drop gl_global_cache in favor of gl_buffer_cacheReinUsesLisp1-2/+0
2019-06-21shader: Decode SUST and implement backing image functionalityReinUsesLisp1-0/+1
2019-06-21gl_framebuffer_cache: Use a hashed struct to cache framebuffersReinUsesLisp1-0/+2
2019-06-21texture_cache: Split texture cache into different filesReinUsesLisp1-2/+7
2019-06-21gl_texture_cache: Initial implementationReinUsesLisp1-2/+2
2019-06-08video_core/engines: Move ConstBufferInfo out of Maxwell3DReinUsesLisp1-0/+1
2019-06-07shader: Move Node declarations out of the shader IR headerReinUsesLisp1-0/+1
Analysis passes do not have a good reason to depend on shader_ir.h to work on top of nodes. This splits node-related declarations to their own file and leaves the IR in shader_ir.h
2019-06-06shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp1-0/+2
Instead of having a vector of unique_ptr stored in a vector and returning star pointers to this, use shared_ptr. While changing initialization code, move it to a separate file when possible. This is a first step to allow code analysis and node generation beyond the ShaderIR class.
2019-05-30gl_rasterizer: Use GL_QUADS to emulate quads renderingReinUsesLisp1-2/+0
2019-04-23Revamp Kepler Memory to use a subegine to manage uploadsFernando Sahmkow1-0/+2
2019-04-10gl_device: Implement interface and add uniform offset alignmentReinUsesLisp1-0/+2
2019-04-10vk_shader_decompiler: Declare and stub interface for a SPIR-V decompilerReinUsesLisp1-0/+2
2019-04-10video_core: Add sirit as optional dependency with VulkanReinUsesLisp1-1/+4
sirit is a runtime assembler for SPIR-V
2019-04-08Move ConstBufferAccessor to Maxwell3d, correct mistakes and clang format.Fernando Sahmkow1-1/+0
2019-04-08Simplify ConstBufferAccessorFernando Sahmkow1-1/+0
2019-04-08Implement Const Buffer AccessorFernando Sahmkow1-0/+2
2019-04-02gl_sampler_cache: Port sampler cache to OpenGLReinUsesLisp1-0/+2
2019-04-02video_core: Abstract vk_sampler_cache into a templated classReinUsesLisp1-0/+2
2019-03-29data_compression: Move LZ4 compression from video_core/gl_shader_disk_cache to common/data_compressionunknown1-1/+1
2019-03-29vk_swapchain: Implement a swapchain managerReinUsesLisp1-1/+3
2019-03-22video_core: Implement API agnostic view based texture cacheReinUsesLisp1-0/+2
Implements an API agnostic texture view based texture cache. Classes defined here are intended to be inherited by the API implementation and used in API-specific code. This implementation exposes protected virtual functions to be called from the implementer. Before executing any surface copies methods (defined in API-specific code) it tries to detect if the overlapping surface is a superset and if it is, it creates a view. Views are references of a subset of a surface, it can be a superset view (the same as referencing the whole texture). Current code manages 1D, 1D array, 2D, 2D array, cube maps and cube map arrays with layer and mipmap level views. Texture 3D slices views are not implemented. If the view attempt fails, the fast path is invoked with the overlapping textures (defined in the implementer). If that one fails (returning nullptr) it will flush and reload the texture.
2019-03-13vk_sampler_cache: Implement a sampler cacheReinUsesLisp1-0/+2
2019-03-07gpu: Refactor a/synchronous implementations into their own classes.bunnei1-0/+4
2019-03-07gpu: Move command processing to another thread.bunnei1-0/+2
2019-03-04maxwell_to_vk: Initial implementationReinUsesLisp1-0/+2
2019-03-01vk_buffer_cache: Implement a buffer cacheReinUsesLisp1-0/+2
This buffer cache is just like OpenGL's buffer cache with some minor style changes. It uses VKStreamBuffer.
2019-02-27gl_rasterizer_cache: Move format conversion to its own fileReinUsesLisp1-0/+2
2019-02-26shader/decode: Split memory and texture instructions decodingReinUsesLisp1-0/+1
2019-02-24vk_stream_buffer: Implement a stream bufferReinUsesLisp1-1/+3
This manages two kinds of streaming buffers: one for unified memory models and one for dedicated GPUs. The first one skips the copy from the staging buffer to the real buffer, since it creates an unified buffer. This implementation waits for all fences to finish their operation before "invalidating". This is suboptimal since it should allocate another buffer or start searching from the beginning. There is room for improvement here. This could also handle AMD's "pinned" memory (a heap with 256 MiB) that seems to be designed for buffer streaming.
2019-02-22vk_scheduler: Implement a schedulerReinUsesLisp1-1/+3
The scheduler abstracts command buffer and fence management with an interface that's able to do OpenGL-like operations on Vulkan command buffers. It returns by value a command buffer and fence that have to be used for subsequent operations until Flush or Finish is executed, after that the current execution context (the pair of command buffers and fences) gets invalidated a new one must be fetched. Thankfully validation layers will quickly detect if this is skipped throwing an error due to modifications to a sent command buffer.
2019-02-19vk_memory_manager: Implement memory managerReinUsesLisp1-0/+2
A memory manager object handles the memory allocations for a device. It allocates chunks of Vulkan memory objects and then suballocates.
2019-02-14vk_resource_manager: Add VKResource interfaceReinUsesLisp1-1/+3
VKResource is an interface that gets signaled by a fence when it is free to be reused.
2019-02-13vk_device: Abstract device handling into a classReinUsesLisp1-1/+4
VKDevice contains all the data required to manage and initialize a physical device. Its intention is to be passed across Vulkan objects to query device-specific data (for example the logical device and the dispatch loader).
2019-02-12renderer_vulkan: Add declarations fileReinUsesLisp1-0/+7
This file is intended to be included instead of vulkan/vulkan.hpp. It includes declarations of unique handlers using a dynamic dispatcher instead of a static one (which would require linking to a Vulkan library).
2019-02-10kepler_compute: Fixup assert and rename enginesReinUsesLisp1-2/+2
When I originally added the compute assert I used the wrong documentation. This addresses that. The dispatch register was tested with homebrew against hardware and is triggered by some games (e.g. Super Mario Odyssey). What exactly is missing to get a valid program bound by this engine requires more investigation.
2019-02-07gl_shader_disk_cache: Compress GLSL code using LZ4ReinUsesLisp1-1/+1
2019-02-07gl_shader_disk_cache: Add file and move BaseBindings declarationReinUsesLisp1-0/+2
2019-01-30shader_decode: Implement LDG and basic cbuf trackingReinUsesLisp1-0/+1
2019-01-15video_core: Rename glsl_decompiler to gl_shader_decompilerReinUsesLisp1-2/+2
2019-01-15shader_decode: Implement VMAD and VSETPReinUsesLisp1-0/+1
2019-01-15video_core: Replace gl_shader_decompilerReinUsesLisp1-2/+0
2019-01-15glsl_decompiler: ImplementationReinUsesLisp1-0/+2
2019-01-15shader_ir: Initial implementationReinUsesLisp1-0/+27
2019-01-08gl_global_cache: Add dummy global cache managerReinUsesLisp1-0/+2
2018-11-27gpu: Rewrite GPU command list processing with DmaPusher class.bunnei1-2/+2
- More accurate impl., fixes Undertale (among other games).
2018-11-25video_core: Move morton functions to their own fileReinUsesLisp1-1/+2
2018-11-08rasterizer_cache: Add missing virtual destructor to RasterizerCacheObjectLioncash1-0/+1
Ensures that destruction will always do the right thing in any context.
2018-11-06gl_resource_manager: Split implementations in .cpp file.Markus Wick1-0/+1
Those implementations are quite costly, so there is no need to inline them to the caller. Ressource deletion is often a performance bug, so in this way, we support to add breakpoints to them.
2018-10-30video_core: Move surface declarations out of gl_rasterizer_cacheReinUsesLisp1-0/+2
2018-10-29video_core: Move OpenGL specific utils to its rendererReinUsesLisp1-0/+2
2018-10-04gl_rasterizer: Implement quads topologyReinUsesLisp1-0/+2
2018-09-12GPU: Basic implementation of the Kepler Inline Memory engine (p2mf).Subv1-0/+2
This engine writes data from a FIFO register into the configured address.
2018-09-11Implemented (Partialy) Shader HeaderFernandoS271-0/+1
2018-09-06video_core/CMakeLists: Add missing gl_buffer_cache.hLioncash1-0/+1
Without this, the header file won't show up by default within IDEs such as Visual Studio.
2018-09-05renderer_opengl: Implement a buffer cache.Markus Wick1-0/+1
The idea of this cache is to avoid redundant uploads. So we are going to cache the uploaded buffers within the stream_buffer and just reuse the old pointers. The next step is to implement a VBO cache on GPU memory, but for now, I want to check the overhead of the cache management. Fetching the buffer over PCI-E should be quite fast.
2018-08-28renderer_opengl: Implement a new shader cache.bunnei1-0/+2
2018-08-28video_core: Add RasterizerCache class for common cache management code.bunnei1-0/+1
2018-06-18gl_rasterizer: Implement texture format ASTC_2D_4X4.bunnei1-0/+2
2018-06-12GPU: Partially implemented the Maxwell DMA engine.Subv1-0/+2
Only tiled->linear and linear->tiled copies that aren't offsetted are supported for now. Queries are not supported. Swizzled copies are not supported.
2018-04-14renderer_opengl: Add gl_shader_manager class.bunnei1-0/+2
2018-04-14shader_bytecode: Add initial module for shader decoding.bunnei1-0/+1
2018-04-01GPU: Implemented a gpu macro interpreter.Subv1-0/+2
The Ryujinx macro interpreter and envydis were used as reference. Macros are programs that are uploaded by the games during boot and can later be called by writing to their method id in a GPU command buffer.
2018-03-27maxwell_to_gl: Add module and function for decoding VertexType.bunnei1-0/+1
2018-03-24Frontend: Ported the GPU breakpoints and surface viewer widgets from citra.Subv1-0/+2
2018-03-24GPU: Preliminary work for texture decoding.Subv1-0/+3
2018-03-20renderer_gl: Port boilerplate rasterizer code over from Citra.bunnei1-0/+3
2018-03-20renderer_gl: Port over gl_shader_gen module from Citra.bunnei1-0/+2
2018-03-20renderer_gl: Port over gl_shader_decompiler module from Citra.bunnei1-0/+2
2018-03-20renderer_gl: Port over gl_rasterizer_cache module from Citra.bunnei1-0/+2
2018-03-20renderer_gl: Port over gl_stream_buffer module from Citra.bunnei1-0/+2
2018-03-18GPU: Move the GPU's class constructor and destructors to a cpp file.Subv1-0/+1
This should reduce recompile times when editing the Maxwell3D register structure.
2018-02-12Make a GPU class in VideoCore to contain the GPU state.Subv1-0/+3
Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.
2018-02-12GPU: Added a command processor to decode the GPU pushbuffers and forward the commands to their respective engines.Subv1-0/+8
2018-01-18CMakeLists: Derive the source directory grouping from targets themselvesLioncash1-19/+15
Removes the need to store to separate SRC and HEADER variables, and then construct the target in most cases.
2018-01-13Remove references to PICA and rasterizers in video_coreJames Rowe1-74/+1
2017-08-19pica/command_processor: build geometry pipeline and run geometry shaderwwylele1-0/+2
The geometry pipeline manages data transfer between VS, GS and primitive assembler. It has known four modes: - no GS mode: sends VS output directly to the primitive assembler (what citra currently does) - GS mode 0: sends VS output to GS input registers, and sends GS output to primitive assembler - GS mode 1: sends VS output to GS uniform registers, and sends GS output to primitive assembler. It also takes an index from the index buffer at the beginning of each primitive for determine the primitive size. - GS mode 2: similar to mode 1, but doesn't take the index and uses a fixed primitive size. hwtest shows that immediate mode also supports GS (at least for mode 0), so the geometry pipeline gets refactored into its own class for supporting both drawing mode. In the immediate mode, some games don't set the pipeline registers to a valid value until the first attribute input, so a geometry pipeline reset flag is set in `pipeline.vs_default_attributes_setup.index` trigger, and the actual pipeline reconfigure is triggered in the first attribute input. In the normal drawing mode with index buffer, the vertex cache is a little bit modified to support the geometry pipeline. Instead of OutputVertex, it now holds AttributeBuffer, which is the input to the geometry pipeline. The AttributeBuffer->OutputVertex conversion is done inside the pipeline vertex handler. The actual hardware vertex cache is believed to be implemented in a similar way (because this is the only way that makes sense). Both geometry pipeline and GS unit rely on states preservation across drawing call, so they are put into the global state. In the future, the other three vertex shader units should be also placed in the global state, and a scheduler should be implemented on top of the four units. Note that the current gs_unit already allows running VS on it in the future.
2017-08-03SwRasterizer/Lighting: shorten file namewwylele1-2/+2
2017-08-02SwRasterizer/Lighting: move to its own filewwylele1-0/+2
2017-05-28CMake: Create INTERFACE targets for microprofile and nihstroYuri Kunde Schlesner1-1/+1
2017-05-28CMake: Use IMPORTED target for libpngYuri Kunde Schlesner1-3/+2
2017-05-28CMake: Correct inter-module dependencies and library visibilityYuri Kunde Schlesner1-5/+7
Modules didn't correctly define their dependencies before, which relied on the frontends implicitly including every module for linking to succeed. Also changed every target_link_libraries call to specify visibility of dependencies to avoid leaking definitions to dependents when not necessary.
2017-05-20pica/swrasterizer: implement procedural texturewwylele1-0/+2
2017-02-13SWRasterizer: Move texturing functions to their own fileYuri Kunde Schlesner1-0/+2
2017-02-13SWRasterizer: Move framebuffer operation functions to their own fileYuri Kunde Schlesner1-0/+2
2017-02-13VideoCore: Move software rasterizer files to sub-directoryYuri Kunde Schlesner1-6/+6
2017-02-04VideoCore: Move Regs to its own fileYuri Kunde Schlesner1-0/+2
2017-02-04VideoCore: Split shader regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04VideoCore: Split geometry pipeline regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04VideoCore: Split lighting regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04VideoCore: Split framebuffer regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04VideoCore: Split texturing regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04VideoCore: Split rasterizer regs from Regs structYuri Kunde Schlesner1-0/+1
2017-02-04Pica/Texture: Move part of ETC1 decoding to new file and cleanupsYuri Kunde Schlesner1-0/+2
2017-02-04VideoCore: Move LookupTexture out of debug_utils.hYuri Kunde Schlesner1-16/+18
2017-01-26VideoCore/Shader: Split interpreter and JIT into separate ShaderEnginesYuri Kunde Schlesner1-0/+2
2017-01-26VideoCore/Shader: Rename shader_jit_x64{ => _compiler}.{cpp,h}Yuri Kunde Schlesner1-2/+2
2016-12-16VideoCore/Shader: Move DebugData to a separate fileYuri Kunde Schlesner1-0/+1
2016-12-15VideoCore: Convert x64 shader JIT to use Xbyak for assemblyYuri Kunde Schlesner1-0/+3
2016-04-30Remove TGA dumperJannik Vogel1-1/+0
2016-04-28Refactor: Extract VertexLoader from command_processor.cpp.Henrik Rydgard1-0/+2
Preparation for a similar concept to Dolphin or PPSSPP. These can be JIT-ed and cached.
2016-03-03Add immediate mode vertex submissionDwayne Slater1-0/+1
2016-02-05pica: Add pica_types module and move float24 definition.bunnei1-0/+1
2015-12-08VideoCore: Unify interface to OpenGL and SW rasterizersYuri Kunde Schlesner1-1/+4
This removes explicit checks sprinkled all over the codebase to instead just have the SW rasterizer expose an implementation with no-ops for most operations.
2015-10-22renderer_opengl: Refactor shader generation/caching to be more organized + various cleanups.bunnei1-1/+2
2015-08-30Replace the previous OpenGL loader with a glad-generated 3.3 oneYuri Kunde Schlesner1-2/+1
The main advantage of switching to glad from glLoadGen is that, apart from being actively maintained, it supports a customizable entrypoint loader function, which makes it possible to also support OpenGL ES.
2015-08-16Rename ARCHITECTURE_X64 definition to ARCHITECTURE_x86_64.bunnei1-1/+1
2015-08-16x64: Refactor to remove fake interfaces and general cleanups.bunnei1-6/+4
2015-08-16Shader: Initial implementation of x86_x64 JIT compiler for Pica vertex shaders.bunnei1-0/+10
- Config: Add an option for selecting to use shader JIT or interpreter. - Qt: Add a menu option for enabling/disabling the shader JIT.
2015-08-15Shader: Define a common interface for running vertex shader programs.bunnei1-0/+2
2015-08-15Shader: Move shader code to its own subdirectory, "shader".bunnei1-2/+2
2015-08-15GPU: Refactor "VertexShader" namespace to "Shader".bunnei1-2/+2
- Also renames "vertex_shader.*" to "shader_interpreter.*"
2015-07-26OpenGL: Make OpenGL object resource wrappers fully inlineYuri Kunde Schlesner1-1/+0
The functions are so simple that having them separate only bloats the code and hinders optimization.
2015-05-30Move video_core/color.h to common/color.harchshift1-1/+0
2015-05-30Move video_core/math.h to common/vector_math.harchshift1-1/+0
The file only contained vector manipulation code, and such widely-useable code doesn't belong in video_core.
2015-05-23Pica: Create 'State' structure and move state memory there.bunnei1-0/+1
2015-05-23OpenGL renderertfarley1-1/+11
2015-03-04GPU: Added RGB565/RGB8 framebuffer support and various cleanups.bunnei1-0/+1
- Centralizes color format encode/decode functions. - Fixes endianness issues. - Implements remaining framebuffer formats in the debugger.
2014-09-01CMake cleanupYuri Kunde Schlesner1-13/+26
Several cleanups to the buildsystem: - Do better factoring of common libs between platforms. - Add support to building on Windows. - Remove Qt4 support. - Re-sort file lists and add missing headers.
2014-09-01Replace GLEW with a glLoadGen loader.Yuri Kunde Schlesner1-0/+2
This should fix the GL loading errors that occur in some drivers due to the use of deprecated functions by GLEW. Side benefits are more accurate auto-completion (deprecated function and symbols don't exist) and faster pointer loading (less entrypoints to load). In addition it removes an external library depency, simplifying the build system a bit and eliminating one set of binary libraries for Windows.
2014-08-26Rewrite of OpenGL renderer, including OS X supportKevin Hartman1-4/+7
Screen contents are now displayed using textured quads. This can be updated to expose an FBO once an OpenGL backend for when Pica rendering is being worked on. That FBO's texture can then be applied to the quads. Previously, FBO blitting was used in order to display screen contents, which did not work on OS X. The new textured quad approach is less of a compatibility risk.
2014-08-25Pica: Add debug utility functions for dumping geometry data.Tony Wasserka1-0/+2
2014-08-12Pica: Add basic rasterizer.Tony Wasserka1-0/+2
2014-08-12Pica: Add triangle clipper.Tony Wasserka1-2/+4
2014-08-12Pica: Add primitive assembly stage.Tony Wasserka1-0/+2
2014-08-12Pica: Add vertex shader implementation.Tony Wasserka1-0/+2
2014-08-12Pica: Add command processor.Tony Wasserka1-2/+5
2014-08-12Video core: Add utility class for vector operations.Tony Wasserka1-1/+2
I wrote most of this for ppsspp, so I hold full copyright over it. In addition to the original release in ppsspp, this provides functionality to easily extend e.g. two-dimensional vectors to three-dimensional vectors.
2014-05-20CMakeLists: rename HEADS, improved commentsarchshift1-2/+2
Changes for clarity of comments, removed redundant compiler flags.
2014-04-29IT'S ALIVE!archshift1-1/+6
2014-04-10fixed a bunch of errors in CMakeListsbunnei1-3/+3
2014-04-10updated CMakeListsbunnei1-16/+2
2014-04-05added video_core project to solutionbunnei1-0/+19