FA-10726 / Rendering state / Open access
Draw range base vertex · case 01
Draw first-index is ignored when selecting index-buffer elements.
ROOT CAUSE
Draw first-index is ignored when selecting index-buffer elements.
VERIFIED REPAIR
Use the stage contract: Given a valid index subrange, apply first/count to index-buffer positions and base to fetched vertex indices.
Unsuccessful approach: The first-index offset is added to vertex IDs instead of the independent base-vertex offset.
Case contract
Given a valid index subrange, apply first/count to index-buffer positions and base to fetched vertex indices.
Why this case matters
A deterministic software graphics stage with explicit channel and coordinate conventions; no hardware, device profile or API behavior is inferred.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(indices, first, count, base):
return [x+base for x in indices[:count]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([0, 2, 4, 6], 1, 2, 10)), [12, 14])
check('fixture 2', solve(*([1, 3], 0, 2, -1)), [0, 2])
check('fixture 3', solve(*([0, 1], 1, 0, 7)), [])
check('fixture 4', solve(*([5], 0, 1, 0)), [5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | [10, 12] | [12, 14] | Failed |
| fixture 2 | [0, 2] | [0, 2] | Passed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [5] | [5] | Passed |
SHA-256 / 6cc88648a85bd1e05c3ed6cb12db5e196db81865c6e55921f8357506b2c0cde0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(indices, first, count, base):
return [x+first for x in indices[first:first+count]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([0, 2, 4, 6], 1, 2, 10)), [12, 14])
check('fixture 2', solve(*([1, 3], 0, 2, -1)), [0, 2])
check('fixture 3', solve(*([0, 1], 1, 0, 7)), [])
check('fixture 4', solve(*([5], 0, 1, 0)), [5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | [3, 5] | [12, 14] | Failed |
| fixture 2 | [1, 3] | [0, 2] | Failed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [5] | [5] | Passed |
SHA-256 / 0fd6b2dfb08b1f26491c387c784a96e2a7ee779a3d4d7dfe24e1e5153191e931
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(indices, first, count, base):
return [x+base for x in indices[first:first+count]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('fixture 1', solve(*([0, 2, 4, 6], 1, 2, 10)), [12, 14])
check('fixture 2', solve(*([1, 3], 0, 2, -1)), [0, 2])
check('fixture 3', solve(*([0, 1], 1, 0, 7)), [])
check('fixture 4', solve(*([5], 0, 1, 0)), [5])
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fixture 1 | [12, 14] | [12, 14] | Passed |
| fixture 2 | [0, 2] | [0, 2] | Passed |
| fixture 3 | [] | [] | Passed |
| fixture 4 | [5] | [5] | Passed |
SHA-256 / 1dd0ec3b2570c5ab13b888afa0f2af93182549339da066d07dd9dff2a912eb13
Verification & scope
This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:38:41.686116+00:00.
Case digest / 644ffab8ab6908029df4697bee169bad7b81ed9cfb99c1b2e6dc1047c787a62c