No need for mipmaps in Skybox.

This commit is contained in:
Anish Bhobe 2024-07-30 19:00:42 +02:00
parent 8a865e2e49
commit 23cd7eae8b
1 changed files with 20 additions and 4 deletions

View File

@ -30,7 +30,7 @@ CreateCubeFromHdrEnv(AssetLoader *assetLoader, vk::Queue computeQueue, const u32
diffuseIrradianceName += name ? name : ""; diffuseIrradianceName += name ? name : "";
StorageTextureCube skybox; StorageTextureCube skybox;
skybox.Init(pDevice, cubeSide, vk::Format::eR16G16B16A16Sfloat, true, true, skyboxName.c_str()); skybox.Init(pDevice, cubeSide, vk::Format::eR16G16B16A16Sfloat, true, false, skyboxName.c_str());
TextureHandle skyboxHandle = resMan->CommitTexture(&skybox); TextureHandle skyboxHandle = resMan->CommitTexture(&skybox);
StorageTextureHandle skyboxStorageHandle = resMan->CommitStorageTexture(&skybox); StorageTextureHandle skyboxStorageHandle = resMan->CommitStorageTexture(&skybox);
@ -68,6 +68,23 @@ CreateCubeFromHdrEnv(AssetLoader *assetLoader, vk::Queue computeQueue, const u32
.pImageMemoryBarriers = readyToWriteBarriers.data(), .pImageMemoryBarriers = readyToWriteBarriers.data(),
}; };
vk::ImageMemoryBarrier2 skyboxWriteToReadBarrier = {
.srcStageMask = vk::PipelineStageFlagBits2::eComputeShader,
.srcAccessMask = vk::AccessFlagBits2::eShaderStorageWrite,
.dstStageMask = vk::PipelineStageFlagBits2::eComputeShader,
.dstAccessMask = vk::AccessFlagBits2::eShaderStorageRead,
.oldLayout = vk::ImageLayout::eGeneral,
.newLayout = vk::ImageLayout::eGeneral,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = skybox.m_Image,
.subresourceRange = cubeSubresRange,
};
vk::DependencyInfo skyboxReadToWriteDependency = {
.imageMemoryBarrierCount = 1,
.pImageMemoryBarriers = &skyboxWriteToReadBarrier,
};
vk::ImageMemoryBarrier2 skyboxToSampleBarrier = { vk::ImageMemoryBarrier2 skyboxToSampleBarrier = {
.srcStageMask = vk::PipelineStageFlagBits2::eComputeShader, .srcStageMask = vk::PipelineStageFlagBits2::eComputeShader,
.srcAccessMask = vk::AccessFlagBits2::eShaderStorageWrite | vk::AccessFlagBits2::eShaderStorageRead, .srcAccessMask = vk::AccessFlagBits2::eShaderStorageWrite | vk::AccessFlagBits2::eShaderStorageRead,
@ -191,12 +208,11 @@ CreateCubeFromHdrEnv(AssetLoader *assetLoader, vk::Queue computeQueue, const u32
&skyboxPushConstant); &skyboxPushConstant);
cmd.dispatch(cubeSide / 16, cubeSide / 16, 6); cmd.dispatch(cubeSide / 16, cubeSide / 16, 6);
// Internal Barriers will ensure waiting for the next command. cmd.pipelineBarrier2(&skyboxReadToWriteDependency);
GenerateMipMaps(cmd, &skybox, vk::ImageLayout::eGeneral, vk::ImageLayout::eGeneral);
cmd.bindPipeline(vk::PipelineBindPoint::eCompute, diffuseIrradiancePipeline);
cmd.pushConstants(pipelineLayout, vk::ShaderStageFlagBits::eCompute, 0, sizeof skyboxPushConstant, cmd.pushConstants(pipelineLayout, vk::ShaderStageFlagBits::eCompute, 0, sizeof skyboxPushConstant,
&diffuseIrradiancePushConstants); &diffuseIrradiancePushConstants);
cmd.bindPipeline(vk::PipelineBindPoint::eCompute, diffuseIrradiancePipeline);
cmd.dispatch(cubeSide / 16, cubeSide / 16, 6); cmd.dispatch(cubeSide / 16, cubeSide / 16, 6);
cmd.pipelineBarrier2(&skyboxToSampleDependency); cmd.pipelineBarrier2(&skyboxToSampleDependency);