https://github.com/shader-slang/slang
Raw File
Tip revision: d06a78d935b2743494d47ed5cd3f36e38ac9c5ac authored by Yong He on 04 February 2022, 03:17:30 UTC
Add gfx interop to allow more direct D3D12 usage scenarios. (#2117)
Tip revision: d06a78d
slang-ir-spirv-legalize.h
// slang-ir-spirv-legalize.h
#pragma once
#include "../core/slang-basic.h"
#include "slang-ir-spirv-snippet.h"
#include "slang-ir-insts.h"

namespace Slang
{

class DiagnosticSink;

struct IRFunc;
struct IRModule;
class TargetRequest;

struct SPIRVEmitSharedContext
{
    SharedIRBuilder m_sharedIRBuilder;
    Dictionary<IRTargetIntrinsicDecoration*, RefPtr<SpvSnippet>> m_parsedSpvSnippets;
    TargetRequest* m_targetRequest;

    SPIRVEmitSharedContext(IRModule* module, TargetRequest* target)
        : m_sharedIRBuilder(module)
        , m_targetRequest(target)
    {}

    SpvSnippet* getParsedSpvSnippet(IRTargetIntrinsicDecoration* intrinsic)
    {
        RefPtr<SpvSnippet> snippet;
        if (m_parsedSpvSnippets.TryGetValue(intrinsic, snippet))
        {
            return snippet.Ptr();
        }
        snippet = SpvSnippet::parse(intrinsic->getDefinition());
        m_parsedSpvSnippets[intrinsic] = snippet;
        return snippet;
    }
};

void legalizeIRForSPIRV(
    SPIRVEmitSharedContext* context,
    IRModule*               module,
    const List<IRFunc*>& entryPoints,
    DiagnosticSink*         sink);

}
back to top