1 /*-------------------------------------------------------------------------
5 * Copyright (c) 2015 Google Inc.
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and/or associated documentation files (the
9 * "Materials"), to deal in the Materials without restriction, including
10 * without limitation the rights to use, copy, modify, merge, publish,
11 * distribute, sublicense, and/or sell copies of the Materials, and to
12 * permit persons to whom the Materials are furnished to do so, subject to
13 * the following conditions:
15 * The above copyright notice(s) and this permission notice shall be
16 * included in all copies or substantial portions of the Materials.
18 * The Materials are Confidential Information as defined by the
19 * Khronos Membership Agreement until designated non-confidential by
20 * Khronos, at which point this condition clause shall be removed.
22 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
25 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
26 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
27 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
28 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
32 * \brief Vulkan object reference holder utilities.
33 *//*--------------------------------------------------------------------*/
35 #include "vkRefUtil.hpp"
40 #include "vkRefUtilImpl.inl"
42 Move<VkPipeline> createGraphicsPipeline (const DeviceInterface& vk,
44 VkPipelineCache pipelineCache,
45 const VkGraphicsPipelineCreateInfo* pCreateInfo,
46 const VkAllocationCallbacks* pAllocator)
48 VkPipeline object = 0;
49 VK_CHECK(vk.createGraphicsPipelines(device, pipelineCache, 1u, pCreateInfo, pAllocator, &object));
50 return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
53 Move<VkPipeline> createComputePipeline (const DeviceInterface& vk,
55 VkPipelineCache pipelineCache,
56 const VkComputePipelineCreateInfo* pCreateInfo,
57 const VkAllocationCallbacks* pAllocator)
59 VkPipeline object = 0;
60 VK_CHECK(vk.createComputePipelines(device, pipelineCache, 1u, pCreateInfo, pAllocator, &object));
61 return Move<VkPipeline>(check<VkPipeline>(object), Deleter<VkPipeline>(vk, device, pAllocator));
64 Move<VkCommandBuffer> allocateCommandBuffer (const DeviceInterface& vk, VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo)
66 VkCommandBuffer object = 0;
67 DE_ASSERT(pAllocateInfo->commandBufferCount == 1u);
68 VK_CHECK(vk.allocateCommandBuffers(device, pAllocateInfo, &object));
69 return Move<VkCommandBuffer>(check<VkCommandBuffer>(object), Deleter<VkCommandBuffer>(vk, device, pAllocateInfo->commandPool));
72 Move<VkDescriptorSet> allocateDescriptorSet (const DeviceInterface& vk, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo)
74 VkDescriptorSet object = 0;
75 DE_ASSERT(pAllocateInfo->descriptorSetCount == 1u);
76 VK_CHECK(vk.allocateDescriptorSets(device, pAllocateInfo, &object));
77 return Move<VkDescriptorSet>(check<VkDescriptorSet>(object), Deleter<VkDescriptorSet>(vk, device, pAllocateInfo->descriptorPool));