### Godot version

v4.2.beta1.official [b1371806a]

### System information

Ubuntu 22.04.3 LTS 22.04 - X11 - GLES3 (Compatibility) - AMD Radeon RX 560 Series (polaris11, LLVM 15.0.7, DRM 3.42, 5.15.0-88-generic) () - AMD Ryzen 3 1200 Quad-Core Processor (4 Threads)

### Issue description

![image](https://github.com/godotengine/godot/assets/1330325/7a986599-5a68-42a4-beb1-5d3b4bf7db6b)
![image](https://github.com/godotengine/godot/assets/1330325/e8b8546b-b47b-4add-9567-7f70709ab03c)

Culling 3D goes bellow 60 fps even with just about 50 simple animated models. With v4.2.dev6.official [57a6813bb] many more models can be spawned without fps drop. However, both versions do show high cpu usage for culling 3D. Without animations there's barely any usage.

### Steps to reproduce

Spawn models with animation with the Compatibility renderer.

### Minimal reproduction project

[CullMRP.zip](https://github.com/godotengine/godot/files/13400514/CullMRP.zip)

glBindBuffer(GL_ARRAY_BUFFER, p_mi->mesh->surfaces[p_surface]->skin_buffer);
	bool use_8_weights = p_mi->surfaces[p_surface].format_cache & RS::ARRAY_FLAG_USE_8_BONE_WEIGHTS;
	int skin_stride = sizeof(int16_t) * (use_8_weights ? 16 : 8);
	glEnableVertexAttribArray(RS::ARRAY_BONES);
	glVertexAttribIPointer(RS::ARRAY_BONES, 4, GL_UNSIGNED_SHORT, skin_stride, CAST_INT_TO_UCHAR_PTR(0));
	if (use_8_weights) {
		glEnableVertexAttribArray(11);
		glVertexAttribIPointer(11, 4, GL_UNSIGNED_SHORT, skin_stride, CAST_INT_TO_UCHAR_PTR(4 * sizeof(uint16_t)));
		glEnableVertexAttribArray(12);
		glVertexAttribPointer(12, 4, GL_UNSIGNED_SHORT, GL_TRUE, skin_stride, CAST_INT_TO_UCHAR_PTR(8 * sizeof(uint16_t)));
		glEnableVertexAttribArray(13);
		glVertexAttribPointer(13, 4, GL_UNSIGNED_SHORT, GL_TRUE, skin_stride, CAST_INT_TO_UCHAR_PTR(12 * sizeof(uint16_t)));
	} else {
		glEnableVertexAttribArray(RS::ARRAY_WEIGHTS);
		glVertexAttribPointer(RS::ARRAY_WEIGHTS, 4, GL_UNSIGNED_SHORT, GL_TRUE, skin_stride, CAST_INT_TO_UCHAR_PTR(4 * sizeof(uint16_t)));
	}
	glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, p_mi->surfaces[p_surface].vertex_buffer);
	glActiveTexture(GL_TEXTURE0);
	glBindTexture(GL_TEXTURE_2D, p_sk->transforms_texture);
	glBeginTransformFeedback(GL_POINTS);
	glDrawArrays(GL_POINTS, 0, p_mi->mesh->surfaces[p_surface]->vertex_count);
	glEndTransformFeedback();
	glDisableVertexAttribArray(RS::ARRAY_BONES);
	glDisableVertexAttribArray(RS::ARRAY_WEIGHTS);
	glDisableVertexAttribArray(RS::ARRAY_BONES + 2);
	glDisableVertexAttribArray(RS::ARRAY_WEIGHTS + 2);
	glBindVertexArray(0);
	glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0);
}
void MeshStorage::update_mesh_instances() {