diff options
Diffstat (limited to 'servers/rendering/renderer_rd/environment/fog.cpp')
| -rw-r--r-- | servers/rendering/renderer_rd/environment/fog.cpp | 117 | 
1 files changed, 62 insertions, 55 deletions
| diff --git a/servers/rendering/renderer_rd/environment/fog.cpp b/servers/rendering/renderer_rd/environment/fog.cpp index 257b67cf04..eece195946 100644 --- a/servers/rendering/renderer_rd/environment/fog.cpp +++ b/servers/rendering/renderer_rd/environment/fog.cpp @@ -57,12 +57,19 @@ void Fog::fog_volume_initialize(RID p_rid) {  	fog_volume_owner.initialize_rid(p_rid, FogVolume());  } -void Fog::fog_free(RID p_rid) { +void Fog::fog_volume_free(RID p_rid) {  	FogVolume *fog_volume = fog_volume_owner.get_or_null(p_rid);  	fog_volume->dependency.deleted_notify(p_rid);  	fog_volume_owner.free(p_rid);  } +Dependency *Fog::fog_volume_get_dependency(RID p_fog_volume) const { +	FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume); +	ERR_FAIL_NULL_V(fog_volume, nullptr); + +	return &fog_volume->dependency; +} +  void Fog::fog_volume_set_shape(RID p_fog_volume, RS::FogVolumeShape p_shape) {  	FogVolume *fog_volume = fog_volume_owner.get_or_null(p_fog_volume);  	ERR_FAIL_COND(!fog_volume); @@ -122,8 +129,6 @@ AABB Fog::fog_volume_get_aabb(RID p_fog_volume) const {  			return AABB(Vector3(-1, -1, -1), Vector3(2, 2, 2));  		}  	} - -	return AABB();  }  Vector3 Fog::fog_volume_get_extents(RID p_fog_volume) const { @@ -138,7 +143,7 @@ Vector3 Fog::fog_volume_get_extents(RID p_fog_volume) const {  bool Fog::FogMaterialData::update_parameters(const HashMap<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty) {  	uniform_set_updated = true; -	return update_parameters_uniform_set(p_parameters, p_uniform_dirty, p_textures_dirty, shader_data->uniforms, shader_data->ubo_offsets.ptr(), shader_data->texture_uniforms, shader_data->default_texture_params, shader_data->ubo_size, uniform_set, Fog::get_singleton()->volumetric_fog.shader.version_get_shader(shader_data->version, 0), VolumetricFogShader::FogSet::FOG_SET_MATERIAL); +	return update_parameters_uniform_set(p_parameters, p_uniform_dirty, p_textures_dirty, shader_data->uniforms, shader_data->ubo_offsets.ptr(), shader_data->texture_uniforms, shader_data->default_texture_params, shader_data->ubo_size, uniform_set, Fog::get_singleton()->volumetric_fog.shader.version_get_shader(shader_data->version, 0), VolumetricFogShader::FogSet::FOG_SET_MATERIAL, true);  }  Fog::FogMaterialData::~FogMaterialData() { @@ -361,7 +366,7 @@ void Fog::FogShaderData::set_code(const String &p_code) {  	valid = true;  } -void Fog::FogShaderData::set_default_texture_param(const StringName &p_name, RID p_texture, int p_index) { +void Fog::FogShaderData::set_default_texture_parameter(const StringName &p_name, RID p_texture, int p_index) {  	if (!p_texture.is_valid()) {  		if (default_texture_params.has(p_name) && default_texture_params[p_name].has(p_index)) {  			default_texture_params[p_name].erase(p_index); @@ -430,7 +435,7 @@ void Fog::FogShaderData::get_instance_param_list(List<RendererMaterialStorage::I  	}  } -bool Fog::FogShaderData::is_param_texture(const StringName &p_param) const { +bool Fog::FogShaderData::is_parameter_texture(const StringName &p_param) const {  	if (!uniforms.has(p_param)) {  		return false;  	} @@ -473,7 +478,7 @@ Fog::FogShaderData::~FogShaderData() {  ////////////////////////////////////////////////////////////////////////////////  // Volumetric Fog -Fog::VolumetricFog::VolumetricFog(const Vector3i &fog_size, RID p_sky_shader) { +void Fog::VolumetricFog::init(const Vector3i &fog_size, RID p_sky_shader) {  	width = fog_size.x;  	height = fog_size.y;  	depth = fog_size.z; @@ -591,6 +596,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  	RENDER_TIMESTAMP("> Volumetric Fog");  	RD::get_singleton()->draw_command_begin_label("Volumetric Fog"); +	Ref<VolumetricFog> fog = p_settings.vfog; +  	if (p_fog_volumes.size() > 0) {  		RD::get_singleton()->draw_command_begin_label("Render Volumetric Fog Volumes"); @@ -623,9 +630,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		params.z_far = z_far;  		params.time = p_settings.time; -		params.fog_volume_size[0] = p_settings.vfog->width; -		params.fog_volume_size[1] = p_settings.vfog->height; -		params.fog_volume_size[2] = p_settings.vfog->depth; +		params.fog_volume_size[0] = fog->width; +		params.fog_volume_size[1] = fog->height; +		params.fog_volume_size[2] = fog->depth;  		params.use_temporal_reprojection = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection(p_settings.env);  		params.temporal_frame = RSG::rasterizer->get_frame_number() % VolumetricFog::MAX_TEMPORAL_FRAMES; @@ -638,7 +645,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		RD::get_singleton()->buffer_update(volumetric_fog.volume_ubo, 0, sizeof(VolumetricFogShader::VolumeUBO), ¶ms, RD::BARRIER_MASK_COMPUTE); -		if (p_settings.vfog->fog_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->fog_uniform_set)) { +		if (fog->fog_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->fog_uniform_set)) {  			Vector<RD::Uniform> uniforms;  			{ @@ -649,7 +656,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  				u.binding = 1; -				u.append_id(p_settings.vfog->emissive_map); +				u.append_id(fog->emissive_map);  				uniforms.push_back(u);  			} @@ -669,7 +676,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  				u.binding = 3; -				u.append_id(p_settings.vfog->density_map); +				u.append_id(fog->density_map);  				uniforms.push_back(u);  			} @@ -681,11 +688,11 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  				u.binding = 4; -				u.append_id(p_settings.vfog->light_map); +				u.append_id(fog->light_map);  				uniforms.push_back(u);  			} -			p_settings.vfog->fog_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.default_shader_rd, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS); +			fog->fog_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.default_shader_rd, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);  		}  		RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin(); @@ -720,9 +727,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			any_uses_time |= shader_data->uses_time; -			Vector3i min = Vector3i(); -			Vector3i max = Vector3i(); -			Vector3i kernel_size = Vector3i(); +			Vector3i min; +			Vector3i max; +			Vector3i kernel_size;  			Vector3 position = fog_volume_instance->transform.get_origin();  			RS::FogVolumeShape volume_type = RendererRD::Fog::get_singleton()->fog_volume_get_shape(fog_volume); @@ -731,7 +738,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			if (volume_type != RS::FOG_VOLUME_SHAPE_WORLD) {  				// Local fog volume.  				Vector3i points[8]; -				Vector3 fog_size = Vector3(p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +				Vector3 fog_size = Vector3(fog->width, fog->height, fog->depth);  				float volumetric_fog_detail_spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env);  				points[0] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(extents.x, extents.y, extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);  				points[1] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(-extents.x, extents.y, extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform); @@ -742,7 +749,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				points[6] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(extents.x, -extents.y, -extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform);  				points[7] = _point_get_position_in_froxel_volume(fog_volume_instance->transform.xform(Vector3(-extents.x, -extents.y, -extents.z)), fog_end, fog_near_size, fog_far_size, volumetric_fog_detail_spread, fog_size, p_cam_transform); -				min = Vector3i(int32_t(p_settings.vfog->width) - 1, int32_t(p_settings.vfog->height) - 1, int32_t(p_settings.vfog->depth) - 1); +				min = Vector3i(int32_t(fog->width) - 1, int32_t(fog->height) - 1, int32_t(fog->depth) - 1);  				max = Vector3i(1, 1, 1);  				for (int j = 0; j < 8; j++) { @@ -753,9 +760,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				kernel_size = max - min;  			} else {  				// Volume type global runs on all cells -				extents = Vector3(p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +				extents = Vector3(fog->width, fog->height, fog->depth);  				min = Vector3i(0, 0, 0); -				kernel_size = Vector3i(int32_t(p_settings.vfog->width), int32_t(p_settings.vfog->height), int32_t(p_settings.vfog->depth)); +				kernel_size = Vector3i(int32_t(fog->width), int32_t(fog->height), int32_t(fog->depth));  			}  			if (kernel_size.x == 0 || kernel_size.y == 0 || kernel_size.z == 0) { @@ -777,7 +784,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shader_data->pipeline); -			RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->fog_uniform_set, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS); +			RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->fog_uniform_set, VolumetricFogShader::FogSet::FOG_SET_UNIFORMS);  			RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(VolumetricFogShader::FogPushConstant));  			RD::get_singleton()->compute_list_bind_uniform_set(compute_list, volumetric_fog.base_uniform_set, VolumetricFogShader::FogSet::FOG_SET_BASE);  			if (material->uniform_set.is_valid() && RD::get_singleton()->uniform_set_is_valid(material->uniform_set)) { // Material may not have a uniform set. @@ -795,7 +802,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		RD::get_singleton()->compute_list_end();  	} -	if (p_settings.vfog->process_uniform_set_density.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->process_uniform_set_density)) { +	if (fog->process_uniform_set_density.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->process_uniform_set_density)) {  		//re create uniform set if needed  		Vector<RD::Uniform> uniforms;  		Vector<RD::Uniform> copy_uniforms; @@ -875,7 +882,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::Uniform u;  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  			u.binding = 8; -			u.append_id(p_settings.vfog->light_density_map); +			u.append_id(fog->light_density_map);  			uniforms.push_back(u);  			copy_uniforms.push_back(u);  		} @@ -884,7 +891,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::Uniform u;  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  			u.binding = 9; -			u.append_id(p_settings.vfog->fog_map); +			u.append_id(fog->fog_map);  			uniforms.push_back(u);  		} @@ -892,7 +899,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::Uniform u;  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  			u.binding = 9; -			u.append_id(p_settings.vfog->prev_light_density_map); +			u.append_id(fog->prev_light_density_map);  			copy_uniforms.push_back(u);  		} @@ -909,7 +916,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::Uniform u;  			u.uniform_type = RD::UNIFORM_TYPE_UNIFORM_BUFFER;  			u.binding = 11; -			u.append_id(p_settings.voxel_gl_buffer); +			u.append_id(p_settings.voxel_gi_buffer);  			uniforms.push_back(u);  			copy_uniforms.push_back(u);  		} @@ -944,7 +951,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			RD::Uniform u;  			u.uniform_type = RD::UNIFORM_TYPE_TEXTURE;  			u.binding = 15; -			u.append_id(p_settings.vfog->prev_light_density_map); +			u.append_id(fog->prev_light_density_map);  			uniforms.push_back(u);  		}  		{ @@ -955,7 +962,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  			u.binding = 16; -			u.append_id(p_settings.vfog->density_map); +			u.append_id(fog->density_map);  			uniforms.push_back(u);  		}  		{ @@ -966,7 +973,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  			u.binding = 17; -			u.append_id(p_settings.vfog->light_map); +			u.append_id(fog->light_map);  			uniforms.push_back(u);  		} @@ -978,7 +985,7 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			u.uniform_type = RD::UNIFORM_TYPE_IMAGE;  #endif  			u.binding = 18; -			u.append_id(p_settings.vfog->emissive_map); +			u.append_id(fog->emissive_map);  			uniforms.push_back(u);  		} @@ -992,9 +999,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  			uniforms.push_back(u);  		} -		p_settings.vfog->copy_uniform_set = RD::get_singleton()->uniform_set_create(copy_uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY), 0); +		fog->copy_uniform_set = RD::get_singleton()->uniform_set_create(copy_uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY), 0); -		p_settings.vfog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0); +		fog->process_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);  		RID aux7 = uniforms.write[7].get_id(0);  		RID aux8 = uniforms.write[8].get_id(0); @@ -1002,17 +1009,17 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		uniforms.write[7].set_id(0, aux8);  		uniforms.write[8].set_id(0, aux7); -		p_settings.vfog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0); +		fog->process_uniform_set2 = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG), 0);  		uniforms.remove_at(8);  		uniforms.write[7].set_id(0, aux7); -		p_settings.vfog->process_uniform_set_density = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0); +		fog->process_uniform_set_density = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY), 0);  	} -	bool using_sdfgi = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_gi_inject(p_settings.env) > 0.0001 && RendererSceneRenderRD::get_singleton()->environment_get_sdfgi_enabled(p_settings.env) && (p_settings.sdfgi != nullptr); +	bool using_sdfgi = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_gi_inject(p_settings.env) > 0.0001 && RendererSceneRenderRD::get_singleton()->environment_get_sdfgi_enabled(p_settings.env) && (p_settings.sdfgi.is_valid());  	if (using_sdfgi) { -		if (p_settings.vfog->sdfgi_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(p_settings.vfog->sdfgi_uniform_set)) { +		if (fog->sdfgi_uniform_set.is_null() || !RD::get_singleton()->uniform_set_is_valid(fog->sdfgi_uniform_set)) {  			Vector<RD::Uniform> uniforms;  			{ @@ -1039,12 +1046,12 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  				uniforms.push_back(u);  			} -			p_settings.vfog->sdfgi_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI), 1); +			fog->sdfgi_uniform_set = RD::get_singleton()->uniform_set_create(uniforms, volumetric_fog.process_shader.version_get_shader(volumetric_fog.process_shader_version, VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI), 1);  		}  	} -	p_settings.vfog->length = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_length(p_settings.env); -	p_settings.vfog->spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env); +	fog->length = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_length(p_settings.env); +	fog->spread = RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_detail_spread(p_settings.env);  	VolumetricFogShader::ParamsUBO params; @@ -1079,9 +1086,9 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  	params.ambient_color[2] = ambient_color.b;  	params.sky_contribution = RendererSceneRenderRD::get_singleton()->environment_get_ambient_sky_contribution(p_settings.env); -	params.fog_volume_size[0] = p_settings.vfog->width; -	params.fog_volume_size[1] = p_settings.vfog->height; -	params.fog_volume_size[2] = p_settings.vfog->depth; +	params.fog_volume_size[0] = fog->width; +	params.fog_volume_size[1] = fog->height; +	params.fog_volume_size[2] = fog->depth;  	params.directional_light_count = p_directional_light_count; @@ -1149,19 +1156,19 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  	RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[using_sdfgi ? VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY_WITH_SDFGI : VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_DENSITY]); -	RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set_density, 0); +	RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set_density, 0);  	if (using_sdfgi) { -		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->sdfgi_uniform_set, 1); +		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->sdfgi_uniform_set, 1);  	} -	RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +	RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);  	RD::get_singleton()->compute_list_add_barrier(compute_list);  	// Copy fog to history buffer  	if (RendererSceneRenderRD::get_singleton()->environment_get_volumetric_fog_temporal_reprojection(p_settings.env)) {  		RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_COPY]); -		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->copy_uniform_set, 0); -		RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->copy_uniform_set, 0); +		RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);  		RD::get_singleton()->compute_list_add_barrier(compute_list);  	}  	RD::get_singleton()->draw_command_end_label(); @@ -1172,8 +1179,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		RENDER_TIMESTAMP("Filter Fog");  		RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FILTER]); -		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set, 0); -		RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set, 0); +		RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);  		RD::get_singleton()->compute_list_end();  		//need restart for buffer update @@ -1183,8 +1190,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  		compute_list = RD::get_singleton()->compute_list_begin();  		RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FILTER]); -		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set2, 0); -		RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, p_settings.vfog->depth); +		RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set2, 0); +		RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, fog->depth);  		RD::get_singleton()->compute_list_add_barrier(compute_list);  		RD::get_singleton()->draw_command_end_label(); @@ -1194,8 +1201,8 @@ void Fog::volumetric_fog_update(const VolumetricFogSettings &p_settings, const P  	RD::get_singleton()->draw_command_begin_label("Integrate Fog");  	RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, volumetric_fog.process_pipelines[VolumetricFogShader::VOLUMETRIC_FOG_PROCESS_SHADER_FOG]); -	RD::get_singleton()->compute_list_bind_uniform_set(compute_list, p_settings.vfog->process_uniform_set, 0); -	RD::get_singleton()->compute_list_dispatch_threads(compute_list, p_settings.vfog->width, p_settings.vfog->height, 1); +	RD::get_singleton()->compute_list_bind_uniform_set(compute_list, fog->process_uniform_set, 0); +	RD::get_singleton()->compute_list_dispatch_threads(compute_list, fog->width, fog->height, 1);  	RD::get_singleton()->compute_list_end(RD::BARRIER_MASK_RASTER); |