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;
33
38 {
41
42 char *begin, *ptr, *end;
45 staging(device->CreateBuffer({.resource =
46 {
47 .heap = RHIDeviceHeapType::Upload,
48 .shared = false, /* Transfer only */
49 .coherent = true, /* No flush required */
50 .staging = true,
51 },
52 .usage = RHIBufferUsageBits::TransferSource,
53 .size = capacity}))
54 {
55 begin = ptr = staging->Map<char>();
56 end = ptr + capacity;
57 }
58
63 void Begin();
64
71 char* Upload(RHIBuffer* dst, size_t dataSize, size_t dstOffset);
78 char* Upload(RHITexture* dst, size_t dataSize,
79 RHITextureSubresourceLayer dstLayer = {.aspect = RHITextureAspectFlagBits::Color},
80 RHIOffset2D dstOffset = {},
82
83 bool Align(uint32_t alignment);
88 void End(RHIDeviceFence* completionFence = nullptr);
89
90 void WaitIdle();
91 };
92
93} // namespace Foundation::RenderCore
Definition Command.hpp:42
Definition Device.hpp:66
Definition Device.hpp:16
Definition Device.hpp:189
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:27
RHIDeviceQueue * mQueue
Definition ImmediateContext.hpp:18
void WaitIdle()
Definition ImmediateContext.cpp:13
ImmediateContext(RHIDevice *device)
Definition ImmediateContext.hpp:24
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:26
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:109
Graphics
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:38
ImmediateUpload(RHIDevice *device, size_t capacity)
Definition ImmediateContext.hpp:43
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:39
RHIDeviceScopedHandle< RHIBuffer > staging
Definition ImmediateContext.hpp:40
char * end
Definition ImmediateContext.hpp:42
char * ptr
Definition ImmediateContext.hpp:42
char * begin
Definition ImmediateContext.hpp:42
void WaitIdle()
Definition ImmediateContext.cpp:61