Skip to content

Commit 80f10cb

Browse files
No need to have a separate instance of VulkanImmediateCommands in VulkanStagingDevice
1 parent 53f5f00 commit 80f10cb

File tree

2 files changed

+13
-17
lines changed

2 files changed

+13
-17
lines changed

lvk/vulkan/VulkanClasses.cpp

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2743,9 +2743,6 @@ lvk::VulkanStagingDevice::VulkanStagingDevice(VulkanContext& ctx) : ctx_(ctx) {
27432743
maxBufferSize_ = std::min(limits.maxStorageBufferRange, 128u * 1024u * 1024u);
27442744

27452745
LVK_ASSERT(minBufferSize_ <= maxBufferSize_);
2746-
2747-
immediate_ = std::make_unique<lvk::VulkanImmediateCommands>(
2748-
ctx_.getVkDevice(), ctx_.deviceQueues_.graphicsQueueFamilyIndex, "VulkanStagingDevice::immediate_");
27492746
}
27502747

27512748
void lvk::VulkanStagingDevice::bufferSubData(VulkanBuffer& buffer, size_t dstOffset, size_t size, const void* data) {
@@ -2775,7 +2772,7 @@ void lvk::VulkanStagingDevice::bufferSubData(VulkanBuffer& buffer, size_t dstOff
27752772
.size = chunkSize,
27762773
};
27772774

2778-
auto& wrapper = immediate_->acquire();
2775+
auto& wrapper = ctx_.immediate_->acquire();
27792776
vkCmdCopyBuffer(wrapper.cmdBuf_, stagingBuffer->vkBuffer_, buffer.vkBuffer_, 1, &copy);
27802777
VkBufferMemoryBarrier barrier = {
27812778
.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,
@@ -2806,7 +2803,7 @@ void lvk::VulkanStagingDevice::bufferSubData(VulkanBuffer& buffer, size_t dstOff
28062803
}
28072804
vkCmdPipelineBarrier(
28082805
wrapper.cmdBuf_, VK_PIPELINE_STAGE_TRANSFER_BIT, dstMask, VkDependencyFlags{}, 0, nullptr, 1, &barrier, 0, nullptr);
2809-
desc.handle_ = immediate_->submit(wrapper);
2806+
desc.handle_ = ctx_.immediate_->submit(wrapper);
28102807
regions_.push_back(desc);
28112808

28122809
size -= chunkSize;
@@ -2859,7 +2856,7 @@ void lvk::VulkanStagingDevice::imageData2D(VulkanImage& image,
28592856
}
28602857
LVK_ASSERT(desc.size_ >= storageSize);
28612858

2862-
auto& wrapper = immediate_->acquire();
2859+
auto& wrapper = ctx_.immediate_->acquire();
28632860

28642861
lvk::VulkanBuffer* stagingBuffer = ctx_.buffersPool_.get(stagingBuffer_);
28652862

@@ -2953,7 +2950,7 @@ void lvk::VulkanStagingDevice::imageData2D(VulkanImage& image,
29532950

29542951
image.vkImageLayout_ = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
29552952

2956-
desc.handle_ = immediate_->submit(wrapper);
2953+
desc.handle_ = ctx_.immediate_->submit(wrapper);
29572954
regions_.push_back(desc);
29582955
}
29592956

@@ -2988,7 +2985,7 @@ void lvk::VulkanStagingDevice::imageData3D(VulkanImage& image,
29882985
// 1. Copy the pixel data into the host visible staging buffer
29892986
stagingBuffer->bufferSubData(ctx_, desc.offset_, storageSize, data);
29902987

2991-
auto& wrapper = immediate_->acquire();
2988+
auto& wrapper = ctx_.immediate_->acquire();
29922989

29932990
// 1. Transition initial image layout into TRANSFER_DST_OPTIMAL
29942991
lvk::imageMemoryBarrier(wrapper.cmdBuf_,
@@ -3025,7 +3022,7 @@ void lvk::VulkanStagingDevice::imageData3D(VulkanImage& image,
30253022

30263023
image.vkImageLayout_ = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
30273024

3028-
desc.handle_ = immediate_->submit(wrapper);
3025+
desc.handle_ = ctx_.immediate_->submit(wrapper);
30293026
regions_.push_back(desc);
30303027
}
30313028

@@ -3058,7 +3055,7 @@ void lvk::VulkanStagingDevice::getImageData(VulkanImage& image,
30583055

30593056
lvk::VulkanBuffer* stagingBuffer = ctx_.buffersPool_.get(stagingBuffer_);
30603057

3061-
auto& wrapper1 = immediate_->acquire();
3058+
auto& wrapper1 = ctx_.immediate_->acquire();
30623059

30633060
// 1. Transition to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
30643061
lvk::imageMemoryBarrier(wrapper1.cmdBuf_,
@@ -3088,7 +3085,7 @@ void lvk::VulkanStagingDevice::getImageData(VulkanImage& image,
30883085
};
30893086
vkCmdCopyImageToBuffer(wrapper1.cmdBuf_, image.vkImage_, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, stagingBuffer->vkBuffer_, 1, &copy);
30903087

3091-
desc.handle_ = immediate_->submit(wrapper1);
3088+
desc.handle_ = ctx_.immediate_->submit(wrapper1);
30923089
regions_.push_back(desc);
30933090

30943091
waitAndReset();
@@ -3101,7 +3098,7 @@ void lvk::VulkanStagingDevice::getImageData(VulkanImage& image,
31013098
memcpy(outData, stagingBuffer->getMappedPtr() + desc.offset_, storageSize);
31023099

31033100
// 4. Transition back to the initial image layout
3104-
auto& wrapper2 = immediate_->acquire();
3101+
auto& wrapper2 = ctx_.immediate_->acquire();
31053102

31063103
lvk::imageMemoryBarrier(wrapper2.cmdBuf_,
31073104
image.vkImage_,
@@ -3113,7 +3110,7 @@ void lvk::VulkanStagingDevice::getImageData(VulkanImage& image,
31133110
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // dstStageMask
31143111
range);
31153112

3116-
immediate_->wait(immediate_->submit(wrapper2));
3113+
ctx_.immediate_->wait(ctx_.immediate_->submit(wrapper2));
31173114
}
31183115

31193116
void lvk::VulkanStagingDevice::ensureStagingBufferSize(uint32_t sizeNeeded) {
@@ -3174,7 +3171,7 @@ lvk::VulkanStagingDevice::MemoryRegionDesc lvk::VulkanStagingDevice::getNextFree
31743171
auto bestNextIt = regions_.begin();
31753172

31763173
for (auto it = regions_.begin(); it != regions_.end(); ++it) {
3177-
if (immediate_->isReady(it->handle_)) {
3174+
if (ctx_.immediate_->isReady(it->handle_)) {
31783175
// This region is free, but is it big enough?
31793176
if (it->size_ >= requestedAlignedSize) {
31803177
// It is big enough!
@@ -3199,7 +3196,7 @@ lvk::VulkanStagingDevice::MemoryRegionDesc lvk::VulkanStagingDevice::getNextFree
31993196
}
32003197

32013198
// we found a region that is available that is smaller than the requested size. It's the best we can do
3202-
if (bestNextIt != regions_.end() && immediate_->isReady(bestNextIt->handle_)) {
3199+
if (bestNextIt != regions_.end() && ctx_.immediate_->isReady(bestNextIt->handle_)) {
32033200
SCOPE_EXIT {
32043201
regions_.erase(bestNextIt);
32053202
};
@@ -3234,7 +3231,7 @@ void lvk::VulkanStagingDevice::waitAndReset() {
32343231
LVK_PROFILER_FUNCTION_COLOR(LVK_PROFILER_COLOR_WAIT);
32353232

32363233
for (const auto& r : regions_) {
3237-
immediate_->wait(r.handle_);
3234+
ctx_.immediate_->wait(r.handle_);
32383235
};
32393236

32403237
regions_.clear();

lvk/vulkan/VulkanClasses.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,6 @@ class VulkanStagingDevice final {
463463
private:
464464
VulkanContext& ctx_;
465465
lvk::Holder<BufferHandle> stagingBuffer_;
466-
std::unique_ptr<lvk::VulkanImmediateCommands> immediate_;
467466
uint32_t stagingBufferSize_ = 0;
468467
uint32_t stagingBufferCounter_ = 0;
469468
uint32_t maxBufferSize_ = 0;

0 commit comments

Comments
 (0)