diff options
Diffstat (limited to 'cnn_v3/src/cnn_v3_effect.cc')
| -rw-r--r-- | cnn_v3/src/cnn_v3_effect.cc | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/cnn_v3/src/cnn_v3_effect.cc b/cnn_v3/src/cnn_v3_effect.cc index 759e7ef..bfbb17b 100644 --- a/cnn_v3/src/cnn_v3_effect.cc +++ b/cnn_v3/src/cnn_v3_effect.cc @@ -2,8 +2,16 @@ // See cnn_v3/docs/CNN_V3.md for architecture, HOWTO.md ยง7 for shader details. #include "cnn_v3_effect.h" + +#if defined(USE_TEST_ASSETS) +#include "test_assets.h" +#else +#include "generated/assets.h" +#endif + #include "gpu/gpu.h" #include "gpu/shader_composer.h" +#include "util/asset_manager.h" #include "util/fatal_error.h" #include <cstdint> #include <cstring> @@ -180,6 +188,14 @@ CNNv3Effect::CNNv3Effect(const GpuContext& ctx, for (int i = 0; i < 4; ++i) { dec0_params_.gamma[i] = 1.0f; } create_pipelines(); + + // Load trained weights from asset system (zero-initialized if absent). + size_t weights_size = 0; + const void* weights_data = + GetAsset(AssetId::ASSET_WEIGHTS_CNN_V3, &weights_size); + if (weights_data && weights_size == kWeightsBufBytes) { + upload_weights(ctx_.queue, weights_data, (uint32_t)weights_size); + } } // --------------------------------------------------------------------------- @@ -429,7 +445,7 @@ void CNNv3Effect::update_bind_groups(NodeRegistry& nodes) { bg_buf(e[2], 2, wb, kWeightsBufBytes); bg_buf(e[3], 3, enc0_params_buf_.get().buffer, sizeof(CnnV3Params4ch)); bg_tex(e[4], 4, enc0_view); - enc0_bg_.set(make_bg(enc0_pipeline_.get(), e, 5)); + enc0_bg_.replace(make_bg(enc0_pipeline_.get(), e, 5)); } // enc1: enc0_tex(B0), weights(B1), params(B2), enc1_out(B3) @@ -439,7 +455,7 @@ void CNNv3Effect::update_bind_groups(NodeRegistry& nodes) { bg_buf(e[1], 1, wb, kWeightsBufBytes); bg_buf(e[2], 2, enc1_params_buf_.get().buffer, sizeof(CnnV3ParamsEnc1)); bg_tex(e[3], 3, enc1_view); - enc1_bg_.set(make_bg(enc1_pipeline_.get(), e, 4)); + enc1_bg_.replace(make_bg(enc1_pipeline_.get(), e, 4)); } // bottleneck: enc1_tex(B0), weights(B1), params(B2), bn_out(B3) @@ -449,7 +465,7 @@ void CNNv3Effect::update_bind_groups(NodeRegistry& nodes) { bg_buf(e[1], 1, wb, kWeightsBufBytes); bg_buf(e[2], 2, bn_params_buf_.get().buffer, sizeof(CnnV3ParamsBn)); bg_tex(e[3], 3, bn_view); - bn_bg_.set(make_bg(bn_pipeline_.get(), e, 4)); + bn_bg_.replace(make_bg(bn_pipeline_.get(), e, 4)); } // dec1: bn_tex(B0), enc1_tex(B1), weights(B2), params(B3), dec1_out(B4) @@ -460,7 +476,7 @@ void CNNv3Effect::update_bind_groups(NodeRegistry& nodes) { bg_buf(e[2], 2, wb, kWeightsBufBytes); bg_buf(e[3], 3, dec1_params_buf_.get().buffer, sizeof(CnnV3Params4ch)); bg_tex(e[4], 4, dec1_view); - dec1_bg_.set(make_bg(dec1_pipeline_.get(), e, 5)); + dec1_bg_.replace(make_bg(dec1_pipeline_.get(), e, 5)); } // dec0: dec1_tex(B0), enc0_tex(B1), weights(B2), params(B3), output(B4) @@ -471,6 +487,6 @@ void CNNv3Effect::update_bind_groups(NodeRegistry& nodes) { bg_buf(e[2], 2, wb, kWeightsBufBytes); bg_buf(e[3], 3, dec0_params_buf_.get().buffer, sizeof(CnnV3Params4ch)); bg_tex(e[4], 4, out_view); - dec0_bg_.set(make_bg(dec0_pipeline_.get(), e, 5)); + dec0_bg_.replace(make_bg(dec0_pipeline_.get(), e, 5)); } } |
