summaryrefslogtreecommitdiff
path: root/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
...
* | | | | Merge pull request #3239 from ReinUsesLisp/p2rGravatar bunnei2019-12-312-17/+47
|\ \ \ \ \ | | | | | | | | | | | | shader/p2r: Implement P2R Pr
| * | | | | shader/p2r: Implement P2R PrGravatar ReinUsesLisp2019-12-201-1/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | P2R dumps predicate or condition codes state to a register. This is useful for unit testing.
| * | | | | shader/r2p: Refactor P2R to support P2RGravatar ReinUsesLisp2019-12-202-17/+33
| | | | | |
* | | | | | Merge pull request #3248 from ReinUsesLisp/vk-imageGravatar Fernando Sahmkow2019-12-303-0/+192
|\ \ \ \ \ \ | | | | | | | | | | | | | | vk_image: Add an image object abstraction
| * | | | | | vk_image: Avoid unnecesary equalsGravatar Rodrigo Locatti2019-12-301-1/+1
| | | | | | |
| * | | | | | vk_image: Add an image object abstractionGravatar ReinUsesLisp2019-12-253-0/+192
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | | | Merge pull request #3249 from ReinUsesLisp/vk-staging-buffer-poolGravatar Fernando Sahmkow2019-12-303-0/+212
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | vk_staging_buffer_pool: Add a staging pool for temporary operations
| * | | | | vk_staging_buffer_pool: Initialize last epoch to zeroGravatar Rodrigo Locatti2019-12-291-1/+1
| | | | | |
| * | | | | vk_staging_buffer_pool: Add a staging pool for temporary operationsGravatar ReinUsesLisp2019-12-253-0/+212
| |/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | | | | Merge pull request #3250 from ReinUsesLisp/empty-fragmentGravatar Fernando Sahmkow2019-12-282-0/+7
|\ \ \ \ \ | | | | | | | | | | | | gl_rasterizer: Allow rendering without fragment shader
| * | | | | gl_rasterizer: Allow rendering without fragment shaderGravatar ReinUsesLisp2019-12-262-0/+7
| |/ / / / | | | | | | | | | | | | | | | | | | | | Rendering without a fragment shader is usually used in depth-only passes.
* | | | | Merge pull request #3228 from ReinUsesLisp/ptpGravatar bunnei2019-12-265-74/+142
|\ \ \ \ \ | |/ / / / |/| | | | shader/texture: Implement AOFFI and PTP for TLD4 and TLD4S
| * | | | shader/texture: Implement TLD4.PTPGravatar ReinUsesLisp2019-12-165-56/+120
| | | | |
| * | | | shader/texture: Enable arrayed TLD4Gravatar ReinUsesLisp2019-12-161-1/+0
| | | | |
| * | | | gl_shader_decompiler: Rename "sepparate" to "separate"Gravatar ReinUsesLisp2019-12-161-3/+3
| | | | |
| * | | | shader/texture: Implement AOFFI for TLD4SGravatar ReinUsesLisp2019-12-161-13/+18
| | | | |
| * | | | shader/texture: Remove unnecesary parenthesisGravatar ReinUsesLisp2019-12-161-2/+2
| | | | |
* | | | | Merge pull request #3244 from ReinUsesLisp/vk-fpsGravatar Fernando Sahmkow2019-12-254-6/+594
|\ \ \ \ \ | | | | | | | | | | | | fixed_pipeline_state: Define structure and loaders
| * | | | | fixed_pipeline_state: Define symetric operator!= and mark as noexceptGravatar ReinUsesLisp2019-12-242-40/+92
| | | | | | | | | | | | | | | | | | | | | | | | Marks as noexcept Hash, operator== and operator!= for consistency.
| * | | | | fixed_pipeline_state: Define structure and loadersGravatar ReinUsesLisp2019-12-223-0/+528
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * | | | | maxwell_3d: Add depth bounds registersGravatar ReinUsesLisp2019-12-221-6/+14
| | | | | |
* | | | | | Merge pull request #3236 from ReinUsesLisp/rasterize-enableGravatar bunnei2019-12-246-4/+28
|\ \ \ \ \ \ | |/ / / / / |/| | | | | gl_rasterizer: Implement RASTERIZE_ENABLE
| * | | | | gl_rasterizer: Implement RASTERIZE_ENABLEGravatar ReinUsesLisp2019-12-186-4/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | RASTERIZE_ENABLE is the opposite of GL_RASTERIZER_DISCARD. Implement it naturally using this. NVN games expect rasterize to be enabled by default, reflect that in our initial GPU state.
* | | | | | Merge pull request #3241 from ReinUsesLisp/gl-shader-cacheGravatar bunnei2019-12-221-19/+14
|\ \ \ \ \ \ | |_|_|_|/ / |/| | | | | gl_shader_cache: Style changes
| * | | | | gl_shader_cache: Update commentary for shared memoryGravatar ReinUsesLisp2019-12-201-9/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove false commentary. Not dividing by 4 the size of shared memory is not a hack; it describes the number of integers, not bytes. While we are at it sort the generated code to put preprocessor lines on the top.
| * | | | | gl_shader_cache: Remove unused entry in GetPrimitiveDescriptionGravatar ReinUsesLisp2019-12-201-11/+9
| | |_|/ / | |/| | |
* | | | | Merge pull request #3238 from ReinUsesLisp/vk-resource-managerGravatar bunnei2019-12-224-1/+82
|\ \ \ \ \ | | | | | | | | | | | | vk_resource_manager: Catch device losses and other changes
| * | | | | vk_resource_manager: Add entry to VKFence to test its usageGravatar ReinUsesLisp2019-12-191-0/+8
| | | | | |
| * | | | | vk_reosurce_manager: Add assert for releasing fencesGravatar ReinUsesLisp2019-12-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Notify the programmer when a request to release a fence is invalid because the fence is already free.
| * | | | | vk_resource_manager: Implement VKFenceWatch move constructorGravatar ReinUsesLisp2019-12-192-0/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows us to put VKFenceWatch inside a std::vector without storing it in heap. On move we have to signal the fences where the new protected resource is, adding some overhead.
| * | | | | vk_device: Add entry to catch device lossesGravatar ReinUsesLisp2019-12-193-1/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | VK_NV_device_diagnostic_checkpoints allows us to push data to a Vulkan queue and then query it even after a device loss. This allows us to push the current pipeline object and see what was the call that killed the device.
| * | | | | vk_device: Add query for RGBA8UintGravatar ReinUsesLisp2019-12-191-0/+1
| | | | | |
* | | | | | Merge pull request #3203 from FernandoS27/tex-cache-fixesGravatar bunnei2019-12-224-1/+144
|\ \ \ \ \ \ | | | | | | | | | | | | | | Texture Cache: Add HLE methods for building 3D textures
| * | | | | | Texture Cache: Improve documentationGravatar Fernando Sahmkow2019-12-222-4/+5
| | | | | | |
| * | | | | | Texture Cache: Address FeedbackGravatar Fernando Sahmkow2019-12-222-11/+11
| | | | | | |
| * | | | | | Texture Cache: Add HLE methods for building 3D textures within the GPU in ↵Gravatar Fernando Sahmkow2019-12-224-1/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | certain scenarios. This commit adds a series of HLE methods for handling 3D textures in general. This helps games that generate 3D textures on every frame and may reduce loading times for certain games.
* | | | | | | Merge pull request #3237 from ReinUsesLisp/vk-shader-decompilerGravatar Fernando Sahmkow2019-12-222-38/+49
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | vk_shader_decompiler: Misc changes
| * | | | | | vk_shader_decompiler: Fix full decompilationGravatar ReinUsesLisp2019-12-191-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When full decompilation was enabled, labels were not being inserted and instructions were misused. Fix these bugs.
| * | | | | | vk_shader_decompiler: Skip NDC correction when it is nativeGravatar ReinUsesLisp2019-12-192-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid changing gl_Position when the NDC used by the game is [0, 1] (Vulkan's native).
| * | | | | | vk_shader_decompiler: Normalize output fragment attachmentsGravatar ReinUsesLisp2019-12-192-12/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some games write from fragment shaders to an unexistant framebuffer attachment or they don't write to one when it exists in the framebuffer. Fix this by skipping writes or adding zeroes.
| * | | | | | vk_shader_decompiler: Update sirit and implement Texture AOFFIGravatar ReinUsesLisp2019-12-191-22/+30
| |/ / / / /
* | | | | | Merge pull request #3230 from ReinUsesLisp/vk-emu-shadersGravatar Fernando Sahmkow2019-12-224-0/+122
|\ \ \ \ \ \ | | | | | | | | | | | | | | renderer_vulkan/shader: Add helper GLSL shaders
| * | | | | | renderer_vulkan/shader: Add helper GLSL shadersGravatar ReinUsesLisp2019-12-164-0/+122
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These shaders are used to specify code that is not dynamically generated in the Vulkan backend. Instead of packing it inside the build system, it's manually built and copied to the C++ file to avoid adding unnecessary build time dependencies. quad_array should be dropped in the future since it can be emulated with a memory pool generated from the CPU.
* | | | | | | Merge pull request #3240 from ReinUsesLisp/decomp-cond-codeGravatar Fernando Sahmkow2019-12-221-23/+1
|\ \ \ \ \ \ \ | | | | | | | | | | | | | | | | vk_shader_decompiler: Use Visit instead of reimplementing it
| * | | | | | | vk_shader_decompiler: Use Visit instead of reimplementing itGravatar ReinUsesLisp2019-12-201-23/+1
| | |_|/ / / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ExprCondCode visit implements the generic Visit. Use this instead of that one. As an intended side effect this fixes unwritten memory usages in cases when a negation of a condition code is used.
* | | | | | | Merge pull request #3235 from ReinUsesLisp/ldg-u8Gravatar bunnei2019-12-211-6/+32
|\ \ \ \ \ \ \ | |/ / / / / / |/| | | | | | shader/memory: Implement LDG.U8 and unaligned U8 loads
| * | | | | | shader/memory: Implement LDG.U8 and unaligned U8 loadsGravatar ReinUsesLisp2019-12-181-6/+32
| | |_|/ / / | |/| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LDG can load single bytes instead of full integers or packs of integers. These have the advantage of loading bytes that are not aligned to 4 bytes. To emulate these this commit gets the byte being referenced (by doing "address & 3" and then using that to extract the byte from the loaded integer: result = bitfieldExtract(loaded_integer, (address % 4) * 8, 8)
* | | | | | Merge pull request #3234 from ReinUsesLisp/i2f-u8-selectorGravatar bunnei2019-12-191-2/+13
|\ \ \ \ \ \ | | | | | | | | | | | | | | shader/conversion: Implement byte selector in I2F
| * | | | | | shader/conversion: Implement byte selector in I2FGravatar ReinUsesLisp2019-12-181-2/+13
| |/ / / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I2F's byte selector is used to choose what bytes to convert to float. e.g. if the input is 0xaabbccdd and the selector is ".B3" it will convert 0xaa. The default (when it's not shown in nvdisasm) is ".B0", in that example the default would convert 0xdd to float.
* | | | | | Merge pull request #3233 from ReinUsesLisp/mismatch-sizesGravatar bunnei2019-12-191-4/+9
|\ \ \ \ \ \ | | | | | | | | | | | | | | shader/texture: Properly shrink unused entries in size mismatches