diff options
author | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-06-25 19:09:45 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:39 +0200 |
commit | 8289eb108fefa9bfbb445c9f6b3f423a5d0eb771 (patch) | |
tree | e1c72cddcaffd74a9acff03d223576e6d82fbcce /src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp | |
parent | vk_graphics_pipeline: Implement smooth lines (diff) | |
download | yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar.gz yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar.bz2 yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar.lz yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar.xz yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.tar.zst yuzu-8289eb108fefa9bfbb445c9f6b3f423a5d0eb771.zip |
Diffstat (limited to 'src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp')
-rw-r--r-- | src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp index 2892074e1..38419f88f 100644 --- a/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp +++ b/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp @@ -27,6 +27,14 @@ void SetSignFlag(EmitContext& ctx, IR::Inst& inst, std::string_view result) { ctx.AddU1("{}=int({})<0;", *sign, result); sign->Invalidate(); } + +void BitwiseLogicalOp(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b, + char lop) { + const auto result{ctx.var_alloc.Define(inst, GlslVarType::U32)}; + ctx.Add("{}={}{}{};", result, a, lop, b); + SetZeroFlag(ctx, inst, result); + SetSignFlag(ctx, inst, result); +} } // Anonymous namespace void EmitIAdd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { @@ -113,15 +121,15 @@ void EmitShiftRightArithmetic64(EmitContext& ctx, IR::Inst& inst, std::string_vi } void EmitBitwiseAnd32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { - ctx.AddU32("{}={}&{};", inst, a, b); + BitwiseLogicalOp(ctx, inst, a, b, '&'); } void EmitBitwiseOr32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { - ctx.AddU32("{}={}|{};", inst, a, b); + BitwiseLogicalOp(ctx, inst, a, b, '|'); } void EmitBitwiseXor32(EmitContext& ctx, IR::Inst& inst, std::string_view a, std::string_view b) { - ctx.AddU32("{}={}^{};", inst, a, b); + BitwiseLogicalOp(ctx, inst, a, b, '^'); } void EmitBitFieldInsert(EmitContext& ctx, IR::Inst& inst, std::string_view base, |