| Commit message (Collapse) | Author | Files | Lines |
|
This crashes their shader compiler for some reason.
|
|
These formats are unsupported by mobile GPUs so they need to be emulated in shaders instead.
|
|
|
|
|
|
Should be more efficient and better readable
|
|
On AMD a subpixel offset of 1/512 of the texel size is applied to the texture coordinates at a ImageGather call to ensure the rounding at the texel centers is done the same way as in Maxwell or other Nvidia architectures.
See https://www.reedbeta.com/blog/texture-gathers-and-coordinate-precision/ for more details why this might be necessary.
This should fix shadow artifacts at object edges in Zelda: Breath of the Wild (#9957, #6956).
|
|
|
|
Signed-off-by: arades79 <scravers@protonmail.com>
|
|
Signed-off-by: arades79 <scravers@protonmail.com>
|
|
These built-ins seem to be available without needing to be declared for fragment shaders, similar i.e. to gl_FragDepth
|
|
|
|
|
|
Also fixes for texture buffers, which do not have mips eithers.
|
|
|
|
|
|
|
|
|
|
The frontend IR opcodes do not distinguish between signed and unsigned integer types.
Fixes broken shaders when IR validation/graphics debugging is enabled for shaders that used BitCastS32F32
|
|
|
|
|
|
The existing implementation only supports 64 invoc-per-subgroup GPUs, and misbehaves on adreno when invocations need to be split into 4 emulated subgroups.
|
|
|
|
Adreno drivers will crash compiling geometry shaders if the input position is not wrapped in a gl_in struct.
|
|
|
|
|
|
|
|
|
|
|
|
Co-authored-by: bylaws <bylaws@users.noreply.github.com>
|
|
|
|
|
|
|
|
|
|
Disabling C4100 is similar to -Wno-unused-parameter
|
|
|
|
Fix some typos reported by Lintian
|
|
|
|
|
|
|
|
This formats all copyright comments according to SPDX formatting guidelines.
Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
|
|
|
|
|
|
Needed for compilation with older libc++ releases
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Some drivers do not support 64-bit atomics, and fallback to atomically modifying U32x2 vectors. This change ensures that U32x2 storage vectors are defined in the spir-v shader when 64-bit atomics are used.
Fixes a hang on some devices, notably Intel GPUs, when booting Pokemon Legends Arceus
|
|
Fixes Transform Feedback on Vulkan AMD drivers.
|
|
Found by static analysis with PVS-Studio. Original check wasn't actually checking for OOB and would segfault in case of it.
|
|
... to common/logging/formatter.h
|
|
|
|
|
|
|
|
some drivers have a bug bitwise converting floating point cbuf values to uint variables. This adds a workaround for these drivers to make all cbufs uint and convert to floating point as needed.
|
|
|
|
Works around an nvidia driver bug, where casting the integer attributes to float and back to an integer always returned 0.
|
|
|
|
|
|
GetAttribute expects an F32 result type at the IR level, this fixes the return value of attributes which were not returning an F32
|
|
|
|
|
|
|
|
emit_spirv.h is included in video_core, which was propagating further includes that video_core did not depend on.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Thanks for everything!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ensures all drivers behave the same way in this case.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The IR expects GetAttribute to return an F32 value. This case was returning a U32 instead.
|
|
|
|
This should be LINES_ADJACENCY
|
|
|
|
|
|
|
|
Adheres to GL_ARB_separate_shader_objects requirements
|
|
|
|
|
|
Silences the following warnings-turned-errors:
-Wsign-conversion
-Wunused-private-field
-Wbraced-scalar-init
-Wunused-variable
And some other errors
|
|
|
|
Fix regression on Fire Emblem: Three Houses when using native fp16.
|
|
|
|
|
|
account for the fact that program.*memory_size is in units of bytes.
|
|
Used by MH:Rise
|
|
Fixes OpenGL.
|
|
|
|
|
|
|
|
Put all varyings into a single std::bitset with helpers to access it.
Implement passthrough geometry shaders using host's.
|
|
This ensures the original operand values are not overwritten when being used in the overflow detection.
|
|
|
|
|
|
|
|
|
|
|
|
Fixes rendering in Devil May Cry without regressing Ori and the Blind Forest.
|
|
Fixes shader compilation in Okami HD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fixes Ori and the blind forest title screen
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plus some minor refactoring of implementations
|
|
|
|
|
|
|
|
|
|
and wip nv thread shuffle impl
|
|
|
|
|
|
Fix for SULD.D
|
|
|
|
|
|
|
|
along with some more cleanup/oversight fixes
|
|
|
|
|
|
|
|
|
|
and more cleanup
|
|
|
|
|
|
needed for HW:AoC.
|
|
along with some other misc changes and fixes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
and add some more separation in the shader for better debugability when dumped
|
|
|
|
|
|
and implement misc getters
|
|
|
|
|
|
SSBU now working
|
|
|
|
|
|
|
|
|
|
and missed a diff in emit_glsl relating to var alloc ref counting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fixes font rendering issues as these were used to index into the ssbos
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
to fix Loop control flow.
|
|
|
|
|
|
plus some other misc additions/changed
|
|
and many other misc implementations
|
|
|
|
|
|
|
|
|
|
Logic for ordered/unordered ops was wrong.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
based on glasm with some tweaks
|
|
|
|
|
|
|
|
Also add a setting for enable Nsight Aftermath.
|
|
The sign bit on integers of size < 32 was not properly preserved in casts
|
|
BitCast U32 to S32 before converting to float on drivers with broken
signed operations.
|
|
|
|
|
|
|
|
|
|
"Negative" offsets don't exist. They are shown as such due to a bug in
nvdisasm.
Unaligned offsets have been proved to read the aligned offset. For
example, when reading an U32, if the offset is 6, the offset read will
be 4.
|
|
|
|
Fixes Ori and the Blind Forest's menu on GLASM. For some reason
(probably high level optimizations) it is not sanitized on SPIR-V for
OpenGL. Vulkan is unaffected by this change.
|
|
|
|
|
|
|
|
|
|
|
|
Causes regressions on Bowser's Fury.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Add support for null registers. These are used when an instruction has
no usages.
This comes handy when an instruction is only used for its CC value, with
the caveat of having to invalidate all pseudo-instructions before
defining the instruction itself in the register allocator. This commits
changes this.
Workaround a bug on Nvidia's condition codes conditional execution using
branches.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Reorder them to the bottom of the file for readability.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
With this, Luigi's Mansion's sand renders properly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Immediate condition refs where not handled correctly. Just move the
value for now.
|
|
Fixes the identity removal pass.
|
|
|
|
|
|
|
|
|
|
Remove lod clamp from texture instructions with lod, as this is not
needed (nor supported).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fixes members of unnamed union not being accessible, and one function
without a declaration.
|
|
|
|
Silence unused variable warning
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This commit regresses VertexA shaders, their transformation pass has to
be adapted to the new control flow.
|
|
StorageAtomicExchangeU64 is failing test seemingly due to failure storing 64-bit
result into the register
|
|
Use a struct constructor to serialize register allocation arguments to
ensure registers are allocated in the same order regardless of the
compiler used.
The A and B functions can be called in any order when passed as
arguments to "foo":
foo(A(), B())
But the order is guaranteed for curly-braced constructor calls in
classes:
Foo{A(), B()}
Use this to get consistent behavior.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
also fixes ADD and SUB to use U modifier
|
|
|
|
Along with implementations of common instructions along the way
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is enabled by an extension instead of the capability.
|
|
|
|
|
|
|
|
Workaround bug on Nvidia's OpenGL SPIR-V compiler when using unsigned
texture offsets.
|
|
|
|
Workaround more bugs on Nvidia's OpenGL SPIR-V compiler.
|
|
|
|
|
|
Worksaround a bug on Nvidia's OpenGL SPIR-V compiler where names are
used for name matching.
|
|
|
|
|
|
|
|
|
|
When we can't track the SSBO origin of a global memory instruction,
leave it as a global memory operation and assume these pointers are in
the NVN storage buffer slots, then apply a linear search in the shader's
runtime.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fix two bugs in BFI.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It may generate better code on some compilers and it's easier to handle.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is needed because pseudo-instructions where invalidated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Also fix oversight with adding SignedZeroInfNanPreserve execution mode.
|
|
|
|
|
|
|
|
And add a const in FCMP
|
|
still need to configure some settings for NV denorm flush and intel NaN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|