Skip to content

Commit eb7fc0b

Browse files
OpenCL properties (#35)
1 parent 37c507d commit eb7fc0b

File tree

3 files changed

+45
-7
lines changed

3 files changed

+45
-7
lines changed

source/dcompute/driver/ocl120/context.d

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ struct Context
1919
{
2020
@(0x1080) uint referenceCount;
2121
@(0x1081) Device* _devices;
22-
@(0x1082) Properties* properties;
23-
@(0x1083) uint numDevices;
24-
ArrayAccesssor!(_devices,numDevices) devices;
22+
@(0x1082) Properties* _properties;
23+
ZeroTerminatedArrayAccessor!_properties properties;
24+
@(0x1083) uint _numDevices;
25+
ArrayAccesssor!(_devices,_numDevices) devices;
2526
// Extensions
2627
//@(0x2010) khrTerminate;
2728
//@(0x200E) khrMemoryInitialise;

source/dcompute/driver/ocl120/program.d

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@ struct Program
99
{
1010
@(0x1160) uint referneceCount;
1111
@(0x1161) Context context;
12+
1213
@(0x1162) uint _numDevices;
1314
@(0x1163) Device* _devices;
1415
ArrayAccesssor!(_devices,_numDevices) devices;
16+
1517
@(0x1164) char* _source;
1618
StringzAccessor!(_source) source;
19+
1720
@(0x1165) size_t* _binarySizes;
18-
// TODO expose `binaries` properly
19-
@(0x1166) ubyte** binaries;
21+
@(0x1166) ubyte** _binaries;
2022
@(0x1167) size_t _numKernels;
21-
ArrayAccesssor!(_binarySizes,_numKernels) binarySizes;
23+
ArrayAccesssor2D!(_binaries,_binarySizes,_numKernels) binaries;
24+
2225
@(0x1168) char* _kernelNames;
2326
StringzAccessor!(_kernelNames) kernelNames;
2427
}

source/dcompute/driver/ocl120/util.d

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,48 @@ T[Args.length + 1] propertyList(T,Args...)(Args args)
2727
return props;
2828
}
2929

30-
struct ArrayAccesssor(alias ptr, alias len) {}
30+
struct ArrayAccesssor(alias ptr, alias len)
31+
{
32+
alias elementType = typeof(*ptr);
33+
}
34+
35+
struct ArrayAccesssor2D(alias ptr, alias lens, alias len)
36+
{
37+
alias elementType = typeof(**ptr);
38+
}
3139

40+
// C style char*
3241
struct StringzAccessor(alias ptr) {}
3342

43+
// A propertyList
3444
struct ZeroTerminatedArrayAccessor(alias ptr) {}
3545

3646
mixin template generateGetInfo(alias func)
3747
{
3848
//TODO
3949
//
4050
}
51+
52+
// Returned by ArrayAccesssor2D
53+
struct RangeOfArray(T)
54+
{
55+
T** ptr;
56+
size_t* lengths;
57+
size_t length;
58+
size_t index;
59+
60+
bool empty()
61+
{
62+
return index == length;
63+
}
64+
65+
@property T[] front()
66+
{
67+
return ptr[index][0 .. lengths[index]];
68+
}
69+
70+
void popFront()
71+
{
72+
++index;
73+
}
74+
}

0 commit comments

Comments
 (0)