Commit Graph

44 Commits

Author SHA1 Message Date
Zephyron
a53408a758 feat(shader): implement texture component type handling in SPIR-V backend
- Add ComponentScalarType helper function
- Update ImageType to use component-specific sampled types
- Add TextureColorResultType and TextureSampleResultToFloat helpers
- Update all texture sampling functions to handle component types correctly
- Add proper type conversions for integer and stencil textures
- Add Flat decorations for integer inputs in fragment shaders
- Add NonWritable decoration for read-only storage buffers

This ensures textures are sampled with the correct component types,
improving accuracy for integer and depth/stencil textures.

Co-Authored-By: ForrestMarkX <forrestmarkx@outlook.com>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-31 16:09:26 +10:00
Zephyron
c71cd53d0d fix(shader): Fix integer texture format mismatch in SPIR-V
- Add is_integer field to TextureDescriptor and TextureDefinition
- Use IsTexturePixelFormatInteger to detect integer textures
- Update ImageType to use U32[1] for integer textures, F32[1] for float
- Merge is_integer flag when combining texture descriptors

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-12-08 16:03:40 +10:00
Zephyron
d8d54c5ccf shader_recompiler: Fix alpha-to-coverage fragment output interface
The Vulkan spec requires fragment shaders to declare an output covering
Location 0, Component 3 (alpha) when alpha-to-coverage is enabled. This change:

