- wl_surface_damage(chain->surface, 0, 0, INT32_MAX, INT32_MAX);
+
+ if (chain->surface_version >= 4 && damage &&
+ damage->pRectangles && damage->rectangleCount > 0) {
+ for (unsigned i = 0; i < damage->rectangleCount; i++) {
+ const VkRectLayerKHR *rect = &damage->pRectangles[i];
+ assert(rect->layer == 0);
+ wl_surface_damage_buffer(chain->surface,
+ rect->offset.x, rect->offset.y,
+ rect->extent.width, rect->extent.height);
+ }
+ } else {
+ wl_surface_damage(chain->surface, 0, 0, INT32_MAX, INT32_MAX);
+ }