message: Only check miptail parameters for compatibility when mip tail is present
diff: @@ -748,20 +748,23 @@ SparseBinding::SparseBinding(WrappedVulkan *vk, VkImage unwrappedImage,
  const Sparse::MipTail &mipTail = table.getMipTail();
  // can't apply if the mip tail is differently shaped/sized
  - if(mipTail.byteOffset != reqs[a].imageMipTailOffset)
  + if(mipTail.firstMip != RDCMIN(table.getMipCount(), reqs[a].imageMipTailFirstLod))
  {
  - RDCERR("Captured mip tail for %s begins at offset %llu, on replay it begins at %llu",
  - ToStr((VkImageAspectFlagBits)tables[a].aspectMask).c_str(), mipTail.byteOffset,
  - reqs[a].imageMipTailOffset);
  + RDCERR("Captured mip tail for %s begins at mip %u, on replay it begins at %u",
  + ToStr((VkImageAspectFlagBits)tables[a].aspectMask).c_str(), mipTail.firstMip,
  + reqs[a].imageMipTailFirstLod);
  invalid = true;
  return;
  }
  - if(mipTail.firstMip != RDCMIN(table.getMipCount(), reqs[a].imageMipTailFirstLod))
  + // if we have a miptail, check its parameters
  + if(mipTail.firstMip < table.getMipCount())
  {
  - RDCERR("Captured mip tail for %s begins at mip %u, on replay it begins at %u",
  - ToStr((VkImageAspectFlagBits)tables[a].aspectMask).c_str(), mipTail.firstMip,
  - reqs[a].imageMipTailFirstLod);
  + if(mipTail.byteOffset != reqs[a].imageMipTailOffset)
  + {
  + RDCERR("Captured mip tail for %s begins at offset %llu, on replay it begins at %llu",
  + ToStr((VkImageAspectFlagBits)tables[a].aspectMask).c_str(), mipTail.byteOffset,
  + reqs[a].imageMipTailOffset);
  invalid = true;
  return;
  }
  @@ -792,6 +795,7 @@ SparseBinding::SparseBinding(WrappedVulkan *vk, VkImage unwrappedImage,
  return;
  }
  }
  + }
  {
  VkSparseImageMemoryBind bind = {};
  