Browse Source

Vk: ImageMemoryBarrier constructor with implicit aspects.

Realizing some annoyances as I write docs.
pull/494/head
Vladimír Vondruš 5 years ago
parent
commit
9abdce52b4
  1. 3
      src/Magnum/Vk/Pipeline.cpp
  2. 9
      src/Magnum/Vk/Pipeline.h
  3. 24
      src/Magnum/Vk/Test/PipelineTest.cpp
  4. 4
      src/Magnum/Vk/Test/PipelineVkTest.cpp

3
src/Magnum/Vk/Pipeline.cpp

@ -29,6 +29,7 @@
#include <Corrade/Containers/ArrayView.h>
#include "Magnum/Vk/Device.h"
#include "Magnum/Vk/Image.h"
namespace Magnum { namespace Vk {
@ -75,6 +76,8 @@ ImageMemoryBarrier::ImageMemoryBarrier(const Accesses sourceAccesses, const Acce
_barrier.subresourceRange.layerCount = layerCount;
}
ImageMemoryBarrier::ImageMemoryBarrier(const Accesses sourceAccesses, const Accesses destinationAccesses, const ImageLayout oldLayout, const ImageLayout newLayout, Image& image, const UnsignedInt layerOffset, const UnsignedInt layerCount, const UnsignedInt levelOffset, const UnsignedInt levelCount): ImageMemoryBarrier{sourceAccesses, destinationAccesses, oldLayout, newLayout, image, imageAspectsFor(image.format()), layerOffset, layerCount, levelOffset, levelCount} {}
ImageMemoryBarrier::ImageMemoryBarrier(NoInitT) noexcept {}
ImageMemoryBarrier::ImageMemoryBarrier(const VkImageMemoryBarrier& barrier):

9
src/Magnum/Vk/Pipeline.h

@ -565,6 +565,15 @@ class MAGNUM_VK_EXPORT ImageMemoryBarrier {
*/
/*implicit*/ ImageMemoryBarrier(Accesses sourceAccesses, Accesses destinationAccesses, ImageLayout oldLayout, ImageLayout newLayout, VkImage image, ImageAspects aspects, UnsignedInt layerOffset = 0, UnsignedInt layerCount = VK_REMAINING_ARRAY_LAYERS, UnsignedInt levelOffset = 0, UnsignedInt levelCount = VK_REMAINING_MIP_LEVELS);
/**
* @brief Construct with an implicit image aspect
*
* Compared to @ref ImageMemoryBarrier(Accesses, Accesses, ImageLayout, ImageLayout, VkImage, ImageAspects, UnsignedInt, UnsignedInt, UnsignedInt, UnsignedInt)
* the @ref ImageAspects are chosen implicitly using
* @ref imageAspectsFor() from @ref Image::format().
*/
/*implicit*/ ImageMemoryBarrier(Accesses sourceAccesses, Accesses destinationAccesses, ImageLayout oldLayout, ImageLayout newLayout, Image& image, UnsignedInt layerOffset = 0, UnsignedInt layerCount = VK_REMAINING_ARRAY_LAYERS, UnsignedInt levelOffset = 0, UnsignedInt levelCount = VK_REMAINING_MIP_LEVELS);
/**
* @brief Construct without initializing the contents
*

24
src/Magnum/Vk/Test/PipelineTest.cpp

@ -26,8 +26,10 @@
#include <new>
#include <Corrade/TestSuite/Tester.h>
#include "Magnum/Vk/Device.h"
#include "Magnum/Vk/Image.h"
#include "Magnum/Vk/Pipeline.h"
#include "Magnum/Vk/PixelFormat.h"
namespace Magnum { namespace Vk { namespace Test { namespace {
@ -43,6 +45,7 @@ struct PipelineTest: TestSuite::Tester {
void bufferMemoryBarrierConstructFromVk();
void imageMemoryBarrierConstruct();
void imageMemoryBarrierConstructImplicitAspect();
void imageMemoryBarrierConstructNoInit();
void imageMemoryBarrierConstructFromVk();
};
@ -57,6 +60,7 @@ PipelineTest::PipelineTest() {
&PipelineTest::bufferMemoryBarrierConstructFromVk,
&PipelineTest::imageMemoryBarrierConstruct,
&PipelineTest::imageMemoryBarrierConstructImplicitAspect,
&PipelineTest::imageMemoryBarrierConstructNoInit,
&PipelineTest::imageMemoryBarrierConstructFromVk});
}
@ -130,6 +134,26 @@ void PipelineTest::imageMemoryBarrierConstruct() {
CORRADE_COMPARE(barrier->subresourceRange.layerCount, 5);
}
void PipelineTest::imageMemoryBarrierConstructImplicitAspect() {
Device device{NoCreate};
Image image = Image::wrap(device, reinterpret_cast<VkImage>(0xdead), PixelFormat::Depth24UnormStencil8UI);
ImageMemoryBarrier barrier{
Access::ColorAttachmentRead, Access::TransferWrite,
ImageLayout::ColorAttachment, ImageLayout::TransferDestination,
image, 3, 5, 7, 9};
CORRADE_COMPARE(barrier->srcAccessMask, VK_ACCESS_COLOR_ATTACHMENT_READ_BIT);
CORRADE_COMPARE(barrier->dstAccessMask, VK_ACCESS_TRANSFER_WRITE_BIT);
CORRADE_COMPARE(barrier->oldLayout, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
CORRADE_COMPARE(barrier->newLayout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
CORRADE_COMPARE(barrier->image, reinterpret_cast<VkImage>(0xdead));
CORRADE_COMPARE(barrier->subresourceRange.aspectMask, VK_IMAGE_ASPECT_DEPTH_BIT|VK_IMAGE_ASPECT_STENCIL_BIT);
CORRADE_COMPARE(barrier->subresourceRange.baseMipLevel, 7);
CORRADE_COMPARE(barrier->subresourceRange.levelCount, 9);
CORRADE_COMPARE(barrier->subresourceRange.baseArrayLayer, 3);
CORRADE_COMPARE(barrier->subresourceRange.layerCount, 5);
}
void PipelineTest::imageMemoryBarrierConstructNoInit() {
ImageMemoryBarrier barrier{NoInit};
barrier->sType = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2;

4
src/Magnum/Vk/Test/PipelineVkTest.cpp

@ -71,7 +71,7 @@ void PipelineVkTest::pipelineBarrier() {
}, {
{Access::TransferWrite, Access::ShaderRead,
ImageLayout::Preinitialized, ImageLayout::ShaderReadOnly,
image, ImageAspect::Color}
image}
})
.end();
@ -129,7 +129,7 @@ void PipelineVkTest::pipelineBarrierImage() {
.pipelineBarrier(PipelineStage::Transfer, PipelineStage::FragmentShader, {
{Access::TransferWrite, Access::ShaderRead,
ImageLayout::Preinitialized, ImageLayout::ShaderReadOnly,
image, ImageAspect::Color}
image}
})
.end();

Loading…
Cancel
Save