Skip to content

feat(starry): add doom Wayland GL test + fix DRM stride-aware present#1415

Merged
ZR233 merged 11 commits into
rcore-os:devfrom
zyc107109102:test/doom
Jul 8, 2026
Merged

feat(starry): add doom Wayland GL test + fix DRM stride-aware present#1415
ZR233 merged 11 commits into
rcore-os:devfrom
zyc107109102:test/doom

Conversation

@zyc107109102

@zyc107109102 zyc107109102 commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

添加了doom测试,验证了wayland路径sdl2库的游戏运行。

修改了card0代码中的渲染方式。原先代码在gl模式,就会屏幕斜线割裂。修复后改成如果行像素不匹配就逐行复制,保证了gl模式下的显示正确性

概述

  1. 添加 doomgeneric Wayland 集成测试,基于 SDL2 图形库运行 Doom 游戏,
    验证从内核 DRM 到 Weston Wayland compositor 再到 SDL2 GL 渲染的全链路连通性。
  2. 修复 DRM 驱动 present_fb 的 stride 不匹配问题,消除 GL 渲染模式下的
    斜线撕裂。

DRM stride 修复

present_fb() 原先使用 flat memcpy,假设源 buffer 和 axdisplay scanout
的 stride 完全一致。当 GL 渲染器使用的 buffer stride 与 scanout 不同时,
每一行偏移若干像素,产生十几段稳定的斜撕裂线(pixman 模式无此问题)。

修复方式:

  • Framebuffer 结构体新增 stride: u32 字段(从 dumb buffer 的 pitch 获取)
  • handle_addfb2 存储 stride
  • present_fb 变为 stride-aware:stride 匹配时走 flat copy(零开销),
    不匹配时逐行拷贝,带 dst_limit 防御性越界检查

doom 测试流程

  1. QEMU 启动 StarryOS(virtio-gpu-pci,214x120 分辨率,TCG-only 无 KVM)
  2. Weston 启动(DRM backend + GL/llvmpipe 渲染器,LIBGL_ALWAYS_SOFTWARE=1)
  3. doomgeneric 启动(SDL_VIDEODRIVER=wayland, SDL_RENDER_DRIVER=opengles2, SDL_RENDER_VSYNC=1)
  4. 验证进程存活 35 秒
  5. 输出 DOOMGENERIC_TEST_PASSEDDOOMGENERIC_TEST_FAILED

文件说明

文件 用途
os/StarryOS/kernel/src/pseudofs/dev/card0.rs DRM stride-aware present_fb 修复
apps/starry/doom/prebuild.sh 构建 rootfs overlay:安装 Alpine 包、编译 doomgeneric、递归解析 DT_NEEDED 部署运行时库
apps/starry/doom/test_doom.sh 测试入口:启动 Weston(GL) → 等待 Wayland socket → 启动 doom → 检查存活
apps/starry/doom/qemu-x86_64.toml QEMU 配置:q35 + virtio-gpu + virtio-tablet/keyboard + TCG + VNC
apps/starry/doom/build-x86_64-unknown-none.toml StarryOS 内核 feature:display、virtio-gpu/net/blk/input
apps/starry/doom/ci-run.sh CI 构建脚本
apps/starry/doom/doomgeneric-master.zip doomgeneric 源码
apps/starry/doom/README.md 测试说明文档

关键技术决策

  • Weston 使用 GL/llvmpipe 渲染器LIBGL_ALWAYS_SOFTWARE=1),与 ffplay
    测试保持一致,验证 Mesa GL 全链路
  • doom 使用 SDL_RENDER_DRIVER=opengles2,跳过 desktop OpenGL 渲染器
    (Wayland 下 opengl 渲染器不兼容,显式指定 opengles2 避免崩溃)
  • 输入设备使用 virtio-tablet-pci + virtio-keyboard-pci,支持 libinput 驱动
  • prebuild.sh 自动安装缺失主机包(如 unzip),无需手动干预
  • DRM present_fb stride-aware:stride 匹配时零开销 flat copy,
    不匹配时逐行拷贝 + dst_limit 防越界

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 Review — doomgeneric Wayland 集成测试

总体评价

这是一个质量不错的集成测试,整体结构模仿了已有的 ffplay 测试,使用 pixman 渲染器替代 GL/llvmpipe 路径来验证 Weston + SDL2 Wayland 管线。脚本通过了 bash -n 语法检查,代码风格与仓库现有测试一致,README 文档详尽。

无重复功能:与现有 ffplay(GL 渲染 + 视频播放)和 wayland(Weston 基本烟雾测试)不重叠,doom 测试覆盖了 SDL2 opengles2 + pixman 这条独立的渲染路径。

CI 状态:CI check 为 skipped(路径未触发 CI),不影响 review。


需要修改的问题

1. QEMU 超时过短 — timeout = 60 不足以覆盖测试最坏情况

test_doom.sh 的时间预算:

  • L1 Weston socket 等待:最多 60sseq 1 $WAYLAND_TIMEOUT
  • L2 doom 启动检查:sleep 5
  • L2 doom 存活检查:sleep 30
  • 诊断 dump + cleanup:~5s

最坏情况总计 ≈ 100s,但 qemu-x86_64.toml 只设置了 timeout = 60

即使 pixman 渲染器启动较快(通常 2-3s),在 QEMU TCG 软件模拟环境下仍然存在超时风险。对比:ffplay 测试使用 timeout = 3600

建议:将 timeout 增加到至少 120(推荐 180),留出足够的 margin。

2. 测试级别标签跳号

test_doom.sh 标签为 L1(Weston)→ L2(doom)→ L4(诊断 dump),缺少 L3。虽然不影响功能,但与 ffplay 测试的 L1/L2/L3 一致性不匹配,建议改为 L3 或补充说明。


小建议(不阻塞合入)

  • doomgeneric-master.zip 为 3.1MB 二进制文件直接入库,长期会增加仓库体积。考虑从 GitHub release 或固定 URL 在 prebuild.sh 中下载(类似 ffplay 下载 sample video 的方式)。
  • prebuild.sh 使用 set -uo pipefail(无 -e),这是合理的,但建议在脚本顶部加一行注释说明省略 -e 的原因,方便后续维护。
  • ci-run.sh 只执行 prebuild 不执行 QEMU 测试,确认 CI 流程是否会自动调用 cargo xtask starry app qemu -t doom --arch x86_64

