@@ -199,6 +199,46 @@ TEST_P(USMFillCommandTest, UpdateBeforeEnqueue) {
199
199
Validate ((uint32_t *)new_shared_ptr, global_size, new_val);
200
200
}
201
201
202
+ // Test using a different global size to fill and larger USM output buffer
203
+ TEST_P (USMFillCommandTest, UpdateNull) {
204
+ // Run command-buffer prior to update an verify output
205
+ ASSERT_SUCCESS (urCommandBufferEnqueueExp (updatable_cmd_buf_handle, queue, 0 ,
206
+ nullptr , nullptr ));
207
+ ASSERT_SUCCESS (urQueueFinish (queue));
208
+ Validate ((uint32_t *)shared_ptr, global_size, val);
209
+
210
+ // Set nullptr as kernel output at index 0
211
+ void *null_ptr = nullptr ;
212
+ ur_exp_command_buffer_update_pointer_arg_desc_t new_output_desc = {
213
+ UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_UPDATE_POINTER_ARG_DESC, // stype
214
+ nullptr , // pNext
215
+ 0 , // argIndex
216
+ nullptr , // pProperties
217
+ &null_ptr, // pArgValue
218
+ };
219
+
220
+ ur_exp_command_buffer_update_kernel_launch_desc_t update_desc = {
221
+ UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_UPDATE_KERNEL_LAUNCH_DESC, // stype
222
+ nullptr , // pNext
223
+ kernel, // hNewKernel
224
+ 0 , // numNewMemObjArgs
225
+ 1 , // numNewPointerArgs
226
+ 0 , // numNewValueArgs
227
+ n_dimensions, // newWorkDim
228
+ nullptr , // pNewMemObjArgList
229
+ &new_output_desc, // pNewPointerArgList
230
+ nullptr , // pNewValueArgList
231
+ nullptr , // pNewGlobalWorkOffset
232
+ nullptr , // pNewGlobalWorkSize
233
+ nullptr , // pNewLocalWorkSize
234
+ };
235
+
236
+ // Verify update kernel succeeded but don't run to avoid dereferencing
237
+ // the nullptr.
238
+ ASSERT_SUCCESS (
239
+ urCommandBufferUpdateKernelLaunchExp (command_handle, &update_desc));
240
+ }
241
+
202
242
// Test updating a command-buffer with multiple USM fill kernel commands
203
243
struct USMMultipleFillCommandTest
204
244
: uur::command_buffer::urUpdatableCommandBufferExpExecutionTest {
0 commit comments