### Godot version

v4.1.1.stable.official [bd6af8e0e]

### System information

Godot v4.1.1.stable - Ubuntu 22.04.2 LTS 22.04 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 980 (nvidia; 535.54.03) - Intel(R) Core(TM) i5-4670 CPU @ 3.40GHz (4 Threads)

### Issue description

I'm trying to migrate a project from Godot 3 to 4, but I'm running into an apparent showstopper: The project relies on some fancy 2d shaders based on `PRIMITIVE_POINTS` meshes in combination with adjusting the `POINT_SIZE` in the vertex shader (amongst other things, see the nice [Antialiased 2D Grid, Marker, and Arrow Shaders](https://jcgt.org/published/0003/04/01/paper.pdf) paper for motivation).

This used to work well under Godot 3, but unfortunately it looks like it is no longer possible in Godot 4. The approach relies on being able to set the `POINT_SIZE` in the vertex shader. Reduced to its minimal form:

```glsl
shader_type canvas_item;

void vertex() {
    // The vertex shader should be able to control the point size.
    POINT_SIZE = 10.0;
}

void fragment() {
    COLOR = vec4(1.0, 0.0, 0.0, 1.0);
}
```

Using this minimal bootstrap code:

```gdscript
extends Node2D

func _ready():

    var points = PackedVector2Array()
    points.push_back(Vector2(10, 30))
    points.push_back(Vector2(100, 100))
    points.push_back(Vector2(30, 10))

    var arrays = []
    arrays.resize(ArrayMesh.ARRAY_MAX)
    arrays[ArrayMesh.ARRAY_VERTEX] = points

    var mesh = ArrayMesh.new()
    mesh.add_surface_from_arrays(Mesh.PRIMITIVE_POINTS, arrays)

    var mesh_instance = MeshInstance2D.new()
    mesh_instance.mesh = mesh
    mesh_instance.material = load("res://shader_material.tres")

    add_child(mesh_instance)
```

the output in Godot 4 is:

![image](https://github.com/godotengine/godot/assets/3620703/7e0d0a44-ab2c-4cfc-89e0-5a3a55b86fd2)

Notice that the three points are just single pixels.

Doing the same in Godot 3 (of course replacing `PackedVector2Array` by `PoolVector2Array`) has the expected outcome, i.e., setting `POINT_SIZE` is not ignored:

![image](https://github.com/godotengine/godot/assets/3620703/ffbebd60-6354-4827-9645-bd28839ee53d)


### Steps to reproduce

Basically as already described above.

### Minimal reproduction project

[ShaderPointSize.zip](https://github.com/godotengine/godot/files/12266592/ShaderPointSize.zip)

Or on GitHub:
- [Godot 4 version reproduction example](https://github.com/bluenote10/GodotDebugProjects/tree/master/Godot4/ShaderPointSize) (having the issue)
- [Godot 3 version reproduction example](https://github.com/bluenote10/GodotDebugProjects/tree/master/Godot3/ShaderPointSize) (working fine)
state.light_uniforms[index].shadow_pixel_size = 1.0;
				state.light_uniforms[index].shadow_z_far_inv = 1.0;
				state.light_uniforms[index].shadow_y_ofs = 0;
			}
			state.light_uniforms[index].flags = l->blend_mode << LIGHT_FLAGS_BLEND_SHIFT;
			state.light_uniforms[index].flags |= l->shadow_filter << LIGHT_FLAGS_FILTER_SHIFT;
			if (clight->shadow.enabled) {
				state.light_uniforms[index].flags |= LIGHT_FLAGS_HAS_SHADOW;
			}
			if (clight->texture.is_valid()) {
				Rect2 atlas_rect = RendererRD::TextureStorage::get_singleton()->decal_atlas_get_texture_rect(clight->texture);
				state.light_uniforms[index].atlas_rect[0] = atlas_rect.position.x;
				state.light_uniforms[index].atlas_rect[1] = atlas_rect.position.y;
				state.light_uniforms[index].atlas_rect[2] = atlas_rect.size.width;
				state.light_uniforms[index].atlas_rect[3] = atlas_rect.size.height;
			} else {
				state.light_uniforms[index].atlas_rect[0] = 0;
				state.light_uniforms[index].atlas_rect[1] = 0;
				state.light_uniforms[index].atlas_rect[2] = 0;
				state.light_uniforms[index].atlas_rect[3] = 0;
			}
			l->render_index_cache = index;
			index++;
			l = l->next_ptr;
		}
		light_count = index;
	}
	if (light_count > 0) {
		RD::get_singleton()->buffer_update(state.lights_uniform_buffer, 0, sizeof(LightUniform) * light_count, &state.light_uniforms[0]);
	}