Improved safety features to avoid GPU crashes
This commit is contained in:
@@ -1347,8 +1347,8 @@ namespace wi::scene
|
||||
|
||||
const uint64_t alignment = device->GetMinOffsetAlignment(&desc) * sizeof(Vertex_POS32); // additional alignment for RGB32F
|
||||
desc.size =
|
||||
AlignTo(vertex_positions.size() * sizeof(Vertex_POS32), alignment) + // pos
|
||||
AlignTo(vertex_positions.size() * sizeof(Vertex_POS32), alignment) + // prevpos
|
||||
AlignTo(vertex_positions.size() * sizeof(Vertex_POS32W), alignment) + // pos
|
||||
AlignTo(vertex_positions.size() * sizeof(Vertex_POS32W), alignment) + // prevpos
|
||||
AlignTo(vertex_normals.size() * sizeof(Vertex_NOR), alignment) +
|
||||
AlignTo(vertex_tangents.size() * sizeof(Vertex_TAN), alignment)
|
||||
;
|
||||
@@ -1360,18 +1360,18 @@ namespace wi::scene
|
||||
uint64_t buffer_offset = 0ull;
|
||||
|
||||
so_pos.offset = buffer_offset;
|
||||
so_pos.size = vertex_positions.size() * sizeof(Vertex_POS32);
|
||||
so_pos.size = vertex_positions.size() * sizeof(Vertex_POS32W);
|
||||
buffer_offset += AlignTo(so_pos.size, alignment);
|
||||
so_pos.subresource_srv = device->CreateSubresource(&streamoutBuffer, SubresourceType::SRV, so_pos.offset, so_pos.size, &Vertex_POS32::FORMAT);
|
||||
so_pos.subresource_uav = device->CreateSubresource(&streamoutBuffer, SubresourceType::UAV, so_pos.offset, so_pos.size); // UAV can't have RGB32_F format!
|
||||
so_pos.subresource_srv = device->CreateSubresource(&streamoutBuffer, SubresourceType::SRV, so_pos.offset, so_pos.size, &Vertex_POS32W::FORMAT);
|
||||
so_pos.subresource_uav = device->CreateSubresource(&streamoutBuffer, SubresourceType::UAV, so_pos.offset, so_pos.size, &Vertex_POS32W::FORMAT); // UAV can't have RGB32_F format!
|
||||
so_pos.descriptor_srv = device->GetDescriptorIndex(&streamoutBuffer, SubresourceType::SRV, so_pos.subresource_srv);
|
||||
so_pos.descriptor_uav = device->GetDescriptorIndex(&streamoutBuffer, SubresourceType::UAV, so_pos.subresource_uav);
|
||||
|
||||
so_pre.offset = buffer_offset;
|
||||
so_pre.size = so_pos.size;
|
||||
buffer_offset += AlignTo(so_pre.size, alignment);
|
||||
so_pre.subresource_srv = device->CreateSubresource(&streamoutBuffer, SubresourceType::SRV, so_pre.offset, so_pre.size, &Vertex_POS32::FORMAT);
|
||||
so_pre.subresource_uav = device->CreateSubresource(&streamoutBuffer, SubresourceType::UAV, so_pre.offset, so_pre.size); // UAV can't have RGB32_F format!
|
||||
so_pre.subresource_srv = device->CreateSubresource(&streamoutBuffer, SubresourceType::SRV, so_pre.offset, so_pre.size, &Vertex_POS32W::FORMAT);
|
||||
so_pre.subresource_uav = device->CreateSubresource(&streamoutBuffer, SubresourceType::UAV, so_pre.offset, so_pre.size, &Vertex_POS32W::FORMAT); // UAV can't have RGB32_F format!
|
||||
so_pre.descriptor_srv = device->GetDescriptorIndex(&streamoutBuffer, SubresourceType::SRV, so_pre.subresource_srv);
|
||||
so_pre.descriptor_uav = device->GetDescriptorIndex(&streamoutBuffer, SubresourceType::UAV, so_pre.subresource_uav);
|
||||
|
||||
@@ -1441,8 +1441,8 @@ namespace wi::scene
|
||||
geometry.triangles.vertex_count = (uint32_t)vertex_positions.size();
|
||||
if (so_pos.IsValid())
|
||||
{
|
||||
geometry.triangles.vertex_format = Vertex_POS32::FORMAT;
|
||||
geometry.triangles.vertex_stride = sizeof(Vertex_POS32);
|
||||
geometry.triangles.vertex_format = Format::R32G32B32_FLOAT;
|
||||
geometry.triangles.vertex_stride = sizeof(Vertex_POS32W);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user