summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/ir_opt
diff options
context:
space:
mode:
authorGravatar FernandoS272021-04-05 04:03:12 +0200
committerGravatar ameerj2021-07-22 21:51:26 -0400
commitdcaf0e91508562a70a49db7011ad09f13f811d71 (patch)
tree9d3f48adc0a94c6a8b411a8e98c0e7a2d06b1d81 /src/shader_recompiler/ir_opt
parentshader: Implement indexed Position and ClipDistances (diff)
downloadyuzu-dcaf0e91508562a70a49db7011ad09f13f811d71.tar.gz
yuzu-dcaf0e91508562a70a49db7011ad09f13f811d71.tar.xz
yuzu-dcaf0e91508562a70a49db7011ad09f13f811d71.zip
shader: Address feedback
Diffstat (limited to 'src/shader_recompiler/ir_opt')
-rw-r--r--src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp22
1 files changed, 9 insertions, 13 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 a14465598..1c03ee82a 100644
--- a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
+++ b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
@@ -511,37 +511,33 @@ void Visit(Info& info, IR::Inst& inst) {
511} 511}
512 512
513void GatherInfoFromHeader(Environment& env, Info& info) { 513void GatherInfoFromHeader(Environment& env, Info& info) {
514 auto stage = env.ShaderStage(); 514 Stage stage{env.ShaderStage()};
515 if (stage == Stage::Compute) { 515 if (stage == Stage::Compute) {
516 return; 516 return;
517 } 517 }
518 const auto& header = env.SPH(); 518 const auto& header{env.SPH()};
519 if (stage == Stage::Fragment) { 519 if (stage == Stage::Fragment) {
520 if (!info.loads_indexed_attributes) { 520 if (!info.loads_indexed_attributes) {
521 return; 521 return;
522 } 522 }
523 for (size_t i = 0; i < info.input_generics.size(); i++) { 523 for (size_t i = 0; i < info.input_generics.size(); i++) {
524 info.input_generics[i].used = 524 info.input_generics[i].used |= header.ps.IsGenericVectorActive(i);
525 info.input_generics[i].used || header.ps.IsGenericVectorActive(i);
526 } 525 }
527 info.loads_position = info.loads_position || header.ps.imap_systemb.position != 0; 526 info.loads_position |= header.ps.imap_systemb.position != 0;
528 return; 527 return;
529 } 528 }
530 if (info.loads_indexed_attributes) { 529 if (info.loads_indexed_attributes) {
531 for (size_t i = 0; i < info.input_generics.size(); i++) { 530 for (size_t i = 0; i < info.input_generics.size(); i++) {
532 info.input_generics[i].used = 531 info.input_generics[i].used |= header.vtg.IsInputGenericVectorActive(i);
533 info.input_generics[i].used || header.vtg.IsInputGenericVectorActive(i);
534 } 532 }
533 info.loads_position |= header.vtg.imap_systemb.position != 0;
535 } 534 }
536 if (info.stores_indexed_attributes) { 535 if (info.stores_indexed_attributes) {
537 info.loads_position = info.loads_position || header.vtg.imap_systemb.position != 0;
538 for (size_t i = 0; i < info.stores_generics.size(); i++) { 536 for (size_t i = 0; i < info.stores_generics.size(); i++) {
539 info.stores_generics[i] = 537 info.stores_generics[i] |= header.vtg.IsOutputGenericVectorActive(i);
540 info.stores_generics[i] || header.vtg.IsOutputGenericVectorActive(i);
541 } 538 }
542 info.stores_clip_distance = 539 info.stores_clip_distance |= header.vtg.omap_systemc.clip_distances != 0;
543 info.stores_clip_distance || header.vtg.omap_systemc.clip_distances != 0; 540 info.stores_position |= header.vtg.omap_systemb.position != 0;
544 info.stores_position = info.stores_position || header.vtg.omap_systemb.position != 0;
545 } 541 }
546} 542}
547 543