27 vk::PhysicalDeviceType deviceType = vk::PhysicalDeviceType::eOther;
28 vk::PhysicalDeviceProperties physicalProperties;
80 VmaAllocation quadIndexBufferAllocation = {};
92 bool supportsLazyTransientImages =
false;
93 vk::ImageUsageFlags transientImageUsageFlags = vk::ImageUsageFlags{};
94 VmaMemoryUsage lazyMemoryUsage = VMA_MEMORY_USAGE_GPU_ONLY;
105 int score(vk::SurfaceKHR surface)
const;
119 createBuffer(
const vk::BufferCreateInfo &bufferCreateInfo,
const VmaAllocationCreateInfo &allocationCreateInfo)
const;
121 void destroyBuffer(
const vk::Buffer &buffer,
const VmaAllocation &allocation)
const;
124 createImage(
const vk::ImageCreateInfo &imageCreateInfo,
const VmaAllocationCreateInfo &allocationCreateInfo)
const;
125 void destroyImage(
const vk::Image &image,
const VmaAllocation &allocation)
const;
127 vk::CommandBuffer beginSingleTimeCommands()
const;
128 void endSingleTimeCommands(vk::CommandBuffer commandBuffer)
const;
130 static void transition_layout(
131 vk::CommandBuffer command_buffer,
134 vk::ImageLayout src_layout,
135 vk::ImageLayout dst_layout);
136 void transition_layout(vk::Image image, vk::Format format, vk::ImageLayout src_layout, vk::ImageLayout dst_layout)
const;
140 vk::ImageLayout srcLayout,
142 vk::ImageLayout dstLayout,
143 vk::ArrayProxy<vk::ImageCopy const> regions)
const;
144 void clearColorImage(
146 vk::ImageLayout layout,
147 vk::ClearColorValue
const &
color,
148 vk::ArrayProxy<const vk::ImageSubresourceRange> ranges)
const;
151 std::span<T> mapMemory(
const VmaAllocation &allocation)
const
156 ttlet result =
static_cast<vk::Result
>(vmaMapMemory(allocator, allocation, &mapping));
158 VmaAllocationInfo allocationInfo;
159 vmaGetAllocationInfo(allocator, allocation, &allocationInfo);
162 T *mappingT =
reinterpret_cast<T *
>(mapping);
163 ttlet mappingSpan = std::span<T>(mappingT, allocationInfo.size /
sizeof(T));
165 return vk::createResultValue(result, mappingSpan,
"tt::gfx_device_vulkan::mapMemory");
168 void unmapMemory(
const VmaAllocation &allocation)
const;
170 void flushAllocation(
const VmaAllocation &allocation, VkDeviceSize offset, VkDeviceSize size)
const
174 ttlet
alignment = physicalProperties.limits.nonCoherentAtomSize;
177 ttlet adjustedSize = size + (offset - alignedOffset);
180 vmaFlushAllocation(allocator, allocation, alignedOffset, alignedSize);
183 vk::ShaderModule loadShader(uint32_t
const *data,
size_t size)
const;
185 vk::ShaderModule loadShader(std::span<std::byte const> shaderObjectBytes)
const;
187 vk::ShaderModule loadShader(URL
const &shaderObjectLocation)
const;
189 void waitIdle()
const
192 return intrinsic.waitIdle();
195 vk::Result waitForFences(vk::ArrayProxy<const vk::Fence> fences, vk::Bool32 waitAll, uint64_t timeout)
const
198 return intrinsic.waitForFences(fences, waitAll, timeout);
201 vk::Result acquireNextImageKHR(
202 vk::SwapchainKHR swapchain,
204 vk::Semaphore semaphore,
206 uint32_t *pImageIndex)
const
209 return intrinsic.acquireNextImageKHR(swapchain, timeout, semaphore, fence, pImageIndex);
212 void resetFences(vk::ArrayProxy<const vk::Fence> fences)
const
215 return intrinsic.resetFences(fences);
218 vk::Result createSwapchainKHR(
219 const vk::SwapchainCreateInfoKHR *pCreateInfo,
220 const vk::AllocationCallbacks *pAllocator,
221 vk::SwapchainKHR *pSwapchain)
const
224 return intrinsic.createSwapchainKHR(pCreateInfo, pAllocator, pSwapchain);
230 return intrinsic.getSwapchainImagesKHR(swapchain);
233 vk::ImageView createImageView(
const vk::ImageViewCreateInfo &createInfo)
const
236 return intrinsic.createImageView(createInfo);
239 vk::Framebuffer createFramebuffer(
const vk::FramebufferCreateInfo &createInfo)
const
242 return intrinsic.createFramebuffer(createInfo);
245 vk::RenderPass createRenderPass(
const vk::RenderPassCreateInfo &createInfo)
const
248 return intrinsic.createRenderPass(createInfo);
251 vk::Semaphore createSemaphore(
const vk::SemaphoreCreateInfo &createInfo)
const
254 return intrinsic.createSemaphore(createInfo);
257 vk::Fence createFence(
const vk::FenceCreateInfo &createInfo)
const
260 return intrinsic.createFence(createInfo);
263 vk::DescriptorSetLayout createDescriptorSetLayout(
const vk::DescriptorSetLayoutCreateInfo &createInfo)
const
266 return intrinsic.createDescriptorSetLayout(createInfo);
269 vk::DescriptorPool createDescriptorPool(
const vk::DescriptorPoolCreateInfo &createInfo)
const
272 return intrinsic.createDescriptorPool(createInfo);
275 vk::PipelineLayout createPipelineLayout(
const vk::PipelineLayoutCreateInfo &createInfo)
const
278 return intrinsic.createPipelineLayout(createInfo);
281 vk::Pipeline createGraphicsPipeline(vk::PipelineCache pipelineCache,
const vk::GraphicsPipelineCreateInfo &createInfo)
const
284 return intrinsic.createGraphicsPipeline(pipelineCache, createInfo).value;
287 vk::Sampler createSampler(
const vk::SamplerCreateInfo &createInfo)
const
290 return intrinsic.createSampler(createInfo);
296 return intrinsic.allocateDescriptorSets(allocateInfo);
302 return intrinsic.allocateCommandBuffers(allocateInfo);
305 void updateDescriptorSets(
306 vk::ArrayProxy<const vk::WriteDescriptorSet> descriptorWrites,
307 vk::ArrayProxy<const vk::CopyDescriptorSet> descriptorCopies)
const
310 return intrinsic.updateDescriptorSets(descriptorWrites, descriptorCopies);
313 void freeCommandBuffers(vk::CommandPool commandPool, vk::ArrayProxy<const vk::CommandBuffer> commandBuffers)
const
316 return intrinsic.freeCommandBuffers(commandPool, commandBuffers);
320 void destroy(T x)
const
323 intrinsic.destroy(x);
326 vk::SurfaceCapabilitiesKHR getSurfaceCapabilitiesKHR(vk::SurfaceKHR surface)
const
329 return physicalIntrinsic.getSurfaceCapabilitiesKHR(surface);
333 vk::PhysicalDevice physicalIntrinsic;
334 vk::Device intrinsic;
335 VmaAllocator allocator;
339 void initialize_queues(
std::vector<vk::DeviceQueueCreateInfo> const &device_queue_create_infos) noexcept;
340 void initialize_device();
341 void initialize_quad_index_buffer();
342 void destroy_quad_index_buffer();