Giovanni Mascellani (@giomasce) commented about libs/vkd3d/resource.c:
- unsigned int subresource_count;
- subresource_count = d3d12_resource_desc_get_sub_resource_count(&resource->desc);
- if (d3d12_resource_is_buffer(resource))
- {
if (!(resource->tiles.subresources = vkd3d_calloc(subresource_count, sizeof(*resource->tiles.subresources))))
{
ERR("Failed to allocate subresource info array.\n");
return false;
}
tile_info = &resource->tiles.subresources[0];
tile_info->offset = 0;
tile_info->extent.width = align(resource->desc.Width, D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES)
/ D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES;
Maybe I'm missing something, but it seems we're assuming that buffers always have a residency granularity of 64kB, while that's not mandated by Vulkan. `vkGetBufferMemoryRequirement()` should be used to check it, as far as I can understand.