vkd3d: Fix out of range in UpdateTileMappings

Previously this incremented and indexed before the loop checked this.

Signed-off-by: Joshua Ashton <joshua@froggi.es>
This commit is contained in:
Joshua Ashton 2021-03-16 18:24:40 +00:00
parent fd466058f0
commit 4a7686d5dc
No known key found for this signature in database
GPG Key ID: C85A08669126BE8D
1 changed files with 18 additions and 12 deletions

View File

@ -8911,6 +8911,24 @@ static void STDMETHODCALLTYPE d3d12_command_queue_UpdateTileMappings(ID3D12Comma
while (region_idx < region_count && range_idx < range_count)
{
if (range_tile == range_size)
{
if (range_flags)
range_flag = range_flags[range_idx];
range_size = range_tile_counts[range_idx];
range_offset = heap_range_offsets[range_idx];
}
if (region_tile == region_size.NumTiles)
{
if (region_coords)
region_coord = region_coords[region_idx];
if (region_sizes)
region_size = region_sizes[region_idx];
}
if (range_flag != D3D12_TILE_RANGE_FLAG_SKIP)
{
unsigned int tile_index = vkd3d_get_tile_index_from_region(sparse, &region_coord, &region_size, region_tile);
@ -8950,24 +8968,12 @@ static void STDMETHODCALLTYPE d3d12_command_queue_UpdateTileMappings(ID3D12Comma
{
range_idx += 1;
range_tile = 0;
if (range_flags)
range_flag = range_flags[range_idx];
range_size = range_tile_counts[range_idx];
range_offset = heap_range_offsets[range_idx];
}
if (++region_tile == region_size.NumTiles)
{
region_idx += 1;
region_tile = 0;
if (region_coords)
region_coord = region_coords[region_idx];
if (region_sizes)
region_size = region_sizes[region_idx];
}
}