No need for mipmaps in Skybox.
This commit is contained in:
parent
8a865e2e49
commit
23cd7eae8b
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue