summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/ir_opt
diff options
context:
space:
mode:
authorGravatar FernandoS272021-04-04 09:38:15 +0200
committerGravatar ameerj2021-07-22 21:51:26 -0400
commit73cb17f41bf019df504d2d2af4ebdf45aa3201c6 (patch)
tree97ca7cbbefaae73eb77d6e91bbcac4dbe4238c3a /src/shader_recompiler/ir_opt
parentshader: Implement indexed attributes (diff)
downloadyuzu-73cb17f41bf019df504d2d2af4ebdf45aa3201c6.tar.gz
yuzu-73cb17f41bf019df504d2d2af4ebdf45aa3201c6.tar.xz
yuzu-73cb17f41bf019df504d2d2af4ebdf45aa3201c6.zip
shader: Implement indexed Position and ClipDistances
Diffstat (limited to 'src/shader_recompiler/ir_opt')
-rw-r--r--src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp26
1 files changed, 18 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 dbe9f1f40..a14465598 100644
--- a/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
+++ b/src/shader_recompiler/ir_opt/collect_shader_info_pass.cpp
@@ -517,22 +517,32 @@ void GatherInfoFromHeader(Environment& env, Info& info) {
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) {
521 return;
522 }
520 for (size_t i = 0; i < info.input_generics.size(); i++) { 523 for (size_t i = 0; i < info.input_generics.size(); i++) {
521 info.input_generics[i].used = 524 info.input_generics[i].used =
522 info.input_generics[i].used || header.ps.IsGenericVectorActive(i); 525 info.input_generics[i].used || header.ps.IsGenericVectorActive(i);
523 } 526 }
527 info.loads_position = info.loads_position || header.ps.imap_systemb.position != 0;
524 return; 528 return;
525 } 529 }
526 for (size_t i = 0; i < info.input_generics.size(); i++) { 530 if (info.loads_indexed_attributes) {
527 info.input_generics[i].used = 531 for (size_t i = 0; i < info.input_generics.size(); i++) {
528 info.input_generics[i].used || header.vtg.IsInputGenericVectorActive(i); 532 info.input_generics[i].used =
533 info.input_generics[i].used || header.vtg.IsInputGenericVectorActive(i);
534 }
529 } 535 }
530 for (size_t i = 0; i < info.stores_generics.size(); i++) { 536 if (info.stores_indexed_attributes) {
531 info.stores_generics[i] = 537 info.loads_position = info.loads_position || header.vtg.imap_systemb.position != 0;
532 info.stores_generics[i] || header.vtg.IsOutputGenericVectorActive(i); 538 for (size_t i = 0; i < info.stores_generics.size(); i++) {
539 info.stores_generics[i] =
540 info.stores_generics[i] || header.vtg.IsOutputGenericVectorActive(i);
541 }
542 info.stores_clip_distance =
543 info.stores_clip_distance || header.vtg.omap_systemc.clip_distances != 0;
544 info.stores_position = info.stores_position || header.vtg.omap_systemb.position != 0;
533 } 545 }
534 info.stores_clip_distance =
535 info.stores_clip_distance || header.vtg.omap_systemc.clip_distances != 0;
536} 546}
537 547
538} // Anonymous namespace 548} // Anonymous namespace