Browse Source

Vk: Fix device and loads of UnsignedInt conversion errors.

Signed-off-by: Squareys <Squareys@googlemail.com>
pull/202/head
Squareys 10 years ago
parent
commit
d73004ea3d
  1. 2
      src/Magnum/Vk/Buffer.h
  2. 15
      src/Magnum/Vk/Command.h
  3. 2
      src/Magnum/Vk/CommandBuffer.h
  4. 4
      src/Magnum/Vk/DescriptorPool.h
  5. 2
      src/Magnum/Vk/DescriptorSet.h
  6. 24
      src/Magnum/Vk/Device.cpp
  7. 54
      src/Magnum/Vk/Device.h
  8. 2
      src/Magnum/Vk/DeviceMemory.h
  9. 2
      src/Magnum/Vk/Framebuffer.h
  10. 2
      src/Magnum/Vk/Mesh.h
  11. 12
      src/Magnum/Vk/Pipeline.cpp
  12. 2
      src/Magnum/Vk/Pipeline.h
  13. 6
      src/Magnum/Vk/Queue.cpp
  14. 2
      src/Magnum/Vk/Swapchain.h
  15. 1
      src/Magnum/Vk/Texture.cpp
  16. 14
      src/Magnum/Vk/Texture.h

2
src/Magnum/Vk/Buffer.h

