Skip to content

Commit 49e575e

Browse files
committed
refactor: Improve OpenCL command queue module structure and naming
1 parent 28c00ea commit 49e575e

File tree

2 files changed

+63
-41
lines changed

2 files changed

+63
-41
lines changed

src/cl.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ const opencl_header_file = switch (builtin.target.os.tag) {
88
};
99

1010
pub const opencl = @cImport({
11-
@cDefine("CL_TARGET_OPENCL_VERSION", opencl_target_version);
11+
@cDefine("CL_TARGET_OPENCL_VERSION", 300);
1212
@cInclude(opencl_header_file);
1313
});
1414

15-
fn get_opencl_version() u16 {
15+
fn getOpenCLVersion() u16 {
1616
if (std.fmt.parseInt(u16, opencl_target_version, 10)) |value| {
1717
return value;
1818
} else |_| {
1919
unreachable;
2020
}
2121
}
2222

23-
pub const opencl_version = get_opencl_version();
23+
pub const opencl_version = getOpenCLVersion();

src/command_queue.zig

Lines changed: 60 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,118 @@
1+
const std = @import("std");
2+
13
const cl = @import("cl.zig");
24
const opencl = cl.opencl;
3-
const std = @import("std");
45

5-
pub const enums = @import("enums/command_queue.zig");
66
const errors = @import("errors.zig");
7+
pub const OpenCLError = errors.OpenCLError;
8+
9+
pub const Property = struct {
10+
pub const out_of_order_exec_mode_enable = opencl.CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE;
11+
pub const profiling_enable = opencl.CL_QUEUE_PROFILING_ENABLE;
12+
};
13+
pub const Properties = opencl.cl_command_queue_properties;
14+
15+
pub const QueueProperty = struct {
16+
pub const properties = opencl.CL_QUEUE_PROPERTIES;
17+
pub const size = opencl.CL_QUEUE_SIZE;
18+
};
19+
pub const QueueProperties = opencl.cl_queue_properties;
720

8-
pub const cl_command_queue_properties = opencl.cl_command_queue_properties;
9-
pub const cl_queue_properties = opencl.cl_queue_properties;
10-
pub const cl_command_queue = *opaque {};
21+
pub const CommandQueue = *opaque {};
1122

1223
const cl_context = @import("context.zig").cl_context;
1324
const cl_device_id = @import("device.zig").cl_device_id;
1425

15-
pub inline fn create_with_properties(
16-
context: cl_context, device: cl_device_id,
17-
properties: ?[]const cl_queue_properties
18-
) errors.opencl_error!cl_command_queue {
19-
if (cl.opencl_version < 200) unreachable;
26+
pub fn create_with_properties(
27+
context: cl_context,
28+
device: cl_device_id,
29+
properties: ?[]const QueueProperties,
30+
) OpenCLError!CommandQueue {
31+
if (cl.opencl_version < 200) unreachable;
2032

21-
var properties_ptr: ?[*]const cl_queue_properties = null;
33+
var properties_ptr: ?[*]const QueueProperties = null;
2234
if (properties) |v| {
2335
properties_ptr = v.ptr;
2436
}
2537

2638
var ret: i32 = undefined;
27-
const command_queue: ?cl_command_queue = @ptrCast(opencl.clCreateCommandQueueWithProperties(
28-
@ptrCast(context), @ptrCast(device), properties_ptr, &ret
39+
const command_queue: ?CommandQueue = @ptrCast(opencl.clCreateCommandQueueWithProperties(
40+
@ptrCast(context),
41+
@ptrCast(device),
42+
properties_ptr,
43+
&ret,
2944
));
3045
if (ret == opencl.CL_SUCCESS) return command_queue.?;
3146

3247
const errors_arr = .{
33-
"invalid_value", "invalid_context", "invalid_device", "invalid_queue_properties",
34-
"out_of_resources", "out_of_host_memory"
48+
"invalid_value", "invalid_context",
49+
"invalid_device", "invalid_queue_properties",
50+
"out_of_resources", "out_of_host_memory",
3551
};
36-
return errors.translate_opencl_error(errors_arr, ret);
52+
return errors.translateOpenCLError(errors_arr, ret);
3753
}
3854

39-
pub inline fn create(
40-
context: cl_context, device: cl_device_id,
41-
properties: cl_command_queue_properties
42-
) errors.opencl_error!cl_command_queue {
55+
pub fn create(
56+
context: cl_context,
57+
device: cl_device_id,
58+
properties: Properties,
59+
) OpenCLError!CommandQueue {
4360
var ret: i32 = undefined;
44-
const command_queue: ?cl_command_queue = @ptrCast(opencl.clCreateCommandQueue(
45-
@ptrCast(context), @ptrCast(device), properties, &ret
61+
const command_queue: ?CommandQueue = @ptrCast(opencl.clCreateCommandQueue(
62+
@ptrCast(context),
63+
@ptrCast(device),
64+
properties,
65+
&ret,
4666
));
4767
if (ret == opencl.CL_SUCCESS) return command_queue.?;
4868

4969
const errors_arr = .{
50-
"invalid_value", "invalid_context", "invalid_device", "invalid_queue_properties",
51-
"out_of_resources", "out_of_host_memory"
70+
"invalid_value", "invalid_context",
71+
"invalid_device", "invalid_queue_properties",
72+
"out_of_resources", "out_of_host_memory",
5273
};
53-
return errors.translate_opencl_error(errors_arr, ret);
74+
return errors.translateOpenCLError(errors_arr, ret);
5475
}
5576

56-
pub inline fn flush(command_queue: cl_command_queue) errors.opencl_error!void {
77+
pub fn flush(command_queue: CommandQueue) OpenCLError!void {
5778
const ret: i32 = opencl.clFlush(@ptrCast(command_queue));
5879
if (ret == opencl.CL_SUCCESS) return;
5980

6081
const errors_arr = .{
61-
"out_of_host_memory", "invalid_command_queue", "out_of_resources"
82+
"out_of_host_memory", "invalid_command_queue", "out_of_resources",
6283
};
63-
return errors.translate_opencl_error(errors_arr, ret);
84+
return errors.translateOpenCLError(errors_arr, ret);
6485
}
6586

66-
pub inline fn finish(command_queue: cl_command_queue) errors.opencl_error!void {
87+
pub fn finish(command_queue: CommandQueue) OpenCLError!void {
6788
const ret: i32 = opencl.clFinish(@ptrCast(command_queue));
6889
if (ret == opencl.CL_SUCCESS) return;
6990

7091
const errors_arr = .{
71-
"out_of_host_memory", "invalid_command_queue", "out_of_resources"
92+
"out_of_host_memory", "invalid_command_queue", "out_of_resources",
7293
};
73-
return errors.translate_opencl_error(errors_arr, ret);
94+
return errors.translateOpenCLError(errors_arr, ret);
7495
}
7596

76-
pub inline fn retain(command_queue: cl_command_queue) errors.opencl_error!void {
97+
pub fn retain(command_queue: CommandQueue) OpenCLError!void {
7798
const ret: i32 = opencl.clRetainCommandQueue(@ptrCast(command_queue));
7899
if (ret == opencl.CL_SUCCESS) return;
79100

80101
const errors_arr = .{
81-
"out_of_host_memory", "invalid_command_queue", "out_of_resources"
102+
"out_of_host_memory", "invalid_command_queue", "out_of_resources",
82103
};
83-
return errors.translate_opencl_error(errors_arr, ret);
104+
return errors.translateOpenCLError(errors_arr, ret);
84105
}
85106

86-
pub inline fn release(command_queue: cl_command_queue) void {
107+
pub fn release(command_queue: CommandQueue) void {
87108
const ret: i32 = opencl.clReleaseCommandQueue(@ptrCast(command_queue));
88109
if (ret == opencl.CL_SUCCESS) return;
89110

90111
const errors_arr = .{
91-
"out_of_host_memory", "invalid_command_queue", "out_of_resources"
112+
"out_of_host_memory", "invalid_command_queue", "out_of_resources",
92113
};
93-
std.debug.panic("Unexpected error while releasing OpenCL command queue: {s}", .{
94-
@errorName(errors.translate_opencl_error(errors_arr, ret))}
114+
std.debug.panic(
115+
"Unexpected error while releasing OpenCL command queue: {s}",
116+
.{@errorName(errors.translateOpenCLError(errors_arr, ret))},
95117
);
96118
}

0 commit comments

Comments
 (0)