Skip to content

Commit d17acba

Browse files
committed
Verify original output buffer before updating command buffer
1 parent f209922 commit d17acba

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

test_conformance/extensions/cl_khr_command_buffer/cl_khr_command_buffer_mutable_dispatch/mutable_command_simultaneous.cpp

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ struct SimultaneousMutableDispatchTest : public BasicMutableCommandBufferTest
297297
{
298298
cl_int offset;
299299
std::vector<cl_int> output_buffer;
300+
std::vector<cl_int> updated_output_buffer;
300301
// 0:user event, 1:offset-buffer fill event, 2:kernel done event
301302
clEventWrapper wait_events[3];
302303
};
@@ -373,7 +374,7 @@ struct SimultaneousMutableDispatchTest : public BasicMutableCommandBufferTest
373374

374375
error = clEnqueueReadBuffer(work_queue, new_out_mem, CL_FALSE,
375376
pd.offset * sizeof(cl_int), data_size(),
376-
pd.output_buffer.data(), 1,
377+
pd.updated_output_buffer.data(), 1,
377378
&pd.wait_events[2], nullptr);
378379
test_error(error, "clEnqueueReadBuffer failed");
379380

@@ -388,8 +389,10 @@ struct SimultaneousMutableDispatchTest : public BasicMutableCommandBufferTest
388389
cl_int offset = static_cast<cl_int>(num_elements);
389390

390391
std::vector<SimulPassData> simul_passes = {
391-
{ 0, std::vector<cl_int>(num_elements) },
392-
{ offset, std::vector<cl_int>(num_elements) }
392+
{ 0, std::vector<cl_int>(num_elements),
393+
std::vector<cl_int>(num_elements) },
394+
{ offset, std::vector<cl_int>(num_elements),
395+
std::vector<cl_int>(num_elements) }
393396
};
394397

395398
for (auto&& pass : simul_passes)
@@ -407,13 +410,26 @@ struct SimultaneousMutableDispatchTest : public BasicMutableCommandBufferTest
407410
test_error(error, "clFinish failed");
408411

409412
// verify the result buffers
410-
for (auto&& pass : simul_passes)
413+
auto& first_pass_output = simul_passes[0].output_buffer;
414+
auto& first_pass_updated_output = simul_passes[0].updated_output_buffer;
415+
auto& second_pass_output = simul_passes[1].output_buffer;
416+
auto& second_pass_updated_output =
417+
simul_passes[1].updated_output_buffer;
418+
for (size_t i = 0; i < num_elements; i++)
411419
{
412-
auto& res_data = pass.output_buffer;
413-
for (size_t i = 0; i < num_elements; i++)
414-
{
415-
CHECK_VERIFICATION_ERROR(pattern_pri, res_data[i], i);
416-
}
420+
// First pass:
421+
// Before updating, out_mem is copied from in_mem (pattern_pri)
422+
CHECK_VERIFICATION_ERROR(pattern_pri, first_pass_output[i], i);
423+
// After updating, new_out_mem is copied from in_mem (pattern_pri)
424+
CHECK_VERIFICATION_ERROR(pattern_pri, first_pass_updated_output[i],
425+
i);
426+
// Second pass:
427+
// Before updating, out_mem is filled with overwritten_pattern
428+
CHECK_VERIFICATION_ERROR(overwritten_pattern, second_pass_output[i],
429+
i);
430+
// After updating, new_out_mem is copied from in_mem (pattern_pri)
431+
CHECK_VERIFICATION_ERROR(pattern_pri, second_pass_updated_output[i],
432+
i);
417433
}
418434

419435
return CL_SUCCESS;

0 commit comments

Comments
 (0)