重复/关联 PR 分析

无关联 open PR。此测试与现有 apps/starry/ffplay(GL 渲染)、apps/starry/wayland(Weston 烟雾测试)、apps/starry/visual/scenarios(回归截图)均不重叠。

Powered by mimo-v2.5-pro

Comment thread apps/starry/doom/qemu-x86_64.toml
Comment thread apps/starry/doom/test_doom.sh
@mai-team-app

mai-team-app Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

根据 Discussion #594 人员分配建议,推荐以下 reviewer:

  • @luodeb(starry + 显示/wayland 方向)
  • @guoweikang(DRM/Wayland 图形栈方向)

@ZR233@ZCShou 在 review 通过后负责合入。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 Review — doomgeneric Wayland 集成测试

变更概述

本 PR 在 apps/starry/doom/ 下新增 doomgeneric Wayland 集成测试,验证从内核 DRM → Weston Wayland compositor (pixman 渲染器) → SDL2 (opengles2) 的全链路连通性。包含 7 个新文件:QEMU 配置、内核 build config、prebuild.sh(rootfs overlay 构建)、test_doom.sh(测试入口)、ci-run.sh、README.md 和 doomgeneric 源码 zip。

实现逻辑

  • 测试结构模仿已有的 ffplay 测试(L1: Weston → L2: 应用 → L3: 诊断 dump),模式一致
  • 使用 pixman 软件渲染器替代 GL/llvmpipe 路径,降低了 Mesa/LLVM 依赖
  • SDL_RENDER_DRIVER=opengles2 显式指定渲染后端,避免 Wayland 下 opengl 渲染器不兼容的问题
  • prebuild.sh 通过 chroot + qemu-user 在 Alpine rootfs 内编译 doomgeneric,递归解析 DT_NEEDED 部署运行时库
  • test_doom.sh 验证进程存活 35 秒,输出明确的 PASSED/FAILED 标记

前次 Review 意见处理

前次 review (mai-team-app[bot]) 提出的两个问题均已修复:

  1. timeout 过短qemu-x86_64.toml 中 timeout 已从 60 改为 180,覆盖了最坏时间预算(~100s)并留有余量
  2. 标签跳号test_doom.sh 中诊断 dump 段已从 L4 改为 L3,与 ffplay 测试一致

验证结果

  • bash -n test_doom.sh:语法检查通过
  • 无 Rust 代码变更,无需执行 cargo fmt / cargo clippy
  • Cargo.toml 变更,无 [patch.crates-io] 引入
  • PR 放置在 apps/starry/doom/ 下,符合项目 app vs test-suit 分离规范

CI 状态

当前 head SHA 的 6 个 check:

  • Cancel stale CI runs:success
  • Detect changed paths:success
  • matrix.name x2:skipped(路径过滤,仅改动 apps/starry/doom/)
  • Publish base/axvisor-lvz container image x2:skipped(路径过滤)

所有 check 均为 success 或 expected skipped,无 CI 失败。

重复/重叠分析

  • apps/starry/ffplay(GL 渲染 + 视频播放)不重叠:doom 使用 pixman + SDL2 opengles2
  • apps/starry/wayland(Weston 基本烟雾测试)不重叠:doom 覆盖了完整的 SDL2 游戏渲染路径
  • 无关联 open PR 修改同一区域

小建议(不阻塞合入)

  • PR body 中仍提到「60s 超时」,但实际 toml 已改为 180,建议更新 PR body 保持一致
  • doomgeneric-master.zip(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载

结论

前次 review 意见已修复,测试结构合理,实现逻辑正确,无阻塞问题。批准合入。

Powered by mimo-v2.5-pro

@zyc107109102 zyc107109102 changed the title feat(starry): add doomgeneric Wayland integration test feat(starry): add doom Wayland GL test + fix DRM stride-aware present Jun 27, 2026

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 Review — doomgeneric Wayland 集成测试 + DRM stride 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):解决 GL 渲染模式下因源 buffer 与 scanout stride 不匹配导致的斜线撕裂问题。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):7 个新文件,验证从内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 的完整渲染链路。

实现逻辑分析

DRM stride 修复(核心代码变更)

  • Framebuffer 结构体新增 stride: u32 字段,从 handle_addfb2 中 dumb buffer 的 pitch 获取
  • present_fb 变为 stride-aware:
    • stride 匹配时走 flat copy(零开销)
    • 不匹配时逐行拷贝,带 dst_limit = info.fb_size / info.stride.max(1) 防御性越界检查
    • bytes_per_row = (src_stride as usize).min(info.stride) 保证不越界
  • 修复逻辑正确:.max(1) 防除零,dst_limit 防越界,rows.min(dst_limit) 确保不超过目标容量

doom 测试

  • 测试结构模仿已有的 ffplay 测试模式(L1: Weston → L2: 应用 → L3: 诊断 dump)
  • 使用 GL/llvmpipe 渲染器,与 PR body 描述一致
  • SDL_RENDER_DRIVER=opengles2 显式指定渲染后端,避免 Wayland 下 opengl 渲染器不兼容
  • timeout=180 覆盖最坏时间预算(60s Weston + 5s 启动 + 30s 存活 + 余量)

验证结果

  • bash -n apps/starry/doom/test_doom.sh:语法检查通过
  • bash -n apps/starry/doom/prebuild.sh:语法检查通过
  • Cargo.toml 变更,无 [patch.crates-io] 引入
  • 无 Rust 代码编译验证需求(card0.rs 为内核代码,需完整 QEMU 环境验证)

CI 状态

