fixing image operand parsing
Build / build (push) Failing after 4s
Test / build (push) Failing after 15s

This commit is contained in:
2026-06-21 13:58:21 +02:00
parent 25ef7751c6
commit ae0914647b
+8 -2
View File
@@ -1333,6 +1333,7 @@ fn ImageEngine(comptime Op: ImageOp) type {
const ParsedImageOperands = struct { const ParsedImageOperands = struct {
lod: ?f32 = null, lod: ?f32 = null,
image_lod: ?i32 = null, image_lod: ?i32 = null,
sample: ?i32 = null,
offset: Runtime.ImageOffset = .{}, offset: Runtime.ImageOffset = .{},
}; };
@@ -1358,7 +1359,8 @@ fn ImageEngine(comptime Op: ImageOp) type {
_ = try rt.it.next(); _ = try rt.it.next();
} }
if (imageOperandPresent(image_operands, .SampleMask)) { if (imageOperandPresent(image_operands, .SampleMask)) {
_ = try rt.it.next(); const sample_value = try rt.results[try rt.it.next()].getValue();
parsed.sample = try readStorageCoordLane(sample_value, 0);
} }
if (imageOperandPresent(image_operands, .MinLodMask)) { if (imageOperandPresent(image_operands, .MinLodMask)) {
_ = try rt.it.next(); _ = try rt.it.next();
@@ -1536,6 +1538,9 @@ fn ImageEngine(comptime Op: ImageOp) type {
} }
fn implicitSampleLod(rt: *Runtime, coordinate_id: SpvWord, driver_image: *anyopaque, driver_sampler: *anyopaque, dim: spv.SpvDim, x: f32, y: f32, z: f32) RuntimeError!?f32 { fn implicitSampleLod(rt: *Runtime, coordinate_id: SpvWord, driver_image: *anyopaque, driver_sampler: *anyopaque, dim: spv.SpvDim, x: f32, y: f32, z: f32) RuntimeError!?f32 {
if (dim == .Cube)
return 0.0;
const coord_derivative = rt.derivatives.get(coordinate_id) orelse return null; const coord_derivative = rt.derivatives.get(coordinate_id) orelse return null;
const coord_dx_x = try readSampleCoordLane(&coord_derivative.dx, 0); const coord_dx_x = try readSampleCoordLane(&coord_derivative.dx, 0);
const coord_dx_y = readSampleCoordLane(&coord_derivative.dx, 1) catch 0.0; const coord_dx_y = readSampleCoordLane(&coord_derivative.dx, 1) catch 0.0;
@@ -1951,7 +1956,8 @@ fn ImageEngine(comptime Op: ImageOp) type {
const y = (readStorageCoordLane(coordinate, 1) catch 0) + parsed_operands.offset.y; const y = (readStorageCoordLane(coordinate, 1) catch 0) + parsed_operands.offset.y;
const z = (readStorageCoordLane(coordinate, 2) catch 0) + parsed_operands.offset.z; const z = (readStorageCoordLane(coordinate, 2) catch 0) + parsed_operands.offset.z;
try readImage(rt, dst, image_operand.driver_image, image_operand.dim, x, y, z, parsed_operands.image_lod); const read_z = if (image_operand.arrayed) z else parsed_operands.sample orelse z;
try readImage(rt, dst, image_operand.driver_image, image_operand.dim, x, y, read_z, parsed_operands.image_lod);
}, },
.SampleImplicitLod, .SampleImplicitLod,