glsl: Add many FP32/64 instructions
This commit is contained in:
		| @@ -65,11 +65,21 @@ public: | |||||||
|         Add<Type::F32>(format_str, inst, args...); |         Add<Type::F32>(format_str, inst, args...); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     template <typename... Args> | ||||||
|  |     void AddS64(const char* format_str, IR::Inst& inst, Args&&... args) { | ||||||
|  |         Add<Type::S64>(format_str, inst, args...); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     template <typename... Args> |     template <typename... Args> | ||||||
|     void AddU64(const char* format_str, IR::Inst& inst, Args&&... args) { |     void AddU64(const char* format_str, IR::Inst& inst, Args&&... args) { | ||||||
|         Add<Type::U64>(format_str, inst, args...); |         Add<Type::U64>(format_str, inst, args...); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     template <typename... Args> | ||||||
|  |     void AddF64(const char* format_str, IR::Inst& inst, Args&&... args) { | ||||||
|  |         Add<Type::F64>(format_str, inst, args...); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     template <typename... Args> |     template <typename... Args> | ||||||
|     void AddU32x2(const char* format_str, IR::Inst& inst, Args&&... args) { |     void AddU32x2(const char* format_str, IR::Inst& inst, Args&&... args) { | ||||||
|         Add<Type::U32x2>(format_str, inst, args...); |         Add<Type::U32x2>(format_str, inst, args...); | ||||||
|   | |||||||
| @@ -30,6 +30,30 @@ void EmitConditionRef(EmitContext& ctx, IR::Inst& inst, const IR::Value& value) | |||||||
|     ctx.AddU1("{}={};", inst, ctx.reg_alloc.Consume(value)); |     ctx.AddU1("{}={};", inst, ctx.reg_alloc.Consume(value)); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void EmitBitCastU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitBitCastU32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddU32("{}=floatBitsToUint({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitBitCastU64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddU64("{}=doubleBitsToUint64({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitBitCastF16U16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitBitCastF32U32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=uintBitsToFloat({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitBitCastF64U64(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=uint64BitsToDouble({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
| void EmitPackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | void EmitPackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|     ctx.AddU64("{}=packUint2x32({});", inst, value); |     ctx.AddU64("{}=packUint2x32({});", inst, value); | ||||||
| } | } | ||||||
| @@ -38,4 +62,29 @@ void EmitUnpackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value | |||||||
|     ctx.AddU32x2("{}=unpackUint2x32({});", inst, value); |     ctx.AddU32x2("{}=unpackUint2x32({});", inst, value); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void EmitPackFloat2x16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitUnpackFloat2x16([[maybe_unused]] EmitContext& ctx, | ||||||
|  |                          [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitPackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddU32("{}=packHalf2x16({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitUnpackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddF32x2("{}=unpackHalf2x16({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitPackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=packDouble2x32({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitUnpackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value) { | ||||||
|  |     ctx.AddU32x2("{}=unpackDouble2x32({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
| } // namespace Shader::Backend::GLSL | } // namespace Shader::Backend::GLSL | ||||||
|   | |||||||
| @@ -10,9 +10,8 @@ | |||||||
| #include "shader_recompiler/profile.h" | #include "shader_recompiler/profile.h" | ||||||
|  |  | ||||||
| namespace Shader::Backend::GLSL { | namespace Shader::Backend::GLSL { | ||||||
| void EmitCompositeConstructU32x2([[maybe_unused]] EmitContext& ctx, IR::Inst& inst, | void EmitCompositeConstructU32x2(EmitContext& ctx, IR::Inst& inst, std::string_view e1, | ||||||
|                                  [[maybe_unused]] std::string_view e1, |                                  std::string_view e2) { | ||||||
|                                  [[maybe_unused]] std::string_view e2) { |  | ||||||
|     ctx.AddU32x2("{}=uvec2({},{});", inst, e1, e2); |     ctx.AddU32x2("{}=uvec2({},{});", inst, e1, e2); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -31,9 +30,8 @@ void EmitCompositeConstructU32x4([[maybe_unused]] EmitContext& ctx, | |||||||
|     throw NotImplementedException("GLSL Instruction"); |     throw NotImplementedException("GLSL Instruction"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitCompositeExtractU32x2([[maybe_unused]] EmitContext& ctx, IR::Inst& inst, | void EmitCompositeExtractU32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite, | ||||||
|                                [[maybe_unused]] std::string_view composite, |                                u32 index) { | ||||||
|                                [[maybe_unused]] u32 index) { |  | ||||||
|     ctx.AddU32("{}={}[{}];", inst, composite, index); |     ctx.AddU32("{}={}[{}];", inst, composite, index); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -130,10 +128,9 @@ void EmitCompositeInsertF16x4([[maybe_unused]] EmitContext& ctx, | |||||||
|     throw NotImplementedException("GLSL Instruction"); |     throw NotImplementedException("GLSL Instruction"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitCompositeConstructF32x2([[maybe_unused]] EmitContext& ctx, | void EmitCompositeConstructF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view e1, | ||||||
|                                  [[maybe_unused]] std::string_view e1, |                                  std::string_view e2) { | ||||||
|                                  [[maybe_unused]] std::string_view e2) { |     ctx.AddF32x2("{}=uvec2({},{});", inst, e1, e2); | ||||||
|     throw NotImplementedException("GLSL Instruction"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitCompositeConstructF32x3([[maybe_unused]] EmitContext& ctx, | void EmitCompositeConstructF32x3([[maybe_unused]] EmitContext& ctx, | ||||||
| @@ -151,10 +148,9 @@ void EmitCompositeConstructF32x4([[maybe_unused]] EmitContext& ctx, | |||||||
|     throw NotImplementedException("GLSL Instruction"); |     throw NotImplementedException("GLSL Instruction"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitCompositeExtractF32x2([[maybe_unused]] EmitContext& ctx, | void EmitCompositeExtractF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite, | ||||||
|                                [[maybe_unused]] std::string_view composite, |                                u32 index) { | ||||||
|                                [[maybe_unused]] u32 index) { |     ctx.AddF32("{}={}[{}];", inst, composite, index); | ||||||
|     throw NotImplementedException("GLSL Instruction"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitCompositeExtractF32x3([[maybe_unused]] EmitContext& ctx, | void EmitCompositeExtractF32x3([[maybe_unused]] EmitContext& ctx, | ||||||
|   | |||||||
| @@ -37,9 +37,10 @@ void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | |||||||
|                (u32_offset / 4) % 4); |                (u32_offset / 4) % 4); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitGetCbufF32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR::Value& binding, | void EmitGetCbufF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | ||||||
|                     [[maybe_unused]] const IR::Value& offset) { |                     const IR::Value& offset) { | ||||||
|     throw NotImplementedException("GLSL"); |     const auto u32_offset{offset.U32()}; | ||||||
|  |     ctx.AddF32("{}=cbuf{}[{}][{}];", inst, binding.U32(), u32_offset / 16, (u32_offset / 4) % 4); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitGetCbufU32x2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR::Value& binding, | void EmitGetCbufU32x2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] const IR::Value& binding, | ||||||
|   | |||||||
| @@ -0,0 +1,253 @@ | |||||||
|  | // 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/backend/glsl/emit_glsl_instructions.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  | #include "shader_recompiler/profile.h" | ||||||
|  |  | ||||||
|  | namespace Shader::Backend::GLSL { | ||||||
|  | void EmitConvertS16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS16F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS32F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS32F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddS32("{}=int({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS32F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddS32("{}=int({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS64F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddS64("{}=int64_t({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertS64F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddS64("{}=int64_t({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU16F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU16F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU16F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU32F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU32F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU32("{}=uint({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU32F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU32("{}=uint({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU64F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU64F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU64("{}=uint64_t({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU64F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU64("{}=uint64_t({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU64U32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU64("{}=uint64_t({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertU32U64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU32("{}=uint({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32F16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32F64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=float({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64F32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=double({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16S8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16S16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16S32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16S64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16U8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16U16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16U32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF16U64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32S8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32S16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32S32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=float({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32S64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=float({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32U8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32U16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32U32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=float({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF32U64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=float({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64S8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64S16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64S32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=double({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64S64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=double({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64U8([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64U16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL Instruction"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64U32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=double({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitConvertF64U64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=double({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Shader::Backend::GLSL | ||||||
|   | |||||||
| @@ -0,0 +1,487 @@ | |||||||
|  | // 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/backend/glsl/emit_glsl_instructions.h" | ||||||
|  | #include "shader_recompiler/frontend/ir/value.h" | ||||||
|  | #include "shader_recompiler/profile.h" | ||||||
|  |  | ||||||
|  | namespace Shader::Backend::GLSL { | ||||||
|  |  | ||||||
|  | void EmitFPAbs16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPAbs32([[maybe_unused]] EmitContext& ctx, IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=abs({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPAbs64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPAdd16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPAdd32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF32("{}={}+{};", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPAdd64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF64("{}={}+{};", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFma16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b, | ||||||
|  |                  [[maybe_unused]] std::string_view c) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFma32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b, | ||||||
|  |                  [[maybe_unused]] std::string_view c) { | ||||||
|  |     ctx.AddF32("{}=fma({},{},{});", inst, a, b, c); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFma64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b, | ||||||
|  |                  [[maybe_unused]] std::string_view c) { | ||||||
|  |     ctx.AddF64("{}=fma({},{},{});", inst, a, b, c); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMax32([[maybe_unused]] EmitContext& ctx, IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF32("{}=max({},{});", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMax64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF64("{}=max({},{});", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF32("{}=min({},{});", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMin64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF64("{}=min({},{});", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMul16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMul32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF32("{}={}*{};", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPMul64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view a, [[maybe_unused]] std::string_view b) { | ||||||
|  |     ctx.AddF64("{}={}*{};", inst, a, b); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPNeg16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPNeg32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=-{};", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPNeg64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                  [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=-{};", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPSin([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=sin({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPCos([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=cos({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPExp2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                 [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=exp2({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPLog2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                 [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=log2({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRecip32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=1/{};", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRecip64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=1/{};", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRecipSqrt32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRecipSqrt64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPSqrt([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                 [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=sqrt({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPSaturate16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=sqrt({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPSaturate32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=clamp({},0.0f,1.0f);", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPSaturate64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=clamp({},0.0,1.0);", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPClamp16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value, | ||||||
|  |                    [[maybe_unused]] std::string_view min_value, | ||||||
|  |                    [[maybe_unused]] std::string_view max_value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPClamp32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value, | ||||||
|  |                    [[maybe_unused]] std::string_view min_value, | ||||||
|  |                    [[maybe_unused]] std::string_view max_value) { | ||||||
|  |     ctx.AddF32("{}=clamp({},{},{});", inst, value, min_value, max_value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPClamp64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value, | ||||||
|  |                    [[maybe_unused]] std::string_view min_value, | ||||||
|  |                    [[maybe_unused]] std::string_view max_value) { | ||||||
|  |     ctx.AddF64("{}=clamp({},{},{});", inst, value, min_value, max_value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRoundEven16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRoundEven32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=round({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPRoundEven64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                        [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=round({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFloor16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFloor32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=floor({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPFloor64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=floor({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPCeil16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                   [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPCeil32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                   [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=ceil({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPCeil64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                   [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=ceil({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPTrunc16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPTrunc32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF32("{}=trunc({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPTrunc64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddF64("{}=trunc({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view lhs, | ||||||
|  |                       [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view lhs, | ||||||
|  |                       [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                       [[maybe_unused]] std::string_view lhs, | ||||||
|  |                       [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                         [[maybe_unused]] std::string_view lhs, | ||||||
|  |                         [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                         [[maybe_unused]] std::string_view lhs, | ||||||
|  |                         [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                         [[maybe_unused]] std::string_view lhs, | ||||||
|  |                         [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdNotEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdNotEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdNotEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordNotEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordNotEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordNotEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThan16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThan32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThan64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                          [[maybe_unused]] std::string_view lhs, | ||||||
|  |                          [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThan16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThan32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThan64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                            [[maybe_unused]] std::string_view lhs, | ||||||
|  |                            [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThan16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                             [[maybe_unused]] std::string_view lhs, | ||||||
|  |                             [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThan32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                             [[maybe_unused]] std::string_view lhs, | ||||||
|  |                             [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThan64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                             [[maybe_unused]] std::string_view lhs, | ||||||
|  |                             [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThan16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThan32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThan64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThanEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThanEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdLessThanEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                               [[maybe_unused]] std::string_view lhs, | ||||||
|  |                               [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThanEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                 [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                 [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThanEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                 [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                 [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordLessThanEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                 [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                 [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThanEqual16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                  [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                  [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThanEqual32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                  [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                  [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPOrdGreaterThanEqual64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                  [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                  [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThanEqual16([[maybe_unused]] EmitContext& ctx, | ||||||
|  |                                    [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                    [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                    [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThanEqual32([[maybe_unused]] EmitContext& ctx, | ||||||
|  |                                    [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                    [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                    [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPUnordGreaterThanEqual64([[maybe_unused]] EmitContext& ctx, | ||||||
|  |                                    [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                                    [[maybe_unused]] std::string_view lhs, | ||||||
|  |                                    [[maybe_unused]] std::string_view rhs) { | ||||||
|  |     throw NotImplementedException("GLSL"); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPIsNan16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU1("{}=isnan({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPIsNan32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU1("{}=isnan({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | void EmitFPIsNan64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | ||||||
|  |                    [[maybe_unused]] std::string_view value) { | ||||||
|  |     ctx.AddU1("{}=isnan({});", inst, value); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | } // namespace Shader::Backend::GLSL | ||||||
|   | |||||||
| @@ -61,7 +61,8 @@ void EmitGetCbufU16(EmitContext& ctx, const IR::Value& binding, const IR::Value& | |||||||
| void EmitGetCbufS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); | void EmitGetCbufS16(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); | ||||||
| void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | void EmitGetCbufU32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | ||||||
|                     const IR::Value& offset); |                     const IR::Value& offset); | ||||||
| void EmitGetCbufF32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); | void EmitGetCbufF32(EmitContext& ctx, IR::Inst& inst, const IR::Value& binding, | ||||||
|  |                     const IR::Value& offset); | ||||||
| void EmitGetCbufU32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); | void EmitGetCbufU32x2(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset); | ||||||
| void EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, std::string_view vertex); | void EmitGetAttribute(EmitContext& ctx, IR::Attribute attr, std::string_view vertex); | ||||||
| void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, std::string_view value, | void EmitSetAttribute(EmitContext& ctx, IR::Attribute attr, std::string_view value, | ||||||
| @@ -172,12 +173,14 @@ void EmitCompositeInsertF16x3(EmitContext& ctx, std::string_view composite, std: | |||||||
|                               u32 index); |                               u32 index); | ||||||
| void EmitCompositeInsertF16x4(EmitContext& ctx, std::string_view composite, std::string_view object, | void EmitCompositeInsertF16x4(EmitContext& ctx, std::string_view composite, std::string_view object, | ||||||
|                               u32 index); |                               u32 index); | ||||||
| void EmitCompositeConstructF32x2(EmitContext& ctx, std::string_view e1, std::string_view e2); | void EmitCompositeConstructF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view e1, | ||||||
|  |                                  std::string_view e2); | ||||||
| void EmitCompositeConstructF32x3(EmitContext& ctx, std::string_view e1, std::string_view e2, | void EmitCompositeConstructF32x3(EmitContext& ctx, std::string_view e1, std::string_view e2, | ||||||
|                                  std::string_view e3); |                                  std::string_view e3); | ||||||
| void EmitCompositeConstructF32x4(EmitContext& ctx, std::string_view e1, std::string_view e2, | void EmitCompositeConstructF32x4(EmitContext& ctx, std::string_view e1, std::string_view e2, | ||||||
|                                  std::string_view e3, std::string_view e4); |                                  std::string_view e3, std::string_view e4); | ||||||
| void EmitCompositeExtractF32x2(EmitContext& ctx, std::string_view composite, u32 index); | void EmitCompositeExtractF32x2(EmitContext& ctx, IR::Inst& inst, std::string_view composite, | ||||||
|  |                                u32 index); | ||||||
| void EmitCompositeExtractF32x3(EmitContext& ctx, std::string_view composite, u32 index); | void EmitCompositeExtractF32x3(EmitContext& ctx, std::string_view composite, u32 index); | ||||||
| void EmitCompositeExtractF32x4(EmitContext& ctx, std::string_view composite, u32 index); | void EmitCompositeExtractF32x4(EmitContext& ctx, std::string_view composite, u32 index); | ||||||
| void EmitCompositeInsertF32x2(EmitContext& ctx, std::string_view composite, std::string_view object, | void EmitCompositeInsertF32x2(EmitContext& ctx, std::string_view composite, std::string_view object, | ||||||
| @@ -206,37 +209,37 @@ void EmitSelectU16(EmitContext& ctx, std::string_view cond, std::string_view tru | |||||||
|                    std::string_view false_value); |                    std::string_view false_value); | ||||||
| void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    std::string_view true_value, std::string_view false_value); |                    std::string_view true_value, std::string_view false_value); | ||||||
| void EmitSelectU64(EmitContext& ctx, std::string_view cond, std::string_view true_value, | void EmitSelectU64(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    std::string_view false_value); |                    std::string_view true_value, std::string_view false_value); | ||||||
| void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value, | void EmitSelectF16(EmitContext& ctx, std::string_view cond, std::string_view true_value, | ||||||
|                    std::string_view false_value); |                    std::string_view false_value); | ||||||
| void EmitSelectF32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | void EmitSelectF32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    std::string_view true_value, std::string_view false_value); |                    std::string_view true_value, std::string_view false_value); | ||||||
| void EmitSelectF64(EmitContext& ctx, std::string_view cond, std::string_view true_value, | void EmitSelectF64(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    std::string_view false_value); |                    std::string_view true_value, std::string_view false_value); | ||||||
| void EmitBitCastU16F16(EmitContext& ctx); | void EmitBitCastU16F16(EmitContext& ctx, IR::Inst& inst); | ||||||
| void EmitBitCastU32F32(EmitContext& ctx, std::string_view value); | void EmitBitCastU32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitBitCastU64F64(EmitContext& ctx); | void EmitBitCastU64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitBitCastF16U16(EmitContext& ctx); | void EmitBitCastF16U16(EmitContext& ctx, IR::Inst& inst); | ||||||
| void EmitBitCastF32U32(EmitContext& ctx, std::string_view value); | void EmitBitCastF32U32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitBitCastF64U64(EmitContext& ctx); | void EmitBitCastF64U64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitPackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | void EmitPackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitUnpackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | void EmitUnpackUint2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitPackFloat2x16(EmitContext& ctx, std::string_view value); | void EmitPackFloat2x16(EmitContext& ctx, std::string_view value); | ||||||
| void EmitUnpackFloat2x16(EmitContext& ctx, std::string_view value); | void EmitUnpackFloat2x16(EmitContext& ctx, std::string_view value); | ||||||
| void EmitPackHalf2x16(EmitContext& ctx, std::string_view value); | void EmitPackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitUnpackHalf2x16(EmitContext& ctx, std::string_view value); | void EmitUnpackHalf2x16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitPackDouble2x32(EmitContext& ctx, std::string_view value); | void EmitPackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitUnpackDouble2x32(EmitContext& ctx, std::string_view value); | void EmitUnpackDouble2x32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitGetZeroFromOp(EmitContext& ctx); | void EmitGetZeroFromOp(EmitContext& ctx); | ||||||
| void EmitGetSignFromOp(EmitContext& ctx); | void EmitGetSignFromOp(EmitContext& ctx); | ||||||
| void EmitGetCarryFromOp(EmitContext& ctx); | void EmitGetCarryFromOp(EmitContext& ctx); | ||||||
| void EmitGetOverflowFromOp(EmitContext& ctx); | void EmitGetOverflowFromOp(EmitContext& ctx); | ||||||
| void EmitGetSparseFromOp(EmitContext& ctx); | void EmitGetSparseFromOp(EmitContext& ctx); | ||||||
| void EmitGetInBoundsFromOp(EmitContext& ctx); | void EmitGetInBoundsFromOp(EmitContext& ctx); | ||||||
| void EmitFPAbs16(EmitContext& ctx, std::string_view value); | void EmitFPAbs16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPAbs32(EmitContext& ctx, std::string_view value); | void EmitFPAbs32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPAbs64(EmitContext& ctx, std::string_view value); | void EmitFPAbs64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| @@ -246,85 +249,118 @@ void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::stri | |||||||
|                  std::string_view c); |                  std::string_view c); | ||||||
| void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, | void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, | ||||||
|                  std::string_view c); |                  std::string_view c); | ||||||
| void EmitFPMax32(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitFPMax32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMax64(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMin32(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitFPMin32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMin64(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitFPNeg16(EmitContext& ctx, std::string_view value); | void EmitFPNeg16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPNeg32(EmitContext& ctx, std::string_view value); | void EmitFPNeg32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPNeg64(EmitContext& ctx, std::string_view value); | void EmitFPNeg64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPSin(EmitContext& ctx, std::string_view value); | void EmitFPSin(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPCos(EmitContext& ctx, std::string_view value); | void EmitFPCos(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPExp2(EmitContext& ctx, std::string_view value); | void EmitFPExp2(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPLog2(EmitContext& ctx, std::string_view value); | void EmitFPLog2(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRecip32(EmitContext& ctx, std::string_view value); | void EmitFPRecip32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRecip64(EmitContext& ctx, std::string_view value); | void EmitFPRecip64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRecipSqrt32(EmitContext& ctx, std::string_view value); | void EmitFPRecipSqrt32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRecipSqrt64(EmitContext& ctx, std::string_view value); | void EmitFPRecipSqrt64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPSqrt(EmitContext& ctx, std::string_view value); | void EmitFPSqrt(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPSaturate16(EmitContext& ctx, std::string_view value); | void EmitFPSaturate16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPSaturate32(EmitContext& ctx, std::string_view value); | void EmitFPSaturate32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPSaturate64(EmitContext& ctx, std::string_view value); | void EmitFPSaturate64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPClamp16(EmitContext& ctx, std::string_view value, std::string_view min_value, | void EmitFPClamp16(EmitContext& ctx, IR::Inst& inst, std::string_view value, | ||||||
|                    std::string_view max_value); |                    std::string_view min_value, std::string_view max_value); | ||||||
| void EmitFPClamp32(EmitContext& ctx, std::string_view value, std::string_view min_value, | void EmitFPClamp32(EmitContext& ctx, IR::Inst& inst, std::string_view value, | ||||||
|                    std::string_view max_value); |                    std::string_view min_value, std::string_view max_value); | ||||||
| void EmitFPClamp64(EmitContext& ctx, std::string_view value, std::string_view min_value, | void EmitFPClamp64(EmitContext& ctx, IR::Inst& inst, std::string_view value, | ||||||
|                    std::string_view max_value); |                    std::string_view min_value, std::string_view max_value); | ||||||
| void EmitFPRoundEven16(EmitContext& ctx, std::string_view value); | void EmitFPRoundEven16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRoundEven32(EmitContext& ctx, std::string_view value); | void EmitFPRoundEven32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPRoundEven64(EmitContext& ctx, std::string_view value); | void EmitFPRoundEven64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPFloor16(EmitContext& ctx, std::string_view value); | void EmitFPFloor16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPFloor32(EmitContext& ctx, std::string_view value); | void EmitFPFloor32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPFloor64(EmitContext& ctx, std::string_view value); | void EmitFPFloor64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPCeil16(EmitContext& ctx, std::string_view value); | void EmitFPCeil16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPCeil32(EmitContext& ctx, std::string_view value); | void EmitFPCeil32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPCeil64(EmitContext& ctx, std::string_view value); | void EmitFPCeil64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPTrunc16(EmitContext& ctx, std::string_view value); | void EmitFPTrunc16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPTrunc32(EmitContext& ctx, std::string_view value); | void EmitFPTrunc32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPTrunc64(EmitContext& ctx, std::string_view value); | void EmitFPTrunc64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitFPOrdEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); | ||||||
| void EmitFPOrdEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); | ||||||
| void EmitFPOrdEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, std::string_view rhs); | ||||||
| void EmitFPUnordEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                         std::string_view rhs); | ||||||
| void EmitFPUnordEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                         std::string_view rhs); | ||||||
| void EmitFPOrdNotEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdNotEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                         std::string_view rhs); | ||||||
| void EmitFPUnordNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdNotEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordNotEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPUnordNotEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdNotEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPOrdLessThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdNotEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdLessThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPUnordLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordNotEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordLessThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPUnordLessThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordNotEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPOrdGreaterThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordNotEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdGreaterThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPUnordGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdLessThan16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordGreaterThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPUnordGreaterThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdLessThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPOrdLessThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdLessThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdLessThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                          std::string_view rhs); | ||||||
| void EmitFPUnordLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordLessThan16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordLessThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPUnordLessThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordLessThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPOrdGreaterThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPUnordLessThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPOrdGreaterThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                            std::string_view rhs); | ||||||
| void EmitFPUnordGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdGreaterThan16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPUnordGreaterThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs); |                             std::string_view rhs); | ||||||
| void EmitFPUnordGreaterThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs); | void EmitFPOrdGreaterThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPIsNan16(EmitContext& ctx, std::string_view value); |                             std::string_view rhs); | ||||||
| void EmitFPIsNan32(EmitContext& ctx, std::string_view value); | void EmitFPOrdGreaterThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
| void EmitFPIsNan64(EmitContext& ctx, std::string_view value); |                             std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThan16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThan32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThan64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPOrdLessThanEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPOrdLessThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPOrdLessThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                               std::string_view rhs); | ||||||
|  | void EmitFPUnordLessThanEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                 std::string_view rhs); | ||||||
|  | void EmitFPUnordLessThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                 std::string_view rhs); | ||||||
|  | void EmitFPUnordLessThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                 std::string_view rhs); | ||||||
|  | void EmitFPOrdGreaterThanEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                  std::string_view rhs); | ||||||
|  | void EmitFPOrdGreaterThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                  std::string_view rhs); | ||||||
|  | void EmitFPOrdGreaterThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                  std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThanEqual16(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                    std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThanEqual32(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                    std::string_view rhs); | ||||||
|  | void EmitFPUnordGreaterThanEqual64(EmitContext& ctx, IR::Inst& inst, std::string_view lhs, | ||||||
|  |                                    std::string_view rhs); | ||||||
|  | void EmitFPIsNan16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
|  | void EmitFPIsNan32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
|  | void EmitFPIsNan64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitIAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | void EmitISub32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b); | ||||||
| @@ -493,54 +529,54 @@ void EmitLogicalOr(EmitContext& ctx, std::string_view a, std::string_view b); | |||||||
| void EmitLogicalAnd(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitLogicalAnd(EmitContext& ctx, std::string_view a, std::string_view b); | ||||||
| void EmitLogicalXor(EmitContext& ctx, std::string_view a, std::string_view b); | void EmitLogicalXor(EmitContext& ctx, std::string_view a, std::string_view b); | ||||||
| void EmitLogicalNot(EmitContext& ctx, std::string_view value); | void EmitLogicalNot(EmitContext& ctx, std::string_view value); | ||||||
| void EmitConvertS16F16(EmitContext& ctx, std::string_view value); | void EmitConvertS16F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS16F32(EmitContext& ctx, std::string_view value); | void EmitConvertS16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS16F64(EmitContext& ctx, std::string_view value); | void EmitConvertS16F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS32F16(EmitContext& ctx, std::string_view value); | void EmitConvertS32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS32F32(EmitContext& ctx, std::string_view value); | void EmitConvertS32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS32F64(EmitContext& ctx, std::string_view value); | void EmitConvertS32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS64F16(EmitContext& ctx, std::string_view value); | void EmitConvertS64F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS64F32(EmitContext& ctx, std::string_view value); | void EmitConvertS64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertS64F64(EmitContext& ctx, std::string_view value); | void EmitConvertS64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU16F16(EmitContext& ctx, std::string_view value); | void EmitConvertU16F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU16F32(EmitContext& ctx, std::string_view value); | void EmitConvertU16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU16F64(EmitContext& ctx, std::string_view value); | void EmitConvertU16F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU32F16(EmitContext& ctx, std::string_view value); | void EmitConvertU32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU32F32(EmitContext& ctx, std::string_view value); | void EmitConvertU32F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU32F64(EmitContext& ctx, std::string_view value); | void EmitConvertU32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU64F16(EmitContext& ctx, std::string_view value); | void EmitConvertU64F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU64F32(EmitContext& ctx, std::string_view value); | void EmitConvertU64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU64F64(EmitContext& ctx, std::string_view value); | void EmitConvertU64F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU64U32(EmitContext& ctx, std::string_view value); | void EmitConvertU64U32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertU32U64(EmitContext& ctx, std::string_view value); | void EmitConvertU32U64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16F32(EmitContext& ctx, std::string_view value); | void EmitConvertF16F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32F16(EmitContext& ctx, std::string_view value); | void EmitConvertF32F16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32F64(EmitContext& ctx, std::string_view value); | void EmitConvertF32F64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64F32(EmitContext& ctx, std::string_view value); | void EmitConvertF64F32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16S8(EmitContext& ctx, std::string_view value); | void EmitConvertF16S8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16S16(EmitContext& ctx, std::string_view value); | void EmitConvertF16S16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16S32(EmitContext& ctx, std::string_view value); | void EmitConvertF16S32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16S64(EmitContext& ctx, std::string_view value); | void EmitConvertF16S64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16U8(EmitContext& ctx, std::string_view value); | void EmitConvertF16U8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16U16(EmitContext& ctx, std::string_view value); | void EmitConvertF16U16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16U32(EmitContext& ctx, std::string_view value); | void EmitConvertF16U32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF16U64(EmitContext& ctx, std::string_view value); | void EmitConvertF16U64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32S8(EmitContext& ctx, std::string_view value); | void EmitConvertF32S8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32S16(EmitContext& ctx, std::string_view value); | void EmitConvertF32S16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32S32(EmitContext& ctx, std::string_view value); | void EmitConvertF32S32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32S64(EmitContext& ctx, std::string_view value); | void EmitConvertF32S64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32U8(EmitContext& ctx, std::string_view value); | void EmitConvertF32U8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32U16(EmitContext& ctx, std::string_view value); | void EmitConvertF32U16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32U32(EmitContext& ctx, std::string_view value); | void EmitConvertF32U32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF32U64(EmitContext& ctx, std::string_view value); | void EmitConvertF32U64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64S8(EmitContext& ctx, std::string_view value); | void EmitConvertF64S8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64S16(EmitContext& ctx, std::string_view value); | void EmitConvertF64S16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64S32(EmitContext& ctx, std::string_view value); | void EmitConvertF64S32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64S64(EmitContext& ctx, std::string_view value); | void EmitConvertF64S64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64U8(EmitContext& ctx, std::string_view value); | void EmitConvertF64U8(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64U16(EmitContext& ctx, std::string_view value); | void EmitConvertF64U16(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64U32(EmitContext& ctx, std::string_view value); | void EmitConvertF64U32(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitConvertF64U64(EmitContext& ctx, std::string_view value); | void EmitConvertF64U64(EmitContext& ctx, IR::Inst& inst, std::string_view value); | ||||||
| void EmitBindlessImageSampleImplicitLod(EmitContext&); | void EmitBindlessImageSampleImplicitLod(EmitContext&); | ||||||
| void EmitBindlessImageSampleExplicitLod(EmitContext&); | void EmitBindlessImageSampleExplicitLod(EmitContext&); | ||||||
| void EmitBindlessImageSampleDrefImplicitLod(EmitContext&); | void EmitBindlessImageSampleDrefImplicitLod(EmitContext&); | ||||||
|   | |||||||
| @@ -76,18 +76,15 @@ void EmitWriteStorageS16([[maybe_unused]] EmitContext& ctx, | |||||||
|     throw NotImplementedException("GLSL Instrucion"); |     throw NotImplementedException("GLSL Instrucion"); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitWriteStorage32([[maybe_unused]] EmitContext& ctx, | void EmitWriteStorage32(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset, | ||||||
|                         [[maybe_unused]] const IR::Value& binding, |                         std::string_view value) { | ||||||
|                         [[maybe_unused]] const IR::Value& offset, |  | ||||||
|                         [[maybe_unused]] std::string_view value) { |  | ||||||
|     ctx.Add("buff{}[{}]={};", binding.U32(), offset.U32(), value); |     ctx.Add("buff{}[{}]={};", binding.U32(), offset.U32(), value); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitWriteStorage64([[maybe_unused]] EmitContext& ctx, | void EmitWriteStorage64(EmitContext& ctx, const IR::Value& binding, const IR::Value& offset, | ||||||
|                         [[maybe_unused]] const IR::Value& binding, |                         std::string_view value) { | ||||||
|                         [[maybe_unused]] const IR::Value& offset, |     ctx.Add("buff{}[{}]={}.x;", binding.U32(), offset.U32(), value); | ||||||
|                         [[maybe_unused]] std::string_view value) { |     ctx.Add("buff{}[{}]={}.y;", binding.U32(), offset.U32() + 1, value); | ||||||
|     throw NotImplementedException("GLSL Instrucion"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitWriteStorage128([[maybe_unused]] EmitContext& ctx, | void EmitWriteStorage128([[maybe_unused]] EmitContext& ctx, | ||||||
|   | |||||||
| @@ -355,54 +355,6 @@ void EmitWriteSharedU128(EmitContext& ctx, std::string_view offset, std::string_ | |||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitBitCastU16F16(EmitContext& ctx) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBitCastU32F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBitCastU64F64(EmitContext& ctx) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBitCastF16U16(EmitContext& ctx) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBitCastF32U32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBitCastF64U64(EmitContext& ctx) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitPackFloat2x16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitUnpackFloat2x16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitPackHalf2x16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitUnpackHalf2x16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitPackDouble2x32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitUnpackDouble2x32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitGetZeroFromOp(EmitContext& ctx) { | void EmitGetZeroFromOp(EmitContext& ctx) { | ||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| } | } | ||||||
| @@ -427,352 +379,6 @@ void EmitGetInBoundsFromOp(EmitContext& ctx) { | |||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitFPAbs16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPAbs32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPAbs64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPAdd16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, |  | ||||||
|                  std::string_view c) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, |  | ||||||
|                  std::string_view c) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, |  | ||||||
|                  std::string_view c) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMax32(EmitContext& ctx, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMax64(EmitContext& ctx, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMin32(EmitContext& ctx, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMin64(EmitContext& ctx, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPNeg16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPNeg32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPNeg64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPSin(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPCos(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPExp2(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPLog2(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRecip32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRecip64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRecipSqrt32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRecipSqrt64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPSqrt(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPSaturate16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPSaturate32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPSaturate64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPClamp16(EmitContext& ctx, std::string_view value, std::string_view min_value, |  | ||||||
|                    std::string_view max_value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPClamp32(EmitContext& ctx, std::string_view value, std::string_view min_value, |  | ||||||
|                    std::string_view max_value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPClamp64(EmitContext& ctx, std::string_view value, std::string_view min_value, |  | ||||||
|                    std::string_view max_value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRoundEven16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRoundEven32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPRoundEven64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFloor16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFloor32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPFloor64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPCeil16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPCeil32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPCeil64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPTrunc16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPTrunc32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPTrunc64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdNotEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdNotEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordNotEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordNotEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordNotEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThan16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThan32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThan64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdLessThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordLessThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPOrdGreaterThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThanEqual16(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThanEqual32(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPUnordGreaterThanEqual64(EmitContext& ctx, std::string_view lhs, std::string_view rhs) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPIsNan16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPIsNan32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitFPIsNan64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset, | void EmitSharedAtomicIAdd32(EmitContext& ctx, std::string_view pointer_offset, | ||||||
|                             std::string_view value) { |                             std::string_view value) { | ||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| @@ -1100,198 +706,6 @@ void EmitLogicalNot(EmitContext& ctx, std::string_view value) { | |||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitConvertS16F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS16F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS16F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS32F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS32F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS32F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS64F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS64F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertS64F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU16F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU16F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU16F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU32F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU32F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU32F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU64F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU64F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU64F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU64U32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertU32U64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32F16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32F64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64F32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16S8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16S16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16S32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16S64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16U8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16U16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16U32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF16U64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32S8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32S16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32S32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32S64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32U8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32U16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32U32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF32U64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64S8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64S16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64S32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64S64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64U8(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64U16(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64U32(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitConvertF64U64(EmitContext& ctx, std::string_view value) { |  | ||||||
|     NotImplemented(); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void EmitBindlessImageSampleImplicitLod(EmitContext&) { | void EmitBindlessImageSampleImplicitLod(EmitContext&) { | ||||||
|     NotImplemented(); |     NotImplemented(); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -33,10 +33,9 @@ void EmitSelectU32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | |||||||
|     ctx.AddU32("{}={}?{}:{};", inst, cond, true_value, false_value); |     ctx.AddU32("{}={}?{}:{};", inst, cond, true_value, false_value); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitSelectU64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] std::string_view cond, | void EmitSelectU64(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    [[maybe_unused]] std::string_view true_value, |                    std::string_view true_value, std::string_view false_value) { | ||||||
|                    [[maybe_unused]] std::string_view false_value) { |     ctx.AddU64("{}={}?{}:{};", inst, cond, true_value, false_value); | ||||||
|     throw NotImplementedException("GLSL Instruction"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitSelectF16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] std::string_view cond, | void EmitSelectF16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] std::string_view cond, | ||||||
| @@ -50,10 +49,9 @@ void EmitSelectF32(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | |||||||
|     ctx.AddF32("{}={}?{}:{};", inst, cond, true_value, false_value); |     ctx.AddF32("{}={}?{}:{};", inst, cond, true_value, false_value); | ||||||
| } | } | ||||||
|  |  | ||||||
| void EmitSelectF64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] std::string_view cond, | void EmitSelectF64(EmitContext& ctx, IR::Inst& inst, std::string_view cond, | ||||||
|                    [[maybe_unused]] std::string_view true_value, |                    std::string_view true_value, std::string_view false_value) { | ||||||
|                    [[maybe_unused]] std::string_view false_value) { |     ctx.AddF64("{}={}?{}:{};", inst, cond, true_value, false_value); | ||||||
|     throw NotImplementedException("GLSL Instruction"); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| } // namespace Shader::Backend::GLSL | } // namespace Shader::Backend::GLSL | ||||||
|   | |||||||
| @@ -78,8 +78,12 @@ std::string RegAlloc::GetType(Type type, u32 index) { | |||||||
|         return "int "; |         return "int "; | ||||||
|     case Type::F32: |     case Type::F32: | ||||||
|         return "float "; |         return "float "; | ||||||
|  |     case Type::S64: | ||||||
|  |         return "int64_t "; | ||||||
|     case Type::U64: |     case Type::U64: | ||||||
|         return "uint64_t "; |         return "uint64_t "; | ||||||
|  |     case Type::F64: | ||||||
|  |         return "double "; | ||||||
|     case Type::U32x2: |     case Type::U32x2: | ||||||
|         return "uvec2 "; |         return "uvec2 "; | ||||||
|     case Type::F32x2: |     case Type::F32x2: | ||||||
|   | |||||||
| @@ -17,9 +17,10 @@ class Value; | |||||||
| namespace Shader::Backend::GLSL { | namespace Shader::Backend::GLSL { | ||||||
| enum class Type : u32 { | enum class Type : u32 { | ||||||
|     U1, |     U1, | ||||||
|     U32, |  | ||||||
|     S32, |     S32, | ||||||
|  |     U32, | ||||||
|     F32, |     F32, | ||||||
|  |     S64, | ||||||
|     U64, |     U64, | ||||||
|     F64, |     F64, | ||||||
|     U32x2, |     U32x2, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user