)]}'
{
  "commit": "7868bf37d5b22345a6039fe03803243a8cff77e9",
  "tree": "6cbf04e98b782c76feb242c351efdcdd295933b9",
  "parents": [
    "2e6a6966558f58eef641035f8977ee1db5764ffc"
  ],
  "author": {
    "name": "linesight",
    "email": "ted.lin0000@gmail.com",
    "time": "Mon Jun 29 16:16:13 2026 -0700"
  },
  "committer": {
    "name": "swiftshader-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "swiftshader-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Tue Jun 30 19:54:58 2026 -0700"
  },
  "message": "Vulkan: Fix and harden Wayland WSI presentation\n\nSwiftShader\u0027s Wayland WSI dlsym\u0027d the Wayland protocol request functions\n(wl_display_get_registry, wl_registry_bind, wl_surface_*, wl_shm_*, ...).\nThese are not exported by libwayland-client.so; they are static inline\nwrappers in \u003cwayland-client-protocol.h\u003e that marshal through the\nwl_proxy_* primitives. dlsym therefore returned nullptr and the first\ncall crashed, which prevented running e.g. ANGLE\u0027s EGLWaylandTest against\nSwiftShader.\n\nResolve the real exported primitives (wl_proxy_marshal_flags,\nwl_proxy_add_listener, wl_proxy_destroy, wl_proxy_get_version, the\nevent-queue functions) and the wl_*_interface data symbols, and\nre-implement the needed protocol wrappers on top of them. isSupported()\nnow requires every needed symbol so a stripped libwayland reports the\nsurface as unsupported instead of crashing.\n\nAlso fix correctness and robustness of presentation:\n\n- Run all WSI traffic on a private wl_event_queue (created via a\n  queue-assigned proxy wrapper of the application\u0027s display) so the\n  driver\u0027s roundtrips/dispatches don\u0027t steal the application\u0027s events.\n\n- Track wl_buffer.release and double-buffer each presentable image,\n  alternating buffers per present. The swapchain marks an image AVAILABLE\n  as soon as it is presented, so a client may re-present the same image\n  every frame; committing the same wl_buffer would deadlock (a compositor\n  only releases a buffer once a different one is committed) and\n  overwriting it would tear.\n\n- Back buffers with memfd_create (falling back to an unlinked temp file)\n  instead of leaking files under /tmp, replace asserts with graceful\n  VkResult failures, free the registry/shm/queue in destroySurface(), and\n  validate the swapchain format.\n\nChange-Id: Ie2b3b1ce6a39d5e08714046fa1ba7ed798b7c76c\nReviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/77548\nReviewed-by: Yuly Novikov \u003cynovikov@chromium.org\u003e\nReviewed-by: Shahbaz Youssefi \u003csyoussefi@google.com\u003e\nTested-by: Shahbaz Youssefi \u003csyoussefi@google.com\u003e\nCommit-Queue: Shahbaz Youssefi \u003csyoussefi@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c2da3aed07810988daf44ecb94db8a058f8a6223",
      "old_mode": 33188,
      "old_path": "src/WSI/WaylandSurfaceKHR.cpp",
      "new_id": "f2055ab1bacbf990d9ea3739d1ea626110d0369b",
      "new_mode": 33188,
      "new_path": "src/WSI/WaylandSurfaceKHR.cpp"
    },
    {
      "type": "modify",
      "old_id": "09119ebf63f4ec5f94f5fe5e47dc817f3dd43272",
      "old_mode": 33188,
      "old_path": "src/WSI/WaylandSurfaceKHR.hpp",
      "new_id": "614179311456fe4fec58431b7810179aa61da4b1",
      "new_mode": 33188,
      "new_path": "src/WSI/WaylandSurfaceKHR.hpp"
    },
    {
      "type": "modify",
      "old_id": "b0dc1afb6606461016b4582ad19831c0ca0f460e",
      "old_mode": 33188,
      "old_path": "src/WSI/libWaylandClient.cpp",
      "new_id": "a0926b7281554184ab94852ab01d596fd34a6750",
      "new_mode": 33188,
      "new_path": "src/WSI/libWaylandClient.cpp"
    },
    {
      "type": "modify",
      "old_id": "d0a31a2bb16a92d6e1bc6c5814ad8cc3c6dfe686",
      "old_mode": 33188,
      "old_path": "src/WSI/libWaylandClient.hpp",
      "new_id": "0e69710732b2ad01894a0e60bbea5788d9456244",
      "new_mode": 33188,
      "new_path": "src/WSI/libWaylandClient.hpp"
    }
  ]
}