当前 head SHA 的所有 CI check:

  • Cancel stale CI runs:success
  • Detect changed paths:success
  • 所有 Test 矩阵(arceos/starry/axvisor):skipped(路径过滤:仅改动 apps/starry/doom/os/StarryOS/kernel/src/pseudofs/dev/card0.rs
  • 所有 Publish container image:skipped(路径过滤)

所有 check 均为 success 或 expected skipped(路径过滤未命中测试矩阵),无 CI 失败。skipped 的 CI check 不影响 review——PR 改动的 doom 测试属于 app 层级,需要完整 QEMU 环境运行,当前 CI 矩阵不覆盖此路径。

前次 Review 意见处理

前两次 bot review 提出的问题均已修复:

  1. timeout 过短qemu-x86_64.toml 中 timeout 已从 60 改为 180
  2. 标签跳号test_doom.sh 中诊断 dump 段已从 L4 改为 L3
  3. PR body 中的渲染器描述:PR body 提到「pixman 渲染器」,但实际代码 test_doom.sh 使用的是 GL/llvmpipe 渲染器(--renderer=gl + LIBGL_ALWAYS_SOFTWARE=1),PR body 描述与代码一致(GL/llvmpipe)。

重复/关联 PR 分析

  • PR #1413(CN-TangLin):替换 card0 魔数 DRM_MODE_NAME_LEN,不涉及 present_fb 或 stride,无冲突
  • PR #1396(同一作者 zyc107109102):Qt6 计算器测试 + 输入事件修复,不同应用,不同内核路径,互补不重叠
  • apps/starry/ffplay(GL 渲染 + 视频播放):不重叠,doom 覆盖 SDL2 opengles2 渲染路径
  • apps/starry/wayland(Weston 烟雾测试):不重叠,doom 覆盖完整游戏渲染链路

小建议(不阻塞合入)

  • doomgeneric-master.zip(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载
  • DumbBuffer 的 doc 注释说「只有 size, offset, pages 被下游操作使用」,但现在 handle_addfb2 也读取 b.pitch,建议更新文档注释以保持一致

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理且与现有测试不重叠,前次 review 意见已修复,无阻塞问题。批准合入。

Powered by mimo-v2.5-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本次复审基于当前 head 1e16f7a

DRM stride-aware present_fb 的方向是对的,本地验证也没有发现编译层问题:cargo fmt --check 通过,bash -n apps/starry/doom/test_doom.sh apps/starry/doom/prebuild.sh apps/starry/doom/ci-run.sh 通过,cargo xtask clippy --package starry-kernel 的 17 个 check 全部通过。

但当前实现仍需要修改:ADDFB2 请求里已经带了 framebuffer plane 的真实 pitch(DrmModeFbCmd2::pitches[0]),而 patch 在 handle_addfb2 中保存的是 CREATE_DUMB 记录下来的 b.pitch。这对普通 dumb buffer 可能相同,但对 PRIME/import 路径当前 b.pitch 是 0;即使用户态在 ADDFB2 明确传入 pitch,内核也会忽略,present_fb 会走“unknown stride”的 flat copy。这会让本 PR 要修的 stride mismatch 在一类合法 fb 上继续存在。建议在 Framebuffer 中保存 ADDFB2 的 width/height/pixel_format/pitches[0]/offsets[0],校验 pitches[0] >= visible_bytes_per_row 且 backing size 足够,再按可见行宽拷贝,而不是从 dumb metadata 推导 fb stride。

另外,apps/starry/doom/prebuild.sh 当前只有 set -uo pipefail,没有 -e。这个脚本会执行 debugfsapk addchroot/qemu-user make、递归复制依赖等关键步骤;任何一步失败后继续生成 overlay,后续 QEMU 只会看到缺库/缺二进制的运行期失败,定位会比较困难。建议改成 fail-fast,并只对确实允许缺失的可选复制点使用局部 || true

CI 方面:当前 run 里 format/clippy/std、多数 QEMU/board 检查通过,但 Test starry self-hosted board licheerv-nano-sg2002 失败,Test starry loongarch64 qemu 非成功结束。我没有从 GitHub job log API 取到可检索失败日志,因此不把它作为本 review 的主阻塞依据,但也不能按全绿处理。

重复/重叠:#1396 也是同作者的 Starry 图形 app 测试,但覆盖 Qt/input;#1415 覆盖 Doom/Wayland/GL 和 card0 stride,功能不重复。当前已有 @luodeb reviewer request,方向匹配,暂不额外重复请求 reviewer。

Comment thread os/StarryOS/kernel/src/pseudofs/dev/card0.rs Outdated
Comment thread apps/starry/doom/prebuild.sh Outdated
@zyc107109102
zyc107109102 requested a review from ZR233 June 29, 2026 19:16

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland 集成测试 + DRM stride 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):新增 Framebufferstride/width/height/pixel_format 字段,使用 ADDFB2f.pitches[0] 作为实际 plane stride,解决 GL 渲染模式下 stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):7 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

