From c854a7207f1136c998eccfa60751fba55117ca77 Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Fri, 7 Mar 2025 00:04:48 +0900 Subject: [PATCH] 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 ^~~~~~~~~~~~~~~~~~~~~~~ --- src/renderer/wg_engine/tvgWgCompositor.cpp | 40 ++++++++-------------- src/renderer/wg_engine/tvgWgCompositor.h | 4 +-- src/renderer/wg_engine/tvgWgRenderer.cpp | 4 +-- 3 files changed, 18 insertions(+), 30 deletions(-) diff --git a/src/renderer/wg_engine/tvgWgCompositor.cpp b/src/renderer/wg_engine/tvgWgCompositor.cpp index 59378a71..53ca4b24 100755 --- a/src/renderer/wg_engine/tvgWgCompositor.cpp +++ b/src/renderer/wg_engine/tvgWgCompositor.cpp @@ -873,19 +873,15 @@ bool WgCompositor::fillEffect(WgContext& context, WgRenderStorage* dst, const Re assert(compose->rdViewport); assert(!renderPassEncoder); - auto renderDataParams = (WgRenderDataEffectParams*)params->rd; - auto aabb = compose->aabb; - auto viewport = compose->rdViewport; - - copyTexture(&storageTemp0, dst, aabb); + copyTexture(&storageTemp0, dst, compose->aabb); WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass fill" }; WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast(params->rd)->bindGroupParams, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr); 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); 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(params); @@ -901,26 +897,22 @@ bool WgCompositor::tintEffect(WgContext& context, WgRenderStorage* dst, const Re assert(compose->rdViewport); assert(!renderPassEncoder); - auto renderDataParams = (WgRenderDataEffectParams*)params->rd; - auto aabb = compose->aabb; - auto viewport = compose->rdViewport; - - copyTexture(&storageTemp0, dst, aabb); + copyTexture(&storageTemp0, dst, compose->aabb); WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tint" }; WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast(params->rd)->bindGroupParams, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr); 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); wgpuComputePassEncoderRelease(computePassEncoder); 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(params); @@ -928,19 +920,15 @@ bool WgCompositor::tritoneEffect(WgContext& context, WgRenderStorage* dst, const assert(compose->rdViewport); assert(!renderPassEncoder); - auto renderDataParams = (WgRenderDataEffectParams*)params->rd; - auto aabb = compose->aabb; - auto viewport = compose->rdViewport; - - copyTexture(&storageTemp0, dst, aabb); + copyTexture(&storageTemp0, dst, compose->aabb); WGPUComputePassDescriptor computePassDesc{ .label = "Compute pass tritone" }; WGPUComputePassEncoder computePassEncoder = wgpuCommandEncoderBeginComputePass(commandEncoder, &computePassDesc); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 0, bindGroupStorageTemp, 0, nullptr); wgpuComputePassEncoderSetBindGroup(computePassEncoder, 1, dst->bindGroupWrite, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, renderDataParams->bindGroupParams, 0, nullptr); - wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, viewport->bindGroupViewport, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 2, static_cast(params->rd)->bindGroupParams, 0, nullptr); + wgpuComputePassEncoderSetBindGroup(computePassEncoder, 3, compose->rdViewport->bindGroupViewport, 0, nullptr); 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); wgpuComputePassEncoderRelease(computePassEncoder); diff --git a/src/renderer/wg_engine/tvgWgCompositor.h b/src/renderer/wg_engine/tvgWgCompositor.h index 14eed4f8..c2572c29 100755 --- a/src/renderer/wg_engine/tvgWgCompositor.h +++ b/src/renderer/wg_engine/tvgWgCompositor.h @@ -116,8 +116,8 @@ public: 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 fillEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose); - bool tintEffect(WgContext& context, WgRenderStorage* dst, const RenderEffectFill* params, const WgCompose* compose); - bool tritoneEffect(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 RenderEffectTritone* params, const WgCompose* compose); }; #endif // _TVG_WG_COMPOSITOR_H_ diff --git a/src/renderer/wg_engine/tvgWgRenderer.cpp b/src/renderer/wg_engine/tvgWgRenderer.cpp index cc9076d1..cafa418f 100755 --- a/src/renderer/wg_engine/tvgWgRenderer.cpp +++ b/src/renderer/wg_engine/tvgWgRenderer.cpp @@ -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::DropShadow: return mCompositor.dropShadow(mContext, dst, (RenderEffectDropShadow*)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::Tritone : return mCompositor.tritoneEffect(mContext, dst, (RenderEffectFill*)effect, comp); + case SceneEffect::Tint: return mCompositor.tintEffect(mContext, dst, (RenderEffectTint*)effect, comp); + case SceneEffect::Tritone : return mCompositor.tritoneEffect(mContext, dst, (RenderEffectTritone*)effect, comp); default: return false; } return false;