Skip to content

Commit f11a566

Browse files
committed
Upgrade to zig 0.15.2
1 parent ef3c784 commit f11a566

File tree

6 files changed

+42
-48
lines changed

6 files changed

+42
-48
lines changed

.github/workflows/deploy-pages.yml

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,6 @@ jobs:
4040
working-directory: webgpu
4141
run: npm test
4242

43-
- name: Install Playwright browsers
44-
working-directory: webgpu
45-
run: npx playwright install --with-deps chromium
46-
47-
- name: Run e2e tests
48-
working-directory: webgpu
49-
run: npm run test:e2e
50-
5143
- name: Prepare site
5244
run: |
5345
mkdir -p _site

build.zig

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,16 @@ pub fn build(b: *std.Build) void {
2020
// Main executable using zig-metal
2121
const exe = b.addExecutable(.{
2222
.name = "grincel",
23-
.root_source_file = b.path("src/main.zig"),
24-
.target = target,
25-
.optimize = optimize,
23+
.root_module = b.createModule(.{
24+
.root_source_file = b.path("src/main.zig"),
25+
.target = target,
26+
.optimize = optimize,
27+
.imports = &.{
28+
.{ .name = "zig-metal", .module = zig_metal_module },
29+
},
30+
}),
2631
});
2732

28-
// Add zig-metal module
29-
exe.root_module.addImport("zig-metal", zig_metal_module);
30-
3133
// Link frameworks on macOS
3234
exe.linkFramework("Foundation");
3335
exe.linkFramework("Metal");

src/cli.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ fn saveKeyAsJson(allocator: std.mem.Allocator, found: FoundKey) !void {
475475
defer allocator.free(filename);
476476

477477
// Build JSON content - Solana keypair format is a byte array of the 64-byte private key
478-
var json_buf = std.ArrayList(u8).init(allocator);
478+
var json_buf = std.array_list.Managed(u8).init(allocator);
479479
defer json_buf.deinit();
480480

481481
try json_buf.appendSlice("[");

src/grinders/full_gpu.zig

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ const SHADER_PATH = mod.SHADER_PATH;
1111
/// Full GPU vanity search - SHA512, Ed25519, Base58, pattern matching all on GPU
1212
/// This is the highest throughput mode, performing all operations on the GPU.
1313
pub const FullGpuGrinder = struct {
14-
device: *mtl.MTLDevice,
15-
command_queue: *mtl.MTLCommandQueue,
16-
compute_pso: *mtl.MTLComputePipelineState,
17-
state_buffer: *mtl.MTLBuffer,
18-
pattern_buffer: *mtl.MTLBuffer,
19-
result_buffer: *mtl.MTLBuffer,
20-
found_flag_buffer: *mtl.MTLBuffer,
14+
device: mtl.MTLDevice,
15+
command_queue: mtl.MTLCommandQueue,
16+
compute_pso: mtl.MTLComputePipelineState,
17+
state_buffer: mtl.MTLBuffer,
18+
pattern_buffer: mtl.MTLBuffer,
19+
result_buffer: mtl.MTLBuffer,
20+
found_flag_buffer: mtl.MTLBuffer,
2121
pattern: Pattern,
2222
attempts: std.atomic.Value(u64),
2323
start_time: i64,
@@ -29,7 +29,7 @@ pub const FullGpuGrinder = struct {
2929
const Self = @This();
3030

3131
pub fn init(allocator: std.mem.Allocator, pattern: Pattern) !Self {
32-
const device = mtl.MTLCreateSystemDefaultDevice() orelse {
32+
const device = mtl.createSystemDefaultDevice() orelse {
3333
return error.NoMetalDevice;
3434
};
3535

@@ -60,7 +60,7 @@ pub const FullGpuGrinder = struct {
6060
std.debug.print("Loaded shader: {s} ({d} bytes)\n", .{ SHADER_PATH, shader_source.len });
6161

6262
const source_ns = mtl.NSString.stringWithUTF8String(shader_z.ptr);
63-
const library = device.newLibraryWithSourceOptionsError(source_ns, null, null) orelse {
63+
var library = device.newLibraryWithSourceOptionsError(source_ns, null, null) orelse {
6464
std.debug.print("Shader compilation failed\n", .{});
6565
command_queue.release();
6666
device.release();
@@ -69,15 +69,15 @@ pub const FullGpuGrinder = struct {
6969
defer library.release();
7070

7171
const func_name = mtl.NSString.stringWithUTF8String("vanity_search");
72-
const func = library.newFunctionWithName(func_name) orelse {
72+
var func = library.newFunctionWithName(func_name) orelse {
7373
std.debug.print("Function 'vanity_search' not found\n", .{});
7474
command_queue.release();
7575
device.release();
7676
return error.FunctionNotFound;
7777
};
7878
defer func.release();
7979

80-
const compute_pso = device.newComputePipelineStateWithFunctionError(func, null) orelse {
80+
var compute_pso = device.newComputePipelineStateWithFunctionError(func, null) orelse {
8181
command_queue.release();
8282
device.release();
8383
return error.PipelineCreationFailed;
@@ -88,22 +88,22 @@ pub const FullGpuGrinder = struct {
8888
std.debug.print("Full GPU mode: SHA512 + Ed25519 + Base58 + Pattern all on GPU\n", .{});
8989

9090
// Create buffers
91-
const state_buffer = device.newBufferWithLengthOptions(16, .MTLResourceCPUCacheModeDefaultCache) orelse {
91+
var state_buffer = device.newBufferWithLengthOptions(16, .MTLResourceCPUCacheModeDefaultCache) orelse {
9292
compute_pso.release();
9393
command_queue.release();
9494
device.release();
9595
return error.BufferCreationFailed;
9696
};
9797

98-
const pattern_buffer = device.newBufferWithLengthOptions(@sizeOf(GpuPatternConfig), .MTLResourceCPUCacheModeDefaultCache) orelse {
98+
var pattern_buffer = device.newBufferWithLengthOptions(@sizeOf(GpuPatternConfig), .MTLResourceCPUCacheModeDefaultCache) orelse {
9999
state_buffer.release();
100100
compute_pso.release();
101101
command_queue.release();
102102
device.release();
103103
return error.BufferCreationFailed;
104104
};
105105

106-
const result_buffer = device.newBufferWithLengthOptions(@sizeOf(GpuResultBuffer), .MTLResourceCPUCacheModeDefaultCache) orelse {
106+
var result_buffer = device.newBufferWithLengthOptions(@sizeOf(GpuResultBuffer), .MTLResourceCPUCacheModeDefaultCache) orelse {
107107
pattern_buffer.release();
108108
state_buffer.release();
109109
compute_pso.release();
@@ -172,8 +172,8 @@ pub const FullGpuGrinder = struct {
172172
state_ptr[0] = self.cpu_prng.next();
173173
state_ptr[1] = self.cpu_prng.next();
174174

175-
const cmd_buffer = self.command_queue.commandBuffer() orelse return null;
176-
const encoder = cmd_buffer.computeCommandEncoder() orelse return null;
175+
var cmd_buffer = self.command_queue.commandBuffer() orelse return null;
176+
var encoder = cmd_buffer.computeCommandEncoder() orelse return null;
177177

178178
encoder.setComputePipelineState(self.compute_pso);
179179
encoder.setBufferOffsetAtIndex(self.state_buffer, 0, 0);

src/grinders/hybrid.zig

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ const SHADER_PATH = mod.SHADER_PATH;
1515
/// - GPU generates seeds in parallel across all cores
1616
/// - Multiple CPU threads process seeds simultaneously
1717
pub const HybridGrinder = struct {
18-
device: *mtl.MTLDevice,
19-
command_queue: *mtl.MTLCommandQueue,
20-
compute_pso: *mtl.MTLComputePipelineState,
21-
seed_buffers: [NUM_BUFFERS]*mtl.MTLBuffer,
22-
state_buffers: [NUM_BUFFERS]*mtl.MTLBuffer,
18+
device: mtl.MTLDevice,
19+
command_queue: mtl.MTLCommandQueue,
20+
compute_pso: mtl.MTLComputePipelineState,
21+
seed_buffers: [NUM_BUFFERS]mtl.MTLBuffer,
22+
state_buffers: [NUM_BUFFERS]mtl.MTLBuffer,
2323
pattern: Pattern,
2424
attempts: std.atomic.Value(u64),
2525
start_time: i64,
@@ -32,7 +32,7 @@ pub const HybridGrinder = struct {
3232
const Self = @This();
3333

3434
pub fn init(allocator: std.mem.Allocator, pattern: Pattern) !Self {
35-
const device = mtl.MTLCreateSystemDefaultDevice() orelse {
35+
const device = mtl.createSystemDefaultDevice() orelse {
3636
return error.NoMetalDevice;
3737
};
3838

@@ -63,22 +63,22 @@ pub const HybridGrinder = struct {
6363
std.debug.print("Loaded shader: {s} ({d} bytes)\n", .{ SHADER_PATH, shader_source.len });
6464

6565
const source_ns = mtl.NSString.stringWithUTF8String(shader_z.ptr);
66-
const library = device.newLibraryWithSourceOptionsError(source_ns, null, null) orelse {
66+
var library = device.newLibraryWithSourceOptionsError(source_ns, null, null) orelse {
6767
command_queue.release();
6868
device.release();
6969
return error.ShaderCompileFailed;
7070
};
7171
defer library.release();
7272

7373
const func_name = mtl.NSString.stringWithUTF8String("generate_seeds");
74-
const func = library.newFunctionWithName(func_name) orelse {
74+
var func = library.newFunctionWithName(func_name) orelse {
7575
command_queue.release();
7676
device.release();
7777
return error.FunctionNotFound;
7878
};
7979
defer func.release();
8080

81-
const compute_pso = device.newComputePipelineStateWithFunctionError(func, null) orelse {
81+
var compute_pso = device.newComputePipelineStateWithFunctionError(func, null) orelse {
8282
command_queue.release();
8383
device.release();
8484
return error.PipelineCreationFailed;
@@ -89,8 +89,8 @@ pub const HybridGrinder = struct {
8989
std.debug.print("CPU threads for processing: {d}\n", .{NUM_CPU_THREADS});
9090

9191
// Create triple-buffered resources
92-
var seed_buffers: [NUM_BUFFERS]*mtl.MTLBuffer = undefined;
93-
var state_buffers: [NUM_BUFFERS]*mtl.MTLBuffer = undefined;
92+
var seed_buffers: [NUM_BUFFERS]mtl.MTLBuffer = undefined;
93+
var state_buffers: [NUM_BUFFERS]mtl.MTLBuffer = undefined;
9494
const seed_buffer_size = BATCH_SIZE * 32;
9595

9696
for (0..NUM_BUFFERS) |i| {
@@ -166,13 +166,13 @@ pub const HybridGrinder = struct {
166166
self.device.release();
167167
}
168168

169-
fn submitGpuWork(self: *Self, buffer_idx: usize) ?*mtl.MTLCommandBuffer {
169+
fn submitGpuWork(self: *Self, buffer_idx: usize) ?mtl.MTLCommandBuffer {
170170
const state_ptr: *[2]u64 = @ptrCast(@alignCast(self.state_buffers[buffer_idx].contents()));
171171
state_ptr[0] = self.cpu_prng.next();
172172
state_ptr[1] = self.cpu_prng.next();
173173

174-
const cmd_buffer = self.command_queue.commandBuffer() orelse return null;
175-
const encoder = cmd_buffer.computeCommandEncoder() orelse return null;
174+
var cmd_buffer = self.command_queue.commandBuffer() orelse return null;
175+
var encoder = cmd_buffer.computeCommandEncoder() orelse return null;
176176

177177
encoder.setComputePipelineState(self.compute_pso);
178178
encoder.setBufferOffsetAtIndex(self.seed_buffers[buffer_idx], 0, 0);
@@ -268,7 +268,7 @@ pub const HybridGrinder = struct {
268268
const num_batches = max_attempts / BATCH_SIZE;
269269
if (num_batches == 0) return null;
270270

271-
var cmd_buffers: [NUM_BUFFERS]?*mtl.MTLCommandBuffer = .{ null, null, null };
271+
var cmd_buffers: [NUM_BUFFERS]?mtl.MTLCommandBuffer = .{ null, null, null };
272272
var found = std.atomic.Value(bool).init(false);
273273
var result: ?FoundKey = null;
274274
var result_mutex = std.Thread.Mutex{};
@@ -281,7 +281,7 @@ pub const HybridGrinder = struct {
281281
var active_buffer: usize = 0;
282282

283283
while (batch < num_batches and !found.load(.acquire)) {
284-
if (cmd_buffers[active_buffer]) |cmd| {
284+
if (cmd_buffers[active_buffer]) |*cmd| {
285285
cmd.waitUntilCompleted();
286286
}
287287

0 commit comments

Comments
 (0)