6 using namespace RenderCore;
21 fmt::format(
"Mip Gen {} {}",
i, name), queue, 0
u,
25 r->BindShader(
self, RHIShaderStageBits::Compute,
"csMain",
"data/shaders/CSMipGeneration.spv");
30 r->BindTextureSRV(
self,
src,
"srcTexture", RHIPipelineStageBits::ComputeShader,
32 .range = RHITextureSubresourceRange::Create(srcAspect, 0, 1, layer, 1)});
35 self,
dst,
"srcTexture", RHIPipelineStageBits::ComputeShader,
39 self,
dst,
"dstTexture", RHIPipelineStageBits::ComputeShader,
42 r->BindPushConstant(
self, RHIShaderStageBits::Compute, 0,
sizeof(float2));
54 r->CmdSetPushConstant(
self,
cmd, RHIShaderStageBits::Compute, 0, float2{w, h});
55 r->CmdDispatch(
self,
cmd, {w, h, 1});
91 fmt::format(
"{} SPD Atomics", name),
93 .
usage = RHIBufferUsageBits::StorageBuffer | RHIBufferUsageBits::TransferDestination,
94 .size =
sizeof(uint) * 6,
103 case RHIDeviceSampler::SamplerDesc::Reduction::WeightedAverage:
106 case RHIDeviceSampler::SamplerDesc::Reduction::Min:
109 case RHIDeviceSampler::SamplerDesc::Reduction::Max:
113 r->BindShader(
self, RHIShaderStageBits::Compute,
"csMain",
"data/shaders/CSMipGenerationSinglePass.spv",
117 r->BindBufferUnordered(
self,
SpdCounter, RHIPipelineStageBits::ComputeShader,
"spdGlobalAtomic");
118 CHECK_MSG(
numMips <= 12,
"Single Pass CS Mip generation supports up to 12 mips.");
119 CHECK_MSG(
numMips > 1,
"Single Pass CS Mip generation requires at least 2 mips.");
120 r->BindTextureSRV(
self,
src,
"imgSrc", RHIPipelineStageBits::ComputeShader,
123 .dimension = RHITextureDimension::E2DArray,
126 for (uint mip = 1; mip <= 12; mip++)
133 self,
dst,
"imgDst", RHIPipelineStageBits::ComputeShader,
136 .dimension = RHITextureDimension::E2DArray,
141 self,
dst,
"imgDst6", RHIPipelineStageBits::ComputeShader,
144 .dimension = RHITextureDimension::E2DArray,
154 pc.extents *= 2,
pc.mips++;
157 if (
r->GetFrame() == 0)
161 cmd->BeginTransition();
162 cmd->SetBufferTransition(
165 .srcAccess = RHIResourceAccessBits::TransferWrite,
166 .dstAccess = RHIResourceAccessBits::ShaderWrite,
167 .srcStage = RHIPipelineStageBits::ComputeShader | RHIPipelineStageBits::Transfer,
168 .dstStage = RHIPipelineStageBits::ComputeShader,
170 cmd->EndTransition();
173 r->CmdSetPushConstant(
self,
cmd, RHIShaderStageBits::Compute, 0,
pc);
#define CHECK_MSG(expr, format_str,...)
Definition Logging.hpp:46
Definition Resource.hpp:57
Definition Command.hpp:42
Definition Resource.hpp:190
const RHITextureDesc mDesc
Definition Resource.hpp:195
Renderer implementing a Frame Graph system with automatic resource tracking and synchronization.
Definition Renderer.hpp:89
Span< const T > AsSpan(T const &data)
Helper to construct one const r-value as a single element span.
Definition Container.hpp:69
std::basic_string_view< char > StringView
Alias for std::basic_string_view<char>
Definition Container.hpp:55
Span< const char > AsBytes(Span< T > data)
Definition Container.hpp:62
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< 3, uint32_t > RHIExtent3D
Definition Common.hpp:11
RHIDeviceQueueType
Definition Common.hpp:109
RHIResourceFormat
Definition Common.hpp:20
Handle ResourceHandle
Definition RenderPass.hpp:11
Handle PassHandle
Definition RenderPass.hpp:10
Definition CSClearBuffer.hpp:5
void createCSMipGenerationPasses(Renderer *renderer, StringView name, RHIDeviceQueueType queue, ResourceHandle src, ResourceHandle dst, RHIResourceFormat srcFormat, RHIResourceFormat dstFormat, RHITextureAspectFlagBits srcAspect, RHITextureAspectFlagBits dstAspect, ResourceHandle srcSampler, uint32_t numMips, uint32_t layer=0)
Generates full mip-chain with multiple compute dispatches.
Definition CSMipGeneration.hpp:11
void createCSMipGenerationSinglePass(Renderer *renderer, StringView name, RHIDeviceQueueType queue, ResourceHandle src, ResourceHandle dst, RHIResourceFormat srcFormat, RHIResourceFormat dstFormat, RHITextureAspectFlag srcAspect, RHITextureAspectFlag dstAspect, ResourceHandle srcSampler, uint numMips, uint numLayer=1, RHIDeviceSampler::SamplerDesc::Reduction reduction=RHIDeviceSampler::SamplerDesc::Reduction::WeightedAverage)
Generates full mip-chain with a single compute dispatch.
Definition CSMipGeneration.hpp:63
Definition Resource.hpp:28
RHIBufferUsage usage
How the buffer can be used by the device, initially.
Definition Resource.hpp:31
Reduction
Definition Device.hpp:153
RHIExtent3D extent
Definition Resource.hpp:120
static RHITextureSubresourceRange Create(RHITextureAspectFlag aspect=RHITextureAspectFlagBits::Color, uint32_t base_mip_level=0, uint32_t mip_count=1, uint32_t base_array_layer=0, uint32_t layer_count=1)
Helper function to create a Subresource Range with default parameters.
Definition Resource.hpp:165