summaryrefslogtreecommitdiffstats
path: root/src/shader_recompiler/ir_opt
diff options
context:
space:
mode:
authorFernandoS27 <fsahmkow27@gmail.com>2021-04-17 12:51:43 +0200
committerameerj <52414509+ameerj@users.noreply.github.com>2021-07-23 03:51:28 +0200
commit080857b60e78836901cf6e9601f48613812fcd04 (patch)
treeef466d23ba86a14f01abaa7b01acd7a7d6b24aa7 /src/shader_recompiler/ir_opt
parentshader: Implement fine derivates constant propagation (diff)
downloadyuzu-080857b60e78836901cf6e9601f48613812fcd04.tar
yuzu-080857b60e78836901cf6e9601f48613812fcd04.tar.gz
yuzu-080857b60e78836901cf6e9601f48613812fcd04.tar.bz2
yuzu-080857b60e78836901cf6e9601f48613812fcd04.tar.lz
yuzu-080857b60e78836901cf6e9601f48613812fcd04.tar.xz
yuzu-080857b60e78836901cf6e9601f48613812fcd04.tar.zst
yuzu-080857b60e78836901cf6e9601f48613812fcd04.zip
Diffstat (limited to 'src/shader_recompiler/ir_opt')
-rw-r--r--src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp2
-rw-r--r--src/shader_recompiler/ir_opt/constant_propagation_pass.cpp8
2 files changed, 2 insertions, 8 deletions
diff --git a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
index e5688667b..7473e0bc2 100644
--- a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
+++ b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
@@ -532,6 +532,8 @@ void VisitUsages(Info& info, IR::Inst& inst) {
break;
case IR::Opcode::DPdxFine:
case IR::Opcode::DPdyFine:
+ case IR::Opcode::DPdxCoarse:
+ case IR::Opcode::DPdyCoarse:
info.uses_derivates = true;
break;
case IR::Opcode::LoadStorageU8:
diff --git a/src/shader_recompiler/ir_opt/constant_propagation_pass.cpp b/src/shader_recompiler/ir_opt/constant_propagation_pass.cpp
index 983fb20ab..7e86f64a8 100644
--- a/src/shader_recompiler/ir_opt/constant_propagation_pass.cpp
+++ b/src/shader_recompiler/ir_opt/constant_propagation_pass.cpp
@@ -428,19 +428,15 @@ void FoldFSwizzleAdd(IR::Block& block, IR::Inst& inst) {
if (!swizzle.IsImmediate()) {
return;
}
-
const IR::Value value_1{GetThroughCast(inst.Arg(0).Resolve(), IR::Opcode::BitCastF32U32)};
const IR::Value value_2{GetThroughCast(inst.Arg(1).Resolve(), IR::Opcode::BitCastF32U32)};
-
if (value_1.IsImmediate()) {
return;
}
-
const u32 swizzle_value{swizzle.U32()};
if (swizzle_value != 0x99 && swizzle_value != 0xA5) {
return;
}
-
IR::Inst* const inst2{value_1.InstRecursive()};
if (inst2->GetOpcode() != IR::Opcode::ShuffleButterfly) {
return;
@@ -449,19 +445,15 @@ void FoldFSwizzleAdd(IR::Block& block, IR::Inst& inst) {
if (value_2 != value_3) {
return;
}
-
const IR::Value index{inst2->Arg(1)};
const IR::Value clamp{inst2->Arg(2)};
const IR::Value segmentation_mask{inst2->Arg(3)};
-
if (!index.IsImmediate() || !clamp.IsImmediate() || !segmentation_mask.IsImmediate()) {
return;
}
-
if (clamp.U32() != 3 || segmentation_mask.U32() != 28) {
return;
}
-
if (swizzle_value == 0x99) {
// DPdxFine
if (index.U32() == 1) {