)]}'
{
  "commit": "de6ef6cd0afed5460e73d4bd66413b33c25bee36",
  "tree": "32c424b25fde2157648c5a75768c294e1bde61d0",
  "parents": [
    "3b7ce5726527dd665c564ed0aa9ef1ee6b992ab9"
  ],
  "author": {
    "name": "Ralph Potter",
    "email": "r.potter@samsung.com",
    "time": "Thu Sep 03 10:39:19 2026 +0100"
  },
  "committer": {
    "name": "Ralph Potter",
    "email": "r.potter@samsung.com",
    "time": "Thu Sep 03 10:39:19 2026 +0100"
  },
  "message": "fix 32-bit identity fillers in 16-bit matrix constructors\n\ncreateMatrixConstructor() seeds its working array with the identity\nmatrix, so any construction that does not specify every component takes\na 0.0 or 1.0 filler from it. The width of those constants was chosen\nwith a two-way test on bitCount, so 16-bit fell through to the 32-bit\nmakeFloatConstant(). f16mat2(s) then produced\n\n  %26 \u003d OpCompositeConstruct %v2half %23 %float_0\n\nwhich spirv-val rejects: the constituents do not match the result type\u0027s\ncomponent type. Placement was always correct, only the constant width\nwas wrong. Select the constant width three ways, as the equivalent sites\nin GlslangToSpv.cpp already do.\n\nAdd spv.matrix.float16.frag and spv.matrix.float64.frag, ports of\nspv.matrix.frag at the other two widths, so each width that\ncreateMatrixConstructor() dispatches on has coverage. Both include a\nmat4(mat2(x)) construction, which leaves the trailing diagonal at the\nidentity and is the only form that uses the 1.0 filler rather than just\nthe 0.0 filler. Nothing previously reached the filler path at 16 or 64\nbits from a SPIR-V test, which is why this went unnoticed.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8707009e3984d475717cb3d49ad8039ea4ad8f63",
      "old_mode": 33188,
      "old_path": "SPIRV/SpvBuilder.cpp",
      "new_id": "986bbe92bb559fa2876f29e191436d6a1c00a70c",
      "new_mode": 33188,
      "new_path": "SPIRV/SpvBuilder.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d640ec4978fc470cec90000d462087aaf44e017b",
      "new_mode": 33188,
      "new_path": "Test/baseResults/spv.matrix.float16.frag.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "874274a00465dcacb5d2bdb678b42dec4c27f8f7",
      "new_mode": 33188,
      "new_path": "Test/baseResults/spv.matrix.float64.frag.out"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "569c47bec66c0d9abc59a9f80026a7f986655f2c",
      "new_mode": 33188,
      "new_path": "Test/spv.matrix.float16.frag"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5bc398316efb0d616f133191a344b513c4adde94",
      "new_mode": 33188,
      "new_path": "Test/spv.matrix.float64.frag"
    },
    {
      "type": "modify",
      "old_id": "6c381629955a92392de6ce676f72ed5c4691f72a",
      "old_mode": 33188,
      "old_path": "gtests/Spv.FromFile.cpp",
      "new_id": "228d445af5bd66d2c214b39d10aef41845adb841",
      "new_mode": 33188,
      "new_path": "gtests/Spv.FromFile.cpp"
    }
  ]
}
