FAILURE MAP
← Case archive

FA-10726 / Rendering state / Open access

Draw range base vertex · case 01

Draw first-index is ignored when selecting index-buffer elements.

Verified by executionVariant 1 · 4 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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