https://github.com/shader-slang/slang
Raw File
Tip revision: b8e1f62fb9cc66481b35231149448e47f096d257 authored by Tim Foley on 08 December 2020, 02:18:31 UTC
Fix a subtle bug introduced into type legalization (#1632)
Tip revision: b8e1f62
slang-ir-witness-table-wrapper.h
// slang-ir-witness-table-wrapper.h
#pragma once

namespace Slang
{
    struct SharedGenericsLoweringContext;

    /// This pass generates wrapper functions for witness table function entries.
    ///
    /// Enabled for generation of dynamic dispatch code only.
    ///
    /// Functions that are used to satisfy interface requirement have concrete
    /// type signatures for `this` and `associatedtype` parameters/return values.
    /// However, when they are called from a witness table, the callee only have a
    /// raw pointer for this arguments, since the conrete type is not known to the
    /// callee. Therefore, we need to generate wrappers for each member function
    /// callable through a witness table, so that the wrapper functions take general void*
    /// pointer for arguments whose type is unknown at call sites, and convert them
    /// to concrete types and calls the actual implementation.
    void generateWitnessTableWrapperFunctions(
        SharedGenericsLoweringContext* sharedContext);

}
back to top