MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / create_mapped_buffer

Function create_mapped_buffer

libavutil/vulkan.c:1337–1381  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1335}
1336
1337static int create_mapped_buffer(FFVulkanContext *s,
1338 FFVkBuffer *vkb, VkBufferUsageFlags usage,
1339 size_t size,
1340 VkExternalMemoryBufferCreateInfo *create_desc,
1341 VkImportMemoryHostPointerInfoEXT *import_desc,
1342 VkMemoryHostPointerPropertiesEXT props)
1343{
1344 int err;
1345 VkResult ret;
1346 FFVulkanFunctions *vk = &s->vkfn;
1347
1348 VkBufferCreateInfo buf_spawn = {
1349 .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
1350 .pNext = create_desc,
1351 .usage = usage,
1352 .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
1353 .size = size,
1354 };
1355 VkMemoryRequirements req = {
1356 .size = size,
1357 .alignment = s->hprops.minImportedHostPointerAlignment,
1358 .memoryTypeBits = props.memoryTypeBits,
1359 };
1360
1361 err = ff_vk_alloc_mem(s, &req,
1362 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,
1363 import_desc, &vkb->flags, &vkb->mem);
1364 if (err < 0)
1365 return err;
1366
1367 ret = vk->CreateBuffer(s->hwctx->act_dev, &buf_spawn, s->hwctx->alloc, &vkb->buf);
1368 if (ret != VK_SUCCESS) {
1369 vk->FreeMemory(s->hwctx->act_dev, vkb->mem, s->hwctx->alloc);
1370 return AVERROR_EXTERNAL;
1371 }
1372
1373 ret = vk->BindBufferMemory(s->hwctx->act_dev, vkb->buf, vkb->mem, 0);
1374 if (ret != VK_SUCCESS) {
1375 vk->FreeMemory(s->hwctx->act_dev, vkb->mem, s->hwctx->alloc);
1376 vk->DestroyBuffer(s->hwctx->act_dev, vkb->buf, s->hwctx->alloc);
1377 return AVERROR_EXTERNAL;
1378 }
1379
1380 return 0;
1381}
1382
1383static void destroy_avvkbuf(void *opaque, uint8_t *data)
1384{

Callers 1

ff_vk_host_map_bufferFunction · 0.85

Calls 1

ff_vk_alloc_memFunction · 0.85

Tested by

no test coverage detected