本文整理汇总了C++中VkLayerDispatchTable::AllocateCommandBuffers方法的典型用法代码示例。如果您正苦于以下问题:C++ VkLayerDispatchTable::AllocateCommandBuffers方法的具体用法?C++ VkLayerDispatchTable::AllocateCommandBuffers怎么用?C++ VkLayerDispatchTable::AllocateCommandBuffers使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VkLayerDispatchTable
的用法示例。
在下文中一共展示了VkLayerDispatchTable::AllocateCommandBuffers方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: vkAllocateCommandBuffers
VkResult VKAPI_CALL vkAllocateCommandBuffers(
VkDevice device,
const VkCommandBufferAllocateInfo* pAllocateInfo,
VkCommandBuffer* pCommandBuffers)
{
dispatch_key key = get_dispatch_key(device);
layer_data *my_data = get_my_data_ptr(key, layer_data_map);
VkLayerDispatchTable *pTable = my_data->device_dispatch_table;
VkResult result;
startReadObject(my_data, device);
startWriteObject(my_data, pAllocateInfo->commandPool);
result = pTable->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
finishReadObject(my_data, device);
finishWriteObject(my_data, pAllocateInfo->commandPool);
// Record mapping from command buffer to command pool
if (VK_SUCCESS == result) {
for (int index=0;index<pAllocateInfo->commandBufferCount;index++) {
loader_platform_thread_lock_mutex(&threadingLock);
command_pool_map[pCommandBuffers[index]] = pAllocateInfo->commandPool;
loader_platform_thread_unlock_mutex(&threadingLock);
}
}
return result;
}
示例2: startReadObject
VKAPI_ATTR VkResult VKAPI_CALL
AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, VkCommandBuffer *pCommandBuffers) {
dispatch_key key = get_dispatch_key(device);
layer_data *my_data = get_my_data_ptr(key, layer_data_map);
VkLayerDispatchTable *pTable = my_data->device_dispatch_table;
VkResult result;
startReadObject(my_data, device);
startWriteObject(my_data, pAllocateInfo->commandPool);
result = pTable->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers);
finishReadObject(my_data, device);
finishWriteObject(my_data, pAllocateInfo->commandPool);
// Record mapping from command buffer to command pool
if (VK_SUCCESS == result) {
for (uint32_t index = 0; index < pAllocateInfo->commandBufferCount; index++) {
std::lock_guard<std::mutex> lock(global_lock);
command_pool_map[pCommandBuffers[index]] = pAllocateInfo->commandPool;
}
}
return result;
}
示例3: writePPM
//.........这里部分代码省略.........
// Create image3 and allocate its memory, if needed.
if (need2steps) {
err = pTableDevice->CreateImage(device, &imgCreateInfo3, NULL,
&data.image3);
assert(!err);
if (VK_SUCCESS != err)
return;
pTableDevice->GetImageMemoryRequirements(device, data.image3,
&memRequirements);
memAllocInfo.allocationSize = memRequirements.size;
pInstanceTable->GetPhysicalDeviceMemoryProperties(physicalDevice,
&memoryProperties);
pass = memory_type_from_properties(
&memoryProperties, memRequirements.memoryTypeBits,
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &memAllocInfo.memoryTypeIndex);
assert(pass);
err = pTableDevice->AllocateMemory(device, &memAllocInfo, NULL,
&data.mem3);
assert(!err);
if (VK_SUCCESS != err)
return;
err = pTableQueue->BindImageMemory(device, data.image3, data.mem3, 0);
assert(!err);
if (VK_SUCCESS != err)
return;
}
// Set up the command buffer. We get a command buffer from a pool we saved
// in a hooked function, which would be the application's pool.
const VkCommandBufferAllocateInfo allocCommandBufferInfo = {
VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, NULL,
deviceMap[device]->commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY, 1};
data.commandPool = deviceMap[device]->commandPool;
err = pTableDevice->AllocateCommandBuffers(device, &allocCommandBufferInfo,
&data.commandBuffer);
assert(!err);
if (VK_SUCCESS != err)
return;
VkDevice cmdBuf =
static_cast<VkDevice>(static_cast<void *>(data.commandBuffer));
deviceMap.emplace(cmdBuf, devMap);
VkLayerDispatchTable *pTableCommandBuffer;
pTableCommandBuffer = get_dev_info(cmdBuf)->device_dispatch_table;
// We have just created a dispatchable object, but the dispatch table has
// not been placed in the object yet. When a "normal" application creates
// a command buffer, the dispatch table is installed by the top-level api
// binding (trampoline.c). But here, we have to do it ourselves.
if (!devMap->pfn_dev_init) {
*((const void **)data.commandBuffer) = *(void **)device;
} else {
err = devMap->pfn_dev_init(device, (void *)data.commandBuffer);
assert(!err);
}
const VkCommandBufferBeginInfo commandBufferBeginInfo = {
VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL,
VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
};
err = pTableCommandBuffer->BeginCommandBuffer(data.commandBuffer,
&commandBufferBeginInfo);
assert(!err);
// This barrier is used to transition from/to present Layout
VkImageMemoryBarrier presentMemoryBarrier = {
示例4: vkGetSwapchainImagesKHR
VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapChain, uint32_t *pCount,
VkImage *pImages) {
layer_data *my_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
VkLayerDispatchTable *pTable = my_data->device_dispatch_table;
VkResult result = my_data->pfnGetSwapchainImagesKHR(device, swapChain, pCount, pImages);
VkResult U_ASSERT_ONLY err;
/* GetSwapChainImagesWSI may be called without an images buffer, in which
* case it
* just returns the count to the caller. We're only interested in acting on
* the
* /actual/ fetch of the images.
*/
if (pImages) {
auto data = (*my_data->swapChains)[swapChain];
for (uint32_t i = 0; i < *pCount; i++) {
/* Create attachment view for each */
VkImageViewCreateInfo ivci;
ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
ivci.viewType = VK_IMAGE_VIEW_TYPE_2D;
ivci.pNext = nullptr;
ivci.format = data->format;
ivci.components.r = VK_COMPONENT_SWIZZLE_R;
ivci.components.g = VK_COMPONENT_SWIZZLE_G;
ivci.components.b = VK_COMPONENT_SWIZZLE_B;
ivci.components.a = VK_COMPONENT_SWIZZLE_A;
ivci.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
ivci.subresourceRange.baseMipLevel = 0;
ivci.subresourceRange.levelCount = 1;
ivci.subresourceRange.baseArrayLayer = 0;
ivci.subresourceRange.layerCount = 1;
ivci.image = pImages[i];
ivci.flags = 0;
VkImageView v;
pTable->CreateImageView(device, &ivci, nullptr, &v);
/* Create framebuffer for each */
VkFramebufferCreateInfo fci;
fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
fci.pNext = nullptr;
fci.flags = 0;
fci.renderPass = data->render_pass;
fci.attachmentCount = 1;
fci.pAttachments = &v;
fci.width = data->width;
fci.height = data->height;
fci.layers = 1;
VkFramebuffer fb;
pTable->CreateFramebuffer(device, &fci, nullptr, &fb);
/* Create command buffer for each */
VkCommandBufferAllocateInfo cbai;
cbai.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
cbai.pNext = nullptr;
cbai.commandPool = my_data->pool;
cbai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
cbai.commandBufferCount = 1;
VkCommandBuffer cmd;
pTable->AllocateCommandBuffers(device, &cbai, &cmd);
/* We have just created a dispatchable object, but the dispatch
* table has not been placed in the object yet.
* When a "normal" application creates a command buffer,
* the dispatch table is installed by the top-level binding
* (trampoline.c).
* But here, we have to do it ourselves. */
if (!my_data->pfn_dev_init) {
*((const void **)cmd) = *(void **)device;
} else {
err = my_data->pfn_dev_init(device, (void *)cmd);
assert(!err);
}
/* Create vertex buffer */
VkBufferCreateInfo bci;
memset(&bci, 0, sizeof(bci));
bci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bci.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
bci.size = sizeof(vertex) * MAX_TEXT_VERTICES;
VkBuffer buf;
err = pTable->CreateBuffer(device, &bci, nullptr, &buf);
assert(!err);
VkMemoryRequirements mem_reqs;
pTable->GetBufferMemoryRequirements(device, buf, &mem_reqs);
assert(!err);
VkMemoryAllocateInfo mem_alloc;
memset(&mem_alloc, 0, sizeof(mem_alloc));
mem_alloc.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
mem_alloc.allocationSize = mem_reqs.size;
mem_alloc.memoryTypeIndex = choose_memory_type(
my_data->gpu, mem_reqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
//.........这里部分代码省略.........
示例5: after_device_create
//.........这里部分代码省略.........
pTable->UnmapMemory(device, data->fontGlyphsMemory);
VkImageViewCreateInfo ivci;
ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
ivci.viewType = VK_IMAGE_VIEW_TYPE_2D;
ivci.pNext = nullptr;
ivci.format = ici.format;
ivci.components.r = VK_COMPONENT_SWIZZLE_R;
ivci.components.g = VK_COMPONENT_SWIZZLE_G;
ivci.components.b = VK_COMPONENT_SWIZZLE_B;
ivci.components.a = VK_COMPONENT_SWIZZLE_A;
ivci.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
ivci.subresourceRange.baseMipLevel = 0;
ivci.subresourceRange.levelCount = 1;
ivci.subresourceRange.baseArrayLayer = 0;
ivci.subresourceRange.layerCount = 1;
ivci.image = data->fontGlyphsImage;
ivci.flags = 0;
err = pTable->CreateImageView(device, &ivci, nullptr, &data->fontGlyphsImageView);
assert(!err);
/* transition from undefined layout to shader readonly so we can use it.
* requires a command buffer. */
VkCommandBufferAllocateInfo cbai;
cbai.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
cbai.pNext = nullptr;
cbai.commandPool = data->pool;
cbai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
cbai.commandBufferCount = 1;
VkCommandBuffer cmd;
err = pTable->AllocateCommandBuffers(device, &cbai, &cmd);
assert(!err);
/* We have just created a dispatchable object, but the dispatch table has
* not been placed in the object yet.
* When a "normal" application creates a command buffer,
* the dispatch table is installed by the top-level binding (trampoline.c).
* But here, we have to do it ourselves. */
if (!data->pfn_dev_init) {
*((const void **)cmd) = *(void **)device;
} else {
err = data->pfn_dev_init(device, (void *)cmd);
assert(!err);
}
VkCommandBufferBeginInfo cbbi;
cbbi.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
cbbi.pNext = nullptr;
cbbi.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
cbbi.pInheritanceInfo = nullptr;
err = pTable->BeginCommandBuffer(cmd, &cbbi);
assert(!err);
VkImageMemoryBarrier imb;
imb.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
imb.pNext = nullptr;
imb.dstAccessMask = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
imb.srcAccessMask = 0;
imb.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
imb.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
imb.image = data->fontGlyphsImage;
imb.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;