diff options
Diffstat (limited to 'servers/rendering/renderer_rd')
-rw-r--r-- | servers/rendering/renderer_rd/environment/gi.cpp | 4 | ||||
-rw-r--r-- | servers/rendering/renderer_rd/shaders/environment/gi.glsl | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/servers/rendering/renderer_rd/environment/gi.cpp b/servers/rendering/renderer_rd/environment/gi.cpp index fd7975ed3a..52f09e1ccb 100644 --- a/servers/rendering/renderer_rd/environment/gi.cpp +++ b/servers/rendering/renderer_rd/environment/gi.cpp @@ -3493,6 +3493,9 @@ void GI::init(SkyRD *p_sky) { if (RendererSceneRenderRD::get_singleton()->is_vrs_supported()) { defines += "\n#define USE_VRS\n"; } + if (!RD::get_singleton()->sampler_is_format_supported_for_filter(RD::DATA_FORMAT_R8G8_UINT, RD::SAMPLER_FILTER_LINEAR)) { + defines += "\n#define SAMPLE_VOXEL_GI_NEAREST\n"; + } Vector<String> gi_modes; @@ -3931,7 +3934,6 @@ void GI::process_gi(Ref<RenderSceneBuffersRD> p_render_buffers, const RID *p_nor u.append_id(material_storage->sampler_rd_get_default(RS::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS, RS::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED)); uniforms.push_back(u); } - { RD::Uniform u; u.uniform_type = RD::UNIFORM_TYPE_IMAGE; diff --git a/servers/rendering/renderer_rd/shaders/environment/gi.glsl b/servers/rendering/renderer_rd/shaders/environment/gi.glsl index 459c4dcb1d..59af9501ba 100644 --- a/servers/rendering/renderer_rd/shaders/environment/gi.glsl +++ b/servers/rendering/renderer_rd/shaders/environment/gi.glsl @@ -4,6 +4,10 @@ #VERSION_DEFINES +#ifdef SAMPLE_VOXEL_GI_NEAREST +#extension GL_EXT_samplerless_texture_functions : enable +#endif + layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; #define M_PI 3.141592 @@ -625,7 +629,11 @@ void process_gi(ivec2 pos, vec3 vertex, inout vec4 ambient_light, inout vec4 ref #ifdef USE_VOXEL_GI_INSTANCES { +#ifdef SAMPLE_VOXEL_GI_NEAREST + uvec2 voxel_gi_tex = texelFetch(voxel_gi_buffer, pos, 0).rg; +#else uvec2 voxel_gi_tex = texelFetch(usampler2D(voxel_gi_buffer, linear_sampler), pos, 0).rg; +#endif roughness *= roughness; //find arbitrary tangent and bitangent, then build a matrix vec3 v0 = abs(normal.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(0.0, 1.0, 0.0); |