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. 4
      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. 58
      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) {
const VkBuffer source = _buffer;
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
* @brief Namespace @ref Magnum::Vk::Cmd
*/
#include "vulkan.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())}};
++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) {
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<const VkImageMemoryBarrier*>(imageMemoryBarriers.data())
0,
UnsignedInt(memoryBarriers.size()), memoryBarriers.data(),
UnsignedInt(bufferMemoryBarriers.size()), bufferMemoryBarriers.data(),
UnsignedInt(imageMemoryBarriers.size()), reinterpret_cast<const VkImageMemoryBarrier*>(imageMemoryBarriers.data())
);
};

4
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));

4
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);

2
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<const VkDescriptorSetLayoutBinding*>(bndgs.data())
};

24
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<DeviceQueueCreateInfo>& requestedQueues,
const std::vector<const char*>& extensions,
const std::vector<const char*>& validationLayers,
Device::Device(const PhysicalDevice& physicalDevice,
std::initializer_list<DeviceQueueCreateInfo> requestedQueues,
std::initializer_list<const char*> extensions,
std::initializer_list<const char*> validationLayers,
const DeviceFeatures& features):
_physicalDevice(physicalDevice)
{
VkPhysicalDeviceFeatures vkPhysicalDevice = features;
std::vector<DeviceQueueCreateInfo> qci{requestedQueues};
std::vector<const char*> exts{extensions};
std::vector<const char*> val{validationLayers};
VkDeviceCreateInfo deviceCreateInfo = {
VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO, nullptr, 0,
requestedQueues.size(), reinterpret_cast<const VkDeviceQueueCreateInfo*>(requestedQueues.data()),
validationLayers.size(), validationLayers.data(),
extensions.size(), extensions.data(),
&VkPhysicalDeviceFeatures(features)};
UnsignedInt(qci.size()), reinterpret_cast<const VkDeviceQueueCreateInfo*>(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);
}

58
src/Magnum/Vk/Device.h

@ -109,41 +109,48 @@ enum class DeviceFeature : UnsignedInt {
Container for physical device features.
*/
class DeviceFeatures : Containers::Array<DeviceFeature> {
class DeviceFeatures {
public:
DeviceFeatures(const std::initializer_list<DeviceFeature>& features):
Containers::Array<DeviceFeature>(Containers::Array<DeviceFeature>::zeroInitialized(deviceFeaturesCount))
{
std::copy(features.begin(), features.end(), this->end());
DeviceFeatures(const std::initializer_list<DeviceFeature>& features) {
VkBool32* enabled = reinterpret_cast<VkBool32*>(&_features);
for(DeviceFeature f : features) {
enabled[UnsignedInt(f)] = VK_TRUE;
}
}
operator VkPhysicalDeviceFeatures() const {
return _features;
}
operator const VkPhysicalDeviceFeatures&() const {
return *reinterpret_cast<const VkPhysicalDeviceFeatures*>(this->data());
operator VkPhysicalDeviceFeatures&() {
return _features;
}
private:
VkPhysicalDeviceFeatures _features;
};
struct DeviceQueueCreateInfo {
DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, std::initializer_list<Float> priorities) :
_queueFamilyIndex{ queueFamilyIndex },
_queueCount{UnsignedInt(priorities.size())},
DeviceQueueCreateInfo(UnsignedInt queueFamilyIndex, const std::vector<Float> 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<Float>& 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<Float> _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<DeviceQueueCreateInfo>& requestedQueues,
const std::vector<const char*>& extensions,
const std::vector<const char*>& validationLayers,
const DeviceFeatures& features);
public:
Device::Device(const PhysicalDevice& physicalDevice,
std::initializer_list<DeviceQueueCreateInfo> requestedQueues,
std::initializer_list<const char*> extensions,
std::initializer_list<const char*> validationLayers,
const DeviceFeatures& features);
/**
* @brief Destructor

2
src/Magnum/Vk/DeviceMemory.h

@ -84,7 +84,7 @@ class MAGNUM_VK_EXPORT DeviceMemory {
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)
void* 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,
nullptr, 0,
renderPass,
vkAttachments.size(),
UnsignedInt(vkAttachments.size()),
vkAttachments.data(),
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 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){

12
src/Magnum/Vk/Pipeline.cpp

@ -45,9 +45,9 @@ std::unique_ptr<Pipeline> 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<Pipeline> 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<Pipeline> GraphicsPipelineBuilder::build() {
VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,
nullptr,
0,
_dynamicStates.size(),
UnsignedInt(_dynamicStates.size()),
reinterpret_cast<VkDynamicState*>(_dynamicStates.data())
};
@ -106,7 +106,7 @@ std::unique_ptr<Pipeline> 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;

2
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);
};
}

6
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);

2
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());
}
/**

1
src/Magnum/Vk/Texture.cpp

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

14
src/Magnum/Vk/Texture.h

@ -40,7 +40,6 @@
namespace Magnum { namespace Vk {
template<UnsignedInt dimensions>
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<dimensions, UnsignedInt> size() const {
return _size;
}
private:
Device& _device;
VkSampler _sampler;
Vk::Image _image;
VkImageLayout _imageLayout;
Vk::DeviceMemory _deviceMemory;
Vk::ImageView _view;
Math::Vector<dimensions, UnsignedInt> _size;
UnsignedInt _mipLevels;
};
typedef Texture<1> Texture1D;
typedef Texture<2> Texture2D;
typedef Texture<3> Texture3D;
}}
#endif

Loading…
Cancel
Save