@@ -49,21 +49,12 @@ detail::image_mem_impl::image_mem_impl(const image_descriptor &desc,
49
49
const device &syclDevice,
50
50
const context &syclContext)
51
51
: descriptor(desc), syclDevice(syclDevice), syclContext(syclContext) {
52
- if (desc.type == image_type::mipmap) {
53
- handle = alloc_mipmap_mem (desc, syclDevice, syclContext);
54
- } else {
55
- handle = alloc_image_mem (desc, syclDevice, syclContext);
56
- }
52
+ handle = alloc_image_mem (desc, syclDevice, syclContext);
57
53
}
58
54
59
55
detail::image_mem_impl::~image_mem_impl () {
60
- if (handle.raw_handle != nullptr ) {
61
- if (descriptor.type == image_type::mipmap) {
62
- free_mipmap_mem (handle, syclDevice, syclContext);
63
- } else {
64
- free_image_mem (handle, syclDevice, syclContext);
65
- }
66
- }
56
+ free_image_mem (this ->get_handle (), this ->get_descriptor ().type ,
57
+ this ->get_device (), this ->get_context ());
67
58
}
68
59
69
60
__SYCL_EXPORT
@@ -163,10 +154,21 @@ alloc_image_mem(const image_descriptor &desc, const sycl::device &syclDevice,
163
154
pi_device Device = DevImpl->getHandleRef ();
164
155
const sycl::detail::PluginPtr &Plugin = CtxImpl->getPlugin ();
165
156
166
- // Non-mipmap images must have only 1 level
167
- if (desc.num_levels != 1 )
157
+ if (desc.type == image_type::mipmap) {
158
+ // Mipmaps must have more than one level
159
+ if (desc.num_levels <= 1 )
160
+ throw sycl::exception (sycl::make_error_code (sycl::errc::invalid),
161
+ " Mipmap number of levels must be 2 or more" );
162
+ } else if (desc.type == image_type::standard) {
163
+ // Non-mipmap images must have only 1 level
164
+ if (desc.num_levels != 1 )
165
+ throw sycl::exception (sycl::make_error_code (sycl::errc::invalid),
166
+ " Image number of levels must be 1" );
167
+ } else {
168
+ // Not an image to allocate
168
169
throw sycl::exception (sycl::make_error_code (sycl::errc::invalid),
169
- " Image number of levels must be 1" );
170
+ " Invalid image type to allocate" );
171
+ }
170
172
171
173
pi_image_desc piDesc;
172
174
pi_image_format piFormat;
@@ -187,9 +189,11 @@ __SYCL_EXPORT image_mem_handle alloc_image_mem(const image_descriptor &desc,
187
189
return alloc_image_mem (desc, syclQueue.get_device (), syclQueue.get_context ());
188
190
}
189
191
190
- __SYCL_EXPORT image_mem_handle
191
- alloc_mipmap_mem (const image_descriptor &desc, const sycl::device &syclDevice,
192
- const sycl::context &syclContext) {
192
+ __SYCL_EXPORT_DEPRECATED (" Distinct mipmap allocs are deprecated. "
193
+ " Instead use alloc_image_mem()." )
194
+ image_mem_handle alloc_mipmap_mem (const image_descriptor &desc,
195
+ const sycl::device &syclDevice,
196
+ const sycl::context &syclContext) {
193
197
std::shared_ptr<sycl::detail::context_impl> CtxImpl =
194
198
sycl::detail::getSyclObjImpl (syclContext);
195
199
pi_context C = CtxImpl->getHandleRef ();
@@ -216,8 +220,10 @@ alloc_mipmap_mem(const image_descriptor &desc, const sycl::device &syclDevice,
216
220
return retHandle;
217
221
}
218
222
219
- __SYCL_EXPORT image_mem_handle alloc_mipmap_mem (const image_descriptor &desc,
220
- const sycl::queue &syclQueue) {
223
+ __SYCL_EXPORT_DEPRECATED (" Distinct mipmap allocs are deprecated. "
224
+ " Instead use alloc_image_mem()." )
225
+ image_mem_handle alloc_mipmap_mem (const image_descriptor &desc,
226
+ const sycl::queue &syclQueue) {
221
227
return alloc_mipmap_mem (desc, syclQueue.get_device (),
222
228
syclQueue.get_context ());
223
229
}
@@ -251,6 +257,7 @@ get_mip_level_mem_handle(const image_mem_handle mipMem, unsigned int level,
251
257
}
252
258
253
259
__SYCL_EXPORT void free_image_mem (image_mem_handle memHandle,
260
+ image_type imageType,
254
261
const sycl::device &syclDevice,
255
262
const sycl::context &syclContext) {
256
263
std::shared_ptr<sycl::detail::context_impl> CtxImpl =
@@ -261,19 +268,49 @@ __SYCL_EXPORT void free_image_mem(image_mem_handle memHandle,
261
268
pi_device Device = DevImpl->getHandleRef ();
262
269
const sycl::detail::PluginPtr &Plugin = CtxImpl->getPlugin ();
263
270
264
- Plugin->call <sycl::errc::memory_allocation,
265
- sycl::detail::PiApiKind::piextMemImageFree>(
266
- C, Device, memHandle.raw_handle );
271
+ if (memHandle.raw_handle != nullptr ) {
272
+ if (imageType == image_type::mipmap) {
273
+ Plugin->call <sycl::errc::memory_allocation,
274
+ sycl::detail::PiApiKind::piextMemMipmapFree>(
275
+ C, Device, memHandle.raw_handle );
276
+ } else if (imageType == image_type::standard) {
277
+ Plugin->call <sycl::errc::memory_allocation,
278
+ sycl::detail::PiApiKind::piextMemImageFree>(
279
+ C, Device, memHandle.raw_handle );
280
+ } else {
281
+ throw sycl::exception (sycl::make_error_code (sycl::errc::invalid),
282
+ " Invalid image type to free" );
283
+ }
284
+ }
267
285
}
268
286
269
287
__SYCL_EXPORT void free_image_mem (image_mem_handle memHandle,
288
+ image_type imageType,
270
289
const sycl::queue &syclQueue) {
290
+ free_image_mem (memHandle, imageType, syclQueue.get_device (),
291
+ syclQueue.get_context ());
292
+ }
293
+
294
+ __SYCL_EXPORT_DEPRECATED (" Distinct image frees are deprecated. "
295
+ " Instead use overload that accepts image_type." )
296
+ void free_image_mem (image_mem_handle memHandle, const sycl::device &syclDevice,
297
+ const sycl::context &syclContext) {
298
+ return free_image_mem (memHandle, image_type::standard, syclDevice,
299
+ syclContext);
300
+ }
301
+
302
+ __SYCL_EXPORT_DEPRECATED (" Distinct image frees are deprecated. "
303
+ " Instead use overload that accepts image_type." )
304
+ void free_image_mem (image_mem_handle memHandle, const sycl::queue &syclQueue) {
271
305
free_image_mem (memHandle, syclQueue.get_device (), syclQueue.get_context ());
272
306
}
273
307
274
- __SYCL_EXPORT void free_mipmap_mem (image_mem_handle memoryHandle,
275
- const sycl::device &syclDevice,
276
- const sycl::context &syclContext) {
308
+ __SYCL_EXPORT_DEPRECATED (
309
+ " Distinct mipmap frees are deprecated. "
310
+ " Instead use free_image_mem() that accepts image_type." )
311
+ void free_mipmap_mem (image_mem_handle memoryHandle,
312
+ const sycl::device &syclDevice,
313
+ const sycl::context &syclContext) {
277
314
std::shared_ptr<sycl::detail::context_impl> CtxImpl =
278
315
sycl::detail::getSyclObjImpl (syclContext);
279
316
pi_context C = CtxImpl->getHandleRef ();
@@ -287,8 +324,11 @@ __SYCL_EXPORT void free_mipmap_mem(image_mem_handle memoryHandle,
287
324
C, Device, memoryHandle.raw_handle );
288
325
}
289
326
290
- __SYCL_EXPORT void free_mipmap_mem (image_mem_handle memoryHandle,
291
- const sycl::queue &syclQueue) {
327
+ __SYCL_EXPORT_DEPRECATED (
328
+ " Distinct mipmap frees are deprecated. "
329
+ " Instead use free_image_mem() that accepts image_type." )
330
+ void free_mipmap_mem (image_mem_handle memoryHandle,
331
+ const sycl::queue &syclQueue) {
292
332
free_mipmap_mem (memoryHandle, syclQueue.get_device (),
293
333
syclQueue.get_context ());
294
334
}
0 commit comments