summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2021-06-25 19:09:45 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:39 +0200
commit8289eb108fefa9bfbb445c9f6b3f423a5d0eb771 (patch)
treee1c72cddcaffd74a9acff03d223576e6d82fbcce /src/shader_recompiler/backend/glsl/emit_glsl_integer.cpp
parentvk_graphics_pipeline: Implement smooth lines (diff)
downloadyuzu-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.cpp14
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,