26 vk::PhysicalDeviceType deviceType = vk::PhysicalDeviceType::eOther;
27 vk::PhysicalDeviceProperties physicalProperties;
79 VmaAllocation quadIndexBufferAllocation = {};
90 bool supportsLazyTransientImages =
false;
91 vk::ImageUsageFlags transientImageUsageFlags = vk::ImageUsageFlags{};
92 VmaMemoryUsage lazyMemoryUsage = VMA_MEMORY_USAGE_GPU_ONLY;
103 int score(vk::SurfaceKHR surface)
const;
117 createBuffer(
const vk::BufferCreateInfo &bufferCreateInfo,
const VmaAllocationCreateInfo &allocationCreateInfo)
const;
119 void destroyBuffer(
const vk::Buffer &buffer,
const VmaAllocation &allocation)
const;
122 createImage(
const vk::ImageCreateInfo &imageCreateInfo,
const VmaAllocationCreateInfo &allocationCreateInfo)
const;
123 void destroyImage(
const vk::Image &image,
const VmaAllocation &allocation)
const;
125 vk::CommandBuffer beginSingleTimeCommands()
const;
126 void endSingleTimeCommands(vk::CommandBuffer commandBuffer)
const;
128 static void transition_layout(
129 vk::CommandBuffer command_buffer,
132 vk::ImageLayout src_layout,
133 vk::ImageLayout dst_layout);
134 void transition_layout(vk::Image image, vk::Format format, vk::ImageLayout src_layout, vk::ImageLayout dst_layout)
const;
138 vk::ImageLayout srcLayout,
140 vk::ImageLayout dstLayout,
141 vk::ArrayProxy<vk::ImageCopy const> regions)
const;
142 void clearColorImage(
144 vk::ImageLayout layout,
145 vk::ClearColorValue
const &
color,
146 vk::ArrayProxy<const vk::ImageSubresourceRange> ranges)
const;
149 std::span<T> mapMemory(
const VmaAllocation &allocation)
const
154 ttlet result =
static_cast<vk::Result
>(vmaMapMemory(allocator, allocation, &mapping));
156 VmaAllocationInfo allocationInfo;
157 vmaGetAllocationInfo(allocator, allocation, &allocationInfo);
160 T *mappingT =
reinterpret_cast<T *
>(mapping);
161 ttlet mappingSpan = std::span<T>(mappingT, allocationInfo.size /
sizeof(T));
163 return vk::createResultValue(result, mappingSpan,
"tt::gfx_device_vulkan::mapMemory");
166 void unmapMemory(
const VmaAllocation &allocation)
const;
168 void flushAllocation(
const VmaAllocation &allocation, VkDeviceSize offset, VkDeviceSize size)
const
172 ttlet
alignment = physicalProperties.limits.nonCoherentAtomSize;
175 ttlet adjustedSize = size + (offset - alignedOffset);
178 vmaFlushAllocation(allocator, allocation, alignedOffset, alignedSize);
181 vk::ShaderModule loadShader(uint32_t
const *data,
size_t size)
const;
183 vk::ShaderModule loadShader(std::span<std::byte const> shaderObjectBytes)
const;
185 vk::ShaderModule loadShader(URL
const &shaderObjectLocation)
const;
187 void waitIdle()
const
190 return intrinsic.waitIdle();
193 vk::Result waitForFences(vk::ArrayProxy<const vk::Fence> fences, vk::Bool32 waitAll, uint64_t timeout)
const
196 return intrinsic.waitForFences(fences, waitAll, timeout);
199 vk::Result acquireNextImageKHR(
200 vk::SwapchainKHR swapchain,
202 vk::Semaphore semaphore,
204 uint32_t *pImageIndex)
const
207 return intrinsic.acquireNextImageKHR(swapchain, timeout, semaphore, fence, pImageIndex);
210 void resetFences(vk::ArrayProxy<const vk::Fence> fences)
const
213 return intrinsic.resetFences(fences);
216 vk::Result createSwapchainKHR(
217 const vk::SwapchainCreateInfoKHR *pCreateInfo,
218 const vk::AllocationCallbacks *pAllocator,
219 vk::SwapchainKHR *pSwapchain)
const
222 return intrinsic.createSwapchainKHR(pCreateInfo, pAllocator, pSwapchain);
228 return intrinsic.getSwapchainImagesKHR(swapchain);
231 vk::ImageView createImageView(
const vk::ImageViewCreateInfo &createInfo)
const
234 return intrinsic.createImageView(createInfo);
237 vk::Framebuffer createFramebuffer(
const vk::FramebufferCreateInfo &createInfo)
const
240 return intrinsic.createFramebuffer(createInfo);
243 vk::RenderPass createRenderPass(
const vk::RenderPassCreateInfo &createInfo)
const
246 return intrinsic.createRenderPass(createInfo);
249 vk::Semaphore createSemaphore(
const vk::SemaphoreCreateInfo &createInfo)
const
252 return intrinsic.createSemaphore(createInfo);
255 vk::Fence createFence(
const vk::FenceCreateInfo &createInfo)
const
258 return intrinsic.createFence(createInfo);
261 vk::DescriptorSetLayout createDescriptorSetLayout(
const vk::DescriptorSetLayoutCreateInfo &createInfo)
const
264 return intrinsic.createDescriptorSetLayout(createInfo);
267 vk::DescriptorPool createDescriptorPool(
const vk::DescriptorPoolCreateInfo &createInfo)
const
270 return intrinsic.createDescriptorPool(createInfo);
273 vk::PipelineLayout createPipelineLayout(
const vk::PipelineLayoutCreateInfo &createInfo)
const
276 return intrinsic.createPipelineLayout(createInfo);
279 vk::Pipeline createGraphicsPipeline(vk::PipelineCache pipelineCache,
const vk::GraphicsPipelineCreateInfo &createInfo)
const
282 return intrinsic.createGraphicsPipeline(pipelineCache, createInfo).value;
285 vk::Sampler createSampler(
const vk::SamplerCreateInfo &createInfo)
const
288 return intrinsic.createSampler(createInfo);
294 return intrinsic.allocateDescriptorSets(allocateInfo);
300 return intrinsic.allocateCommandBuffers(allocateInfo);
303 void updateDescriptorSets(
304 vk::ArrayProxy<const vk::WriteDescriptorSet> descriptorWrites,
305 vk::ArrayProxy<const vk::CopyDescriptorSet> descriptorCopies)
const
308 return intrinsic.updateDescriptorSets(descriptorWrites, descriptorCopies);
311 void freeCommandBuffers(vk::CommandPool commandPool, vk::ArrayProxy<const vk::CommandBuffer> commandBuffers)
const
314 return intrinsic.freeCommandBuffers(commandPool, commandBuffers);
318 void destroy(T x)
const
321 intrinsic.destroy(x);
324 vk::SurfaceCapabilitiesKHR getSurfaceCapabilitiesKHR(vk::SurfaceKHR surface)
const
327 return physicalIntrinsic.getSurfaceCapabilitiesKHR(surface);
331 vk::PhysicalDevice physicalIntrinsic;
332 vk::Device intrinsic;
333 VmaAllocator allocator;
337 void initialize_queues(
std::vector<vk::DeviceQueueCreateInfo> const &device_queue_create_infos) noexcept;
338 void initialize_device();
339 void initialize_quad_index_buffer();
340 void destroy_quad_index_buffer();