Skip to content

Commit

Permalink
Fix validation issues (#156)
Browse files Browse the repository at this point in the history
* Add new barrier constructors for blocking all mips and layers of texture (most common usage)

* Use new barrier to fix validation issues now and in the future.
  • Loading branch information
Duttenheim authored Jul 15, 2023
1 parent 0cb21fa commit cdff084
Show file tree
Hide file tree
Showing 11 changed files with 71 additions and 81 deletions.
4 changes: 2 additions & 2 deletions code/addons/staticui/ultralight/ultralightrenderer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ UltralightRenderer::UpdateTexture(uint32_t texture_id, ultralight::Ref<ultraligh
CoreGraphics::TextureBarrierInfo
{
storage.tex,
CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
CoreGraphics::TextureSubresourceInfo::Color(storage.tex)
}
});
CoreGraphics::CmdCopy(setupCmd, tempBuf, { from }, storage.tex, { to });
Expand All @@ -207,7 +207,7 @@ UltralightRenderer::UpdateTexture(uint32_t texture_id, ultralight::Ref<ultraligh
CoreGraphics::TextureBarrierInfo
{
storage.tex,
CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
CoreGraphics::TextureSubresourceInfo::Color(storage.tex)
}
});

Expand Down
27 changes: 21 additions & 6 deletions code/render/coregraphics/barrier.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ ID_24_8_TYPE(BarrierId);
struct CmdBufferId;
struct TextureSubresourceInfo
{
CoreGraphics::ImageBits bits;
ImageBits bits;
uint mip, mipCount, layer, layerCount;

TextureSubresourceInfo() :
Expand All @@ -41,29 +41,44 @@ struct TextureSubresourceInfo
layerCount(layerCount)
{}

static TextureSubresourceInfo Texture(CoreGraphics::ImageBits bits, TextureId tex)
{
return TextureSubresourceInfo(bits, 0, TextureGetNumMips(tex), 0, TextureGetNumLayers(tex));
}

static TextureSubresourceInfo Color(TextureId tex)
{
return TextureSubresourceInfo(ImageBits::ColorBits, 0, TextureGetNumMips(tex), 0, TextureGetNumLayers(tex));
}

static TextureSubresourceInfo DepthStencil(TextureId tex)
{
return TextureSubresourceInfo(ImageBits::DepthBits | ImageBits::StencilBits, 0, TextureGetNumMips(tex), 0, TextureGetNumLayers(tex));
}

static TextureSubresourceInfo ColorNoMipNoLayer()
{
return TextureSubresourceInfo(CoreGraphics::ImageBits::ColorBits, 0, 1, 0, 1);
return TextureSubresourceInfo(ImageBits::ColorBits, 0, 1, 0, 1);
}

static TextureSubresourceInfo ColorNoMip(uint layerCount)
{
return TextureSubresourceInfo(CoreGraphics::ImageBits::ColorBits, 0, 1, 0, layerCount);
return TextureSubresourceInfo(ImageBits::ColorBits, 0, 1, 0, layerCount);
}

static TextureSubresourceInfo ColorNoLayer(uint mipCount)
{
return TextureSubresourceInfo(CoreGraphics::ImageBits::ColorBits, 0, mipCount, 0, 1);
return TextureSubresourceInfo(ImageBits::ColorBits, 0, mipCount, 0, 1);
}

static TextureSubresourceInfo DepthStencilNoMipNoLayer()
{
return TextureSubresourceInfo(CoreGraphics::ImageBits::DepthBits | CoreGraphics::ImageBits::StencilBits, 0, 1, 0, 1);
return TextureSubresourceInfo(ImageBits::DepthBits | ImageBits::StencilBits, 0, 1, 0, 1);
}

static TextureSubresourceInfo DepthStencilNoMip(uint layerCount)
{
return TextureSubresourceInfo(CoreGraphics::ImageBits::DepthBits | CoreGraphics::ImageBits::StencilBits, 0, 1, 0, layerCount);
return TextureSubresourceInfo(ImageBits::DepthBits | ImageBits::StencilBits, 0, 1, 0, layerCount);
}

static TextureSubresourceInfo DepthStencilNoLayer(uint mipCount)
Expand Down
4 changes: 2 additions & 2 deletions code/render/coregraphics/texture.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ TextureGenerateMipmaps(const CoreGraphics::CmdBufferId cmdBuf, const TextureId i
{
{
id,
CoreGraphics::TextureSubresourceInfo{ ImageBits::ColorBits, 0, (uint)numMips, 0, 1 },
CoreGraphics::TextureSubresourceInfo::Texture(ImageBits::ColorBits, id),
},
});

Expand Down Expand Up @@ -111,7 +111,7 @@ TextureGenerateMipmaps(const CoreGraphics::CmdBufferId cmdBuf, const TextureId i
CoreGraphics::TextureBarrierInfo
{
id,
CoreGraphics::TextureSubresourceInfo(ImageBits::ColorBits, mip, 1, 0, 1),
CoreGraphics::TextureSubresourceInfo::Texture(ImageBits::ColorBits, id)
}
},
nullptr);
Expand Down
12 changes: 6 additions & 6 deletions code/render/fog/volumetricfogcontext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -215,13 +215,13 @@ VolumetricFogContext::Create(const Ptr<Frame::FrameScript>& frameScript)
{
"Fog Volume Texture 0"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(fogState.fogVolumeTexture0)
});
fogCompute->textureDeps.Add(fogState.zBuffer,
{
"ZBuffer"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::DepthStencilNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::DepthStencil(fogState.zBuffer)
});
fogCompute->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand All @@ -241,13 +241,13 @@ VolumetricFogContext::Create(const Ptr<Frame::FrameScript>& frameScript)
{
"Fog Volume Texture 0"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(fogState.fogVolumeTexture0)
});
blurX->textureDeps.Add(fogState.fogVolumeTexture1,
{
"Fog Volume Texture 1"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(fogState.fogVolumeTexture1)
});
blurX->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand All @@ -265,13 +265,13 @@ VolumetricFogContext::Create(const Ptr<Frame::FrameScript>& frameScript)
{
"Fog Volume Texture 1"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(fogState.fogVolumeTexture1)
});
blurY->textureDeps.Add(fogState.fogVolumeTexture0,
{
"Fog Volume Texture 0"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(fogState.fogVolumeTexture0)
});
blurY->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand Down
46 changes: 11 additions & 35 deletions code/render/frame/framescriptloader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -280,15 +280,8 @@ FrameScriptLoader::ParseBlit(const Ptr<Frame::FrameScript>& script, JzonValue* n
toBits = CoreGraphics::PixelFormat::ToImageBits(CoreGraphics::TextureGetPixelFormat(toTex));

// add implicit barriers
TextureSubresourceInfo subresFrom, subresTo;
subresFrom.bits = fromBits;
subresFrom.layer = 0;
subresFrom.layerCount = 1;
subresFrom.mip = 0;
subresFrom.mipCount = 1;

subresTo = subresFrom;
subresTo.bits = toBits;
TextureSubresourceInfo subresFrom = TextureSubresourceInfo::Texture(fromBits, fromTex);
TextureSubresourceInfo subresTo = TextureSubresourceInfo::Texture(toBits, toTex);

op->textureDeps.Add(fromTex, Util::MakeTuple(from->string_value, CoreGraphics::PipelineStage::TransferRead, subresFrom));
op->textureDeps.Add(toTex, Util::MakeTuple(to->string_value, CoreGraphics::PipelineStage::TransferWrite, subresTo));
Expand Down Expand Up @@ -352,15 +345,8 @@ FrameScriptLoader::ParseCopy(const Ptr<Frame::FrameScript>& script, JzonValue* n
toBits = CoreGraphics::PixelFormat::ToImageBits(CoreGraphics::TextureGetPixelFormat(toTex));

// add implicit barriers
TextureSubresourceInfo subresFrom, subresTo;
subresFrom.bits = fromBits;
subresFrom.layer = 0;
subresFrom.layerCount = 1;
subresFrom.mip = 0;
subresFrom.mipCount = 1;

subresTo = subresFrom;
subresTo.bits = toBits;
TextureSubresourceInfo subresFrom = TextureSubresourceInfo::Texture(fromBits, fromTex);
TextureSubresourceInfo subresTo = TextureSubresourceInfo::Texture(toBits, toTex);

op->textureDeps.Add(fromTex, Util::MakeTuple(from->string_value, CoreGraphics::PipelineStage::TransferRead, subresFrom));
op->textureDeps.Add(toTex, Util::MakeTuple(to->string_value, CoreGraphics::PipelineStage::TransferWrite, subresTo));
Expand Down Expand Up @@ -412,18 +398,11 @@ FrameScriptLoader::ParseResolve(const Ptr<Frame::FrameScript>& script, JzonValue
toBits = ImageBitsFromString(to_bits->string_value);

// add implicit barriers
TextureSubresourceInfo fromSubres, toSubres;
fromSubres.bits = fromBits;
fromSubres.layer = 0;
fromSubres.layerCount = 1;
fromSubres.mip = 0;
fromSubres.mipCount = 1;

toSubres = fromSubres;
toSubres.bits = toBits;
TextureSubresourceInfo subresFrom = TextureSubresourceInfo::Texture(fromBits, fromTex);
TextureSubresourceInfo subresTo = TextureSubresourceInfo::Texture(toBits, toTex);

op->textureDeps.Add(fromTex, Util::MakeTuple(from->string_value, CoreGraphics::PipelineStage::TransferRead, fromSubres));
op->textureDeps.Add(toTex, Util::MakeTuple(to->string_value, CoreGraphics::PipelineStage::TransferWrite, toSubres));
op->textureDeps.Add(fromTex, Util::MakeTuple(from->string_value, CoreGraphics::PipelineStage::TransferRead, subresFrom));
op->textureDeps.Add(toTex, Util::MakeTuple(to->string_value, CoreGraphics::PipelineStage::TransferWrite, subresTo));

// setup copy operation
op->fromBits = fromBits;
Expand Down Expand Up @@ -458,12 +437,8 @@ FrameScriptLoader::ParseMipmap(const Ptr<Frame::FrameScript>& script, JzonValue*
bool isDepth = CoreGraphics::PixelFormat::IsDepthFormat(CoreGraphics::TextureGetPixelFormat(ttex));

// add implicit barriers
TextureSubresourceInfo subres;
subres.bits = isDepth ? (CoreGraphics::ImageBits::DepthBits | CoreGraphics::ImageBits::StencilBits) : CoreGraphics::ImageBits::ColorBits;
subres.layer = 0;
subres.layerCount = 1;
subres.mip = 0;
subres.mipCount = 1;
CoreGraphics::ImageBits bits = isDepth ? (CoreGraphics::ImageBits::DepthBits | CoreGraphics::ImageBits::StencilBits) : CoreGraphics::ImageBits::ColorBits;
TextureSubresourceInfo subres = TextureSubresourceInfo::Texture(bits, ttex);
op->textureDeps.Add(ttex, Util::MakeTuple(tex->string_value, CoreGraphics::PipelineStage::TransferRead, subres));

// setup copy operation
Expand Down Expand Up @@ -738,6 +713,7 @@ FrameScriptLoader::ParsePass(const Ptr<Frame::FrameScript>& script, JzonValue* n
{
const CoreGraphics::TextureId tex = TextureViewGetTexture(info.attachments[i]);
subres.layerCount = TextureGetNumLayers(tex);
subres.mipCount = TextureGetNumMips(tex);
if (info.attachmentDepthStencil[i])
{
subres.bits = CoreGraphics::ImageBits::StencilBits | CoreGraphics::ImageBits::DepthBits;
Expand Down
8 changes: 4 additions & 4 deletions code/render/lighting/lightcontext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -335,25 +335,25 @@ LightContext::Create(const Ptr<Frame::FrameScript>& frameScript)
{
"LightBuffer"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(textureState.lightingTexture)
});
lightsCombine->textureDeps.Add(textureState.aoTexture,
{
"SSAOBuffer"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(textureState.aoTexture)
});
lightsCombine->textureDeps.Add(textureState.fogTexture,
{
"VolumeFogBuffer"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(textureState.fogTexture)
});
lightsCombine->textureDeps.Add(textureState.reflectionTexture,
{
"ReflectionBuffer"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(textureState.reflectionTexture)
});
lightsCombine->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand Down
4 changes: 2 additions & 2 deletions code/render/posteffects/bloomcontext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ BloomContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"LightBuffer"
, PipelineStage::ComputeShaderRead
, TextureSubresourceInfo::ColorNoLayer(mips)
, TextureSubresourceInfo::Color(bloomState.lightBuffer)
});
upscale->textureDeps.Add(
bloomState.bloomBuffer,
{
"BloomBuffer"
, PipelineStage::ComputeShaderWrite
, TextureSubresourceInfo::ColorNoMipNoLayer()
, TextureSubresourceInfo::Color(bloomState.bloomBuffer)
});
upscale->func = [](const CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand Down
4 changes: 2 additions & 2 deletions code/render/posteffects/downsamplingcontext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ DownsamplingContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"LightBuffer"
, PipelineStage::ComputeShaderWrite
, TextureSubresourceInfo::ColorNoMipNoLayer()
, TextureSubresourceInfo::Color(state.lightBuffer)
});

colorDownsamplePass->func = [](const CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
Expand All @@ -240,7 +240,7 @@ DownsamplingContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"DepthBuffer"
, PipelineStage::ComputeShaderWrite
, TextureSubresourceInfo::DepthStencilNoMipNoLayer()
, TextureSubresourceInfo::DepthStencil(state.depthBuffer)
});

depthDownsamplePass->func = [](const CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
Expand Down
17 changes: 8 additions & 9 deletions code/render/posteffects/ssaocontext.cc
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ SSAOContext::Setup(const Ptr<Frame::FrameScript>& script)
ssaoState.internalTargets[0] = CreateTexture(tinfo);
tinfo.name = "HBAO-Internal1";
ssaoState.internalTargets[1] = CreateTexture(tinfo);
TextureSubresourceInfo subres = TextureSubresourceInfo::ColorNoMipNoLayer();

// setup shaders
ssaoState.hbaoShader = ShaderGet("shd:hbao_cs.fxb");
Expand Down Expand Up @@ -196,13 +195,13 @@ SSAOContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"ZBuffer"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::DepthStencilNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::DepthStencil(ssaoState.zBuffer)
});
aoX->textureDeps.Add(ssaoState.internalTargets[0],
{
"SSAOBuffer0"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[0])
});
aoX->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand All @@ -222,13 +221,13 @@ SSAOContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"SSAOBuffer0"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[0])
});
aoY->textureDeps.Add(ssaoState.internalTargets[1],
{
"SSAOBuffer1"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[1])
});
aoY->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand All @@ -248,13 +247,13 @@ SSAOContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"SSAOBuffer1"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[1])
});
blurX->textureDeps.Add(ssaoState.internalTargets[0],
{
"SSAOBuffer0"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[0])
});
blurX->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand All @@ -274,13 +273,13 @@ SSAOContext::Setup(const Ptr<Frame::FrameScript>& script)
{
"SSAOBuffer1"
, CoreGraphics::PipelineStage::ComputeShaderRead
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[0])
});
blurY->textureDeps.Add(ssaoState.ssaoOutput,
{
"SSAOOutput"
, CoreGraphics::PipelineStage::ComputeShaderWrite
, CoreGraphics::TextureSubresourceInfo::ColorNoMipNoLayer()
, CoreGraphics::TextureSubresourceInfo::Color(ssaoState.internalTargets[1])
});
blurY->func = [](const CoreGraphics::CmdBufferId cmdBuf, const IndexT frame, const IndexT bufferIndex)
{
Expand Down
Loading

0 comments on commit cdff084

Please sign in to comment.