Foundation
Loading...
Searching...
No Matches
ImmediateContext.hpp
Go to the documentation of this file.
1#pragma once
2#include <Core/AtomicPool.hpp>
3#include <Core/Variant.hpp>
4#include <RHICore/Command.hpp>
7{
8 using namespace RHI;
32
37 {
40
41 char *begin, *ptr, *end;
44 staging(device->CreateBuffer({.resource =
45 {
46 .heap = RHIDeviceHeapType::Upload,
47 .shared = false, /* Transfer only */
48 .coherent = true, /* No flush required */
49 .staging = true,
50 },
51 .usage = RHIBufferUsageBits::TransferSource,
52 .size = capacity}))
53 {
54 begin = ptr = staging->Map<char>();
55 end = ptr + capacity;
56 }
57
62 void Begin();
63
70 char* Upload(RHIBuffer* dst, size_t dataSize, size_t dstOffset);
77 char* Upload(RHITexture* dst, size_t dataSize,
78 RHITextureSubresourceLayer dstLayer = {.aspect = RHITextureAspectFlagBits::Color},
79 RHIOffset2D dstOffset = {},
81
87 void End(RHIDeviceFence* completionFence = nullptr);
88
89 void WaitIdle();
90 };
91
92} // namespace Foundation::RenderCore
Definition Command.hpp:35
Definition Device.hpp:66
Definition Device.hpp:16
Definition Device.hpp:188
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:86
Single persistent command list for immediate submissions.
Definition ImmediateContext.hpp:16
RHICommandList * operator->()
Definition ImmediateContext.hpp:26
RHIDeviceQueue * mQueue
Definition ImmediateContext.hpp:18
void WaitIdle()
Definition ImmediateContext.cpp:13
RHIDeviceScopedHandle< RHICommandPool > mCommandPool
Definition ImmediateContext.hpp:20
RHICommandPoolScopedHandle< RHICommandList > mCommandList
Definition ImmediateContext.hpp:21
void Submit(RHIDeviceFence *completionFence=nullptr)
Definition ImmediateContext.cpp:9
RHICommandList * Get() const
Definition ImmediateContext.hpp:25
RHIDevice *const mDevice
Definition ImmediateContext.hpp:17
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:149
glm::vec< 2, int32_t > RHIOffset2D
Definition Common.hpp:13
RHIDeviceQueueType
Definition Common.hpp:107
Transfer
Definition Common.hpp:125
glm::vec< 2, uint32_t > RHIExtent2D
Definition Common.hpp:10
Core functionalities for rendering, including the Frame Graph implementation.
Definition Bindless.cpp:2
Single persistent staging buffer + immediate context for quick, batchable uploads.
Definition ImmediateContext.hpp:37
ImmediateUpload(RHIDevice *device, size_t capacity)
Definition ImmediateContext.hpp:42
void Begin()
Definition ImmediateContext.cpp:14
void End(RHIDeviceFence *completionFence=nullptr)
Definition ImmediateContext.cpp:56
bool Align(uint32_t alignment)
Definition ImmediateContext.cpp:48
ImmediateContext ctx
Definition ImmediateContext.hpp:38
RHIDeviceScopedHandle< RHIBuffer > staging
Definition ImmediateContext.hpp:39
char * end
Definition ImmediateContext.hpp:41
char * ptr
Definition ImmediateContext.hpp:41
char * begin
Definition ImmediateContext.hpp:41
void WaitIdle()
Definition ImmediateContext.cpp:61