From d73004ea3de5ef6ae3038368f0773675e38840b2 Mon Sep 17 00:00:00 2001 From: Squareys Date: Mon, 10 Oct 2016 01:01:33 +0200 Subject: [PATCH] Vk: Fix device and loads of UnsignedInt conversion errors. Signed-off-by: Squareys --- src/Magnum/Vk/Buffer.h | 2 +- src/Magnum/Vk/Command.h | 15 ++++----- src/Magnum/Vk/CommandBuffer.h | 4 +-- src/Magnum/Vk/DescriptorPool.h | 4 +-- src/Magnum/Vk/DescriptorSet.h | 2 +- src/Magnum/Vk/Device.cpp | 24 ++++++++------ src/Magnum/Vk/Device.h | 58 +++++++++++++++++++--------------- src/Magnum/Vk/DeviceMemory.h | 2 +- src/Magnum/Vk/Framebuffer.h | 2 +- src/Magnum/Vk/Mesh.h | 2 +- src/Magnum/Vk/Pipeline.cpp | 12 +++---- src/Magnum/Vk/Pipeline.h | 2 +- src/Magnum/Vk/Queue.cpp | 6 ++-- src/Magnum/Vk/Swapchain.h | 2 +- src/Magnum/Vk/Texture.cpp | 1 - src/Magnum/Vk/Texture.h | 14 -------- 16 files changed, 74 insertions(+), 78 deletions(-) diff --git a/src/Magnum/Vk/Buffer.h b/src/Magnum/Vk/Buffer.h index e7478138e..0d77b6f48 100644 --- a/src/Magnum/Vk/Buffer.h +++ b/src/Magnum/Vk/Buffer.h @@ -128,7 +128,7 @@ class MAGNUM_VK_EXPORT Buffer { auto cmdCopyTo(Buffer& dest, std::initializer_list regions) { const VkBuffer source = _buffer; return [source, &dest, ®ions](VkCommandBuffer cmdBuffer){ - vkCmdCopyBuffer(cmdBuffer, source, dest, regions.size(), std::vector(regions).data()); + vkCmdCopyBuffer(cmdBuffer, source, dest, UnsignedInt(regions.size()), std::vector(regions).data()); }; } diff --git a/src/Magnum/Vk/Command.h b/src/Magnum/Vk/Command.h index bd7422e06..ef183a62c 100644 --- a/src/Magnum/Vk/Command.h +++ b/src/Magnum/Vk/Command.h @@ -29,7 +29,6 @@ /** @file * @brief Namespace @ref Magnum::Vk::Cmd */ - #include "vulkan.h" #include @@ -74,13 +73,13 @@ inline auto setScissor(UnsignedInt firstScissor, const std::initializer_list& viewports) { return [firstViewport, &viewports](VkCommandBuffer cmdBuffer){ - vkCmdSetViewport(cmdBuffer, firstViewport, viewports.size(), viewports.data()); + vkCmdSetViewport(cmdBuffer, firstViewport, UnsignedInt(viewports.size()), viewports.data()); }; } @@ -92,12 +91,10 @@ inline auto pipelineBarrier(PipelineStageFlags srcStageMask, return [srcStageMask, dstStageMask, &memoryBarriers, &bufferMemoryBarriers, &imageMemoryBarriers](VkCommandBuffer cmdBuffer){ vkCmdPipelineBarrier(cmdBuffer, VkPipelineStageFlags(srcStageMask), VkPipelineStageFlags(dstStageMask), - 0, memoryBarriers.size(), - memoryBarriers.data(), - bufferMemoryBarriers.size(), - bufferMemoryBarriers.data(), - imageMemoryBarriers.size(), - reinterpret_cast(imageMemoryBarriers.data()) + 0, + UnsignedInt(memoryBarriers.size()), memoryBarriers.data(), + UnsignedInt(bufferMemoryBarriers.size()), bufferMemoryBarriers.data(), + UnsignedInt(imageMemoryBarriers.size()), reinterpret_cast(imageMemoryBarriers.data()) ); }; diff --git a/src/Magnum/Vk/CommandBuffer.h b/src/Magnum/Vk/CommandBuffer.h index d6dd2c376..c269221cf 100644 --- a/src/Magnum/Vk/CommandBuffer.h +++ b/src/Magnum/Vk/CommandBuffer.h @@ -115,7 +115,7 @@ class MAGNUM_VK_EXPORT CommandBuffer { /** * Begin recording to this command buffer. - * + * * @return Reference to self (for method chaining) */ CommandBuffer& begin() { @@ -152,7 +152,7 @@ class MAGNUM_VK_EXPORT CommandBuffer { renderPass, framebuffer, VkRect2D{{renderArea.left(), renderArea.bottom()}, {UnsignedInt(renderArea.sizeX()), UnsignedInt(renderArea.sizeY())}}, - clearValues.size(), + UnsignedInt(clearValues.size()), clearValues.data()}; vkCmdBeginRenderPass(_cmdBuffer, &renderPassBeginInfo, VkSubpassContents(subpassContents)); diff --git a/src/Magnum/Vk/DescriptorPool.h b/src/Magnum/Vk/DescriptorPool.h index d1e3df215..edb8d2441 100644 --- a/src/Magnum/Vk/DescriptorPool.h +++ b/src/Magnum/Vk/DescriptorPool.h @@ -64,13 +64,13 @@ private: class MAGNUM_VK_EXPORT DescriptorPool { public: - DescriptorPool(Device& device, UnsignedLong maxSets, const DescriptorPoolCreateInfo& ci): + DescriptorPool(Device& device, UnsignedInt maxSets, const DescriptorPoolCreateInfo& ci): _device{device} { VkDescriptorPoolCreateInfo createInfo = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, nullptr, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, maxSets, - ci._poolSizes.size(), ci._poolSizes.data() + UnsignedInt(ci._poolSizes.size()), ci._poolSizes.data() }; VkResult err = vkCreateDescriptorPool(_device, &createInfo, nullptr, &_descriptorPool); diff --git a/src/Magnum/Vk/DescriptorSet.h b/src/Magnum/Vk/DescriptorSet.h index d1b97d75a..9a9187b08 100644 --- a/src/Magnum/Vk/DescriptorSet.h +++ b/src/Magnum/Vk/DescriptorSet.h @@ -84,7 +84,7 @@ class MAGNUM_VK_EXPORT DescriptorSetLayout { VkDescriptorSetLayoutCreateInfo descLayout = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, nullptr, 0, - bndgs.size(), + UnsignedInt(bndgs.size()), reinterpret_cast(bndgs.data()) }; diff --git a/src/Magnum/Vk/Device.cpp b/src/Magnum/Vk/Device.cpp index 772c4f688..3182a0c27 100644 --- a/src/Magnum/Vk/Device.cpp +++ b/src/Magnum/Vk/Device.cpp @@ -1,4 +1,4 @@ -/* +/* This file is part of Magnum. Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 @@ -32,19 +32,24 @@ namespace Magnum { namespace Vk { -Device::Device(PhysicalDevice& physicalDevice, - const std::vector& requestedQueues, - const std::vector& extensions, - const std::vector& validationLayers, +Device::Device(const PhysicalDevice& physicalDevice, + std::initializer_list requestedQueues, + std::initializer_list extensions, + std::initializer_list validationLayers, const DeviceFeatures& features): _physicalDevice(physicalDevice) { + VkPhysicalDeviceFeatures vkPhysicalDevice = features; + std::vector qci{requestedQueues}; + std::vector exts{extensions}; + std::vector val{validationLayers}; + VkDeviceCreateInfo deviceCreateInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, 0, - requestedQueues.size(), reinterpret_cast(requestedQueues.data()), - validationLayers.size(), validationLayers.data(), - extensions.size(), extensions.data(), - &VkPhysicalDeviceFeatures(features)}; + UnsignedInt(qci.size()), reinterpret_cast(qci.data()), + UnsignedInt(val.size()), val.data(), + UnsignedInt(exts.size()), exts.data(), + &vkPhysicalDevice}; vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &_device); @@ -55,6 +60,7 @@ Device::Device(PhysicalDevice& physicalDevice, } } + Device::~Device() { vkDestroyDevice(_device, nullptr); } diff --git a/src/Magnum/Vk/Device.h b/src/Magnum/Vk/Device.h index eed975c36..a10fb606b 100644 --- a/src/Magnum/Vk/Device.h +++ b/src/Magnum/Vk/Device.h @@ -109,41 +109,48 @@ enum class DeviceFeature : UnsignedInt { Container for physical device features. */ -class DeviceFeatures : Containers::Array { +class DeviceFeatures { public: - DeviceFeatures(const std::initializer_list& features): - Containers::Array(Containers::Array::zeroInitialized(deviceFeaturesCount)) - { - std::copy(features.begin(), features.end(), this->end()); + DeviceFeatures(const std::initializer_list& features) { + VkBool32* enabled = reinterpret_cast(&_features); + for(DeviceFeature f : features) { + enabled[UnsignedInt(f)] = VK_TRUE; + } + } + + operator VkPhysicalDeviceFeatures() const { + return _features; } - operator const VkPhysicalDeviceFeatures&() const { - return *reinterpret_cast(this->data()); + operator VkPhysicalDeviceFeatures&() { + return _features; } + +private: + VkPhysicalDeviceFeatures _features; }; struct DeviceQueueCreateInfo { - DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, std::initializer_list priorities) : - _queueFamilyIndex{ queueFamilyIndex }, - _queueCount{UnsignedInt(priorities.size())}, + DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, const std::vector priorities) : + _queueFamilyIndex{queueFamilyIndex}, + _queueCount{1}, _queuePriorities{new float[priorities.size()]} { - std::copy(priorities.begin(), priorities.end(), _queuePriorities); + std::copy(priorities.begin(), priorities.end(), _queuePriorities.get()); } - DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, const std::vector& priorities) : - _queueFamilyIndex{ queueFamilyIndex }, - _queueCount{ UnsignedInt(priorities.size()) }, - _queuePriorities{ new float[priorities.size()] } + DeviceQueueCreateInfo(const DeviceQueueCreateInfo& other): + _queueFamilyIndex{other._queueFamilyIndex}, + _queueCount{other._queueCount}, + _queuePriorities{new float[_queueCount]} { - std::copy(priorities.begin(), priorities.end(), _queuePriorities); + std::copy(other._queuePriorities.get(), other._queuePriorities.get() + _queueCount, + _queuePriorities.get()); } - ~DeviceQueueCreateInfo() { - delete _queuePriorities; - } + ~DeviceQueueCreateInfo() = default; UnsignedInt queueCount() const { return _queueCount; @@ -159,7 +166,7 @@ private: const VkDeviceQueueCreateFlags _flags = 0; UnsignedInt _queueFamilyIndex; UnsignedInt _queueCount; - float* _queuePriorities; + std::unique_ptr _queuePriorities; }; static_assert(sizeof(DeviceQueueCreateInfo) == sizeof(VkDeviceQueueCreateInfo), "DeviceQueueCreateInfo and VkDeviceQueueCreateInfo are required to be of same size."); @@ -176,11 +183,12 @@ class MAGNUM_VK_EXPORT Device { /** @brief Move constructor */ Device(Device&& other); - Device(PhysicalDevice& physicalDevice, - const std::vector& requestedQueues, - const std::vector& extensions, - const std::vector& validationLayers, - const DeviceFeatures& features); + public: + Device::Device(const PhysicalDevice& physicalDevice, + std::initializer_list requestedQueues, + std::initializer_list extensions, + std::initializer_list validationLayers, + const DeviceFeatures& features); /** * @brief Destructor diff --git a/src/Magnum/Vk/DeviceMemory.h b/src/Magnum/Vk/DeviceMemory.h index dc5654ccf..21f996367 100644 --- a/src/Magnum/Vk/DeviceMemory.h +++ b/src/Magnum/Vk/DeviceMemory.h @@ -84,7 +84,7 @@ class MAGNUM_VK_EXPORT DeviceMemory { return map(0, _memAlloc.allocationSize); } - Containers::ArrayView map(UnsignedInt offset, UnsignedInt size) { + Containers::ArrayView map(VkDeviceSize offset, VkDeviceSize size) { // TODO: Memory map flags (== 0) void* data; VkResult err = vkMapMemory(_device, _deviceMemory, offset, size, 0, &data); diff --git a/src/Magnum/Vk/Framebuffer.h b/src/Magnum/Vk/Framebuffer.h index d26435570..bb2a01987 100644 --- a/src/Magnum/Vk/Framebuffer.h +++ b/src/Magnum/Vk/Framebuffer.h @@ -57,7 +57,7 @@ class MAGNUM_VK_EXPORT Framebuffer { VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, nullptr, 0, renderPass, - vkAttachments.size(), + UnsignedInt(vkAttachments.size()), vkAttachments.data(), size.x(), size.y(), size.z() }; diff --git a/src/Magnum/Vk/Mesh.h b/src/Magnum/Vk/Mesh.h index 91f11bf0e..f3c0d8e10 100644 --- a/src/Magnum/Vk/Mesh.h +++ b/src/Magnum/Vk/Mesh.h @@ -67,7 +67,7 @@ class MAGNUM_VK_EXPORT Mesh { const VkBuffer* vertexBuffers = _vertexBuffers.data(); const VkBuffer indexBuffer = _indexBuffer; - const UnsignedInt numVertexBuffers = _vertexBuffers.size(); + const UnsignedInt numVertexBuffers = UnsignedInt(_vertexBuffers.size()); const UnsignedInt count = _count; const bool drawIndexed = _drawIndexed; return [vertexBuffers, indexBuffer, numVertexBuffers, count, drawIndexed](VkCommandBuffer cmdBuffer){ diff --git a/src/Magnum/Vk/Pipeline.cpp b/src/Magnum/Vk/Pipeline.cpp index 21f3bfe51..5ad22ba07 100644 --- a/src/Magnum/Vk/Pipeline.cpp +++ b/src/Magnum/Vk/Pipeline.cpp @@ -45,9 +45,9 @@ std::unique_ptr GraphicsPipelineBuilder::build() { VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, nullptr, 0, - _setLayouts.size(), + UnsignedInt(_setLayouts.size()), _setLayouts.data(), - _pushConstantRanges.size(), + UnsignedInt(_pushConstantRanges.size()), _pushConstantRanges.data() }; @@ -79,9 +79,9 @@ std::unique_ptr GraphicsPipelineBuilder::build() { VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, nullptr, 0, - _vertexInputBindings.size(), + UnsignedInt(_vertexInputBindings.size()), _vertexInputBindings.data(), - _vertexInputAttrbutes.size(), + UnsignedInt(_vertexInputAttrbutes.size()), _vertexInputAttrbutes.data(), }; @@ -90,7 +90,7 @@ std::unique_ptr GraphicsPipelineBuilder::build() { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, nullptr, 0, - _dynamicStates.size(), + UnsignedInt(_dynamicStates.size()), reinterpret_cast(_dynamicStates.data()) }; @@ -106,7 +106,7 @@ std::unique_ptr GraphicsPipelineBuilder::build() { pipelineInfo.pMultisampleState = &_multisampleState; pipelineInfo.pViewportState = &_viewportState; pipelineInfo.pDepthStencilState = &_depthStencilState; - pipelineInfo.stageCount = _shaderStages.size(); + pipelineInfo.stageCount = UnsignedInt(_shaderStages.size()); pipelineInfo.pStages = _shaderStages.data(); pipelineInfo.pDynamicState = &dynamicState; diff --git a/src/Magnum/Vk/Pipeline.h b/src/Magnum/Vk/Pipeline.h index c7413cb2e..0245fbafa 100644 --- a/src/Magnum/Vk/Pipeline.h +++ b/src/Magnum/Vk/Pipeline.h @@ -184,7 +184,7 @@ class MAGNUM_VK_EXPORT Pipeline { vkCmdBindDescriptorSets(cmdBuffer, VkPipelineBindPoint(bindPoint), pl, 0, - descriptorSets.size(), vkDescriptorSets.data(), + UnsignedInt(descriptorSets.size()), vkDescriptorSets.data(), 0, nullptr); }; } diff --git a/src/Magnum/Vk/Queue.cpp b/src/Magnum/Vk/Queue.cpp index 677f79fa4..807544974 100644 --- a/src/Magnum/Vk/Queue.cpp +++ b/src/Magnum/Vk/Queue.cpp @@ -1,4 +1,4 @@ -/* +/* This file is part of Magnum. Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 @@ -71,9 +71,9 @@ Queue& Queue::submit(const CommandBuffer& cmdBuffer, sigSems[i] = sem; ++i; } - submitInfo.waitSemaphoreCount = waitSemaphores.size(); + submitInfo.waitSemaphoreCount = UnsignedInt(waitSemaphores.size()); submitInfo.pWaitSemaphores = waitSems.data(); - submitInfo.signalSemaphoreCount = signalSemaphores.size(); + submitInfo.signalSemaphoreCount = UnsignedInt(signalSemaphores.size()); submitInfo.pSignalSemaphores = sigSems.data(); VkResult err = vkQueueSubmit(_queue, 1, &submitInfo, VK_NULL_HANDLE); diff --git a/src/Magnum/Vk/Swapchain.h b/src/Magnum/Vk/Swapchain.h index d0858c13a..e3869570d 100644 --- a/src/Magnum/Vk/Swapchain.h +++ b/src/Magnum/Vk/Swapchain.h @@ -100,7 +100,7 @@ class MAGNUM_VK_EXPORT Swapchain { * @brief Number of images in the swapchain */ UnsignedInt imageCount() const { - return _buffers.size(); + return UnsignedInt(_buffers.size()); } /** diff --git a/src/Magnum/Vk/Texture.cpp b/src/Magnum/Vk/Texture.cpp index efdfb207b..965c22f4f 100644 --- a/src/Magnum/Vk/Texture.cpp +++ b/src/Magnum/Vk/Texture.cpp @@ -29,5 +29,4 @@ namespace Magnum { namespace Vk { - }} diff --git a/src/Magnum/Vk/Texture.h b/src/Magnum/Vk/Texture.h index 794b8b6b7..216d72b2e 100644 --- a/src/Magnum/Vk/Texture.h +++ b/src/Magnum/Vk/Texture.h @@ -40,7 +40,6 @@ namespace Magnum { namespace Vk { -template class MAGNUM_VK_EXPORT Texture { public: @@ -86,27 +85,14 @@ class MAGNUM_VK_EXPORT Texture { /** @brief Move assignment is not allowed */ Texture& operator=(Texture&&) = delete; - Math::Vector size() const { - return _size; - } - private: - Device& _device; VkSampler _sampler; - Vk::Image _image; VkImageLayout _imageLayout; - Vk::DeviceMemory _deviceMemory; - Vk::ImageView _view; - Math::Vector _size; UnsignedInt _mipLevels; }; -typedef Texture<1> Texture1D; -typedef Texture<2> Texture2D; -typedef Texture<3> Texture3D; - }} #endif