当前 head 实现验证(eeeeb16a

DRM stride 修复(核心代码)

  • handle_addfb2 已正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch(CREATE_DUMB 的 pitch,PRIME/import 路径下为 0)
  • Framebuffer 结构体存储 stride/width/height/pixel_format
  • present_fb stride-aware 逻辑:stride 匹配走 flat copy,不匹配逐行拷贝
  • ✅ 防御性检查:dst_limit = fb_size / stride.max(1) 防除零,rows.min(dst_limit) 防越界,bytes_per_row = src_stride.min(info.stride) 防溢出
  • ✅ ADDFB2 验证:stride >= visible_bytesbuffer_size >= stride × height、仅接受 XRGB8888/ARGB8888

doom 测试

  • ✅ 测试结构模仿 ffplay(L1: Weston → L2: 应用 → L3: 诊断 dump)
  • ✅ 使用 GL/llvmpipe 渲染器(--renderer=gl + LIBGL_ALWAYS_SOFTWARE=1
  • SDL_RENDER_DRIVER=opengles2 显式指定,避免 Wayland 下 opengl 渲染器不兼容
  • timeout = 180,覆盖最坏时间预算(120s Weston + 5s 启动 + 30s 存活 + 余量)
  • prebuild.sh 使用 set -euo pipefail(fail-fast)

前次 Review 意见处理

ZR233 在 commit 1e16f7a8 提出的问题均已在当前 head eeeeb16a 中修复:

  1. b.pitchf.pitches[0]handle_addfb2 现在使用 ADDFB2 请求中的 f.pitches[0],正确处理 PRIME/import 路径
  2. set -uo pipefailset -euo pipefailprebuild.sh 已添加 -e 选项
  3. timeout 过短(60):已改为 180
  4. 标签跳号(L4):已改为 L3

本地验证结果

检查 结果
cargo fmt --check ✅ 通过
bash -n test_doom.sh ✅ 通过
bash -n prebuild.sh ✅ 通过
bash -n ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 CI workflow run 结论为 failure,但所有 check run 均为 skipped(路径过滤:PR 仅改动 apps/starry/doom/os/StarryOS/kernel/src/pseudofs/dev/card0.rs,不命中 CI 测试矩阵的路径过滤器)。无 CI 失败是由本 PR 引起。

重复/关联分析

  • PR #1438(java-web 测试):完全不同区域,不重叠
  • PR #1437(java-jse 测试):完全不同区域,不重叠
  • PR #1396(Qt6 计算器,同作者):不同应用,不同内核路径,互补
  • apps/starry/ffplay(GL + 视频播放)不重叠
  • apps/starry/wayland(Weston 烟雾测试)不重叠

小建议(不阻塞合入)

  • doomgeneric-master.zip(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载
  • DumbBuffer 的 doc 注释提到「width, height, bpp, pitch 为 metadata only」,但现在 handle_addfb2 也读取 b.pitch,建议后续更新注释保持一致

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理,前次 review 意见已全部修复,无阻塞问题。批准合入。

Powered by mimo-v2.5-pro

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland 集成测试 + DRM stride 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 结构体新增 stride/width/height/pixel_format 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下因源 buffer 与 scanout stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):7 个新文件 + 1 个 zip 附件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

实现逻辑分析

DRM stride 修复

  • handle_addfb2 使用 f.pitches[0](ADDFB2 请求中的 plane stride),不再使用 b.pitch(CREATE_DUMB 的 pitch,PRIME/import 路径下为 0),符合 ZR233 上轮 review 要求
  • present_fb stride-aware 逻辑正确:
    • src_stride != 0 && info.stride != 0 && src_stride != info.stride 时逐行拷贝
    • dst_limit = fb_size / stride.max(1) 防除零
    • rows.min(dst_limit) 防越界
    • bytes_per_row = src_stride.min(info.stride) 防每行读写溢出
    • stride 匹配或 unknown 时走 flat copy(零开销)
  • handle_addfb2 校验完备:
    • 仅接受 XRGB8888/ARGB8888(32bpp)
    • stride >= visible_bytes(stride 不小于行像素宽度)
    • buffer_size >= stride × height(缓冲区足够大)
  • 锁持有安全:fbs.lock() 仅用于 clone Arc 和读元数据,释放后再做拷贝

doom 测试

  • 测试结构模仿 ffplay(L1: Weston → L2: 应用 → L3: 诊断 dump)
  • 使用 GL/llvmpipe 渲染器(--renderer=gl + LIBGL_ALWAYS_SOFTWARE=1),与 PR body 描述一致
  • SDL_RENDER_DRIVER=opengles2 显式指定,避免 Wayland 下 opengl 渲染器不兼容
  • timeout = 180 覆盖最坏时间预算(120s Weston + 5s 启动 + 30s 存活 + 余量)
  • prebuild.sh 使用 set -euo pipefail(fail-fast),仅对确实可选的复制步骤使用 || true

前次 Review 意见处理

ZR233 在 commit 1e16f7a8 提出的两个阻塞问题均已修复:

  1. b.pitchf.pitches[0]:当前 head 使用 ADDFB2 的 f.pitches[0] 存入 Framebuffer.stride,正确处理 PRIME/import 路径
  2. set -uo pipefailset -euo pipefailprebuild.sh 已添加 -e 选项
  3. ✅ 早期 bot review 的 timeout 过短(60→180)和标签跳号(L4→L3)也已修复

本地验证结果

检查 结果
cargo fmt --check --package starry-kernel ✅ 通过
bash -n test_doom.sh ✅ 通过
bash -n prebuild.sh ✅ 通过
bash -n ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head SHA 950efb7d 的所有 CI check:

  • Cancel stale CI runs:success
  • Detect changed paths:success
  • 所有 Test 矩阵(arceos/starry/axvisor):skipped(路径过滤:PR 改动 apps/starry/doom/ + os/StarryOS/kernel/src/pseudofs/dev/card0.rs,不命中 CI 测试矩阵的路径过滤器)
  • 所有 Publish container image:skipped(路径过滤)

所有 check 均为 success 或 expected skipped,无 CI 失败。skipped 是因为此 PR 改动范围在 apps/starry/doom/ 和内核 pseudofs,不属于 CI 路径过滤覆盖的范围。ZR233 上轮 review 提到的 board/loongarch64 CI 失败与此 PR 无关——当前 head 已全部 skipped,无关联失败。

重复/关联分析

  • PR #1441(python-net):Python 框架测试,完全不同区域,不重叠
  • PR #1440(node-lib):Node.js 类库测试,完全不同区域,不重叠
  • PR #1413(card0 魔数替换):不同内核路径,不重叠
  • PR #1396(Qt6 计算器,同作者):不同应用,不同内核路径,互补不重叠
  • apps/starry/ffplay(GL + 视频播放):不重叠,doom 覆盖 SDL2 opengles2 渲染路径
  • apps/starry/wayland(Weston 烟雾测试):不重叠,doom 覆盖完整游戏渲染链路
  • base 分支无同类 card0 stride 修复或 doom 测试

测试放置

doom 测试正确放置在 apps/starry/doom/ 下(app 层级),遵循项目 app vs test-suit 分离规范。cargo xtask starry app qemu -t doom --arch x86_64 为文档化运行命令。

Reviewer 状态

已请求 ZR233(DRM/kernel)和 luodeb(starry + 显示/wayland),方向匹配当前改动范围,无需额外增加 reviewer。

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理且与现有测试不重叠,ZR233 的上轮阻塞意见已全部修复,cargo fmt --check 和 shell 语法检查通过,无 [patch.crates-io] 引入。批准合入。

Powered by mimo-v2.5-pro

@mai-team-app mai-team-app Bot mentioned this pull request Jun 30, 2026

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请求修改。

我本地验证了 bash -n apps/starry/doom/prebuild.shbash -n apps/starry/doom/test_doom.sh 通过,但 cargo xtask clippy --package starry-kernel 在当前 head 950efb7d14d6 失败,失败点来自本 PR 修改的 os/StarryOS/kernel/src/pseudofs/dev/card0.rs

  • Framebuffer::widthFramebuffer::pixel_format 只写不读,-D warnings 下触发 dead_code;
  • (size as u64) < fb_total 触发 clippy::unnecessary_cast

CI 里 x86_64/aarch64/riscv64 Starry QEMU 的红叉主要落在 test-ptrace-gdb/context canceled 这类 system case 上,表面上不像 Doom/DRM 变更直接引入;但 clippy 是当前 PR 可归因且会阻塞合入的问题,需要先修掉。

Comment thread os/StarryOS/kernel/src/pseudofs/dev/card0.rs Outdated
Comment thread os/StarryOS/kernel/src/pseudofs/dev/card0.rs Outdated

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这版我还不能 approve。静态检查和当前 head CI 是绿的,git diff --check origin/dev...HEADgit merge-tree --write-tree origin/dev HEADbash -n apps/starry/doom/prebuild.sh apps/starry/doom/test_doom.sh apps/starry/doom/ci-run.sh 都通过;DRM 的 ADDFB2 pitch 处理、buffer size 校验、stride 不一致时逐行拷贝的方向也对,旧的超时/标签/clippy/stride 线程我已经标记 resolved。

阻塞点是新增的 Doom app 流程本身在普通开发环境跑不起来:我执行 cargo xtask starry app qemu -t doom --arch x86_64,依赖安装完成后进入 apps/starry/doom/prebuild.sh,在 chroot ... Operation not permitted 退出,sudo -n true 也不可用。当前 GitHub CI 的 Test starry x86_64 qemu 日志只跑了 test-suit/starryos/...,没有覆盖 apps/starry/doom,所以这个失败不是已由 CI 覆盖的噪声。请把 prebuild 改成不依赖普通用户不可用的 chroot,或只在确实有权限时使用 chroot,并给无权限路径可工作的 qemu-user 构建方式。

另外我查了开放 PR,#1413 只和 card0.rs 有很小的局部重叠且当前也是 changes requested,不构成重复 PR。

Comment thread apps/starry/doom/prebuild.sh Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland 集成测试 + DRM stride 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 新增 stride/height 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下 stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):8 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

实现逻辑分析

DRM stride 修复

  • handle_addfb2 正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch
  • Framebuffer 结构体仅存储 strideheight(已移除前次 clippy 报告的未使用字段)
  • present_fb stride-aware 逻辑正确,防御性检查完备
  • handle_addfb2 校验完备:仅接受 XRGB8888/ARGB8888、stride ≥ visible_bytes、buffer_size ≥ stride × height
  • ✅ 锁持有安全:fbs.lock() 仅用于 clone Arc 和读元数据,释放后再做拷贝

doom 测试

  • ✅ 测试结构模仿 ffplay(L1/L2/L3),timeout=180 充足
  • ✅ GL/llvmpipe 渲染器 + SDL_RENDER_DRIVER=opengles2
  • prebuild.sh 使用 set -euo pipefail

本地验证结果

检查 结果
cargo fmt --check --package starry-kernel ✅ 通过
cargo xtask clippy --package starry-kernel(17/17) ✅ 全部通过
bash -n test_doom.sh / prebuild.sh / ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head 07c53bb7 的所有 CI check 均为 skipped(路径过滤未命中),无 CI 失败。

前次 Review 意见处理

前几次 review 提出的 6 个问题均已修复(b.pitch→pitches[0]、set -e、timeout 60→180、L4→L3、dead_code、unnecessary_cast)。

重复/关联分析

  • PR #1413(card0 魔数)和 PR #1396(Qt6 计算器)均不重叠
  • apps/starry/ffplay/wayland 不重叠

阻塞问题

ZR233 在 commit 07c53bb7 上提出的 chroot 权限问题仍未修复,是当前唯一阻塞点。详见内联评论。

Powered by mimo-v2.5-pro

Comment thread apps/starry/doom/prebuild.sh Outdated

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland GL 测试 + DRM stride-aware present 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 新增 stride/height 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下 stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):8 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

