mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +00:00
wg_engine: hotfix of memory sanitizer
../src/renderer/wg_engine/tvgWgRenderer.cpp:623:78: runtime error: downcast of address 0x5040005b7010 which does not point to an object of type 'RenderEffectFill' 0x5040005b7010: note: object is of type 'tvg::RenderEffectTint' 00 00 00 00 80 07 5d 35 c9 7f 00 00 20 60 23 00 30 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^~~~~~~~~~~~~~~~~~~~~~~ vptr for 'tvg::RenderEffectTint' ../src/renderer/wg_engine/tvgWgRenderer.cpp:624:85: runtime error: downcast of address 0x5040005b7050 which does not point to an object of type 'RenderEffectFill' 0x5040005b7050: note: object is of type 'tvg::RenderEffectTritone' 00 00 00 00 a0 07 5d 35 c9 7f 00 00 40 5e 23 00 30 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ^~~~~~~~~~~~~~~~~~~~~~~
This commit is contained in:
parent
28d653e22f
commit
c854a7207f
3 changed files with 18 additions and 30 deletions
|
@ -873,19 +873,15 @@ bool WgCompositor::fillEffect(WgContext& context, WgRenderStorage* dst, const Re
|
||||||
assert(compose->rdViewport);
|
assert(compose->rdViewport);
|
||||||
assert(!renderPassEncoder);
|
assert(!renderPassEncoder);
|
||||||
|
|
||||||
auto renderDataParams = (WgRenderDataEffectParams*)params->rd;
|
copyTexture(&storageTemp0, dst, compose->aabb);
|
||||||
auto aabb = compose->aabb;
|
|
||||||
auto viewport = compose->rdViewport;
|
|
||||||
|
|
||||||
copyTexture(&storageTemp0, dst, aabb);
|
|
||||||
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass fill" };
|
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass fill" };
|
||||||
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast<WgRenderDataEffectParams*>(params->rd)->bindGroupParams, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.fill_effect);
|
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.fill_effect);
|
||||||
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (aabb.w - 1) / 128 + 1, aabb.h, 1);
|
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (compose->aabb.w - 1) / 128 + 1, compose->aabb.h, 1);
|
||||||
wgpuComputePassEncoderEnd(computePassEncoder);
|
wgpuComputePassEncoderEnd(computePassEncoder);
|
||||||
wgpuComputePassEncoderRelease(computePassEncoder);
|
wgpuComputePassEncoderRelease(computePassEncoder);
|
||||||
|
|
||||||
|
@ -893,7 +889,7 @@ bool WgCompositor::fillEffect(WgContext& context, WgRenderStorage* dst, const Re
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool WgCompositor::tintEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose)
|
bool WgCompositor::tintEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectTint* params, const WgCompose* compose)
|
||||||
{
|
{
|
||||||
assert(dst);
|
assert(dst);
|
||||||
assert(params);
|
assert(params);
|
||||||
|
@ -901,26 +897,22 @@ bool WgCompositor::tintEffect(WgContext& context, WgRenderStorage* dst, const Re
|
||||||
assert(compose->rdViewport);
|
assert(compose->rdViewport);
|
||||||
assert(!renderPassEncoder);
|
assert(!renderPassEncoder);
|
||||||
|
|
||||||
auto renderDataParams = (WgRenderDataEffectParams*)params->rd;
|
copyTexture(&storageTemp0, dst, compose->aabb);
|
||||||
auto aabb = compose->aabb;
|
|
||||||
auto viewport = compose->rdViewport;
|
|
||||||
|
|
||||||
copyTexture(&storageTemp0, dst, aabb);
|
|
||||||
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tint" };
|
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tint" };
|
||||||
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast<WgRenderDataEffectParams*>(params->rd)->bindGroupParams, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.tint_effect);
|
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.tint_effect);
|
||||||
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (aabb.w - 1) / 128 + 1, aabb.h, 1);
|
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (compose->aabb.w - 1) / 128 + 1, compose->aabb.h, 1);
|
||||||
wgpuComputePassEncoderEnd(computePassEncoder);
|
wgpuComputePassEncoderEnd(computePassEncoder);
|
||||||
wgpuComputePassEncoderRelease(computePassEncoder);
|
wgpuComputePassEncoderRelease(computePassEncoder);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WgCompositor::tritoneEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose)
|
bool WgCompositor::tritoneEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectTritone* params, const WgCompose* compose)
|
||||||
{
|
{
|
||||||
assert(dst);
|
assert(dst);
|
||||||
assert(params);
|
assert(params);
|
||||||
|
@ -928,19 +920,15 @@ bool WgCompositor::tritoneEffect(WgContext& context, WgRenderStorage* dst, const
|
||||||
assert(compose->rdViewport);
|
assert(compose->rdViewport);
|
||||||
assert(!renderPassEncoder);
|
assert(!renderPassEncoder);
|
||||||
|
|
||||||
auto renderDataParams = (WgRenderDataEffectParams*)params->rd;
|
copyTexture(&storageTemp0, dst, compose->aabb);
|
||||||
auto aabb = compose->aabb;
|
|
||||||
auto viewport = compose->rdViewport;
|
|
||||||
|
|
||||||
copyTexture(&storageTemp0, dst, aabb);
|
|
||||||
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tritone" };
|
WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tritone" };
|
||||||
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast<WgRenderDataEffectParams*>(params->rd)->bindGroupParams, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr);
|
wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr);
|
||||||
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.tritone_effect);
|
wgpuComputePassEncoderSetPipeline(computePassEncoder, pipelines.tritone_effect);
|
||||||
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (aabb.w - 1) / 128 + 1, aabb.h, 1);
|
wgpuComputePassEncoderDispatchWorkgroups(computePassEncoder, (compose->aabb.w - 1) / 128 + 1, compose->aabb.h, 1);
|
||||||
wgpuComputePassEncoderEnd(computePassEncoder);
|
wgpuComputePassEncoderEnd(computePassEncoder);
|
||||||
wgpuComputePassEncoderRelease(computePassEncoder);
|
wgpuComputePassEncoderRelease(computePassEncoder);
|
||||||
|
|
||||||
|
|
|
@ -116,8 +116,8 @@ public:
|
||||||
bool gaussianBlur(WgContext& context, WgRenderStorage* dst, const RenderEffectGaussianBlur* params, const WgCompose* compose);
|
bool gaussianBlur(WgContext& context, WgRenderStorage* dst, const RenderEffectGaussianBlur* params, const WgCompose* compose);
|
||||||
bool dropShadow(WgContext& context, WgRenderStorage* dst, const RenderEffectDropShadow* params, const WgCompose* compose);
|
bool dropShadow(WgContext& context, WgRenderStorage* dst, const RenderEffectDropShadow* params, const WgCompose* compose);
|
||||||
bool fillEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose);
|
bool fillEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose);
|
||||||
bool tintEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose);
|
bool tintEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectTint* params, const WgCompose* compose);
|
||||||
bool tritoneEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose);
|
bool tritoneEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectTritone* params, const WgCompose* compose);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _TVG_WG_COMPOSITOR_H_
|
#endif // _TVG_WG_COMPOSITOR_H_
|
||||||
|
|
|
@ -620,8 +620,8 @@ bool WgRenderer::render(RenderCompositor* cmp, const RenderEffect* effect, TVG_U
|
||||||
case SceneEffect::GaussianBlur: return mCompositor.gaussianBlur(mContext, dst, (RenderEffectGaussianBlur*)effect, comp);
|
case SceneEffect::GaussianBlur: return mCompositor.gaussianBlur(mContext, dst, (RenderEffectGaussianBlur*)effect, comp);
|
||||||
case SceneEffect::DropShadow: return mCompositor.dropShadow(mContext, dst, (RenderEffectDropShadow*)effect, comp);
|
case SceneEffect::DropShadow: return mCompositor.dropShadow(mContext, dst, (RenderEffectDropShadow*)effect, comp);
|
||||||
case SceneEffect::Fill: return mCompositor.fillEffect(mContext, dst, (RenderEffectFill*)effect, comp);
|
case SceneEffect::Fill: return mCompositor.fillEffect(mContext, dst, (RenderEffectFill*)effect, comp);
|
||||||
case SceneEffect::Tint: return mCompositor.tintEffect(mContext, dst, (RenderEffectFill*)effect, comp);
|
case SceneEffect::Tint: return mCompositor.tintEffect(mContext, dst, (RenderEffectTint*)effect, comp);
|
||||||
case SceneEffect::Tritone : return mCompositor.tritoneEffect(mContext, dst, (RenderEffectFill*)effect, comp);
|
case SceneEffect::Tritone : return mCompositor.tritoneEffect(mContext, dst, (RenderEffectTritone*)effect, comp);
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Add table
Reference in a new issue