Mesa (master): r300/compiler: Fix bug in rc_get_variables()

Tom Stellard tstellar at kemper.freedesktop.org
Wed May 11 23:54:03 UTC 2011


Module: Mesa
Branch: master
Commit: 95c93651b4023cb070878aee7723d886de8ea19a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=95c93651b4023cb070878aee7723d886de8ea19a

Author: Tom Stellard <tstellar at gmail.com>
Date:   Wed May 11 16:12:52 2011 -0700

r300/compiler: Fix bug in rc_get_variables()

Variables that share readers were not always being linked together.

https://bugs.freedesktop.org/show_bug.cgi?id=36939

---

 .../drivers/dri/r300/compiler/radeon_variable.c    |   18 +++++++++++-------
 1 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_variable.c b/src/mesa/drivers/dri/r300/compiler/radeon_variable.c
index 16fa5d2..5b2295d 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_variable.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_variable.c
@@ -388,17 +388,21 @@ struct rc_list * rc_get_variables(struct radeon_compiler * c)
 	 */
 	while (aborted_list) {
 		struct rc_list * search_ptr_next;
+		struct rc_variable * var;
 		var_ptr = aborted_list;
+		for (var = var_ptr->Item; var; var = var->Friend) {
 
-		search_ptr = var_ptr->Next;
-		while(search_ptr) {
-			search_ptr_next = search_ptr->Next;
-			if (readers_intersect(var_ptr->Item, search_ptr->Item)){
-				rc_list_remove(&aborted_list, search_ptr);
-				rc_variable_add_friend(var_ptr->Item,
+			search_ptr = var_ptr->Next;
+			while(search_ptr) {
+				search_ptr_next = search_ptr->Next;
+				if (readers_intersect(var, search_ptr->Item)){
+					rc_list_remove(&aborted_list,
+							search_ptr);
+					rc_variable_add_friend(var,
 							search_ptr->Item);
+				}
+				search_ptr = search_ptr_next;
 			}
-			search_ptr = search_ptr_next;
 		}
 		rc_list_remove(&aborted_list, var_ptr);
 		rc_list_add(&variable_list, rc_list(




More information about the mesa-commit mailing list