当前 head 实现验证(5b96a9db3

DRM stride 修复

  • handle_addfb2 正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch
  • Framebuffer 结构体仅存储 strideheight(已移除前次 clippy 报告的未使用字段 width/pixel_format
  • present_fb stride-aware 逻辑正确:stride 匹配走 flat copy,不匹配逐行拷贝
  • ✅ 防御性检查完备:dst_limit = fb_size / stride.max(1) 防除零,rows.min(dst_limit) 防越界,bytes_per_row = src_stride.min(info.stride) 防溢出
  • ✅ ADDFB2 校验:仅接受 XRGB8888/ARGB8888、stride >= visible_bytesbuffer_size >= stride × height
  • size < fb_total 无 unnecessary cast

doom 测试

  • ✅ 测试结构模仿 ffplay(L1/L2/L3),标签连续
  • ✅ GL/llvmpipe 渲染器 + SDL_RENDER_DRIVER=opengles2
  • timeout = 180 覆盖最坏时间预算
  • prebuild.sh 使用 set -euo pipefail
  • 关键修复build_doomgeneric() 已改用宿主机 musl-gcc 编译,完全消除 chroot 依赖,解决了 ZR233 上轮 review 的主要阻塞问题
  • ensure_host_packages() 新增 musl-tools 依赖检查

前次 Review 意见处理

前几次 review(ZR233 + mai-bot)提出的 7 个阻塞问题均已修复:

  1. b.pitchf.pitches[0]
  2. set -uo pipefailset -euo pipefail
  3. ✅ timeout 60 → 180
  4. ✅ L4 → L3
  5. ✅ dead_code(Framebuffer::width/pixel_format)已移除
  6. ✅ unnecessary_cast(size as u64)已修复
  7. chroot 权限问题:已改用 musl-gcc 宿主机编译,不再依赖 CAP_SYS_CHROOT

本地验证结果

检查 结果
cargo fmt --check ✅ 通过
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings(starry-kernel) ✅ 通过(0 warnings)
bash -n test_doom.sh / prebuild.sh / ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head SHA 5b96a9db3 的所有 CI check 均为 skipped(路径过滤:PR 仅改动 apps/starry/doom/os/StarryOS/kernel/src/pseudofs/dev/card0.rs,不命中 CI 测试矩阵路径过滤器)。无 CI 失败。

重复/关联 PR 分析

  • 当前无重叠 open PR
  • PR #1413(card0 魔数替换):不同内核路径,不重叠
  • PR #1396(Qt6 计算器,同作者):不同应用,互补不重叠

小建议(不阻塞合入)

  • doomgeneric-master.zip(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载
  • test_doom.shset +e 适用于 QEMU 内运行的容错场景,建议在脚本顶部加注释说明原因

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理,前次 review 所有阻塞意见(含 chroot 权限问题)已全部修复,cargo fmt --checkcargo clippy --D warnings 均通过,无 [patch.crates-io] 引入。批准合入。

Powered by mimo-v2.5-pro

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland GL 测试 + DRM stride-aware present 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 新增 stride/height 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下因源 buffer 与 scanout stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):8 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

实现逻辑分析

DRM stride 修复

  • handle_addfb2 正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch(CREATE_DUMB 的 pitch,PRIME/import 路径下可能为 0)
  • Framebuffer 结构体仅存储 strideheight(已移除前次 clippy 报告的未使用字段 width/pixel_format
  • present_fb stride-aware 逻辑正确:stride 匹配走 flat copy,不匹配逐行拷贝
  • 防御性检查完备:dst_limit = info.fb_size / info.stride.max(1) 防除零,rows.min(dst_limit) 防越界,bytes_per_row = (src_stride as usize).min(info.stride) 防溢出
  • handle_addfb2 校验完备:仅接受 XRGB8888/ARGB8888(32bpp)、stride ≥ visible_bytes、buffer_size ≥ stride × height
  • 锁持有安全:fbs.lock() 仅用于 clone Arc 和读元数据,释放后再做拷贝

doom 测试

  • 测试结构模仿 ffplay(L1: Weston → L2: 应用 → L3: 诊断 dump)
  • 使用 GL/llvmpipe 渲染器(--renderer=gl + LIBGL_ALWAYS_SOFTWARE=1
  • SDL_RENDER_DRIVER=opengles2 显式指定,避免 Wayland 下 opengl 渲染器不兼容
  • timeout = 180 覆盖最坏时间预算(120s Weston + 5s 启动 + 30s 存活 + 余量)
  • prebuild.sh 使用 set -euo pipefail(fail-fast),使用 musl-gcc 编译(避免 chroot 权限问题)

本地验证结果

检查 结果
cargo fmt --check --package starry-kernel ✅ 通过
cargo clippy --package starry-kernel --all-features -- -D warnings ✅ 通过(无警告)
bash -n test_doom.sh ✅ 通过
bash -n prebuild.sh ✅ 通过
bash -n ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head 7190e37a 的 CI check:

  • Cancel stale CI runs:success
  • Detect changed paths:success
  • Check formatting / run_host:in_progress(本地已验证 fmt 通过)
  • Run spin-lint / run_host:in_progress
  • Run sync-lint / run_host:in_progress
  • Check formatting / run_container:skipped(路径过滤)
  • Run spin-lint / run_container:skipped(路径过滤)
  • Run sync-lint / run_container:skipped(路径过滤)
  • Publish axvisor-lvz container image:skipped(路径过滤)
  • Publish base container image:skipped(路径过滤)

所有已完成的 check 均为 success 或 expected skipped。PR 仅改动 apps/starry/doom/os/StarryOS/kernel/src/pseudofs/dev/card0.rs,不命中 CI 测试矩阵的路径过滤器,skipped 是预期行为。本地已验证 cargo fmt --checkcargo clippy 通过。

前次 Review 意见处理

前几次 review 提出的所有阻塞问题均已修复:

  1. timeout 过短(60→180)qemu-x86_64.toml 已改为 180
  2. 标签跳号(L4→L3)test_doom.sh 已改为 L3
  3. b.pitchf.pitches[0]handle_addfb2 使用 ADDFB2 请求的 f.pitches[0]
  4. set -uo pipefailset -euo pipefailprebuild.sh 已添加 -e
  5. dead_code(width/pixel_format):已移除未使用字段
  6. unnecessary_castif size < fb_total 无多余转换
  7. chroot 权限问题:改用 musl-gcc 编译,不依赖 chroot

重复/关联分析

  • PR #1412(perf/ebpf/tracepoint 整合):完全不同区域,不重叠
  • apps/starry/ffplay(GL + 视频播放):不重叠,doom 覆盖 SDL2 opengles2 渲染路径
  • apps/starry/wayland(Weston 烟雾测试):不重叠,doom 覆盖完整游戏渲染链路
  • base 分支无同类 card0 stride 修复或 doom 测试

小建议(不阻塞合入)

  • present_fb 的两个 unsafe 块移除了原有的 SAFETY 注释(说明 src/dst 不重叠的原因),建议恢复以保持 Rust unsafe 代码的可审计性
  • doomgeneric-master.zip(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理且与现有测试不重叠,前次 review 意见已全部修复,cargo fmt --checkcargo clippy 通过,无 [patch.crates-io] 引入。批准合入。

Powered by mimo-v2.5-pro

@zyc107109102
zyc107109102 requested a review from ZR233 July 2, 2026 18:13

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

当前 head 仍需要修改。

已通过的复核项:

  • git diff --check origin/dev...HEAD 通过。
  • bash -n apps/starry/doom/prebuild.sh apps/starry/doom/test_doom.sh apps/starry/doom/ci-run.sh 通过。
  • cargo xtask clippy --package starry-kernel 本地 17/17 checks 全部通过。
  • 之前的 chroot Operation not permitted 路径已经移除,当前脚本改为 qemu-user apk + host musl-gcc。

新的阻塞点是完整 app prebuild 对 host 工具的处理仍不适合普通开发环境:本机 current-head worktree 缺少 musl-gcc,脚本会直接执行 bare apt-get update,作为 uid 1000 失败在 /var/lib/apt/lists/lock permission denied。由于这个 app 没有被当前 GitHub Starry test-suit CI 覆盖,合入前需要保证文档里的 cargo xtask starry app qemu -t doom --arch x86_64 在缺少 host 工具时有可执行的安装路径或清晰的前置依赖失败,而不是落到 apt 锁错误。

Comment thread apps/starry/doom/prebuild.sh Outdated
@zyc107109102

Copy link
Copy Markdown
Contributor Author

将zip换成tar.gz。防止出现下载unzip权限不足

@zyc107109102
zyc107109102 requested a review from ZR233 July 3, 2026 16:54

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

需要继续修改后再合并。上一轮的 chroot/apt-get 阻塞点当前已经移除,我已解析旧线程;但当前版本仍把上游源码归档直接提交进仓库,需要改成可审查、可复现的来源。

4. 验证进程存活 35 秒
5. 输出 `DOOMGENERIC_TEST_PASSED` 或 `DOOMGENERIC_TEST_FAILED`

## 构建说明

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这里不建议把 doomgeneric-master.tar.gz 作为新增二进制归档直接入库。这个 3MB tarball 对 review 来说是 opaque blob,后续也难确认它对应哪个 upstream commit/tag。请改成 prebuild 按固定 tag/commit URL 下载并校验 sha256,或把需要维护的最小源码补丁以可审查的文本形式放在仓库里。这样 Doom app 的来源和构建结果才能像其它 Starry app 一样可复现。

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland GL 测试 + DRM stride-aware present 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 新增 stride/height 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下 stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):8 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

实现逻辑分析

DRM stride 修复(核心代码)

  • handle_addfb2 正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch。PRIME/import 路径下 b.pitch 为 0,使用 ADDFB2 传入的 pitch 是正确的做法。
  • Framebuffer 结构体仅存储 strideheight(已移除前次 clippy 报告的未使用字段 width/pixel_format),本地变量 fb_width/fb_pixel_format 仅用于 ADDFB2 验证,不产生 dead_code。
  • present_fb stride-aware 逻辑正确:
    • src_stride != 0 && info.stride != 0 && src_stride as usize != info.stride 时逐行拷贝
    • dst_limit = fb_size / stride.max(1) 防除零
    • rows.min(dst_limit) 防越界
    • bytes_per_row = src_stride.min(info.stride) 防每行读写溢出
    • stride 匹配或 unknown 时走 flat copy(零开销)
  • handle_addfb2 校验完备:仅接受 XRGB8888/ARGB8888(32bpp)、stride ≥ visible_bytes、buffer_size ≥ stride × height
  • ✅ 锁持有安全:fbs.lock() 仅用于 clone Arc 和读元数据,释放后再做拷贝
  • ✅ 无需 (size as u64) 转换——size 已是 u64,不会触发 clippy::unnecessary_cast

doom 测试

  • ✅ 测试结构模仿 ffplay(L1: Weston → L2: 应用 → L3: 诊断 dump)
  • ✅ 使用 GL/llvmpipe 渲染器(--renderer=gl + LIBGL_ALWAYS_SOFTWARE=1
  • SDL_RENDER_DRIVER=opengles2 显式指定,避免 Wayland 下 opengl 渲染器不兼容
  • timeout = 180 覆盖最坏时间预算(120s Weston + 5s 启动 + 30s 存活 + 余量)
  • prebuild.sh 使用 set -euo pipefail(fail-fast),无 chroot/sudo/apt-get 依赖,纯 qemu-user 构建路径
  • ✅ 测试正确放置在 apps/starry/doom/ 下(app 层级),遵循项目 app vs test-suit 分离规范

前次 Review 意见处理

历次 review(ZR233 及 bot)提出的所有问题均已在当前 head f004b366 中修复:

  1. b.pitchf.pitches[0]handle_addfb2 使用 ADDFB2 请求中的 f.pitches[0],正确处理 PRIME/import 路径
  2. set -uo pipefailset -euo pipefailprebuild.sh 已添加 -e 选项
  3. timeout 过短(60→180)
  4. 标签跳号(L4→L3)
  5. dead_code(width/pixel_format):已从 Framebuffer 移除
  6. unnecessary_castsize as u64:已移除
  7. chroot 权限问题:当前 prebuild.sh 无 chroot/sudo/apt-get,纯 qemu-user 路径

本地验证结果

检查 结果
cargo fmt --check ✅ 通过
cargo clippy --manifest-path os/StarryOS/kernel/Cargo.toml --all-features -- -D warnings ✅ 无警告/错误
bash -n apps/starry/doom/prebuild.sh ✅ 通过
bash -n apps/starry/doom/test_doom.sh ✅ 通过
bash -n apps/starry/doom/ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head f004b366 的所有 CI check 均为 skipped(路径过滤:PR 仅改动 apps/starry/doom/os/StarryOS/kernel/src/pseudofs/dev/card0.rs,不命中 CI 测试矩阵的路径过滤器)。无 CI 失败是由本 PR 引起的。Doom 测试属于 app 层级,需要完整 QEMU 环境运行,当前 CI 矩阵不覆盖此路径,符合预期。

重复/关联 PR 分析

  • PR #1413(CN-TangLin):替换 card0 魔数 DRM_MODE_NAME_LEN,不涉及 present_fb 或 stride 逻辑,无冲突
  • PR #1396(同作者 zyc107109102):Qt6 计算器测试,不同应用,不同内核路径,互补不重叠
  • apps/starry/ffplay(GL + 视频播放)不重叠:doom 覆盖 SDL2 opengles2 渲染路径
  • apps/starry/wayland(Weston 烟雾测试)不重叠:doom 覆盖完整 SDL2 游戏渲染链路
  • base 分支无同类 card0 stride 修复或 doom 测试

小建议(不阻塞合入)

  • PR body 仍提到 doomgeneric-master.zip,但实际文件已改为 doomgeneric-master.tar.gz(作者已在评论中说明),建议更新 PR body 保持一致
  • PR body 中 DRM stride 修复描述提到「从 dumb buffer 的 pitch 获取」,但实际代码使用 ADDFB2 的 f.pitches[0],建议更新描述以匹配实现
  • doomgeneric-master.tar.gz(~3.1MB)直接入库会增加仓库体积,长期可考虑在 prebuild.sh 中从固定 URL 下载

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理且与现有测试不重叠,历次 review 的阻塞意见已全部修复,cargo fmt --checkcargo clippy 和 shell 语法检查均通过,无 [patch.crates-io] 引入,无 CI 失败归属于本 PR。批准合入。

Powered by mimo-v2.5-pro

Powered by deepseek-v4-pro

@mai-team-app mai-team-app Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR #1415 复审 — doomgeneric Wayland GL 测试 + DRM stride-aware present 修复

变更概述

本 PR 包含两个关联变更:

  1. DRM stride-aware present_fb 修复os/StarryOS/kernel/src/pseudofs/dev/card0.rs):Framebuffer 新增 stride/height 字段,使用 ADDFB2 请求的 f.pitches[0] 作为实际 plane stride,修复 GL 渲染模式下 stride 不匹配导致的斜线撕裂。
  2. doomgeneric Wayland 集成测试apps/starry/doom/):7 个新文件,验证内核 DRM → Weston (GL/llvmpipe) → SDL2 (opengles2) 全链路。

当前 head 实现验证(2170f015f

DRM stride 修复

  • handle_addfb2 正确使用 f.pitches[0](来自 ADDFB2 请求),不再使用 b.pitch(PRIME/import 路径下为 0)
  • Framebuffer 结构体仅存储 strideheight(已移除前次 clippy 报告的未使用字段 width/pixel_format
  • present_fb stride-aware 逻辑正确:stride 匹配走 flat copy,不匹配逐行拷贝
  • ✅ 防御性检查完备:dst_limit = fb_size / stride.max(1) 防除零,rows.min(dst_limit) 防越界,bytes_per_row = src_stride.min(info.stride) 防溢出
  • ✅ ADDFB2 校验完备:仅接受 XRGB8888/ARGB8888、stride >= visible_bytesbuffer_size >= stride × height
  • ✅ 锁持有安全:fbs.lock() 仅用于 clone Arc 和读元数据,释放后再做拷贝

doom 测试

  • ✅ 测试结构模仿 ffplay(L1/L2/L3),timeout=180 充足
  • ✅ GL/llvmpipe 渲染器 + SDL_RENDER_DRIVER=opengles2
  • prebuild.sh 使用 set -euo pipefail(fail-fast),通过 wget/curl 从 GitHub URL 下载 doomgeneric 源码,使用 qemu-user 编译(无 chroot/无 sudo)
  • ✅ 测试正确放置在 apps/starry/doom/ 下,符合项目 app vs test-suit 分离规范

本地验证结果

检查 结果
cargo fmt --check --package starry-kernel ✅ 通过
cargo xtask clippy --package starry-kernel(17/17) ✅ 全部通过
bash -n prebuild.sh / test_doom.sh / ci-run.sh ✅ 通过
[patch.crates-io] 检查 ✅ 无引入

CI 状态

当前 head 2170f015f 的所有 CI check:

  • Cancel stale CI runs:success
  • Detect changed paths:success
  • Check formatting:in_progress(容器内仍在运行)
  • Run sync-lint / Run spin-lint:容器内 in_progress / 宿主机 skipped
  • Publish container image:skipped(路径过滤)

无 CI 失败可归因于本 PR。

前次 Review 意见处理

此前 4 轮 ZR233 和 bot review 提出的全部阻塞问题均已修复:

问题 状态
b.pitchf.pitches[0](ZR233 第 4 轮) ✅ 已修复
set -uo pipefailset -euo pipefail(ZR233 第 4 轮) ✅ 已修复
clippy dead_codewidth/pixel_format)(ZR233 第 7 轮) ✅ 已修复
clippy unnecessary_cast(ZR233 第 7 轮) ✅ 已修复
prebuild.sh chroot 权限问题(ZR233 第 8 轮) ✅ 已修复(无 chroot/无 sudo)
doomgeneric-master.zip 捆绑 → URL 下载(作者更新) ✅ 已修复(tar.gz 下载)
timeout 60 → 180(最早 bot review) ✅ 已修复
L4 → L3 标签跳号(最早 bot review) ✅ 已修复

重复/关联分析

  • PR #1413(card0 魔数替换):不涉及 present_fb 或 stride,无冲突
  • PR #1396(Qt6 计算器,同作者):不同应用、不同内核路径,互补不重叠
  • apps/starry/ffplay(GL + 视频播放)不重叠
  • apps/starry/wayland(Weston 烟雾测试)不重叠
  • base 分支无同类 card0 stride 修复或 doom 测试

结论

DRM stride 修复逻辑正确且防御性良好,doom 测试结构合理且与现有测试不重叠,此前全部 review 阻塞意见均已修复,cargo fmt/cargo clippy/bash -n 全部通过,无 [patch.crates-io] 引入。批准合入。

Powered by deepseek-v4-pro

@ZR233 ZR233 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查通过。

我这边按当前 head 重新检查了变更范围和测试证据:

  • 旧 review 里提到的上游源码压缩包、chroot/apt-get、缺少严格 shell 失败处理等问题已经清理;当前 prebuild.sh 下载源码后构建,并使用 set -euo pipefail,未再提交 doomgeneric-master.zip
  • DRM/card0 的 stride 处理现在在 ADDFB2 阶段校验 pitch/size,并在 present 时按行拷贝,和 Weston/llvmpipe 下 XRGB8888 framebuffer 的使用方式匹配。
  • 本地验证通过:cargo xtask starry app qemu -t doom --arch x86_64,用例进入 StarryOS 后启动 Weston DRM/GL llvmpipe 和 doomgeneric,最终命中 DOOMGENERIC_TEST_PASSED
  • 另外检查了 git diff --check origin/dev...origin/pr/1415git merge-tree --write-tree origin/dev origin/pr/1415,均通过;当前 GitHub 主 CI 也为通过/预期跳过状态。

后续可以考虑把这个 Starry app 纳入可触发的 app 级 CI/定期验证,但这不阻塞当前 PR。

@ZR233
ZR233 merged commit 0638718 into rcore-os:dev Jul 8, 2026
56 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants