Commit Graph

285 Commits

Author SHA1 Message Date
Chaosus f538376c3b Add `CLIP_SPACE_FAR` built-in to spatial shader 2024-08-27 08:48:46 +03:00
Matias N. Goldberg 364f916f3f
Add debug utilities for Vulkan
Features:
- Debug-only tracking of objects by type. See
get_driver_allocs_by_object_type et al.
 - Debug-only Breadcrumb info for debugging GPU crashes and device lost
 - Performance report per frame from get_perf_report
- Some VMA calls had to be modified in order to insert the necessary
memory callbacks

Functionality marked as "debug-only" is only available in debug or dev
builds.

Misc fixes:
 - Early break optimization in RenderingDevice::uniform_set_create

============================

The work was performed by collaboration of TheForge and Google. I am
merely splitting it up into smaller PRs and cleaning it up.
2024-08-21 23:48:08 +02:00
BlueCube3310 ef9bb1a207 Implement support for bicubic lightmap filtering
Co-authored-by: Calinou <hugo.locurcio@hugo.pro>
2024-08-19 09:52:09 +02:00
Rémi Verschelde 590628feda
Merge pull request #86516 from jsjtxietian/fix-camera-direction
Fix incorrect `CAMERA_DIRECTION_WORLD` calculation
2024-07-18 10:45:20 +02:00
clayjohn 4cbc967f50 Use a spec constant to control whether the MultiMesh branch is used in the vertex shader.
This works around a bug on the Quest3 and slightly improves performance on all mobile devices at the cost of increased pipeline count.
2024-07-12 15:44:06 -07:00
Rémi Verschelde 46e8377a5e
Merge pull request #93960 from BastiaanOlij/fix_mobile_compositor
Pre transparent compositor effects needs to run later
2024-07-11 00:27:06 +02:00
Bastiaan Olij e42870b4d1 Pre transparent compositor effects needs to run later 2024-07-05 12:37:26 +10:00
Bastiaan Olij 6ed6212949 Make RenderSceneData take projection correction into account 2024-06-27 10:44:30 +10:00
clayjohn 267ea14616 Fix LOD selection in compatibility backend and clean up LOD code 2024-05-23 11:30:22 -07:00
clayjohn c5346a62b0 Only apply LOD when camera is outside the AABB of mesh in mobile renderer.
This copies the existing logic from the Forward+ renderer
2024-05-21 18:32:04 -07:00
Bastiaan Olij 6efaaecde2 Skip rendering sky if viewport is set to transparent background 2024-05-13 11:04:06 +10:00
Rob Blanckaert 64c04d95aa Fix shader error on mobile when using LIGHT_VERTEX 2024-05-04 11:02:05 -07:00
QbieShay e41064388e reverted naming to premul alpha (no T)
Initially 3d had premulT alpha as a keyword.
Since Canvas item uses mixed premul and premult as keywords,
3D is changed as well to keep consistency with 2D.
Unfortunately this keeps inconsistency with the internal ENUM.
2024-05-01 22:24:49 +02:00
QbieShay 41a2b0e83e Added premult alpha blending to 3D (spatial) shaders.
Co-authored-by: jitspoe <jitspoe@yahoo.com>
Co-authored-by: Clay John <claynjohn@gmail.com>
2024-05-01 00:53:29 +02:00
Rob Blanckaert ffe0b869f5 Add LIGHT_VERTEX to fragment shader
Adds a new variable to the fragment shader to specify
the vertex position used when calculating lighting.
2024-04-25 06:56:02 -07:00
clayjohn eb62c5b27f Revert change to default depth clear value in draw_list_begin 2024-04-17 19:08:22 -07:00
Rémi Verschelde 10d67e590d
Merge pull request #90191 from BastiaanOlij/fix_mobile_canvas_copy
Don't use subpasses when we're using Canvas background mode in Mobile
2024-04-06 13:06:37 +02:00
Khasehemwy d950f5f838
Use Reverse Z for the depth buffer 2024-04-04 13:54:15 +02:00
Bastiaan Olij 9e9a6fb6d6 Can't use subpasses when we're using Canvas background mode in Mobile 2024-04-04 15:59:11 +11:00
David Sullivan dfa326ef55 Fix: Address mobile resource leaks in render
Update render_forward_mobile destructor to include instance buffers.
Update render_scene_buffers_rd cleanup to include weight buffers / blur
textures.
2024-03-15 14:48:12 -04:00
Hugo Locurcio 26a220bd31
Make Overdraw, Lighting and Shadow Splits debug draw modes ignore decals
This also makes the Overdraw and Shadow Splits debug draw modes ignore fog.
The Lighting debug draw mode still displays fog as that debug draw mode
is intended to preview scene lighting, and fog has an impact on how
lighting is perceived.
2024-03-07 17:40:49 +01:00
Bastiaan Olij 5a98845655 Implement hooks into renderer 2024-02-18 21:54:21 +11:00
Eidolon 08f4560e69 Add optional depth fog 2024-02-17 22:39:34 -03:00
Erik Johnson eab95698cd
Fix shadows for billboarded Sprite3D's 2024-02-13 10:36:38 +01:00
Yuri Sizov 3f7ea71e88 Merge pull request #87495 from jsjtxietian/USE_LIGHT_SHADER_CODE
Clean up outdated `USE_LIGHT_SHADER_CODE` usage
2024-01-25 16:27:14 +01:00
Yuri Sizov b698204a1e Merge pull request #87505 from BastiaanOlij/fix_mobile_refprobe_validation
Fix framebuffer created for reflection probe in mobile renderer
2024-01-24 14:08:52 +01:00
Yuri Sizov 2ce450f8bc Merge pull request #84894 from clayjohn/tangent-error-message
Store ArrayMesh path in RenderingServer for use in error messages
2024-01-24 14:07:47 +01:00
jsjtxietian 2004ad1ac5 Clean up outdated `USE_LIGHT_SHADER_CODE` usage 2024-01-24 12:30:27 +08:00
Bastiaan Olij 914eecaddb Fix framebuffer created for reflection probe in mobile renderer 2024-01-24 00:51:51 +11:00
Dario cc4d39b0c1 Acyclic Command Graph for RenderingDevice.
Adds a new system to automatically reorder commands, perform layout transitions and insert synchronization barriers based on the commands issued to RenderingDevice.
2024-01-08 14:54:56 -03:00
jsjtxietian 89d7a2f0a5 Fix incorrect CAMERA_DIRECTION_WORLD calculation 2023-12-26 14:09:44 +08:00
clayjohn 43cf21cb71 Use best fit normals for storing screen space normals 2023-12-21 14:41:29 -07:00
Yuri Sizov 2d0ee20ff3 Merge pull request #86219 from clayjohn/RD-samplers-hotfix
Reduce the number of samplers used by the scene shaders
2023-12-16 17:50:10 +01:00
clayjohn a5399ab5af Reduce the number of samplers used by the scene shaders
The hard limit for Apple devices is 16 samplers per stage. So we need to ensure we use less than that
2023-12-15 17:13:44 -07:00
Bastiaan Olij 22cd145177 Merge passes in Vulkan mobile renderer 2023-12-16 09:51:35 +11:00
Yuri Sizov ee1bf15924 Merge pull request #84637 from clayjohn/RD-sampler-bias
Use render pass uniform set to store viewport samplers.
2023-12-08 15:23:18 +01:00
Bastiaan Olij 47983e30c5 Ensure 2D MSAA resolve is performed when 3D content but no 2D content in scene 2023-11-16 13:34:34 +11:00
clayjohn ead36fdcc4 Store ArrayMesh path in RenderingServer for use in error messages 2023-11-14 16:27:10 +01:00
clayjohn 2b9e6d2972 Use render pass uniform set to store viewport samplers.
This fixes a bugs where per-viewport samplers were being used for internal texture fetches (probes, sky, etc.).

This also fixes a bug when using multiple viewports in the same scene.

This also fixes a bug where the texture bias would override the bias from 3D scale.
2023-11-08 23:26:08 +01:00
clayjohn a74cfc2629 Use default samplers in base uniform set when rendering to reflection probes 2023-11-07 17:46:05 +01:00
clayjohn d1043a5f93 Enhance checks and user experience around tangents.
Ensure `ensure_tangents` option actually creates tangent array. Even if it is just a dummy array.

Allow mesh to generate its own tangents when using compression. This allows users to compress meshes without tangents.

Warn users if they are trying to read from tangents without providing tangents.
2023-11-01 22:40:42 +01:00
Rémi Verschelde 4cc8f0f36d
Merge pull request #83649 from BastiaanOlij/no_2d_stereo
Skip 2D rendering if stereo enabled and fix couple of MSAA issues
2023-10-25 10:29:09 +02:00
Bastiaan Olij 425e943576 Skip 2D rendering if stereo enabled and fix MSAA2D with 3D issue. 2023-10-20 14:02:55 +11:00
Clay 623a050269 Ensure that only visible paired lights are used
This is a longstanding issue in both the Mobile and GL Compatibility renderer.

Meshes pair with all lights that touch them, and then at draw time, we send all paired lights indices to the shader (even if that light isn't visible). The problem is that non-visible lights aren't uploaded to the GPU and don't have an index. So we end up using a bogus index
2023-10-17 13:02:46 +02:00
bitsawer f0a178cbdb Fix Mobile renderer shader instance uniform access 2023-10-15 18:09:54 +03:00
clayjohn 04846c1d6d Avoid default fallback material when using world_vertex_coords
This avoids z-fighting between the opaque shader and the depth prepass shader
2023-10-05 19:11:48 -06:00
clayjohn 51ed3aef63 Vertex and attribute compression to reduce the size of the vertex format.
This allows Godot to automatically compress meshes to save a lot of bandwidth.

In general, this requires no interaction from the user and should result in
no noticable quality loss.

This scheme is not backwards compatible, so we have provided an upgrade
mechanism, and a mesh versioning mechanism.

Existing meshes can still be used as a result, but users can get a
performance boost by reimporting assets.
2023-10-05 12:02:23 -06:00
A Thousand Ships fdd3d36c6d [Servers] Replace `ERR_FAIL_COND` with `ERR_FAIL_NULL` where applicable 2023-09-25 18:45:30 +02:00
Dario 057367bf4f Add FidelityFX Super Resolution 2.2 (FSR 2.2.1) support.
Introduces support for FSR2 as a new upscaler option available from the project settings. Also introduces an specific render list for surfaces that require motion and the ability to derive motion vectors from depth buffer and camera motion.
2023-09-25 10:37:47 -03:00
Dario 9b91750fb1 Fix mipmap bias behavior by refactoring how samplers are created by Material Storage.
Introduces a new structure to store samplers created with certain parameters instead of storing a 'custom' set of samplers. Allows viewports to correctly configure the mipmap bias and use it when rendering the scene.
2023-09-06 11:24:19 -03:00