@@ -1926,23 +1926,33 @@ piextKernelSetArgMemObj(pi_kernel Kernel, pi_uint32 ArgIndex,
1926
1926
// to process it later when the device is known (at the kernel enqueue).
1927
1927
//
1928
1928
ur_kernel_handle_t UrKernel = reinterpret_cast <ur_kernel_handle_t >(Kernel);
1929
- if (ArgProperties) {
1930
- assert (ArgProperties->type == PI_KERNEL_ARG_MEM_OBJ_ACCESS);
1931
- ur_kernel_arg_mem_obj_properties_t UrMemProperties{};
1932
- UrMemProperties.stype = UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES;
1933
- switch (ArgProperties->mem_access ) {
1934
- case PI_ACCESS_READ_ONLY:
1935
- UrMemProperties.memoryAccess = UR_MEM_FLAG_READ_ONLY;
1936
- break ;
1937
- case PI_ACCESS_WRITE_ONLY:
1938
- UrMemProperties.memoryAccess = UR_MEM_FLAG_WRITE_ONLY;
1939
- break ;
1940
- case PI_ACCESS_READ_WRITE:
1941
- UrMemProperties.memoryAccess = UR_MEM_FLAG_READ_WRITE;
1942
- break ;
1943
- }
1929
+ // the only applicable type, just ignore anything else
1930
+ if (ArgProperties && ArgProperties->type == PI_KERNEL_ARG_MEM_OBJ_ACCESS) {
1931
+ // following structure layout checks to be replaced with
1932
+ // std::is_layout_compatible after move to C++20
1933
+ static_assert (sizeof (pi_mem_obj_property) ==
1934
+ sizeof (ur_kernel_arg_mem_obj_properties_t ));
1935
+ static_assert (sizeof (pi_mem_obj_property::type) ==
1936
+ sizeof (ur_kernel_arg_mem_obj_properties_t ::stype));
1937
+ static_assert (sizeof (pi_mem_obj_property::pNext) ==
1938
+ sizeof (ur_kernel_arg_mem_obj_properties_t ::pNext));
1939
+ static_assert (sizeof (pi_mem_obj_property::mem_access) ==
1940
+ sizeof (ur_kernel_arg_mem_obj_properties_t ::memoryAccess));
1941
+
1942
+ static_assert (uint32_t (PI_ACCESS_READ_WRITE) ==
1943
+ uint32_t (UR_MEM_FLAG_READ_WRITE));
1944
+ static_assert (uint32_t (PI_ACCESS_READ_ONLY) ==
1945
+ uint32_t (UR_MEM_FLAG_READ_ONLY));
1946
+ static_assert (uint32_t (PI_ACCESS_WRITE_ONLY) ==
1947
+ uint32_t (UR_MEM_FLAG_WRITE_ONLY));
1948
+ static_assert (uint32_t (PI_KERNEL_ARG_MEM_OBJ_ACCESS) ==
1949
+ uint32_t (UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES));
1950
+
1951
+ const ur_kernel_arg_mem_obj_properties_t *UrMemProperties =
1952
+ reinterpret_cast <const ur_kernel_arg_mem_obj_properties_t *>(
1953
+ ArgProperties);
1944
1954
HANDLE_ERRORS (
1945
- urKernelSetArgMemObj (UrKernel, ArgIndex, & UrMemProperties, UrMemory));
1955
+ urKernelSetArgMemObj (UrKernel, ArgIndex, UrMemProperties, UrMemory));
1946
1956
} else {
1947
1957
HANDLE_ERRORS (urKernelSetArgMemObj (UrKernel, ArgIndex, nullptr , UrMemory));
1948
1958
}
0 commit comments