@@ -99,6 +99,57 @@ TEST_P(urEnqueueMemBufferMapTest, SuccessPartialMap) {
9999 }
100100}
101101
102+ TEST_P (urEnqueueMemBufferMapTest, SuccesPinnedRead) {
103+ const size_t memSize = sizeof (int );
104+ const int value = 20 ;
105+
106+ ur_mem_handle_t memObj;
107+ ASSERT_SUCCESS (urMemBufferCreate (
108+ context, UR_MEM_FLAG_READ_WRITE | UR_MEM_FLAG_ALLOC_HOST_POINTER,
109+ memSize, nullptr , &memObj));
110+
111+ ASSERT_SUCCESS (urEnqueueMemBufferWrite (queue, memObj, true , 0 , sizeof (int ),
112+ &value, 0 , nullptr , nullptr ));
113+
114+ int *host_ptr = nullptr ;
115+ ASSERT_SUCCESS (urEnqueueMemBufferMap (queue, memObj, true , UR_MAP_FLAG_READ,
116+ 0 , sizeof (int ), 0 , nullptr , nullptr ,
117+ (void **)&host_ptr));
118+
119+ ASSERT_EQ (*host_ptr, value);
120+ ASSERT_SUCCESS (
121+ urEnqueueMemUnmap (queue, memObj, host_ptr, 0 , nullptr , nullptr ));
122+
123+ ASSERT_SUCCESS (urMemRelease (memObj));
124+ }
125+
126+ TEST_P (urEnqueueMemBufferMapTest, SuccesPinnedWrite) {
127+ const size_t memSize = sizeof (int );
128+ const int value = 30 ;
129+
130+ ur_mem_handle_t memObj;
131+ ASSERT_SUCCESS (urMemBufferCreate (
132+ context, UR_MEM_FLAG_READ_WRITE | UR_MEM_FLAG_ALLOC_HOST_POINTER,
133+ memSize, nullptr , &memObj));
134+
135+ int *host_ptr = nullptr ;
136+ ASSERT_SUCCESS (urEnqueueMemBufferMap (queue, memObj, true , UR_MAP_FLAG_WRITE,
137+ 0 , sizeof (int ), 0 , nullptr , nullptr ,
138+ (void **)&host_ptr));
139+
140+ *host_ptr = value;
141+
142+ ASSERT_SUCCESS (
143+ urEnqueueMemUnmap (queue, memObj, host_ptr, 0 , nullptr , nullptr ));
144+
145+ int read_value = 0 ;
146+ ASSERT_SUCCESS (urEnqueueMemBufferRead (queue, memObj, true , 0 , sizeof (int ),
147+ &read_value, 0 , nullptr , nullptr ));
148+
149+ ASSERT_EQ (read_value, value);
150+ ASSERT_SUCCESS (urMemRelease (memObj));
151+ }
152+
102153TEST_P (urEnqueueMemBufferMapTest, SuccessMultiMaps) {
103154 const std::vector<uint32_t > input (count, 0 );
104155 ASSERT_SUCCESS (urEnqueueMemBufferWrite (queue, buffer, true , 0 , size,
0 commit comments