| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620 |
- // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-2.0-or-later
- #pragma once
- #include <sirit/sirit.h>
- #include "common/common_types.h"
- namespace Shader::IR {
- enum class Attribute : u64;
- enum class Patch : u64;
- class Inst;
- class Value;
- } // namespace Shader::IR
- namespace Shader::Backend::SPIRV {
- using Sirit::Id;
- class EmitContext;
- // Microinstruction emitters
- Id EmitPhi(EmitContext& ctx, IR::Inst* inst);
- void EmitVoid(EmitContext& ctx);
- Id EmitIdentity(EmitContext& ctx, const IR::Value& value);
- Id EmitConditionRef(EmitContext& ctx, const IR::Value& value);
- void EmitReference(EmitContext&);
- void EmitPhiMove(EmitContext&);
- void EmitJoin(EmitContext& ctx);
- void EmitDemoteToHelperInvocation(EmitContext& ctx);
- void EmitBarrier(EmitContext& ctx);
- void EmitWorkgroupMemoryBarrier(EmitContext& ctx);
- void EmitDeviceMemoryBarrier(EmitContext& ctx);
- void EmitPrologue(EmitContext& ctx);
- void EmitEpilogue(EmitContext& ctx);
- void EmitEmitVertex(EmitContext& ctx, const IR::Value& stream);
- void EmitEndPrimitive(EmitContext& ctx, const IR::Value& stream);
- void EmitGetRegister(EmitContext& ctx);
- void EmitSetRegister(EmitContext& ctx);
- void EmitGetPred(EmitContext& ctx);
- void EmitSetPred(EmitContext& ctx);
- void EmitSetGotoVariable(EmitContext& ctx);
- void EmitGetGotoVariable(EmitContext& ctx);
- void EmitSetIndirectBranchVariable(EmitContext& ctx);
- void EmitGetIndirectBranchVariable(EmitContext& ctx);
- Id EmitGetCbufU8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufU32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufF32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetCbufU32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, Id vertex);
- Id EmitGetAttributeU32(EmitContext& ctx, IR::Attribute attr, Id vertex);
- void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, Id value, Id vertex);
- Id EmitGetAttributeIndexed(EmitContext& ctx, Id offset, Id vertex);
- void EmitSetAttributeIndexed(EmitContext& ctx, Id offset, Id value, Id vertex);
- Id EmitGetPatch(EmitContext& ctx, IR::Patch patch);
- void EmitSetPatch(EmitContext& ctx, IR::Patch patch, Id value);
- void EmitSetFragColor(EmitContext& ctx, u32 index, u32 component, Id value);
- void EmitSetSampleMask(EmitContext& ctx, Id value);
- void EmitSetFragDepth(EmitContext& ctx, Id value);
- void EmitGetZFlag(EmitContext& ctx);
- void EmitGetSFlag(EmitContext& ctx);
- void EmitGetCFlag(EmitContext& ctx);
- void EmitGetOFlag(EmitContext& ctx);
- void EmitSetZFlag(EmitContext& ctx);
- void EmitSetSFlag(EmitContext& ctx);
- void EmitSetCFlag(EmitContext& ctx);
- void EmitSetOFlag(EmitContext& ctx);
- Id EmitWorkgroupId(EmitContext& ctx);
- Id EmitLocalInvocationId(EmitContext& ctx);
- Id EmitInvocationId(EmitContext& ctx);
- Id EmitInvocationInfo(EmitContext& ctx);
- Id EmitSampleId(EmitContext& ctx);
- Id EmitIsHelperInvocation(EmitContext& ctx);
- Id EmitYDirection(EmitContext& ctx);
- Id EmitResolutionDownFactor(EmitContext& ctx);
- Id EmitRenderArea(EmitContext& ctx);
- Id EmitLoadLocal(EmitContext& ctx, Id word_offset);
- void EmitWriteLocal(EmitContext& ctx, Id word_offset, Id value);
- Id EmitUndefU1(EmitContext& ctx);
- Id EmitUndefU8(EmitContext& ctx);
- Id EmitUndefU16(EmitContext& ctx);
- Id EmitUndefU32(EmitContext& ctx);
- Id EmitUndefU64(EmitContext& ctx);
- void EmitLoadGlobalU8(EmitContext& ctx);
- void EmitLoadGlobalS8(EmitContext& ctx);
- void EmitLoadGlobalU16(EmitContext& ctx);
- void EmitLoadGlobalS16(EmitContext& ctx);
- Id EmitLoadGlobal32(EmitContext& ctx, Id address);
- Id EmitLoadGlobal64(EmitContext& ctx, Id address);
- Id EmitLoadGlobal128(EmitContext& ctx, Id address);
- void EmitWriteGlobalU8(EmitContext& ctx);
- void EmitWriteGlobalS8(EmitContext& ctx);
- void EmitWriteGlobalU16(EmitContext& ctx);
- void EmitWriteGlobalS16(EmitContext& ctx);
- void EmitWriteGlobal32(EmitContext& ctx, Id address, Id value);
- void EmitWriteGlobal64(EmitContext& ctx, Id address, Id value);
- void EmitWriteGlobal128(EmitContext& ctx, Id address, Id value);
- Id EmitLoadStorageU8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorageS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorageU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorageS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorage32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorage64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- Id EmitLoadStorage128(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset);
- void EmitWriteStorageU8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorageS8(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorageU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorageS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorage32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorage64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- void EmitWriteStorage128(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitLoadSharedU8(EmitContext& ctx, Id offset);
- Id EmitLoadSharedS8(EmitContext& ctx, Id offset);
- Id EmitLoadSharedU16(EmitContext& ctx, Id offset);
- Id EmitLoadSharedS16(EmitContext& ctx, Id offset);
- Id EmitLoadSharedU32(EmitContext& ctx, Id offset);
- Id EmitLoadSharedU64(EmitContext& ctx, Id offset);
- Id EmitLoadSharedU128(EmitContext& ctx, Id offset);
- void EmitWriteSharedU8(EmitContext& ctx, Id offset, Id value);
- void EmitWriteSharedU16(EmitContext& ctx, Id offset, Id value);
- void EmitWriteSharedU32(EmitContext& ctx, Id offset, Id value);
- void EmitWriteSharedU64(EmitContext& ctx, Id offset, Id value);
- void EmitWriteSharedU128(EmitContext& ctx, Id offset, Id value);
- Id EmitCompositeConstructU32x2(EmitContext& ctx, Id e1, Id e2);
- Id EmitCompositeConstructU32x3(EmitContext& ctx, Id e1, Id e2, Id e3);
- Id EmitCompositeConstructU32x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4);
- Id EmitCompositeExtractU32x2(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractU32x3(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractU32x4(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeInsertU32x2(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertU32x3(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertU32x4(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeConstructF16x2(EmitContext& ctx, Id e1, Id e2);
- Id EmitCompositeConstructF16x3(EmitContext& ctx, Id e1, Id e2, Id e3);
- Id EmitCompositeConstructF16x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4);
- Id EmitCompositeExtractF16x2(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractF16x3(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractF16x4(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeInsertF16x2(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF16x3(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF16x4(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeConstructF32x2(EmitContext& ctx, Id e1, Id e2);
- Id EmitCompositeConstructF32x3(EmitContext& ctx, Id e1, Id e2, Id e3);
- Id EmitCompositeConstructF32x4(EmitContext& ctx, Id e1, Id e2, Id e3, Id e4);
- Id EmitCompositeExtractF32x2(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractF32x3(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeExtractF32x4(EmitContext& ctx, Id composite, u32 index);
- Id EmitCompositeInsertF32x2(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF32x3(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF32x4(EmitContext& ctx, Id composite, Id object, u32 index);
- void EmitCompositeConstructF64x2(EmitContext& ctx);
- void EmitCompositeConstructF64x3(EmitContext& ctx);
- void EmitCompositeConstructF64x4(EmitContext& ctx);
- void EmitCompositeExtractF64x2(EmitContext& ctx);
- void EmitCompositeExtractF64x3(EmitContext& ctx);
- void EmitCompositeExtractF64x4(EmitContext& ctx);
- Id EmitCompositeInsertF64x2(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF64x3(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitCompositeInsertF64x4(EmitContext& ctx, Id composite, Id object, u32 index);
- Id EmitSelectU1(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectU8(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectU16(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectU32(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectU64(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectF16(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectF32(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- Id EmitSelectF64(EmitContext& ctx, Id cond, Id true_value, Id false_value);
- void EmitBitCastU16F16(EmitContext& ctx);
- Id EmitBitCastU32F32(EmitContext& ctx, Id value);
- void EmitBitCastU64F64(EmitContext& ctx);
- void EmitBitCastS32F32(EmitContext& ctx);
- void EmitBitCastF16U16(EmitContext&);
- Id EmitBitCastF32U32(EmitContext& ctx, Id value);
- void EmitBitCastF64U64(EmitContext& ctx);
- Id EmitPackUint2x32(EmitContext& ctx, Id value);
- Id EmitUnpackUint2x32(EmitContext& ctx, Id value);
- Id EmitPackFloat2x16(EmitContext& ctx, Id value);
- Id EmitUnpackFloat2x16(EmitContext& ctx, Id value);
- Id EmitPackHalf2x16(EmitContext& ctx, Id value);
- Id EmitUnpackHalf2x16(EmitContext& ctx, Id value);
- Id EmitPackDouble2x32(EmitContext& ctx, Id value);
- Id EmitUnpackDouble2x32(EmitContext& ctx, Id value);
- void EmitGetZeroFromOp(EmitContext& ctx);
- void EmitGetSignFromOp(EmitContext& ctx);
- void EmitGetCarryFromOp(EmitContext& ctx);
- void EmitGetOverflowFromOp(EmitContext& ctx);
- void EmitGetSparseFromOp(EmitContext& ctx);
- void EmitGetInBoundsFromOp(EmitContext& ctx);
- Id EmitFPAbs16(EmitContext& ctx, Id value);
- Id EmitFPAbs32(EmitContext& ctx, Id value);
- Id EmitFPAbs64(EmitContext& ctx, Id value);
- Id EmitFPAdd16(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPAdd32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPAdd64(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPFma16(EmitContext& ctx, IR::Inst* inst, Id a, Id b, Id c);
- Id EmitFPFma32(EmitContext& ctx, IR::Inst* inst, Id a, Id b, Id c);
- Id EmitFPFma64(EmitContext& ctx, IR::Inst* inst, Id a, Id b, Id c);
- Id EmitFPMax32(EmitContext& ctx, Id a, Id b);
- Id EmitFPMax64(EmitContext& ctx, Id a, Id b);
- Id EmitFPMin32(EmitContext& ctx, Id a, Id b);
- Id EmitFPMin64(EmitContext& ctx, Id a, Id b);
- Id EmitFPMul16(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPMul32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPMul64(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitFPNeg16(EmitContext& ctx, Id value);
- Id EmitFPNeg32(EmitContext& ctx, Id value);
- Id EmitFPNeg64(EmitContext& ctx, Id value);
- Id EmitFPSin(EmitContext& ctx, Id value);
- Id EmitFPCos(EmitContext& ctx, Id value);
- Id EmitFPExp2(EmitContext& ctx, Id value);
- Id EmitFPLog2(EmitContext& ctx, Id value);
- Id EmitFPRecip32(EmitContext& ctx, Id value);
- Id EmitFPRecip64(EmitContext& ctx, Id value);
- Id EmitFPRecipSqrt32(EmitContext& ctx, Id value);
- Id EmitFPRecipSqrt64(EmitContext& ctx, Id value);
- Id EmitFPSqrt(EmitContext& ctx, Id value);
- Id EmitFPSaturate16(EmitContext& ctx, Id value);
- Id EmitFPSaturate32(EmitContext& ctx, Id value);
- Id EmitFPSaturate64(EmitContext& ctx, Id value);
- Id EmitFPClamp16(EmitContext& ctx, Id value, Id min_value, Id max_value);
- Id EmitFPClamp32(EmitContext& ctx, Id value, Id min_value, Id max_value);
- Id EmitFPClamp64(EmitContext& ctx, Id value, Id min_value, Id max_value);
- Id EmitFPRoundEven16(EmitContext& ctx, Id value);
- Id EmitFPRoundEven32(EmitContext& ctx, Id value);
- Id EmitFPRoundEven64(EmitContext& ctx, Id value);
- Id EmitFPFloor16(EmitContext& ctx, Id value);
- Id EmitFPFloor32(EmitContext& ctx, Id value);
- Id EmitFPFloor64(EmitContext& ctx, Id value);
- Id EmitFPCeil16(EmitContext& ctx, Id value);
- Id EmitFPCeil32(EmitContext& ctx, Id value);
- Id EmitFPCeil64(EmitContext& ctx, Id value);
- Id EmitFPTrunc16(EmitContext& ctx, Id value);
- Id EmitFPTrunc32(EmitContext& ctx, Id value);
- Id EmitFPTrunc64(EmitContext& ctx, Id value);
- Id EmitFPOrdEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdNotEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdNotEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdNotEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordNotEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordNotEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordNotEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThan16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThan32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThan64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThan16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThan32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThan64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThan16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThan32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThan64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThan16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThan32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThan64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThanEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThanEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdLessThanEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThanEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThanEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordLessThanEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThanEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThanEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPOrdGreaterThanEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThanEqual16(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThanEqual32(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPUnordGreaterThanEqual64(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitFPIsNan16(EmitContext& ctx, Id value);
- Id EmitFPIsNan32(EmitContext& ctx, Id value);
- Id EmitFPIsNan64(EmitContext& ctx, Id value);
- Id EmitIAdd32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitIAdd64(EmitContext& ctx, Id a, Id b);
- Id EmitISub32(EmitContext& ctx, Id a, Id b);
- Id EmitISub64(EmitContext& ctx, Id a, Id b);
- Id EmitIMul32(EmitContext& ctx, Id a, Id b);
- Id EmitSDiv32(EmitContext& ctx, Id a, Id b);
- Id EmitUDiv32(EmitContext& ctx, Id a, Id b);
- Id EmitINeg32(EmitContext& ctx, Id value);
- Id EmitINeg64(EmitContext& ctx, Id value);
- Id EmitIAbs32(EmitContext& ctx, Id value);
- Id EmitShiftLeftLogical32(EmitContext& ctx, Id base, Id shift);
- Id EmitShiftLeftLogical64(EmitContext& ctx, Id base, Id shift);
- Id EmitShiftRightLogical32(EmitContext& ctx, Id base, Id shift);
- Id EmitShiftRightLogical64(EmitContext& ctx, Id base, Id shift);
- Id EmitShiftRightArithmetic32(EmitContext& ctx, Id base, Id shift);
- Id EmitShiftRightArithmetic64(EmitContext& ctx, Id base, Id shift);
- Id EmitBitwiseAnd32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitBitwiseOr32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitBitwiseXor32(EmitContext& ctx, IR::Inst* inst, Id a, Id b);
- Id EmitBitFieldInsert(EmitContext& ctx, Id base, Id insert, Id offset, Id count);
- Id EmitBitFieldSExtract(EmitContext& ctx, IR::Inst* inst, Id base, Id offset, Id count);
- Id EmitBitFieldUExtract(EmitContext& ctx, IR::Inst* inst, Id base, Id offset, Id count);
- Id EmitBitReverse32(EmitContext& ctx, Id value);
- Id EmitBitCount32(EmitContext& ctx, Id value);
- Id EmitBitwiseNot32(EmitContext& ctx, Id value);
- Id EmitFindSMsb32(EmitContext& ctx, Id value);
- Id EmitFindUMsb32(EmitContext& ctx, Id value);
- Id EmitSMin32(EmitContext& ctx, Id a, Id b);
- Id EmitUMin32(EmitContext& ctx, Id a, Id b);
- Id EmitSMax32(EmitContext& ctx, Id a, Id b);
- Id EmitUMax32(EmitContext& ctx, Id a, Id b);
- Id EmitSClamp32(EmitContext& ctx, IR::Inst* inst, Id value, Id min, Id max);
- Id EmitUClamp32(EmitContext& ctx, IR::Inst* inst, Id value, Id min, Id max);
- Id EmitSLessThan(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitULessThan(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitIEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitSLessThanEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitULessThanEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitSGreaterThan(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitUGreaterThan(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitINotEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitSGreaterThanEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitUGreaterThanEqual(EmitContext& ctx, Id lhs, Id rhs);
- Id EmitSharedAtomicIAdd32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicSMin32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicUMin32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicSMax32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicUMax32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicInc32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicDec32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicAnd32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicOr32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicXor32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicExchange32(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicExchange64(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitSharedAtomicExchange32x2(EmitContext& ctx, Id pointer_offset, Id value);
- Id EmitStorageAtomicIAdd32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMin32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMin32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMax32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMax32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicInc32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicDec32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicAnd32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicOr32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicXor32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicExchange32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicIAdd64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMin64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMin64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMax64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMax64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicAnd64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicOr64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicXor64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicExchange64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicIAdd32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMin32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMin32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicSMax32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicUMax32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicAnd32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicOr32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicXor32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicExchange32x2(EmitContext& ctx, const IR::Value& binding,
- const IR::Value& offset, Id value);
- Id EmitStorageAtomicAddF32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicAddF16x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicAddF32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicMinF16x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicMinF32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicMaxF16x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitStorageAtomicMaxF32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset,
- Id value);
- Id EmitGlobalAtomicIAdd32(EmitContext& ctx);
- Id EmitGlobalAtomicSMin32(EmitContext& ctx);
- Id EmitGlobalAtomicUMin32(EmitContext& ctx);
- Id EmitGlobalAtomicSMax32(EmitContext& ctx);
- Id EmitGlobalAtomicUMax32(EmitContext& ctx);
- Id EmitGlobalAtomicInc32(EmitContext& ctx);
- Id EmitGlobalAtomicDec32(EmitContext& ctx);
- Id EmitGlobalAtomicAnd32(EmitContext& ctx);
- Id EmitGlobalAtomicOr32(EmitContext& ctx);
- Id EmitGlobalAtomicXor32(EmitContext& ctx);
- Id EmitGlobalAtomicExchange32(EmitContext& ctx);
- Id EmitGlobalAtomicIAdd64(EmitContext& ctx);
- Id EmitGlobalAtomicSMin64(EmitContext& ctx);
- Id EmitGlobalAtomicUMin64(EmitContext& ctx);
- Id EmitGlobalAtomicSMax64(EmitContext& ctx);
- Id EmitGlobalAtomicUMax64(EmitContext& ctx);
- Id EmitGlobalAtomicInc64(EmitContext& ctx);
- Id EmitGlobalAtomicDec64(EmitContext& ctx);
- Id EmitGlobalAtomicAnd64(EmitContext& ctx);
- Id EmitGlobalAtomicOr64(EmitContext& ctx);
- Id EmitGlobalAtomicXor64(EmitContext& ctx);
- Id EmitGlobalAtomicExchange64(EmitContext& ctx);
- Id EmitGlobalAtomicIAdd32x2(EmitContext& ctx);
- Id EmitGlobalAtomicSMin32x2(EmitContext& ctx);
- Id EmitGlobalAtomicUMin32x2(EmitContext& ctx);
- Id EmitGlobalAtomicSMax32x2(EmitContext& ctx);
- Id EmitGlobalAtomicUMax32x2(EmitContext& ctx);
- Id EmitGlobalAtomicInc32x2(EmitContext& ctx);
- Id EmitGlobalAtomicDec32x2(EmitContext& ctx);
- Id EmitGlobalAtomicAnd32x2(EmitContext& ctx);
- Id EmitGlobalAtomicOr32x2(EmitContext& ctx);
- Id EmitGlobalAtomicXor32x2(EmitContext& ctx);
- Id EmitGlobalAtomicExchange32x2(EmitContext& ctx);
- Id EmitGlobalAtomicAddF32(EmitContext& ctx);
- Id EmitGlobalAtomicAddF16x2(EmitContext& ctx);
- Id EmitGlobalAtomicAddF32x2(EmitContext& ctx);
- Id EmitGlobalAtomicMinF16x2(EmitContext& ctx);
- Id EmitGlobalAtomicMinF32x2(EmitContext& ctx);
- Id EmitGlobalAtomicMaxF16x2(EmitContext& ctx);
- Id EmitGlobalAtomicMaxF32x2(EmitContext& ctx);
- Id EmitLogicalOr(EmitContext& ctx, Id a, Id b);
- Id EmitLogicalAnd(EmitContext& ctx, Id a, Id b);
- Id EmitLogicalXor(EmitContext& ctx, Id a, Id b);
- Id EmitLogicalNot(EmitContext& ctx, Id value);
- Id EmitConvertS16F16(EmitContext& ctx, Id value);
- Id EmitConvertS16F32(EmitContext& ctx, Id value);
- Id EmitConvertS16F64(EmitContext& ctx, Id value);
- Id EmitConvertS32F16(EmitContext& ctx, Id value);
- Id EmitConvertS32F32(EmitContext& ctx, Id value);
- Id EmitConvertS32F64(EmitContext& ctx, Id value);
- Id EmitConvertS64F16(EmitContext& ctx, Id value);
- Id EmitConvertS64F32(EmitContext& ctx, Id value);
- Id EmitConvertS64F64(EmitContext& ctx, Id value);
- Id EmitConvertU16F16(EmitContext& ctx, Id value);
- Id EmitConvertU16F32(EmitContext& ctx, Id value);
- Id EmitConvertU16F64(EmitContext& ctx, Id value);
- Id EmitConvertU32F16(EmitContext& ctx, Id value);
- Id EmitConvertU32F32(EmitContext& ctx, Id value);
- Id EmitConvertU32F64(EmitContext& ctx, Id value);
- Id EmitConvertU64F16(EmitContext& ctx, Id value);
- Id EmitConvertU64F32(EmitContext& ctx, Id value);
- Id EmitConvertU64F64(EmitContext& ctx, Id value);
- Id EmitConvertU64U32(EmitContext& ctx, Id value);
- Id EmitConvertU32U64(EmitContext& ctx, Id value);
- Id EmitConvertF16F32(EmitContext& ctx, Id value);
- Id EmitConvertF32F16(EmitContext& ctx, Id value);
- Id EmitConvertF32F64(EmitContext& ctx, Id value);
- Id EmitConvertF64F32(EmitContext& ctx, Id value);
- Id EmitConvertF16S8(EmitContext& ctx, Id value);
- Id EmitConvertF16S16(EmitContext& ctx, Id value);
- Id EmitConvertF16S32(EmitContext& ctx, Id value);
- Id EmitConvertF16S64(EmitContext& ctx, Id value);
- Id EmitConvertF16U8(EmitContext& ctx, Id value);
- Id EmitConvertF16U16(EmitContext& ctx, Id value);
- Id EmitConvertF16U32(EmitContext& ctx, Id value);
- Id EmitConvertF16U64(EmitContext& ctx, Id value);
- Id EmitConvertF32S8(EmitContext& ctx, Id value);
- Id EmitConvertF32S16(EmitContext& ctx, Id value);
- Id EmitConvertF32S32(EmitContext& ctx, Id value);
- Id EmitConvertF32S64(EmitContext& ctx, Id value);
- Id EmitConvertF32U8(EmitContext& ctx, Id value);
- Id EmitConvertF32U16(EmitContext& ctx, Id value);
- Id EmitConvertF32U32(EmitContext& ctx, Id value);
- Id EmitConvertF32U64(EmitContext& ctx, Id value);
- Id EmitConvertF64S8(EmitContext& ctx, Id value);
- Id EmitConvertF64S16(EmitContext& ctx, Id value);
- Id EmitConvertF64S32(EmitContext& ctx, Id value);
- Id EmitConvertF64S64(EmitContext& ctx, Id value);
- Id EmitConvertF64U8(EmitContext& ctx, Id value);
- Id EmitConvertF64U16(EmitContext& ctx, Id value);
- Id EmitConvertF64U32(EmitContext& ctx, Id value);
- Id EmitConvertF64U64(EmitContext& ctx, Id value);
- Id EmitBindlessImageSampleImplicitLod(EmitContext&);
- Id EmitBindlessImageSampleExplicitLod(EmitContext&);
- Id EmitBindlessImageSampleDrefImplicitLod(EmitContext&);
- Id EmitBindlessImageSampleDrefExplicitLod(EmitContext&);
- Id EmitBindlessImageGather(EmitContext&);
- Id EmitBindlessImageGatherDref(EmitContext&);
- Id EmitBindlessImageFetch(EmitContext&);
- Id EmitBindlessImageQueryDimensions(EmitContext&);
- Id EmitBindlessImageQueryLod(EmitContext&);
- Id EmitBindlessImageGradient(EmitContext&);
- Id EmitBindlessImageRead(EmitContext&);
- Id EmitBindlessImageWrite(EmitContext&);
- Id EmitBoundImageSampleImplicitLod(EmitContext&);
- Id EmitBoundImageSampleExplicitLod(EmitContext&);
- Id EmitBoundImageSampleDrefImplicitLod(EmitContext&);
- Id EmitBoundImageSampleDrefExplicitLod(EmitContext&);
- Id EmitBoundImageGather(EmitContext&);
- Id EmitBoundImageGatherDref(EmitContext&);
- Id EmitBoundImageFetch(EmitContext&);
- Id EmitBoundImageQueryDimensions(EmitContext&);
- Id EmitBoundImageQueryLod(EmitContext&);
- Id EmitBoundImageGradient(EmitContext&);
- Id EmitBoundImageRead(EmitContext&);
- Id EmitBoundImageWrite(EmitContext&);
- Id EmitImageSampleImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id bias_lc, const IR::Value& offset);
- Id EmitImageSampleExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id lod, const IR::Value& offset);
- Id EmitImageSampleDrefImplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index,
- Id coords, Id dref, Id bias_lc, const IR::Value& offset);
- Id EmitImageSampleDrefExplicitLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index,
- Id coords, Id dref, Id lod, const IR::Value& offset);
- Id EmitImageGather(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- const IR::Value& offset, const IR::Value& offset2);
- Id EmitImageGatherDref(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- const IR::Value& offset, const IR::Value& offset2, Id dref);
- Id EmitImageFetch(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords, Id offset,
- Id lod, Id ms);
- Id EmitImageQueryDimensions(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id lod,
- const IR::Value& skip_mips);
- Id EmitImageQueryLod(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords);
- Id EmitImageGradient(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id derivates, Id offset, Id lod_clamp);
- Id EmitImageRead(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords);
- void EmitImageWrite(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords, Id color);
- Id EmitIsTextureScaled(EmitContext& ctx, const IR::Value& index);
- Id EmitIsImageScaled(EmitContext& ctx, const IR::Value& index);
- Id EmitBindlessImageAtomicIAdd32(EmitContext&);
- Id EmitBindlessImageAtomicSMin32(EmitContext&);
- Id EmitBindlessImageAtomicUMin32(EmitContext&);
- Id EmitBindlessImageAtomicSMax32(EmitContext&);
- Id EmitBindlessImageAtomicUMax32(EmitContext&);
- Id EmitBindlessImageAtomicInc32(EmitContext&);
- Id EmitBindlessImageAtomicDec32(EmitContext&);
- Id EmitBindlessImageAtomicAnd32(EmitContext&);
- Id EmitBindlessImageAtomicOr32(EmitContext&);
- Id EmitBindlessImageAtomicXor32(EmitContext&);
- Id EmitBindlessImageAtomicExchange32(EmitContext&);
- Id EmitBoundImageAtomicIAdd32(EmitContext&);
- Id EmitBoundImageAtomicSMin32(EmitContext&);
- Id EmitBoundImageAtomicUMin32(EmitContext&);
- Id EmitBoundImageAtomicSMax32(EmitContext&);
- Id EmitBoundImageAtomicUMax32(EmitContext&);
- Id EmitBoundImageAtomicInc32(EmitContext&);
- Id EmitBoundImageAtomicDec32(EmitContext&);
- Id EmitBoundImageAtomicAnd32(EmitContext&);
- Id EmitBoundImageAtomicOr32(EmitContext&);
- Id EmitBoundImageAtomicXor32(EmitContext&);
- Id EmitBoundImageAtomicExchange32(EmitContext&);
- Id EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicInc32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicDec32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicOr32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicXor32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst* inst, const IR::Value& index, Id coords,
- Id value);
- Id EmitLaneId(EmitContext& ctx);
- Id EmitVoteAll(EmitContext& ctx, Id pred);
- Id EmitVoteAny(EmitContext& ctx, Id pred);
- Id EmitVoteEqual(EmitContext& ctx, Id pred);
- Id EmitSubgroupBallot(EmitContext& ctx, Id pred);
- Id EmitSubgroupEqMask(EmitContext& ctx);
- Id EmitSubgroupLtMask(EmitContext& ctx);
- Id EmitSubgroupLeMask(EmitContext& ctx);
- Id EmitSubgroupGtMask(EmitContext& ctx);
- Id EmitSubgroupGeMask(EmitContext& ctx);
- Id EmitShuffleIndex(EmitContext& ctx, IR::Inst* inst, Id value, Id index, Id clamp,
- Id segmentation_mask);
- Id EmitShuffleUp(EmitContext& ctx, IR::Inst* inst, Id value, Id index, Id clamp,
- Id segmentation_mask);
- Id EmitShuffleDown(EmitContext& ctx, IR::Inst* inst, Id value, Id index, Id clamp,
- Id segmentation_mask);
- Id EmitShuffleButterfly(EmitContext& ctx, IR::Inst* inst, Id value, Id index, Id clamp,
- Id segmentation_mask);
- Id EmitFSwizzleAdd(EmitContext& ctx, Id op_a, Id op_b, Id swizzle);
- Id EmitDPdxFine(EmitContext& ctx, Id op_a);
- Id EmitDPdyFine(EmitContext& ctx, Id op_a);
- Id EmitDPdxCoarse(EmitContext& ctx, Id op_a);
- Id EmitDPdyCoarse(EmitContext& ctx, Id op_a);
- } // namespace Shader::Backend::SPIRV
|