Skip to content

Commit 89800b5

Browse files
implement per-view usages and fix up code to deal with the fact I've changed a few flags into core::bitfield
1 parent c15bcb0 commit 89800b5

File tree

6 files changed

+33
-30
lines changed

6 files changed

+33
-30
lines changed

include/nbl/asset/IImage.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ class IImage : public IDescriptor
717717
for (auto it2=it+1u; it2!=pRegionsEnd; it2++)
718718
{
719719
const auto& subresource2 = it2->getDstSubresource();
720-
if (!(subresource2.aspectMask&subresource.aspectMask))
720+
if (!(subresource2.aspectMask&subresource.aspectMask).value)
721721
continue;
722722
if (subresource2.mipLevel!=subresource.mipLevel)
723723
continue;

include/nbl/asset/IImageView.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class IImageView : public IDescriptor
8585
// ONLY useful when creating multiple views of an image created with EXTENDED_USAGE to use different view formats.
8686
// Example: Create SRGB image with usage STORAGE, and two views with formats SRGB and R32_UINT. Then the SRGB view
8787
// CANNOT have STORAGE usage because the format doesn't support it, but the R32_UINT can.
88-
core::bitflag<IImage::E_USAGE_FLAGS> subUsages = EUF_NONE;
88+
core::bitflag<IImage::E_USAGE_FLAGS> subUsages = IImage::EUF_NONE;
8989
core::smart_refctd_ptr<ImageType> image;
9090
E_TYPE viewType;
9191
E_FORMAT format;

src/nbl/video/CVulkanCommandBuffer.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,14 @@ bool CVulkanCommandBuffer::copyImage_impl(const image_t* srcImage, asset::IImage
8585
VkImageCopy vk_regions[MAX_COUNT];
8686
for (uint32_t i = 0u; i < regionCount; ++i)
8787
{
88-
vk_regions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask);
88+
vk_regions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask.value);
8989
vk_regions[i].srcSubresource.baseArrayLayer = pRegions[i].srcSubresource.baseArrayLayer;
9090
vk_regions[i].srcSubresource.layerCount = pRegions[i].srcSubresource.layerCount;
9191
vk_regions[i].srcSubresource.mipLevel = pRegions[i].srcSubresource.mipLevel;
9292

9393
vk_regions[i].srcOffset = { static_cast<int32_t>(pRegions[i].srcOffset.x), static_cast<int32_t>(pRegions[i].srcOffset.y), static_cast<int32_t>(pRegions[i].srcOffset.z) };
9494

95-
vk_regions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask);
95+
vk_regions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask.value);
9696
vk_regions[i].dstSubresource.baseArrayLayer = pRegions[i].dstSubresource.baseArrayLayer;
9797
vk_regions[i].dstSubresource.layerCount = pRegions[i].dstSubresource.layerCount;
9898
vk_regions[i].dstSubresource.mipLevel = pRegions[i].dstSubresource.mipLevel;
@@ -126,7 +126,7 @@ bool CVulkanCommandBuffer::copyBufferToImage_impl(const buffer_t* srcBuffer, ima
126126
vk_regions[i].bufferOffset = pRegions[i].bufferOffset;
127127
vk_regions[i].bufferRowLength = pRegions[i].bufferRowLength;
128128
vk_regions[i].bufferImageHeight = pRegions[i].bufferImageHeight;
129-
vk_regions[i].imageSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].imageSubresource.aspectMask);
129+
vk_regions[i].imageSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].imageSubresource.aspectMask.value);
130130
vk_regions[i].imageSubresource.mipLevel = pRegions[i].imageSubresource.mipLevel;
131131
vk_regions[i].imageSubresource.baseArrayLayer = pRegions[i].imageSubresource.baseArrayLayer;
132132
vk_regions[i].imageSubresource.layerCount = pRegions[i].imageSubresource.layerCount;
@@ -157,7 +157,7 @@ bool CVulkanCommandBuffer::copyImageToBuffer_impl(const image_t* srcImage, asset
157157
vk_copyRegions[i].bufferOffset = static_cast<VkDeviceSize>(pRegions[i].bufferOffset);
158158
vk_copyRegions[i].bufferRowLength = pRegions[i].bufferRowLength;
159159
vk_copyRegions[i].bufferImageHeight = pRegions[i].bufferImageHeight;
160-
vk_copyRegions[i].imageSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].imageSubresource.aspectMask);
160+
vk_copyRegions[i].imageSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].imageSubresource.aspectMask.value);
161161
vk_copyRegions[i].imageSubresource.baseArrayLayer = pRegions[i].imageSubresource.baseArrayLayer;
162162
vk_copyRegions[i].imageSubresource.layerCount = pRegions[i].imageSubresource.layerCount;
163163
vk_copyRegions[i].imageSubresource.mipLevel = pRegions[i].imageSubresource.mipLevel;
@@ -188,7 +188,7 @@ bool CVulkanCommandBuffer::blitImage_impl(const image_t* srcImage, asset::IImage
188188

189189
for (uint32_t i = 0u; i < regionCount; ++i)
190190
{
191-
vk_blitRegions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask);
191+
vk_blitRegions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask.value);
192192
vk_blitRegions[i].srcSubresource.mipLevel = pRegions[i].srcSubresource.mipLevel;
193193
vk_blitRegions[i].srcSubresource.baseArrayLayer = pRegions[i].srcSubresource.baseArrayLayer;
194194
vk_blitRegions[i].srcSubresource.layerCount = pRegions[i].srcSubresource.layerCount;
@@ -197,7 +197,7 @@ bool CVulkanCommandBuffer::blitImage_impl(const image_t* srcImage, asset::IImage
197197
vk_blitRegions[i].srcOffsets[0] = { static_cast<int32_t>(pRegions[i].srcOffsets[0].x), static_cast<int32_t>(pRegions[i].srcOffsets[0].y), static_cast<int32_t>(pRegions[i].srcOffsets[0].z) };
198198
vk_blitRegions[i].srcOffsets[1] = { static_cast<int32_t>(pRegions[i].srcOffsets[1].x), static_cast<int32_t>(pRegions[i].srcOffsets[1].y), static_cast<int32_t>(pRegions[i].srcOffsets[1].z) };
199199

200-
vk_blitRegions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask);
200+
vk_blitRegions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask.value);
201201
vk_blitRegions[i].dstSubresource.mipLevel = pRegions[i].dstSubresource.mipLevel;
202202
vk_blitRegions[i].dstSubresource.baseArrayLayer = pRegions[i].dstSubresource.baseArrayLayer;
203203
vk_blitRegions[i].dstSubresource.layerCount = pRegions[i].dstSubresource.layerCount;
@@ -223,14 +223,14 @@ bool CVulkanCommandBuffer::resolveImage_impl(const image_t* srcImage, asset::IIm
223223
VkImageResolve vk_regions[MAX_COUNT];
224224
for (uint32_t i = 0u; i < regionCount; ++i)
225225
{
226-
vk_regions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask);
226+
vk_regions[i].srcSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].srcSubresource.aspectMask.value);
227227
vk_regions[i].srcSubresource.baseArrayLayer = pRegions[i].srcSubresource.baseArrayLayer;
228228
vk_regions[i].srcSubresource.layerCount = pRegions[i].srcSubresource.layerCount;
229229
vk_regions[i].srcSubresource.mipLevel = pRegions[i].srcSubresource.mipLevel;
230230

