Skip to content

Commit afe3123

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 5d5c810 commit afe3123

File tree

7 files changed

+36
-24
lines changed

7 files changed

+36
-24
lines changed

include/ur_api.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2466,8 +2466,8 @@ typedef struct ur_image_desc_t {
24662466
size_t arraySize; ///< [in] image array size
24672467
size_t rowPitch; ///< [in] image row pitch
24682468
size_t slicePitch; ///< [in] image slice pitch
2469-
uint32_t numMipLevel; ///< [in] number of MIP levels
2470-
uint32_t numSamples; ///< [in] number of samples
2469+
uint32_t numMipLevel; ///< [in] number of MIP levels, must be `0`
2470+
uint32_t numSamples; ///< [in] number of samples, must be `0`
24712471

24722472
} ur_image_desc_t;
24732473

@@ -2495,6 +2495,10 @@ typedef struct ur_image_desc_t {
24952495
/// - ::UR_RESULT_ERROR_INVALID_VALUE
24962496
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
24972497
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`
2498+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
2499+
/// + `pImageDesc && pImageDesc->numSamples != 0`
2500+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
2501+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
24982502
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
24992503
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
25002504
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

scripts/core/memory.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,10 @@ members:
201201
desc: "[in] image slice pitch"
202202
- type: uint32_t
203203
name: numMipLevel
204-
desc: "[in] number of MIP levels"
204+
desc: "[in] number of MIP levels, must be `0`"
205205
- type: uint32_t
206206
name: numSamples
207-
desc: "[in] number of samples"
207+
desc: "[in] number of samples, must be `0`"
208208
--- #--------------------------------------------------------------------------
209209
type: function
210210
desc: "Create an image object"
@@ -237,6 +237,10 @@ returns:
237237
- $X_RESULT_ERROR_INVALID_VALUE
238238
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
239239
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
240+
- "`pImageDesc && pImageDesc->numMipLevel != 0`"
241+
- "`pImageDesc && pImageDesc->numSamples != 0`"
242+
- "`pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`"
243+
- "`pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`"
240244
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
241245
- $X_RESULT_ERROR_INVALID_OPERATION
242246
- $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
@@ -231,16 +231,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
231231
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
232232
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_BUFFER,
233233
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
234-
UR_ASSERT(pImageDesc->numMipLevel == 0,
235-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
236-
UR_ASSERT(pImageDesc->numSamples == 0,
237-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
238-
if (!pHost) {
239-
UR_ASSERT(pImageDesc->rowPitch == 0,
240-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
241-
UR_ASSERT(pImageDesc->slicePitch == 0,
242-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
243-
}
244234

245235
ur_result_t Result = UR_RESULT_SUCCESS;
246236

source/adapters/hip/memory.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -341,16 +341,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
341341
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
342342
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_BUFFER,
343343
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
344-
UR_ASSERT(pImageDesc->numMipLevel == 0,
345-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
346-
UR_ASSERT(pImageDesc->numSamples == 0,
347-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
348-
if (!pHost) {
349-
UR_ASSERT(pImageDesc->rowPitch == 0,
350-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
351-
UR_ASSERT(pImageDesc->slicePitch == 0,
352-
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
353-
}
354344

355345
// We only support RBGA channel order
356346
// 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
@@ -1012,6 +1012,22 @@ __urdlllocal ur_result_t UR_APICALL urMemImageCreate(
10121012
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
10131013
}
10141014

1015+
if (pImageDesc && pImageDesc->numMipLevel != 0) {
1016+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1017+
}
1018+
1019+
if (pImageDesc && pImageDesc->numSamples != 0) {
1020+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1021+
}
1022+
1023+
if (pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr) {
1024+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1025+
}
1026+
1027+
if (pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr) {
1028+
return UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR;
1029+
}
1030+
10151031
if (pHost == NULL &&
10161032
(flags & (UR_MEM_FLAG_USE_HOST_POINTER |
10171033
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
@@ -1445,6 +1445,10 @@ ur_result_t UR_APICALL urContextSetExtendedDeleter(
14451445
/// - ::UR_RESULT_ERROR_INVALID_VALUE
14461446
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
14471447
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`
1448+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
1449+
/// + `pImageDesc && pImageDesc->numSamples != 0`
1450+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
1451+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
14481452
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
14491453
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
14501454
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

source/ur_api.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,6 +1242,10 @@ ur_result_t UR_APICALL urContextSetExtendedDeleter(
12421242
/// - ::UR_RESULT_ERROR_INVALID_VALUE
12431243
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
12441244
/// + `pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`
1245+
/// + `pImageDesc && pImageDesc->numMipLevel != 0`
1246+
/// + `pImageDesc && pImageDesc->numSamples != 0`
1247+
/// + `pImageDesc && pImageDesc->rowPitch != 0 && pHost == nullptr`
1248+
/// + `pImageDesc && pImageDesc->slicePitch != 0 && pHost == nullptr`
12451249
/// - ::UR_RESULT_ERROR_INVALID_IMAGE_SIZE
12461250
/// - ::UR_RESULT_ERROR_INVALID_OPERATION
12471251
/// - ::UR_RESULT_ERROR_INVALID_HOST_PTR

0 commit comments

Comments
 (0)