### Godot version

4.0.beta10.official [d0398f62f]

### System information

Windows 10, Vulkan, NVIDIA GeForce RTX 2060m (31.0.15.2698)

### Issue description

I'm getting some kind of clustering/blocky artifact when using spotlights, with no fog or any fancy rendering stuff whatsoever.
I've looked through a bunch of similar issues, but the only ones I could find were related to volumetric fog or other environment effects that I am not using.
Not sure if I'm just missing something, but I think I've played with every option in the spotlight and every option in a WorldEnvironment and nothing makes it go away.

The only lead I have is that the intensity of the artifact seems to be affected by the spot angle. It cycles in a sawtooth pattern every ~0.07 degrees.

![image](https://user-images.githubusercontent.com/13819558/209914720-77a637ea-8cc7-4cff-8216-363f9150885a.png)

Lmk if you need more info or need me to try anything.

### Steps to reproduce

1. New Project (Forward+)
2. Put down some MeshInstance3Ds as a backdrop
3. Put a SpotLight3D
4. Raise spotlight intensity, lower spot angle, and increase range to see it better
5. Slowly increase spot angle to see cycling effect

### Minimal reproduction project

[testspotlight.zip](https://github.com/godotengine/godot/files/10318069/testspotlight.zip)

i += instances;
			}
			RD::get_singleton()->draw_list_end(RD::BARRIER_MASK_COMPUTE);
		}
		
		RENDER_TIMESTAMP("Pack 3D Cluster Elements");
		{
			RD::ComputeListID compute_list = RD::get_singleton()->compute_list_begin();
			RD::get_singleton()->compute_list_bind_compute_pipeline(compute_list, shared->cluster_store.shader_pipeline);
			RD::get_singleton()->compute_list_bind_uniform_set(compute_list, cluster_store_uniform_set, 0);
			ClusterBuilderSharedDataRD::ClusterStore::PushConstant push_constant;
			push_constant.cluster_render_data_size = render_element_max / 32 + render_element_max;
			push_constant.max_render_element_count_div_32 = render_element_max / 32;
			push_constant.cluster_screen_size[0] = cluster_screen_size.x;
			push_constant.cluster_screen_size[1] = cluster_screen_size.y;
			push_constant.render_element_count_div_32 = render_element_count > 0 ? (render_element_count - 1) / 32 + 1 : 0;
			push_constant.max_cluster_element_count_div_32 = max_elements_by_type / 32;
			push_constant.pad1 = 0;
			push_constant.pad2 = 0;
			RD::get_singleton()->compute_list_set_push_constant(compute_list, &push_constant, sizeof(ClusterBuilderSharedDataRD::ClusterStore::PushConstant));
			RD::get_singleton()->compute_list_dispatch_threads(compute_list, cluster_screen_size.x, cluster_screen_size.y, 1);
			RD::get_singleton()->compute_list_end(RD::BARRIER_MASK_RASTER | RD::BARRIER_MASK_COMPUTE);
		}
	} else {
		RD::get_singleton()->barrier(RD::BARRIER_MASK_TRANSFER, RD::BARRIER_MASK_RASTER | RD::BARRIER_MASK_COMPUTE);
	}
	RENDER_TIMESTAMP("< Bake 3D Cluster");
	RD::get_singleton()->draw_command_end_label();
}
void ClusterBuilderRD::debug(ElementType p_element) {