Skip to content

Commit 89102ff

Browse files
committed
Add validation for a few image_desc_t members.
Also removes these checks from the cuda and hip adapters since they should be caught by the validation layer now. The new validation rules bring image_desc_t in line with the CL struct it was derived from. We already had CTS coverage for them.
1 parent aaf0810 commit 89102ff

File tree

8 files changed

+36
-28
lines changed

8 files changed

+36
-28
lines changed

include/ur_api.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2556,8 +2556,8 @@ typedef struct ur_image_desc_t {
25562556
size_t arraySize; ///< [in] image array size
25572557
size_t rowPitch; ///< [in] image row pitch
25582558
size_t slicePitch; ///< [in] image slice pitch
2559-
uint32_t numMipLevel; ///< [in] number of MIP levels
2560-
uint32_t numSamples; ///< [in] number of samples
2559+
uint32_t numMipLevel; ///< [in] number of MIP levels, must be `0`
2560+
uint32_t numSamples; ///< [in] number of samples, must be `0`
25612561

25622562
} ur_image_desc_t;
25632563

@@ -2601,6 +2601,10 @@ typedef struct ur_image_desc_t {
26012601
/// - ::UR_RESULT_ERROR_INVALID_VALUE
26022602
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
26032603
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`
2604+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
2605+
/// + `pImageDesc && pImageDesc->numSamples != 0`
2606+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
2607+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
26042608
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
26052609
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
26062610
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

scripts/core/memory.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,10 @@ members:
197197
desc: "[in] image slice pitch"
198198
- type: uint32_t
199199
name: numMipLevel
200-
desc: "[in] number of MIP levels"
200+
desc: "[in] number of MIP levels, must be `0`"
201201
- type: uint32_t
202202
name: numSamples
203-
desc: "[in] number of samples"
203+
desc: "[in] number of samples, must be `0`"
204204
--- #--------------------------------------------------------------------------
205205
type: function
206206
desc: "Create an image object"
@@ -242,6 +242,10 @@ returns:
242242
- $X_RESULT_ERROR_INVALID_VALUE
243243
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
244244
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
245+
- "`pImageDesc && pImageDesc->numMipLevel != 0`"
246+
- "`pImageDesc && pImageDesc->numSamples != 0`"
247+
- "`pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`"
248+
- "`pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`"
245249
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
246250
- $X_RESULT_ERROR_INVALID_OPERATION
247251
- $X_RESULT_ERROR_INVALID_HOST_PTR:

source/adapters/cuda/memory.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,16 +208,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
208208
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
209209
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_ARRAY,
210210
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
211-
UR_ASSERT(pImageDesc->numMipLevel == 0,
212-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
213-
UR_ASSERT(pImageDesc->numSamples == 0,
214-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
215-
if (!pHost) {
216-
UR_ASSERT(pImageDesc->rowPitch == 0,
217-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
218-
UR_ASSERT(pImageDesc->slicePitch == 0,
219-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
220-
}
221211

222212
// We only support RBGA channel order
223213
// TODO: check SYCL CTS and spec. May also have to support BGRA

source/adapters/hip/memory.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -361,16 +361,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
361361
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
362362
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_ARRAY,
363363
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
364-
UR_ASSERT(pImageDesc->numMipLevel == 0,
365-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
366-
UR_ASSERT(pImageDesc->numSamples == 0,
367-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
368-
if (!pHost) {
369-
UR_ASSERT(pImageDesc->rowPitch == 0,
370-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
371-
UR_ASSERT(pImageDesc->slicePitch == 0,
372-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
373-
}
374364

375365
// We only support RBGA channel order
376366
// TODO: check SYCL CTS and spec. May also have to support BGRA

source/loader/layers/validation/ur_valddi.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,6 +1082,22 @@ __urdlllocal ur_result_t UR_APICALL urMemImageCreate(
10821082
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
10831083
}
10841084

1085+
if (pImageDesc && pImageDesc->numMipLevel != 0) {
1086+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1087+
}
1088+
1089+
if (pImageDesc && pImageDesc->numSamples != 0) {
1090+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1091+
}
1092+
1093+
if (pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr) {
1094+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1095+
}
1096+
1097+
if (pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr) {
1098+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1099+
}
1100+
10851101
if (pHost == NULL &&
10861102
(flags & (UR_MEM_FLAG_USE_HOST_POINTER |
10871103
UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER)) != 0) {

source/loader/ur_libapi.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,6 +1512,10 @@ ur_result_t UR_APICALL urContextSetExtendedDeleter(
15121512
/// - ::UR_RESULT_ERROR_INVALID_VALUE
15131513
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
15141514
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`
1515+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
1516+
/// + `pImageDesc && pImageDesc->numSamples != 0`
1517+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
1518+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
15151519
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
15161520
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
15171521
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

source/ur_api.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,10 @@ ur_result_t UR_APICALL urContextSetExtendedDeleter(
13061306
/// - ::UR_RESULT_ERROR_INVALID_VALUE
13071307
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
13081308
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`
1309+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
1310+
/// + `pImageDesc && pImageDesc->numSamples != 0`
1311+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
1312+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
13091313
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
13101314
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
13111315
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

test/conformance/memory/memory_adapter_native_cpu.match

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ urMemGetInfoTest.InvalidSizeSmall/SYCL_NATIVE_CPU___SYCL_Native_CPU___UR_MEM_INF
77
urMemImageCreateTest.SuccessWith3DImageType/SYCL_NATIVE_CPU___SYCL_Native_CPU_
88
urMemImageCreateTest.InvalidSize/SYCL_NATIVE_CPU___SYCL_Native_CPU_
99
urMemImageCreateTest.InvalidImageDescStype/SYCL_NATIVE_CPU___SYCL_Native_CPU_
10-
urMemImageCreateTest.InvalidImageDescNumMipLevel/SYCL_NATIVE_CPU___SYCL_Native_CPU_
11-
urMemImageCreateTest.InvalidImageDescNumSamples/SYCL_NATIVE_CPU___SYCL_Native_CPU_
12-
urMemImageCreateTest.InvalidImageDescRowPitch/SYCL_NATIVE_CPU___SYCL_Native_CPU_
13-
urMemImageCreateTest.InvalidImageDescSlicePitch/SYCL_NATIVE_CPU___SYCL_Native_CPU_
1410
urMemImageCreateTestWith1DMemoryTypeParam.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU___UR_MEM_TYPE_IMAGE1D
1511
urMemImageCreateTestWith1DMemoryTypeParam.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU___UR_MEM_TYPE_IMAGE1D_ARRAY
1612
urMemImageCreateTestWith2DMemoryTypeParam.Success/SYCL_NATIVE_CPU___SYCL_Native_CPU___UR_MEM_TYPE_IMAGE2D

0 commit comments

Comments
 (0)