Age | Commit message (Collapse) | Author |
|
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.
|
|
maxwell_to_gl: Implement missing primitive topologies
|
|
shader/p2r: Implement P2R Pr
|
|
vk_image: Add an image object abstraction
|
|
|
|
vk_staging_buffer_pool: Add a staging pool for temporary operations
|
|
|
|
gl_rasterizer: Allow rendering without fragment shader
|
|
shader/texture: Implement AOFFI and PTP for TLD4 and TLD4S
|
|
Rendering without a fragment shader is usually used in depth-only
passes.
|
|
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.
|
|
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.
|
|
fixed_pipeline_state: Define structure and loaders
|
|
gl_rasterizer: Implement RASTERIZE_ENABLE
|
|
Marks as noexcept Hash, operator== and operator!= for consistency.
|
|
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.
|
|
|
|
Many of these topologies are exclusively available in OpenGL.
|
|
gl_shader_cache: Style changes
|
|
vk_resource_manager: Catch device losses and other changes
|
|
Texture Cache: Add HLE methods for building 3D textures
|
|
vk_shader_decompiler: Misc changes
|
|
|
|
|
|
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.
|
|
renderer_vulkan/shader: Add helper GLSL shaders
|
|
vk_shader_decompiler: Use Visit instead of reimplementing it
|
|
shader/memory: Implement LDG.U8 and unaligned U8 loads
|
|
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.
|
|
|
|
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.
|
|
P2R dumps predicate or condition codes state to a register. This is
useful for unit testing.
|
|
|
|
shader/conversion: Implement byte selector in I2F
|
|
shader/texture: Properly shrink unused entries in size mismatches
|
|
|
|
Notify the programmer when a request to release a fence is invalid
because the fence is already free.
|
|
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_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.
|
|
When full decompilation was enabled, labels were not being inserted and
instructions were misused. Fix these bugs.
|
|
Avoid changing gl_Position when the NDC used by the game is [0, 1]
(Vulkan's native).
|
|
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.
|
|
gl_shader_decompiler: Add missing DeclareImages
|
|
shader_bytecode: Fix TLD4S encoding
|
|
|
|
|
|
vk_scheduler: Delegate commands to a worker thread and state track
|
|
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.
|
|
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)
|
|
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.
|