Skip to content

Commit a5ccacd

Browse files
committed
Merge pull request #107820 from Meowcat285/master
Fix buffer size calculations in lightmapper_rd.cpp to account for element sizes
2 parents 5ecf36a + b16b3ea commit a5ccacd

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

modules/lightmapper_rd/lightmapper_rd.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -642,21 +642,30 @@ void LightmapperRD::_create_acceleration_structures(RenderingDevice *rd, Size2i
642642
}
643643

644644
{ //buffers
645-
vertex_buffer = rd->storage_buffer_create(vertex_array.size(), vertex_array.span().reinterpret<uint8_t>());
645+
vertex_buffer = rd->storage_buffer_create(vertex_array.size() * sizeof(Vertex), vertex_array.span().reinterpret<uint8_t>());
646646

647-
triangle_buffer = rd->storage_buffer_create(triangles.size(), triangles.span().reinterpret<uint8_t>());
647+
triangle_buffer = rd->storage_buffer_create(triangles.size() * sizeof(Triangle), triangles.span().reinterpret<uint8_t>());
648648

649-
r_triangle_indices_buffer = rd->storage_buffer_create(triangle_indices.size(), triangle_indices.span().reinterpret<uint8_t>());
649+
r_triangle_indices_buffer = rd->storage_buffer_create(triangle_indices.size() * sizeof(uint32_t), triangle_indices.span().reinterpret<uint8_t>());
650650

651-
r_cluster_indices_buffer = rd->storage_buffer_create(cluster_indices.size(), cluster_indices.span().reinterpret<uint8_t>());
651+
r_cluster_indices_buffer = rd->storage_buffer_create(cluster_indices.size() * sizeof(uint32_t), cluster_indices.span().reinterpret<uint8_t>());
652652

653-
r_cluster_aabbs_buffer = rd->storage_buffer_create(cluster_aabbs.size(), cluster_aabbs.span().reinterpret<uint8_t>());
653+
r_cluster_aabbs_buffer = rd->storage_buffer_create(cluster_aabbs.size() * sizeof(ClusterAABB), cluster_aabbs.span().reinterpret<uint8_t>());
654654

655-
lights_buffer = rd->storage_buffer_create(lights.size() * sizeof(Light), lights.span().reinterpret<uint8_t>());
655+
// Even when there are no lights, the buffer must exist.
656+
static const Light empty_lights[1];
657+
Span<uint8_t> lb = (lights.is_empty() ? Span(empty_lights) : lights.span()).reinterpret<uint8_t>();
658+
lights_buffer = rd->storage_buffer_create(lb.size(), lb);
656659

657-
seams_buffer = rd->storage_buffer_create(seam_buffer_vec.size() * sizeof(Vector2i) * 2, seam_buffer_vec.span().reinterpret<uint8_t>());
660+
// Even when there are no seams, the buffer must exist.
661+
static const Vector2i empty_seams[2];
662+
Span<uint8_t> sb = (seam_buffer_vec.is_empty() ? Span(empty_seams) : seam_buffer_vec.span()).reinterpret<uint8_t>();
663+
seams_buffer = rd->storage_buffer_create(sb.size(), sb);
658664

659-
probe_positions_buffer = rd->storage_buffer_create(p_probe_positions.size() * sizeof(Probe), p_probe_positions.span().reinterpret<uint8_t>());
665+
// Even when there are no probes, the buffer must exist.
666+
static const Probe empty_probes[1];
667+
Span<uint8_t> pb = (p_probe_positions.is_empty() ? Span(empty_probes) : p_probe_positions.span()).reinterpret<uint8_t>();
668+
probe_positions_buffer = rd->storage_buffer_create(pb.size(), pb);
660669
}
661670

662671
{ //grid

0 commit comments

Comments
 (0)