| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652 |
- // Copyright 2021 yuzu Emulator Project
- // Licensed under GPLv2 or any later version
- // Refer to the license.txt file included.
- #include <string_view>
- #include "shader_recompiler/backend/glsl/emit_context.h"
- #include "shader_recompiler/frontend/ir/value.h"
- #ifdef _MSC_VER
- #pragma warning(disable : 4100)
- #endif
- namespace Shader::Backend::GLSL {
- static void NotImplemented() {
- throw NotImplementedException("GLSL instruction");
- }
- void EmitPhi(EmitContext& ctx, IR::Inst& phi) {
- const size_t num_args{phi.NumArgs()};
- for (size_t i = 0; i < num_args; ++i) {
- ctx.reg_alloc.Consume(phi.Arg(i));
- }
- if (!phi.Definition<Id>().is_valid) {
- // The phi node wasn't forward defined
- ctx.Add("{};", ctx.reg_alloc.Define(phi, phi.Arg(0).Type()));
- }
- }
- void EmitVoid(EmitContext& ctx) {
- // NotImplemented();
- }
- void EmitReference(EmitContext&) {
- // NotImplemented();
- }
- void EmitPhiMove(EmitContext& ctx, const IR::Value& phi_value, const IR::Value& value) {
- IR::Inst& phi{*phi_value.InstRecursive()};
- const auto phi_type{phi.Arg(0).Type()};
- if (!phi.Definition<Id>().is_valid) {
- // The phi node wasn't forward defined
- ctx.Add("{};", ctx.reg_alloc.Define(phi, phi_type));
- }
- const auto phi_reg{ctx.reg_alloc.Consume(IR::Value{&phi})};
- const auto val_reg{ctx.reg_alloc.Consume(value)};
- if (phi_reg == val_reg) {
- return;
- }
- ctx.Add("{}={};", phi_reg, val_reg);
- }
- void EmitBranch(EmitContext& ctx, std::string_view label) {
- NotImplemented();
- }
- void EmitBranchConditional(EmitContext& ctx, std::string_view condition,
- std::string_view true_label, std::string_view false_label) {
- NotImplemented();
- }
- void EmitLoopMerge(EmitContext& ctx, std::string_view merge_label,
- std::string_view continue_label) {
- NotImplemented();
- }
- void EmitSelectionMerge(EmitContext& ctx, std::string_view merge_label) {
- NotImplemented();
- }
- void EmitReturn(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitJoin(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitUnreachable(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitDemoteToHelperInvocation(EmitContext& ctx, std::string_view continue_label) {
- ctx.Add("discard;");
- }
- void EmitBarrier(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWorkgroupMemoryBarrier(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitDeviceMemoryBarrier(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitPrologue(EmitContext& ctx) {
- // NotImplemented();
- }
- void EmitEpilogue(EmitContext& ctx) {
- // NotImplemented();
- }
- void EmitEmitVertex(EmitContext& ctx, const IR::Value& stream) {
- NotImplemented();
- }
- void EmitEndPrimitive(EmitContext& ctx, const IR::Value& stream) {
- NotImplemented();
- }
- void EmitGetRegister(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetRegister(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetPred(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetPred(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetGotoVariable(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetGotoVariable(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetIndirectBranchVariable(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetIndirectBranchVariable(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetAttributeIndexed(EmitContext& ctx, std::string_view offset, std::string_view vertex) {
- NotImplemented();
- }
- void EmitSetAttributeIndexed(EmitContext& ctx, std::string_view offset, std::string_view value,
- std::string_view vertex) {
- NotImplemented();
- }
- void EmitGetPatch(EmitContext& ctx, IR::Patch patch) {
- NotImplemented();
- }
- void EmitSetPatch(EmitContext& ctx, IR::Patch patch, std::string_view value) {
- NotImplemented();
- }
- void EmitSetSampleMask(EmitContext& ctx, std::string_view value) {
- NotImplemented();
- }
- void EmitSetFragDepth(EmitContext& ctx, std::string_view value) {
- NotImplemented();
- }
- void EmitGetZFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetSFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetCFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetOFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetZFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetSFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetCFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSetOFlag(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWorkgroupId(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitLocalInvocationId(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitInvocationId(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSampleId(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitIsHelperInvocation(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitYDirection(EmitContext& ctx, IR::Inst& inst) {
- ctx.uses_y_direction = true;
- ctx.AddF32("{}=gl_FrontMaterial.ambient.a;", inst);
- }
- void EmitLoadLocal(EmitContext& ctx, std::string_view word_offset) {
- NotImplemented();
- }
- void EmitWriteLocal(EmitContext& ctx, std::string_view word_offset, std::string_view value) {
- NotImplemented();
- }
- void EmitUndefU1(EmitContext& ctx, IR::Inst& inst) {
- ctx.AddU1("{}=false;", inst);
- }
- void EmitUndefU8(EmitContext& ctx, IR::Inst& inst) {
- NotImplemented();
- }
- void EmitUndefU16(EmitContext& ctx, IR::Inst& inst) {
- NotImplemented();
- }
- void EmitUndefU32(EmitContext& ctx, IR::Inst& inst) {
- ctx.AddU32("{}=0u;", inst);
- }
- void EmitUndefU64(EmitContext& ctx, IR::Inst& inst) {
- NotImplemented();
- }
- void EmitLoadGlobalU8(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitLoadGlobalS8(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitLoadGlobalU16(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitLoadGlobalS16(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitLoadGlobal32(EmitContext& ctx, std::string_view address) {
- NotImplemented();
- }
- void EmitLoadGlobal64(EmitContext& ctx, std::string_view address) {
- NotImplemented();
- }
- void EmitLoadGlobal128(EmitContext& ctx, std::string_view address) {
- NotImplemented();
- }
- void EmitWriteGlobalU8(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWriteGlobalS8(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWriteGlobalU16(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWriteGlobalS16(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitWriteGlobal32(EmitContext& ctx, std::string_view address, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteGlobal64(EmitContext& ctx, std::string_view address, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteGlobal128(EmitContext& ctx, std::string_view address, std::string_view value) {
- NotImplemented();
- }
- void EmitLoadSharedU8(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedS8(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedU16(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedS16(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedU32(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedU64(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitLoadSharedU128(EmitContext& ctx, std::string_view offset) {
- NotImplemented();
- }
- void EmitWriteSharedU8(EmitContext& ctx, std::string_view offset, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteSharedU16(EmitContext& ctx, std::string_view offset, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteSharedU32(EmitContext& ctx, std::string_view offset, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteSharedU64(EmitContext& ctx, std::string_view offset, std::string_view value) {
- NotImplemented();
- }
- void EmitWriteSharedU128(EmitContext& ctx, std::string_view offset, std::string_view value) {
- NotImplemented();
- }
- void EmitGetZeroFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetSignFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetCarryFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetOverflowFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetSparseFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitGetInBoundsFromOp(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicSMin32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicUMin32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicSMax32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicUMax32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicInc32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicDec32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicAnd32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicOr32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicXor32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicExchange32(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitSharedAtomicExchange64(EmitContext& ctx, std::string_view pointer_offset,
- std::string_view value) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicIAdd32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicSMin32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicUMin32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicSMax32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicUMax32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicInc32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicDec32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicAnd32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicOr32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicXor32(EmitContext&) {
- NotImplemented();
- }
- void EmitBindlessImageAtomicExchange32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicIAdd32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicSMin32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicUMin32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicSMax32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicUMax32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicInc32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicDec32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicAnd32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicOr32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicXor32(EmitContext&) {
- NotImplemented();
- }
- void EmitBoundImageAtomicExchange32(EmitContext&) {
- NotImplemented();
- }
- void EmitImageAtomicIAdd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicSMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicUMin32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicSMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicUMax32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicInc32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicDec32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicAnd32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicOr32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicXor32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitImageAtomicExchange32(EmitContext& ctx, IR::Inst& inst, const IR::Value& index,
- std::string_view coords, std::string_view value) {
- NotImplemented();
- }
- void EmitLaneId(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitVoteAll(EmitContext& ctx, std::string_view pred) {
- NotImplemented();
- }
- void EmitVoteAny(EmitContext& ctx, std::string_view pred) {
- NotImplemented();
- }
- void EmitVoteEqual(EmitContext& ctx, std::string_view pred) {
- NotImplemented();
- }
- void EmitSubgroupBallot(EmitContext& ctx, std::string_view pred) {
- NotImplemented();
- }
- void EmitSubgroupEqMask(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSubgroupLtMask(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSubgroupLeMask(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSubgroupGtMask(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitSubgroupGeMask(EmitContext& ctx) {
- NotImplemented();
- }
- void EmitShuffleIndex(EmitContext& ctx, IR::Inst& inst, std::string_view value,
- std::string_view index, std::string_view clamp,
- std::string_view segmentation_mask) {
- NotImplemented();
- }
- void EmitShuffleUp(EmitContext& ctx, IR::Inst& inst, std::string_view value, std::string_view index,
- std::string_view clamp, std::string_view segmentation_mask) {
- NotImplemented();
- }
- void EmitShuffleDown(EmitContext& ctx, IR::Inst& inst, std::string_view value,
- std::string_view index, std::string_view clamp,
- std::string_view segmentation_mask) {
- NotImplemented();
- }
- void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, std::string_view value,
- std::string_view index, std::string_view clamp,
- std::string_view segmentation_mask) {
- NotImplemented();
- }
- } // namespace Shader::Backend::GLSL
|