summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp
diff options
context:
space:
mode:
authorameerj <52414509+ameerj@users.noreply.github.com>2021-05-19 07:00:51 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:33 +0200
commit36d040da7059e438fa35f1a5de5d5aed4cef5ca4 (patch)
tree304f0b94407b689627c4966212c06dc3e8ad65d5 /src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp
parentglasm: Implement PrimitiveId attribute read (diff)
downloadyuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar.gz
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar.bz2
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar.lz
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar.xz
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.tar.zst
yuzu-36d040da7059e438fa35f1a5de5d5aed4cef5ca4.zip
Diffstat (limited to '')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp
index 0f987daeb..af0e13d43 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_warp.cpp
@@ -95,8 +95,17 @@ void EmitShuffleButterfly(EmitContext& ctx, IR::Inst& inst, ScalarU32 value, Sca
Shuffle(ctx, inst, value, index, clamp, segmentation_mask, "XOR");
}
-void EmitFSwizzleAdd(EmitContext&, ScalarF32, ScalarF32, ScalarU32) {
- throw NotImplementedException("GLASM instruction");
+void EmitFSwizzleAdd(EmitContext& ctx, IR::Inst& inst, ScalarF32 op_a, ScalarF32 op_b,
+ ScalarU32 swizzle) {
+ const auto ret{ctx.reg_alloc.Define(inst)};
+ ctx.Add("AND.U RC.z,{}.threadid,3;"
+ "SHL.U RC.z,RC.z,1;"
+ "SHR.U RC.z,{},RC.z;"
+ "AND.U RC.z,RC.z,3;"
+ "MUL.F RC.x,{},FSWZA[RC.z];"
+ "MUL.F RC.y,{},FSWZB[RC.z];"
+ "ADD.F {}.x,RC.x,RC.y;",
+ ctx.stage_name, swizzle, op_a, op_b, ret);
}
void EmitDPdxFine(EmitContext& ctx, IR::Inst& inst, ScalarF32 p) {