@@ -199,6 +199,46 @@ TEST_P(USMFillCommandTest, UpdateBeforeEnqueue) {
199199 Validate ((uint32_t *)new_shared_ptr, global_size, new_val);
200200}
201201
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+
202242// Test updating a command-buffer with multiple USM fill kernel commands
203243struct USMMultipleFillCommandTest
204244 : uur::command_buffer::urUpdatableCommandBufferExpExecutionTest {
0 commit comments