summaryrefslogtreecommitdiffstats
path: root/src/video_core/CMakeLists.txt (follow)
Commit message (Collapse)AuthorAgeFilesLines
* video_core: Rename "const buffer locker" to "registry"ReinUsesLisp2020-03-091-2/+2
|
* gl_shader_cache: Rework shader cache and remove post-specializationsReinUsesLisp2020-03-091-2/+0
| | | | | Instead of pre-specializing shaders and then post-specializing them, drop the later and only "specialize" the shader while decoding it.
* dirty_flags: Deduplicate code between OpenGL and VulkanReinUsesLisp2020-02-281-0/+1
|
* vk_state_tracker: Initial implementationReinUsesLisp2020-02-281-0/+2
| | | | Add support for render targets and viewports.
* video_core: Reintroduce dirty flags infrastructureReinUsesLisp2020-02-281-0/+1
|
* gl_state: Remove completelyReinUsesLisp2020-02-281-2/+0
|
* gl_rasterizer: Remove dirty flagsReinUsesLisp2020-02-281-0/+2
|
* vk_query_cache: Implement generic query cache on VulkanReinUsesLisp2020-02-141-0/+2
|
* query_cache: Abstract OpenGL implementationReinUsesLisp2020-02-141-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.
* maxwell_3d: Slow implementation of passed samples (query 21)ReinUsesLisp2020-02-141-0/+2
| | | | Implements GL_SAMPLES_PASSED by waiting immediately for queries.
* Merge pull request #3337 from ReinUsesLisp/vulkan-stagedbunnei2020-02-031-0/+1
|\ | | | | yuzu: Implement Vulkan frontend
| * yuzu: Implement Vulkan frontendReinUsesLisp2020-01-291-0/+1
| | | | | | | | | | Adds a Qt and SDL2 frontend for Vulkan. It also finishes the missing bits on Vulkan initialization.
* | GPU: Implement guest driver profile and deduce texture handler sizes.Fernando Sahmkow2020-01-241-0/+2
|/
* vk_blit_screen: Initial implementationReinUsesLisp2020-01-201-0/+2
| | | | | This abstraction takes care of presenting accelerated and non-accelerated or "framebuffer" images to the Vulkan swapchain.
* vk_rasterizer: Implement Vulkan's rasterizerReinUsesLisp2020-01-171-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.
* renderer_vulkan: Add header as placeholderReinUsesLisp2020-01-171-0/+1
|
* vk_texture_cache: Implement generic texture cache on VulkanReinUsesLisp2020-01-141-1/+4
| | | | | It currently ignores PBO linearizations since these should be dropped as soon as possible on OpenGL.
* vk_compute_pass: Add compute passes to emulate missing Vulkan featuresReinUsesLisp2020-01-081-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.
* vk_shader_util: Add helper to build SPIR-V shadersReinUsesLisp2020-01-081-0/+2
|
* vk_graphics_pipeline: Initial implementationReinUsesLisp2020-01-071-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.
* vk_compute_pipeline: Initial implementationReinUsesLisp2020-01-071-0/+2
| | | | This abstraction represents a Vulkan compute pipeline.
* vk_pipeline_cache: Add file and define descriptor update template fillerReinUsesLisp2020-01-071-0/+2
| | | | | This function allows us to share code between compute and graphics pipelines compilation.
* vk_rasterizer: Add placeholderReinUsesLisp2020-01-071-0/+1
|
* vk_renderpass_cache: Initial implementationReinUsesLisp2020-01-061-0/+2
| | | | | The renderpass cache is used to avoid creating renderpasses on each draw. The hashed structure is not currently optimized.
* vk_update_descriptor: Initial implementationReinUsesLisp2020-01-061-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.
* Merge pull request #3264 from ReinUsesLisp/vk-descriptor-poolFernando Sahmkow2020-01-051-0/+2
|\ | | | | vk_descriptor_pool: Initial implementation
| * vk_descriptor_pool: Initial implementationReinUsesLisp2020-01-011-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.
* | yuzu: Remove Maxwell debuggerReinUsesLisp2020-01-031-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.
* Merge pull request #3248 from ReinUsesLisp/vk-imageFernando Sahmkow2019-12-301-0/+2
|\ | | | | vk_image: Add an image object abstraction
| * vk_image: Add an image object abstractionReinUsesLisp2019-12-251-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.
* | vk_staging_buffer_pool: Add a staging pool for temporary operationsReinUsesLisp2019-12-251-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.
* fixed_pipeline_state: Define structure and loadersReinUsesLisp2019-12-231-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.
* video_core: Unify ProgramType and ShaderStage into ShaderTypeReinUsesLisp2019-11-231-0/+1
|
* texture_cache: Use a table instead of switch for texture formatsReinUsesLisp2019-11-151-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.
* video_core: Enable sign conversion warningsRodrigo Locatti2019-11-111-1/+1
| | | Enable sign conversion warnings but don't treat them as errors.
* video_core: Treat implicit conversions as errorsReinUsesLisp2019-11-081-0/+6
|
* rasterizer_accelerated: Add intermediary for GPU rasterizersReinUsesLisp2019-10-271-0/+2
| | | | | | Add an intermediary class that implements common functions across GPU accelerated rasterizers. This avoids code repetition on different backends.
* VideoCore: Unify const buffer accessing along engines and provide ConstBufferLocker class to shaders.Fernando Sahmkow2019-10-251-2/+5
|
* Shader_Ir: Refactor Decompilation process and allow multiple decompilation modes.Fernando Sahmkow2019-10-051-0/+2
|
* shader_ir: Corrections to outward movements and misc stuffsFernando Sahmkow2019-10-051-0/+1
|
* shader_ir: Initial Decompile SetupFernando Sahmkow2019-10-051-0/+3
|
* Merge pull request #2783 from FernandoS27/new-buffer-cachebunnei2019-08-291-1/+3
|\ | | | | Implement a New LLE Buffer Cache
| * Video_Core: Implement a new Buffer CacheFernando Sahmkow2019-08-211-1/+3
| |
* | shader_ir: Implement VOTEReinUsesLisp2019-08-211-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.
* Merge pull request #2675 from ReinUsesLisp/opengl-buffer-cachebunnei2019-07-151-2/+1
|\ | | | | buffer_cache: Implement a generic buffer cache and its OpenGL backend
| * buffer_cache: Implement a generic buffer cacheReinUsesLisp2019-07-061-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,
| * gl_rasterizer: Drop gl_global_cache in favor of gl_buffer_cacheReinUsesLisp2019-07-061-2/+0
| |
* | shader_ir: Implement a new shader scannerFernando Sahmkow2019-07-091-0/+2
|/
* shader: Decode SUST and implement backing image functionalityReinUsesLisp2019-06-211-0/+1
|
* gl_framebuffer_cache: Use a hashed struct to cache framebuffersReinUsesLisp2019-06-211-0/+2
|
* texture_cache: Split texture cache into different filesReinUsesLisp2019-06-211-2/+7
|
* gl_texture_cache: Initial implementationReinUsesLisp2019-06-211-2/+2
|
* video_core/engines: Move ConstBufferInfo out of Maxwell3DReinUsesLisp2019-06-081-0/+1
|
* Merge pull request #2514 from ReinUsesLisp/opengl-compatZach Hilman2019-06-071-2/+0
|\ | | | | video_core: Drop OpenGL core in favor of OpenGL compatibility
| * gl_rasterizer: Use GL_QUADS to emulate quads renderingReinUsesLisp2019-05-301-2/+0
| |
* | shader: Move Node declarations out of the shader IR headerReinUsesLisp2019-06-071-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
* | shader: Use shared_ptr to store nodes and move initialization to fileReinUsesLisp2019-06-061-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.
* Merge pull request #2429 from FernandoS27/computebunnei2019-05-091-0/+2
|\ | | | | Corrections and Implementation on GPU Engines
| * Revamp Kepler Memory to use a subegine to manage uploadsFernando Sahmkow2019-04-231-0/+2
| |
* | Merge pull request #2383 from ReinUsesLisp/aoffi-testbunnei2019-04-231-0/+2
|\ \ | |/ |/| gl_shader_decompiler: Disable variable AOFFI on unsupported devices
| * gl_device: Implement interface and add uniform offset alignmentReinUsesLisp2019-04-101-0/+2
| |
* | Merge pull request #2318 from ReinUsesLisp/sampler-cachebunnei2019-04-181-0/+4
|\ \ | | | | | | gl_sampler_cache: Port sampler cache to OpenGL
| * | gl_sampler_cache: Port sampler cache to OpenGLReinUsesLisp2019-04-021-0/+2
| | |
| * | video_core: Abstract vk_sampler_cache into a templated classReinUsesLisp2019-04-021-0/+2
| | |
* | | Merge pull request #2235 from ReinUsesLisp/spirv-decompilerbunnei2019-04-121-1/+6
|\ \ \ | | | | | | | | vk_shader_decompiler: Implement a SPIR-V decompiler
| * | | vk_shader_decompiler: Declare and stub interface for a SPIR-V decompilerReinUsesLisp2019-04-101-0/+2
| | | |
| * | | video_core: Add sirit as optional dependency with VulkanReinUsesLisp2019-04-101-1/+4
| | |/ | |/| | | | | | | sirit is a runtime assembler for SPIR-V
* | | Merge pull request #2278 from ReinUsesLisp/vc-texture-cachebunnei2019-04-111-0/+2
|\ \ \ | |/ / |/| | video_core: Implement API agnostic view based texture cache
| * | video_core: Implement API agnostic view based texture cacheReinUsesLisp2019-03-221-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.
* | Merge pull request #2093 from FreddyFunk/disk-cache-better-compressionbunnei2019-04-041-1/+1
|\ \ | | | | | | Better LZ4 compression utilization for the disk based shader cache and the yuzu build system
| * | data_compression: Move LZ4 compression from video_core/gl_shader_disk_cache to common/data_compressionunknown2019-03-291-1/+1
| |/
* / vk_swapchain: Implement a swapchain managerReinUsesLisp2019-03-291-1/+3
|/
* vk_sampler_cache: Implement a sampler cacheReinUsesLisp2019-03-131-0/+2
|
* Merge pull request #2147 from ReinUsesLisp/texture-cleanbunnei2019-03-101-0/+1
|\ | | | | shader_ir: Remove "extras" from the MetaTexture
| * shader/decode: Split memory and texture instructions decodingReinUsesLisp2019-02-261-0/+1
| |
* | Merge pull request #2191 from ReinUsesLisp/maxwell-to-vkbunnei2019-03-081-0/+2
|\ \ | | | | | | maxwell_to_vk: Initial implementation
| * | maxwell_to_vk: Initial implementationReinUsesLisp2019-03-041-0/+2
| | |
* | | Merge pull request #2055 from bunnei/gpu-threadbunnei2019-03-071-0/+6
|\ \ \ | | | | | | | | Asynchronous GPU command processing
| * | | gpu: Refactor a/synchronous implementations into their own classes.bunnei2019-03-071-0/+4
| | | |
| * | | gpu: Move command processing to another thread.bunnei2019-03-071-0/+2
| |/ /
* | | Merge pull request #2149 from ReinUsesLisp/decoders-stylebunnei2019-03-071-0/+2
|\ \ \ | |/ / |/| | gl_rasterizer_cache: Move format conversion functions to their own file
| * | gl_rasterizer_cache: Move format conversion to its own fileReinUsesLisp2019-02-271-0/+2
| |/
* | vk_buffer_cache: Implement a buffer cacheReinUsesLisp2019-03-011-0/+2
| | | | | | | | | | This buffer cache is just like OpenGL's buffer cache with some minor style changes. It uses VKStreamBuffer.
* | vk_stream_buffer: Implement a stream bufferReinUsesLisp2019-02-241-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.
* vk_scheduler: Implement a schedulerReinUsesLisp2019-02-221-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.
* vk_memory_manager: Implement memory managerReinUsesLisp2019-02-191-0/+2
| | | | | A memory manager object handles the memory allocations for a device. It allocates chunks of Vulkan memory objects and then suballocates.
* vk_resource_manager: Add VKResource interfaceReinUsesLisp2019-02-141-1/+3
| | | | | VKResource is an interface that gets signaled by a fence when it is free to be reused.
* Merge pull request #2113 from ReinUsesLisp/vulkan-basebunnei2019-02-141-0/+10
|\ | | | | vulkan: Add dependencies and device abstraction
| * vk_device: Abstract device handling into a classReinUsesLisp2019-02-131-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).
| * renderer_vulkan: Add declarations fileReinUsesLisp2019-02-121-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).
* | kepler_compute: Fixup assert and rename enginesReinUsesLisp2019-02-101-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.
* gl_shader_disk_cache: Compress GLSL code using LZ4ReinUsesLisp2019-02-071-1/+1
|
* gl_shader_disk_cache: Add file and move BaseBindings declarationReinUsesLisp2019-02-071-0/+2
|
* shader_decode: Implement LDG and basic cbuf trackingReinUsesLisp2019-01-301-0/+1
|
* video_core: Rename glsl_decompiler to gl_shader_decompilerReinUsesLisp2019-01-151-2/+2
|
* shader_decode: Implement VMAD and VSETPReinUsesLisp2019-01-151-0/+1
|
* video_core: Replace gl_shader_decompilerReinUsesLisp2019-01-151-2/+0
|
* glsl_decompiler: ImplementationReinUsesLisp2019-01-151-0/+2
|
* shader_ir: Initial implementationReinUsesLisp2019-01-151-0/+27
|
* gl_global_cache: Add dummy global cache managerReinUsesLisp2019-01-081-0/+2
|
* gpu: Rewrite GPU command list processing with DmaPusher class.bunnei2018-11-271-2/+2
| | | | - More accurate impl., fixes Undertale (among other games).
* video_core: Move morton functions to their own fileReinUsesLisp2018-11-251-1/+2
|
* rasterizer_cache: Add missing virtual destructor to RasterizerCacheObjectLioncash2018-11-081-0/+1
| | | | Ensures that destruction will always do the right thing in any context.
* gl_resource_manager: Split implementations in .cpp file.Markus Wick2018-11-061-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.
* video_core: Move surface declarations out of gl_rasterizer_cacheReinUsesLisp2018-10-301-0/+2
|
* video_core: Move OpenGL specific utils to its rendererReinUsesLisp2018-10-291-0/+2
|
* gl_rasterizer: Implement quads topologyReinUsesLisp2018-10-041-0/+2
|
* Merge pull request #1290 from FernandoS27/shader-headerbunnei2018-09-181-0/+1
|\ | | | | Implemented (Partialy) Shader Header
| * Implemented (Partialy) Shader HeaderFernandoS272018-09-111-0/+1
| |
* | GPU: Basic implementation of the Kepler Inline Memory engine (p2mf).Subv2018-09-121-0/+2
|/ | | | This engine writes data from a FIFO register into the configured address.
* video_core/CMakeLists: Add missing gl_buffer_cache.hLioncash2018-09-061-0/+1
| | | | | Without this, the header file won't show up by default within IDEs such as Visual Studio.
* renderer_opengl: Implement a buffer cache.Markus Wick2018-09-051-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.
* renderer_opengl: Implement a new shader cache.bunnei2018-08-281-0/+2
|
* video_core: Add RasterizerCache class for common cache management code.bunnei2018-08-281-0/+1
|
* gl_rasterizer: Implement texture format ASTC_2D_4X4.bunnei2018-06-181-0/+2
|
* GPU: Partially implemented the Maxwell DMA engine.Subv2018-06-121-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.
* renderer_opengl: Add gl_shader_manager class.bunnei2018-04-141-0/+2
|
* shader_bytecode: Add initial module for shader decoding.bunnei2018-04-141-0/+1
|
* GPU: Implemented a gpu macro interpreter.Subv2018-04-011-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.
* maxwell_to_gl: Add module and function for decoding VertexType.bunnei2018-03-271-0/+1
|
* Frontend: Ported the GPU breakpoints and surface viewer widgets from citra.Subv2018-03-241-0/+2
|
* GPU: Preliminary work for texture decoding.Subv2018-03-241-0/+3
|
* renderer_gl: Port boilerplate rasterizer code over from Citra.bunnei2018-03-201-0/+3
|
* renderer_gl: Port over gl_shader_gen module from Citra.bunnei2018-03-201-0/+2
|
* renderer_gl: Port over gl_shader_decompiler module from Citra.bunnei2018-03-201-0/+2
|
* renderer_gl: Port over gl_rasterizer_cache module from Citra.bunnei2018-03-201-0/+2
|
* renderer_gl: Port over gl_stream_buffer module from Citra.bunnei2018-03-201-0/+2
|
* GPU: Move the GPU's class constructor and destructors to a cpp file.Subv2018-03-181-0/+1
| | | | This should reduce recompile times when editing the Maxwell3D register structure.
* Make a GPU class in VideoCore to contain the GPU state.Subv2018-02-121-0/+3
| | | | Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.
* GPU: Added a command processor to decode the GPU pushbuffers and forward the commands to their respective engines.Subv2018-02-121-0/+8
|
* CMakeLists: Derive the source directory grouping from targets themselvesLioncash2018-01-181-19/+15
| | | | | Removes the need to store to separate SRC and HEADER variables, and then construct the target in most cases.
* Remove references to PICA and rasterizers in video_coreJames Rowe2018-01-131-74/+1
|
* pica/command_processor: build geometry pipeline and run geometry shaderwwylele2017-08-191-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.
* SwRasterizer/Lighting: shorten file namewwylele2017-08-031-2/+2
|
* SwRasterizer/Lighting: move to its own filewwylele2017-08-021-0/+2
|
* CMake: Create INTERFACE targets for microprofile and nihstroYuri Kunde Schlesner2017-05-281-1/+1
|
* CMake: Use IMPORTED target for libpngYuri Kunde Schlesner2017-05-281-3/+2
|
* CMake: Correct inter-module dependencies and library visibilityYuri Kunde Schlesner2017-05-281-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.
* pica/swrasterizer: implement procedural texturewwylele2017-05-201-0/+2
|
* SWRasterizer: Move texturing functions to their own fileYuri Kunde Schlesner2017-02-131-0/+2
|
* SWRasterizer: Move framebuffer operation functions to their own fileYuri Kunde Schlesner2017-02-131-0/+2
|
* VideoCore: Move software rasterizer files to sub-directoryYuri Kunde Schlesner2017-02-131-6/+6
|
* VideoCore: Move Regs to its own fileYuri Kunde Schlesner2017-02-041-0/+2
|
* VideoCore: Split shader regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* VideoCore: Split geometry pipeline regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* VideoCore: Split lighting regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* VideoCore: Split framebuffer regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* VideoCore: Split texturing regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* VideoCore: Split rasterizer regs from Regs structYuri Kunde Schlesner2017-02-041-0/+1
|
* Pica/Texture: Move part of ETC1 decoding to new file and cleanupsYuri Kunde Schlesner2017-02-041-0/+2
|
* VideoCore: Move LookupTexture out of debug_utils.hYuri Kunde Schlesner2017-02-041-16/+18
|
* VideoCore/Shader: Split interpreter and JIT into separate ShaderEnginesYuri Kunde Schlesner2017-01-261-0/+2
|
* VideoCore/Shader: Rename shader_jit_x64{ => _compiler}.{cpp,h}Yuri Kunde Schlesner2017-01-261-2/+2
|
* VideoCore/Shader: Move DebugData to a separate fileYuri Kunde Schlesner2016-12-161-0/+1
|
* VideoCore: Convert x64 shader JIT to use Xbyak for assemblyYuri Kunde Schlesner2016-12-151-0/+3
|
* Remove TGA dumperJannik Vogel2016-04-301-1/+0
|
* Refactor: Extract VertexLoader from command_processor.cpp.Henrik Rydgard2016-04-281-0/+2
| | | | Preparation for a similar concept to Dolphin or PPSSPP. These can be JIT-ed and cached.
* Add immediate mode vertex submissionDwayne Slater2016-03-031-0/+1
|
* pica: Add pica_types module and move float24 definition.bunnei2016-02-051-0/+1
|
* VideoCore: Unify interface to OpenGL and SW rasterizersYuri Kunde Schlesner2015-12-081-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.
* renderer_opengl: Refactor shader generation/caching to be more organized + various cleanups.bunnei2015-10-221-1/+2
|
* Replace the previous OpenGL loader with a glad-generated 3.3 oneYuri Kunde Schlesner2015-08-301-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.
* Rename ARCHITECTURE_X64 definition to ARCHITECTURE_x86_64.bunnei2015-08-161-1/+1
|
* x64: Refactor to remove fake interfaces and general cleanups.bunnei2015-08-161-6/+4
|
* Shader: Initial implementation of x86_x64 JIT compiler for Pica vertex shaders.bunnei2015-08-161-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.
* Shader: Define a common interface for running vertex shader programs.bunnei2015-08-151-0/+2
|
* Shader: Move shader code to its own subdirectory, "shader".bunnei2015-08-151-2/+2
|
* GPU: Refactor "VertexShader" namespace to "Shader".bunnei2015-08-151-2/+2
| | | | - Also renames "vertex_shader.*" to "shader_interpreter.*"
* OpenGL: Make OpenGL object resource wrappers fully inlineYuri Kunde Schlesner2015-07-261-1/+0
| | | | | The functions are so simple that having them separate only bloats the code and hinders optimization.
* Move video_core/color.h to common/color.harchshift2015-05-301-1/+0
|
* Move video_core/math.h to common/vector_math.harchshift2015-05-301-1/+0
| | | | The file only contained vector manipulation code, and such widely-useable code doesn't belong in video_core.
* Pica: Create 'State' structure and move state memory there.bunnei2015-05-231-0/+1
|
* OpenGL renderertfarley2015-05-231-1/+11
|
* GPU: Added RGB565/RGB8 framebuffer support and various cleanups.bunnei2015-03-041-0/+1
| | | | | | - Centralizes color format encode/decode functions. - Fixes endianness issues. - Implements remaining framebuffer formats in the debugger.
* CMake cleanupYuri Kunde Schlesner2014-09-011-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.
* Replace GLEW with a glLoadGen loader.Yuri Kunde Schlesner2014-09-011-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.
* Rewrite of OpenGL renderer, including OS X supportKevin Hartman2014-08-261-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.
* Pica: Add debug utility functions for dumping geometry data.Tony Wasserka2014-08-251-0/+2
|
* Pica: Add basic rasterizer.Tony Wasserka2014-08-121-0/+2
|
* Pica: Add triangle clipper.Tony Wasserka2014-08-121-2/+4
|
* Pica: Add primitive assembly stage.Tony Wasserka2014-08-121-0/+2
|
* Pica: Add vertex shader implementation.Tony Wasserka2014-08-121-0/+2
|
* Pica: Add command processor.Tony Wasserka2014-08-121-2/+5
|
* Video core: Add utility class for vector operations.Tony Wasserka2014-08-121-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.
* CMakeLists: rename HEADS, improved commentsarchshift2014-05-201-2/+2
| | | | Changes for clarity of comments, removed redundant compiler flags.
* IT'S ALIVE!archshift2014-04-291-1/+6
|
* fixed a bunch of errors in CMakeListsbunnei2014-04-101-3/+3
|
* updated CMakeListsbunnei2014-04-101-16/+2
|
* added video_core project to solutionbunnei2014-04-051-0/+19