- Tracks alpha_to_coverage_enabled through RuntimeInfo from pipeline state
- Forces declaration of frag_color[0] with full RGBA when enabled
- Initializes alpha to 1.0 in shader epilogue if not explicitly written

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-10-17 16:07:35 +10:00
Zephyron
117c467ff3 feat: Add frame generation and enhance UE4 game compatibility
- Add frame generation settings (enabled/disabled, interpolation/extrapolation modes)
- Add frame skipping settings (enabled/disabled, adaptive/fixed modes)
- Implement frame skipping logic with adaptive and fixed modes
- Enhance UE4 crash handling with recovery mechanisms
- Add support for signed and float 32-bit image formats across shader backends
- Update Vulkan Validation Layers to v1.4.321.0
- Fix duplicate frame skipping options in Qt UI
- Improve memory handling for UE4 games (Hogwarts Legacy compatibility)
- Add enhanced bindless texture handling with fallback approach
- Update Android build configuration and dependencies

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-05 19:32:28 +10:00
Liam
2a0d707ce1 shader_recompiler: emulate 8-bit and 16-bit storage writes with cas loop 2024-01-11 16:50:59 -05:00
liamwhite
92a331af76 Merge pull request #12437 from ameerj/gl-amd-fixes
OpenGL: Fixes and workaround updates for AMD
2024-01-04 15:53:44 -05:00
Liam
d0c60605ab shader_recompiler: use default value for clip distances array 2023-12-26 19:32:47 -05:00
Liam
6697b665ca shader_recompiler: respect clip distance limits in indexed store 2023-12-26 19:10:25 -05:00
Ameer J
d5d0d2cb0e spirv_emit_context: Fix BaseInstance for OGL spirv 2023-12-21 21:53:24 -05:00
Liam
9e9aed41be shader_recompiler: use float image operations on load/store when required 2023-12-21 14:34:46 -05:00
Liam
fcfa8b680b shader_recompiler: use minimal clip distance array 2023-12-18 22:25:14 -05:00
Liam
94244437de shader_recompiler: ignore clip distances beyond driver support level 2023-12-18 22:25:14 -05:00
Ameer J
75c5be55af shader_recompiler: Align SSBO offsets in GlobalMemory functions 2023-10-31 20:14:18 -04:00
Liam
1e24d02434 emit_spirv: fix incorrect use of descriptor index in image atomics 2023-09-22 00:39:09 -04:00
liamwhite
eb4ddb2868 shader_recompiler: skip sampler for buffer textures (#11435) 2023-09-14 15:23:50 +02:00
Liam
ba4b65e4bc shader_recompiler: always declare image format for image buffers 2023-09-02 17:25:00 -04:00
Kelebek1
5da70f7197 Remove memory allocations in some hot paths 2023-06-22 08:05:10 +01:00
Billy Laws
158a1896ec Implement scaled vertex buffer format emulation
These formats are unsupported by mobile GPUs so they need to be emulated in shaders instead.
2023-06-03 00:05:31 -07:00
Kelebek1
b566c98258 Define SampleMask as an array 2023-04-30 18:37:37 +01:00
ameerj
a63e17566a spirv: Fix TXQ with MSAA textures 2023-01-29 13:47:30 -05:00
Liam
76a4356e55 spirv: fix multisampled image fetch 2023-01-23 12:03:19 -05:00
Billy Laws
58fec43768 Run clang-format 2023-01-05 22:18:10 +00:00
Billy Laws
3f0985c7b0 shader_recompiler: SPIRV: Only enable int64 feature when supported 2023-01-05 22:13:07 +00:00
Billy Laws
bbfad79c89 Vulkan: Add a workaround for input_position on Adreno drivers
Adreno drivers will crash compiling geometry shaders if the input position is not wrapped in a gl_in struct.
2023-01-05 22:13:07 +00:00
Fernando Sahmkow
a0c697124c Video_core: Address feedback 2023-01-04 14:39:42 -05:00
Fernando Sahmkow
aad0cbf024 MacroHLE: Add HLE replacement for base vertex and base instance. 2023-01-01 16:43:57 -05:00
Liam
77b0d01639 spirv_emit_context: declare GroupNonUniform capability for SubgroupLocalInvocationId 2022-12-13 18:25:53 -05:00
Liam
0d033e6b45 spirv_emit_context: add missing flat decoration 2022-11-18 22:05:28 -05:00
liamwhite
9c67334031 Merge pull request #9253 from vonchenplus/attr_layer
shader: Implement miss attribute layer
2022-11-18 22:04:18 -05:00
FengChen
60e0d4a177 shader: Implement miss attribute layer 2022-11-17 22:45:14 +08:00
FengChen
a4472b5526 video_core: Fix few issues in Tess stage 2022-11-07 15:42:42 +08:00
FengChen
9a95c7fa14 video_core: Generate mipmap texture by drawing 2022-09-20 11:55:43 +08:00
FengChen
b2a6dde438 video_code: support rectangle texture 2022-08-25 12:45:58 +08:00
Kelebek1
f580946b0d Add missed shader defines. Fixes Xenoblade Chronicles 3 booting with Vulkan. 2022-07-29 06:12:39 +01:00
Morph
99ceb03a1c general: Convert source file copyright comments over to SPDX
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.
2022-04-23 05:55:32 -04:00
Liam
a45baa0e78 shader_recompiler: support const buffer indirect addressing on OpenGL SPIR-V 2022-04-01 11:17:54 -04:00
Billy Laws
dd862dff66 Include <bit> header when std::count{r,l}_zero is used
Needed for compilation with older libc++ releases
2022-03-22 21:11:24 +00:00
ameerj
574a2c4b77 shader_recompiler: Reduce unused includes 2022-03-20 02:25:08 -04:00
Liam
3009d0bd7d Address review comments 2022-03-17 14:48:18 -04:00
Liam
e228a40db8 shader_recompiler: Use functions for indirect const buffer accesses 2022-03-17 13:30:21 -04:00
v1993
a943600019 shader_recompiler: fix potential OOB access
Found by static analysis with PVS-Studio. Original check wasn't actually checking for OOB and would segfault in case of it.
2022-01-17 21:50:51 +03:00
vonchenplus
6ebc972c2b Remove spirv handle legacy related code 2021-12-18 14:08:50 +08:00
ameerj
f32b2bcd20 shader_recompiler: Adjust emit_context includes 2021-12-05 18:11:19 -05:00
ameerj
5286a7bc4c shader_recompiler: Rename backend emit_context files 2021-12-05 16:33:44 -05:00