@ -128,7 +128,7 @@ class MAGNUM_VK_EXPORT Buffer {
auto cmdCopyTo(Buffer& dest, std::initializer_list<VkBufferCopy> regions) { auto cmdCopyTo(Buffer& dest, std::initializer_list<VkBufferCopy> regions) {
const VkBuffer source = _buffer; const VkBuffer source = _buffer;
return [source, &dest, &regions](VkCommandBuffer cmdBuffer){ return [source, &dest, &regions](VkCommandBuffer cmdBuffer){
vkCmdCopyBuffer(cmdBuffer, source, dest, regions.size(), std::vector<VkBufferCopy>(regions).data()); vkCmdCopyBuffer(cmdBuffer, source, dest, UnsignedInt(regions.size()), std::vector<VkBufferCopy>(regions).data());
}; };
} }

15
src/Magnum/Vk/Command.h

@ -29,7 +29,6 @@
/** @file /** @file
* @brief Namespace @ref Magnum::Vk::Cmd * @brief Namespace @ref Magnum::Vk::Cmd
*/ */
#include "vulkan.h" #include "vulkan.h"
#include <Corrade/Containers/Array.h> #include <Corrade/Containers/Array.h>
@ -74,13 +73,13 @@ inline auto setScissor(UnsignedInt firstScissor, const std::initializer_list<Ran
vkRects[i] = {{range.left(), range.bottom()}, {UnsignedInt(range.sizeX()), UnsignedInt(range.sizeY())}}; vkRects[i] = {{range.left(), range.bottom()}, {UnsignedInt(range.sizeX()), UnsignedInt(range.sizeY())}};
++i; ++i;
} }
vkCmdSetScissor(cmdBuffer, firstScissor, vkRects.size(), vkRects.data()); vkCmdSetScissor(cmdBuffer, firstScissor, UnsignedInt(vkRects.size()), vkRects.data());
}; };
} }
inline auto setViewport(UnsignedInt firstViewport, const std::vector<VkViewport>& viewports) { inline auto setViewport(UnsignedInt firstViewport, const std::vector<VkViewport>& viewports) {
return [firstViewport, &viewports](VkCommandBuffer cmdBuffer){ 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){ return [srcStageMask, dstStageMask, &memoryBarriers, &bufferMemoryBarriers, &imageMemoryBarriers](VkCommandBuffer cmdBuffer){
vkCmdPipelineBarrier(cmdBuffer, vkCmdPipelineBarrier(cmdBuffer,
VkPipelineStageFlags(srcStageMask), VkPipelineStageFlags(dstStageMask), VkPipelineStageFlags(srcStageMask), VkPipelineStageFlags(dstStageMask),
0, memoryBarriers.size(), 0,
memoryBarriers.data(), UnsignedInt(memoryBarriers.size()), memoryBarriers.data(),
bufferMemoryBarriers.size(), UnsignedInt(bufferMemoryBarriers.size()), bufferMemoryBarriers.data(),
bufferMemoryBarriers.data(), UnsignedInt(imageMemoryBarriers.size()), reinterpret_cast<const VkImageMemoryBarrier*>(imageMemoryBarriers.data())
imageMemoryBarriers.size(),
reinterpret_cast<const VkImageMemoryBarrier*>(imageMemoryBarriers.data())
); );
}; };

2
src/Magnum/Vk/CommandBuffer.h

@ -152,7 +152,7 @@ class MAGNUM_VK_EXPORT CommandBuffer {
renderPass, renderPass,
framebuffer, framebuffer,
VkRect2D{{renderArea.left(), renderArea.bottom()}, {UnsignedInt(renderArea.sizeX()), UnsignedInt(renderArea.sizeY())}}, VkRect2D{{renderArea.left(), renderArea.bottom()}, {UnsignedInt(renderArea.sizeX()), UnsignedInt(renderArea.sizeY())}},
clearValues.size(), UnsignedInt(clearValues.size()),
clearValues.data()}; clearValues.data()};
vkCmdBeginRenderPass(_cmdBuffer, &renderPassBeginInfo, VkSubpassContents(subpassContents)); vkCmdBeginRenderPass(_cmdBuffer, &renderPassBeginInfo, VkSubpassContents(subpassContents));

4
src/Magnum/Vk/DescriptorPool.h

@ -64,13 +64,13 @@ private:
class MAGNUM_VK_EXPORT DescriptorPool { class MAGNUM_VK_EXPORT DescriptorPool {
public: public:
DescriptorPool(Device& device, UnsignedLong maxSets, const DescriptorPoolCreateInfo& ci): DescriptorPool(Device& device, UnsignedInt maxSets, const DescriptorPoolCreateInfo& ci):
_device{device} _device{device}
{ {
VkDescriptorPoolCreateInfo createInfo = { VkDescriptorPoolCreateInfo createInfo = {
VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, nullptr, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO, nullptr, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT,
maxSets, maxSets,
ci._poolSizes.size(), ci._poolSizes.data() UnsignedInt(ci._poolSizes.size()), ci._poolSizes.data()
}; };
VkResult err = vkCreateDescriptorPool(_device, &createInfo, nullptr, &_descriptorPool); VkResult err = vkCreateDescriptorPool(_device, &createInfo, nullptr, &_descriptorPool);

2
src/Magnum/Vk/DescriptorSet.h

@ -84,7 +84,7 @@ class MAGNUM_VK_EXPORT DescriptorSetLayout {
VkDescriptorSetLayoutCreateInfo descLayout = { VkDescriptorSetLayoutCreateInfo descLayout = {
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
nullptr, 0, nullptr, 0,
bndgs.size(), UnsignedInt(bndgs.size()),
reinterpret_cast<const VkDescriptorSetLayoutBinding*>(bndgs.data()) reinterpret_cast<const VkDescriptorSetLayoutBinding*>(bndgs.data())
}; };

24
src/Magnum/Vk/Device.cpp

@ -1,4 +1,4 @@
/* /*
This file is part of Magnum. This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016
@ -32,19 +32,24 @@
namespace Magnum { namespace Vk { namespace Magnum { namespace Vk {
Device::Device(PhysicalDevice& physicalDevice, Device::Device(const PhysicalDevice& physicalDevice,
const std::vector<DeviceQueueCreateInfo>& requestedQueues, std::initializer_list<DeviceQueueCreateInfo> requestedQueues,
const std::vector<const char*>& extensions, std::initializer_list<const char*> extensions,
const std::vector<const char*>& validationLayers, std::initializer_list<const char*> validationLayers,
const DeviceFeatures& features): const DeviceFeatures& features):
_physicalDevice(physicalDevice) _physicalDevice(physicalDevice)
{ {
VkPhysicalDeviceFeatures vkPhysicalDevice = features;
std::vector<DeviceQueueCreateInfo> qci{requestedQueues};
std::vector<const char*> exts{extensions};
std::vector<const char*> val{validationLayers};
VkDeviceCreateInfo deviceCreateInfo = { VkDeviceCreateInfo deviceCreateInfo = {
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, 0, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, 0,
requestedQueues.size(), reinterpret_cast<const VkDeviceQueueCreateInfo*>(requestedQueues.data()), UnsignedInt(qci.size()), reinterpret_cast<const VkDeviceQueueCreateInfo*>(qci.data()),
validationLayers.size(), validationLayers.data(), UnsignedInt(val.size()), val.data(),
extensions.size(), extensions.data(), UnsignedInt(exts.size()), exts.data(),
&VkPhysicalDeviceFeatures(features)}; &vkPhysicalDevice};
vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &_device); vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &_device);
@ -55,6 +60,7 @@ Device::Device(PhysicalDevice& physicalDevice,
} }
} }
Device::~Device() { Device::~Device() {
vkDestroyDevice(_device, nullptr); vkDestroyDevice(_device, nullptr);
} }

54
src/Magnum/Vk/Device.h

@ -109,41 +109,48 @@ enum class DeviceFeature : UnsignedInt {
Container for physical device features. Container for physical device features.
*/ */
class DeviceFeatures : Containers::Array<DeviceFeature> { class DeviceFeatures {
public: public:
DeviceFeatures(const std::initializer_list<DeviceFeature>& features): DeviceFeatures(const std::initializer_list<DeviceFeature>& features) {
Containers::Array<DeviceFeature>(Containers::Array<DeviceFeature>::zeroInitialized(deviceFeaturesCount)) VkBool32* enabled = reinterpret_cast<VkBool32*>(&_features);
{ for(DeviceFeature f : features) {
std::copy(features.begin(), features.end(), this->end()); enabled[UnsignedInt(f)] = VK_TRUE;
}
} }
operator const VkPhysicalDeviceFeatures&() const { operator VkPhysicalDeviceFeatures() const {
return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this->data()); return _features;
} }
operator VkPhysicalDeviceFeatures&() {
return _features;
}
private:
VkPhysicalDeviceFeatures _features;
}; };
struct DeviceQueueCreateInfo { struct DeviceQueueCreateInfo {
DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, std::initializer_list<Float> priorities) : DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, const std::vector<Float> priorities) :
_queueFamilyIndex{queueFamilyIndex}, _queueFamilyIndex{queueFamilyIndex},
_queueCount{UnsignedInt(priorities.size())}, _queueCount{1},
_queuePriorities{new float[priorities.size()]} _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<Float>& priorities) : DeviceQueueCreateInfo(const DeviceQueueCreateInfo& other):
_queueFamilyIndex{ queueFamilyIndex }, _queueFamilyIndex{other._queueFamilyIndex},
_queueCount{ UnsignedInt(priorities.size()) }, _queueCount{other._queueCount},
_queuePriorities{ new float[priorities.size()] } _queuePriorities{new float[_queueCount]}
{ {
std::copy(priorities.begin(), priorities.end(), _queuePriorities); std::copy(other._queuePriorities.get(), other._queuePriorities.get() + _queueCount,
_queuePriorities.get());
} }
~DeviceQueueCreateInfo() { ~DeviceQueueCreateInfo() = default;
delete _queuePriorities;
}
UnsignedInt queueCount() const { UnsignedInt queueCount() const {
return _queueCount; return _queueCount;
@ -159,7 +166,7 @@ private:
const VkDeviceQueueCreateFlags _flags = 0; const VkDeviceQueueCreateFlags _flags = 0;
UnsignedInt _queueFamilyIndex; UnsignedInt _queueFamilyIndex;
UnsignedInt _queueCount; UnsignedInt _queueCount;
float* _queuePriorities; std::unique_ptr<Float> _queuePriorities;
}; };
static_assert(sizeof(DeviceQueueCreateInfo) == sizeof(VkDeviceQueueCreateInfo), "DeviceQueueCreateInfo and VkDeviceQueueCreateInfo are required to be of same size."); static_assert(sizeof(DeviceQueueCreateInfo) == sizeof(VkDeviceQueueCreateInfo), "DeviceQueueCreateInfo and VkDeviceQueueCreateInfo are required to be of same size.");
@ -176,10 +183,11 @@ class MAGNUM_VK_EXPORT Device {
/** @brief Move constructor */ /** @brief Move constructor */
Device(Device&& other); Device(Device&& other);
Device(PhysicalDevice& physicalDevice, public:
const std::vector<DeviceQueueCreateInfo>& requestedQueues, Device::Device(const PhysicalDevice& physicalDevice,
const std::vector<const char*>& extensions, std::initializer_list<DeviceQueueCreateInfo> requestedQueues,
const std::vector<const char*>& validationLayers, std::initializer_list<const char*> extensions,
std::initializer_list<const char*> validationLayers,
const DeviceFeatures& features); const DeviceFeatures& features);
/** /**

2
src/Magnum/Vk/DeviceMemory.h

@ -84,7 +84,7 @@ class MAGNUM_VK_EXPORT DeviceMemory {
return map(0, _memAlloc.allocationSize); return map(0, _memAlloc.allocationSize);
} }
Containers::ArrayView<char> map(UnsignedInt offset, UnsignedInt size) { Containers::ArrayView<char> map(VkDeviceSize offset, VkDeviceSize size) {
// TODO: Memory map flags (== 0) // TODO: Memory map flags (== 0)
void* data; void* data;
VkResult err = vkMapMemory(_device, _deviceMemory, offset, size, 0, &data); VkResult err = vkMapMemory(_device, _deviceMemory, offset, size, 0, &data);

2
src/Magnum/Vk/Framebuffer.h

@ -57,7 +57,7 @@ class MAGNUM_VK_EXPORT Framebuffer {
VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,
nullptr, 0, nullptr, 0,
renderPass, renderPass,
vkAttachments.size(), UnsignedInt(vkAttachments.size()),
vkAttachments.data(), vkAttachments.data(),
size.x(), size.y(), size.z() size.x(), size.y(), size.z()
}; };

2
src/Magnum/Vk/Mesh.h

@ -67,7 +67,7 @@ class MAGNUM_VK_EXPORT Mesh {
const VkBuffer* vertexBuffers = _vertexBuffers.data(); const VkBuffer* vertexBuffers = _vertexBuffers.data();
const VkBuffer indexBuffer = _indexBuffer; const VkBuffer indexBuffer = _indexBuffer;
const UnsignedInt numVertexBuffers = _vertexBuffers.size(); const UnsignedInt numVertexBuffers = UnsignedInt(_vertexBuffers.size());
const UnsignedInt count = _count; const UnsignedInt count = _count;
const bool drawIndexed = _drawIndexed; const bool drawIndexed = _drawIndexed;
return [vertexBuffers, indexBuffer, numVertexBuffers, count, drawIndexed](VkCommandBuffer cmdBuffer){ return [vertexBuffers, indexBuffer, numVertexBuffers, count, drawIndexed](VkCommandBuffer cmdBuffer){

12
src/Magnum/Vk/Pipeline.cpp

@ -45,9 +45,9 @@ std::unique_ptr<Pipeline> GraphicsPipelineBuilder::build() {
VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
nullptr, nullptr,
0, 0,
_setLayouts.size(), UnsignedInt(_setLayouts.size()),
_setLayouts.data(), _setLayouts.data(),
_pushConstantRanges.size(), UnsignedInt(_pushConstantRanges.size()),
_pushConstantRanges.data() _pushConstantRanges.data()
}; };
@ -79,9 +79,9 @@ std::unique_ptr<Pipeline> GraphicsPipelineBuilder::build() {
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO,
nullptr, nullptr,
0, 0,
_vertexInputBindings.size(), UnsignedInt(_vertexInputBindings.size()),
_vertexInputBindings.data(), _vertexInputBindings.data(),
_vertexInputAttrbutes.size(), UnsignedInt(_vertexInputAttrbutes.size()),
_vertexInputAttrbutes.data(), _vertexInputAttrbutes.data(),
}; };
@ -90,7 +90,7 @@ std::unique_ptr<Pipeline> GraphicsPipelineBuilder::build() {
VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO, VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
nullptr, nullptr,
0, 0,
_dynamicStates.size(), UnsignedInt(_dynamicStates.size()),
reinterpret_cast<VkDynamicState*>(_dynamicStates.data()) reinterpret_cast<VkDynamicState*>(_dynamicStates.data())
}; };
@ -106,7 +106,7 @@ std::unique_ptr<Pipeline> GraphicsPipelineBuilder::build() {
pipelineInfo.pMultisampleState = &_multisampleState; pipelineInfo.pMultisampleState = &_multisampleState;
pipelineInfo.pViewportState = &_viewportState; pipelineInfo.pViewportState = &_viewportState;
pipelineInfo.pDepthStencilState = &_depthStencilState; pipelineInfo.pDepthStencilState = &_depthStencilState;
pipelineInfo.stageCount = _shaderStages.size(); pipelineInfo.stageCount = UnsignedInt(_shaderStages.size());
pipelineInfo.pStages = _shaderStages.data(); pipelineInfo.pStages = _shaderStages.data();
pipelineInfo.pDynamicState = &dynamicState; pipelineInfo.pDynamicState = &dynamicState;

2
src/Magnum/Vk/Pipeline.h

@ -184,7 +184,7 @@ class MAGNUM_VK_EXPORT Pipeline {
vkCmdBindDescriptorSets(cmdBuffer, vkCmdBindDescriptorSets(cmdBuffer,
VkPipelineBindPoint(bindPoint), VkPipelineBindPoint(bindPoint),
pl, 0, pl, 0,
descriptorSets.size(), vkDescriptorSets.data(), UnsignedInt(descriptorSets.size()), vkDescriptorSets.data(),
0, nullptr); 0, nullptr);
}; };
} }

6
src/Magnum/Vk/Queue.cpp

@ -1,4 +1,4 @@
/* /*
This file is part of Magnum. This file is part of Magnum.
Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016
@ -71,9 +71,9 @@ Queue& Queue::submit(const CommandBuffer& cmdBuffer,
sigSems[i] = sem; sigSems[i] = sem;
++i; ++i;
} }
submitInfo.waitSemaphoreCount = waitSemaphores.size(); submitInfo.waitSemaphoreCount = UnsignedInt(waitSemaphores.size());
submitInfo.pWaitSemaphores = waitSems.data(); submitInfo.pWaitSemaphores = waitSems.data();
submitInfo.signalSemaphoreCount = signalSemaphores.size(); submitInfo.signalSemaphoreCount = UnsignedInt(signalSemaphores.size());
submitInfo.pSignalSemaphores = sigSems.data(); submitInfo.pSignalSemaphores = sigSems.data();
VkResult err = vkQueueSubmit(_queue, 1, &submitInfo, VK_NULL_HANDLE); VkResult err = vkQueueSubmit(_queue, 1, &submitInfo, VK_NULL_HANDLE);

2
src/Magnum/Vk/Swapchain.h

@ -100,7 +100,7 @@ class MAGNUM_VK_EXPORT Swapchain {
* @brief Number of images in the swapchain * @brief Number of images in the swapchain
*/ */
UnsignedInt imageCount() const { UnsignedInt imageCount() const {
return _buffers.size(); return UnsignedInt(_buffers.size());
} }
/** /**

1
src/Magnum/Vk/Texture.cpp

@ -29,5 +29,4 @@
namespace Magnum { namespace Vk { namespace Magnum { namespace Vk {
}} }}

14
src/Magnum/Vk/Texture.h

@ -40,7 +40,6 @@
namespace Magnum { namespace Vk { namespace Magnum { namespace Vk {
template<UnsignedInt dimensions>
class MAGNUM_VK_EXPORT Texture { class MAGNUM_VK_EXPORT Texture {
public: public:
@ -86,27 +85,14 @@ class MAGNUM_VK_EXPORT Texture {
/** @brief Move assignment is not allowed */ /** @brief Move assignment is not allowed */
Texture& operator=(Texture&&) = delete; Texture& operator=(Texture&&) = delete;
Math::Vector<dimensions, UnsignedInt> size() const {
return _size;
}
private: private:
Device& _device; Device& _device;
VkSampler _sampler; VkSampler _sampler;
Vk::Image _image;
VkImageLayout _imageLayout; VkImageLayout _imageLayout;
Vk::DeviceMemory _deviceMemory;
Vk::ImageView _view;
Math::Vector<dimensions, UnsignedInt> _size;
UnsignedInt _mipLevels; UnsignedInt _mipLevels;
}; };
typedef Texture<1> Texture1D;
typedef Texture<2> Texture2D;
typedef Texture<3> Texture3D;
}} }}
#endif #endif

Loading…
Cancel
Save