@@ -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
1717pub 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