231231
vk_regions[i].srcOffset = { static_cast<int32_t>(pRegions[i].srcOffset.x), static_cast<int32_t>(pRegions[i].srcOffset.y), static_cast<int32_t>(pRegions[i].srcOffset.z) };
232232

233-
vk_regions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask);
233+
vk_regions[i].dstSubresource.aspectMask = static_cast<VkImageAspectFlags>(pRegions[i].dstSubresource.aspectMask.value);
234234
vk_regions[i].dstSubresource.baseArrayLayer = pRegions[i].dstSubresource.baseArrayLayer;
235235
vk_regions[i].dstSubresource.layerCount = pRegions[i].dstSubresource.layerCount;
236236
vk_regions[i].dstSubresource.mipLevel = pRegions[i].dstSubresource.mipLevel;
@@ -343,7 +343,7 @@ bool CVulkanCommandBuffer::waitEvents_impl(uint32_t eventCount, event_t* const*
343343
vk_imageMemoryBarriers[i].srcQueueFamilyIndex = depInfo->imgBarriers[i].srcQueueFamilyIndex;
344344
vk_imageMemoryBarriers[i].dstQueueFamilyIndex = depInfo->imgBarriers[i].dstQueueFamilyIndex;
345345
vk_imageMemoryBarriers[i].image = IBackendObject::compatibility_cast<const CVulkanImage*>(depInfo->imgBarriers[i].image.get(), this)->getInternalObject();
346-
vk_imageMemoryBarriers[i].subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(depInfo->imgBarriers[i].subresourceRange.aspectMask);
346+
vk_imageMemoryBarriers[i].subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(depInfo->imgBarriers[i].subresourceRange.aspectMask.value);
347347
vk_imageMemoryBarriers[i].subresourceRange.baseMipLevel = depInfo->imgBarriers[i].subresourceRange.baseMipLevel;
348348
vk_imageMemoryBarriers[i].subresourceRange.levelCount = depInfo->imgBarriers[i].subresourceRange.levelCount;
349349
vk_imageMemoryBarriers[i].subresourceRange.baseArrayLayer = depInfo->imgBarriers[i].subresourceRange.baseArrayLayer;
@@ -415,7 +415,7 @@ bool CVulkanCommandBuffer::pipelineBarrier_impl(core::bitflag<asset::E_PIPELINE_
415415
vk_imageMemoryBarriers[i].srcQueueFamilyIndex = pImageMemoryBarriers[i].srcQueueFamilyIndex;
416416
vk_imageMemoryBarriers[i].dstQueueFamilyIndex = pImageMemoryBarriers[i].dstQueueFamilyIndex;
417417
vk_imageMemoryBarriers[i].image = IBackendObject::compatibility_cast<const CVulkanImage*>(pImageMemoryBarriers[i].image.get(), this)->getInternalObject();
418-
vk_imageMemoryBarriers[i].subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(pImageMemoryBarriers[i].subresourceRange.aspectMask);
418+
vk_imageMemoryBarriers[i].subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(pImageMemoryBarriers[i].subresourceRange.aspectMask.value);
419419
vk_imageMemoryBarriers[i].subresourceRange.baseMipLevel = pImageMemoryBarriers[i].subresourceRange.baseMipLevel;
420420
vk_imageMemoryBarriers[i].subresourceRange.levelCount = pImageMemoryBarriers[i].subresourceRange.levelCount;
421421
vk_imageMemoryBarriers[i].subresourceRange.baseArrayLayer = pImageMemoryBarriers[i].subresourceRange.baseArrayLayer;
@@ -559,7 +559,7 @@ bool CVulkanCommandBuffer::clearColorImage_impl(image_t* image, asset::IImage::E
559559

560560
for (uint32_t i = 0u; i < rangeCount; ++i)
561561
{
562-
vk_ranges[i].aspectMask = static_cast<VkImageAspectFlags>(pRanges[i].aspectMask);
562+
vk_ranges[i].aspectMask = static_cast<VkImageAspectFlags>(pRanges[i].aspectMask.value);
563563
vk_ranges[i].baseMipLevel = pRanges[i].baseMipLevel;
564564
vk_ranges[i].levelCount = pRanges[i].layerCount;
565565
vk_ranges[i].baseArrayLayer = pRanges[i].baseArrayLayer;
@@ -588,7 +588,7 @@ bool CVulkanCommandBuffer::clearDepthStencilImage_impl(image_t* image, asset::II
588588

589589
for (uint32_t i = 0u; i < rangeCount; ++i)
590590
{
591-
vk_ranges[i].aspectMask = static_cast<VkImageAspectFlags>(pRanges[i].aspectMask);
591+
vk_ranges[i].aspectMask = static_cast<VkImageAspectFlags>(pRanges[i].aspectMask.value);
592592
vk_ranges[i].baseMipLevel = pRanges[i].baseMipLevel;
593593
vk_ranges[i].levelCount = pRanges[i].layerCount;
594594
vk_ranges[i].baseArrayLayer = pRanges[i].baseArrayLayer;

src/nbl/video/CVulkanImageView.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
#ifndef __NBL_C_VULKAN_IMAGE_VIEW_H_INCLUDED__
2-
#define __NBL_C_VULKAN_IMAGE_VIEW_H_INCLUDED__
1+
#ifndef _NBL_C_VULKAN_IMAGE_VIEW_H_INCLUDED_
2+
#define _NBL_C_VULKAN_IMAGE_VIEW_H_INCLUDED_
33

44
#include "nbl/video/IGPUImageView.h"
55

@@ -13,21 +13,20 @@ class ILogicalDevice;
1313

1414
class CVulkanImageView final : public IGPUImageView
1515
{
16-
public:
17-
CVulkanImageView(core::smart_refctd_ptr<ILogicalDevice>&& logicalDevice,
18-
SCreationParams&& _params, VkImageView imageView)
19-
: IGPUImageView(std::move(logicalDevice), std::move(_params)), m_vkImageView(imageView)
20-
{}
16+
public:
17+
CVulkanImageView(core::smart_refctd_ptr<ILogicalDevice>&& logicalDevice, SCreationParams&& _params, VkImageView imageView)
18+
: IGPUImageView(std::move(logicalDevice), std::move(_params)), m_vkImageView(imageView)
19+
{}
2120

22-
~CVulkanImageView();
21+
~CVulkanImageView();
2322

24-
inline const void* getNativeHandle() const override {return &m_vkImageView;}
25-
inline VkImageView getInternalObject() const { return m_vkImageView; }
23+
inline const void* getNativeHandle() const override {return &m_vkImageView;}
24+
inline VkImageView getInternalObject() const { return m_vkImageView; }
2625

27-
void setObjectDebugName(const char* label) const override;
26+
void setObjectDebugName(const char* label) const override;
2827

29-
private:
30-
VkImageView m_vkImageView;
28+
private:
29+
VkImageView m_vkImageView;
3130
};
3231

3332
}

src/nbl/video/CVulkanLogicalDevice.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -984,8 +984,12 @@ class CVulkanLogicalDevice final : public ILogicalDevice
984984

985985
core::smart_refctd_ptr<IGPUImageView> createImageView_impl(IGPUImageView::SCreationParams&& params) override
986986
{
987+
// Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkImageViewASTCDecodeModeEXT, VkSamplerYcbcrConversionInfo, VkVideoProfileKHR, or VkVideoProfilesKHR
988+
VkImageViewUsageCreateInfo vk_imageViewUsageInfo = { VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO,nullptr };
989+
vk_imageViewUsageInfo.usage = static_cast<VkImageUsageFlags>((params.subUsages.value ? params.subUsages:params.image->getCreationParameters().usage).value);
990+
987991
VkImageViewCreateInfo vk_createInfo = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO };
988-
vk_createInfo.pNext = nullptr; // Each pNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkImageViewASTCDecodeModeEXT, VkImageViewUsageCreateInfo, VkSamplerYcbcrConversionInfo, VkVideoProfileKHR, or VkVideoProfilesKHR
992+
vk_createInfo.pNext = &vk_imageViewUsageInfo;
989993
vk_createInfo.flags = static_cast<VkImageViewCreateFlags>(params.flags);
990994

991995
if (params.image->getAPIType() != EAT_VULKAN)
@@ -999,7 +1003,7 @@ class CVulkanLogicalDevice final : public ILogicalDevice
9991003
vk_createInfo.components.g = static_cast<VkComponentSwizzle>(params.components.g);
10001004
vk_createInfo.components.b = static_cast<VkComponentSwizzle>(params.components.b);
10011005
vk_createInfo.components.a = static_cast<VkComponentSwizzle>(params.components.a);
1002-
vk_createInfo.subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(params.subresourceRange.aspectMask);
1006+
vk_createInfo.subresourceRange.aspectMask = static_cast<VkImageAspectFlags>(params.subresourceRange.aspectMask.value);
10031007
vk_createInfo.subresourceRange.baseMipLevel = params.subresourceRange.baseMipLevel;
10041008
vk_createInfo.subresourceRange.levelCount = params.subresourceRange.levelCount;
10051009
vk_createInfo.subresourceRange.baseArrayLayer = params.subresourceRange.baseArrayLayer;

src/nbl/video/IGPUCommandBuffer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ bool IGPUCommandBuffer::blitImage(const image_t* srcImage, asset::IImage::E_LAYO
913913

914914
for (uint32_t i = 0u; i < regionCount; ++i)
915915
{
916-
if (pRegions[i].dstSubresource.aspectMask != pRegions[i].srcSubresource.aspectMask)
916+
if (pRegions[i].dstSubresource.aspectMask.value != pRegions[i].srcSubresource.aspectMask.value)
917917
return false;
918918
if (pRegions[i].dstSubresource.layerCount != pRegions[i].srcSubresource.layerCount)
919919
return false;

0 commit comments

Comments
 (0)