r300/compiler: Clean up rc_pair_alloc_source()
authorTom Stellard <tstellar@gmail.com>
Sun, 5 Sep 2010 02:10:23 +0000 (19:10 -0700)
committerTom Stellard <tstellar@gmail.com>
Sat, 11 Sep 2010 01:18:09 +0000 (18:18 -0700)
src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c

index 5a50584..c31efdb 100644 (file)
@@ -45,23 +45,16 @@ int rc_pair_alloc_source(struct rc_pair_instruction *pair,
        if ((!rgb && !alpha) || file == RC_FILE_NONE)
                return 0;
 
-       if (rgb && pair->RGB.Src[RC_PAIR_PRESUB_SRC].Used) {
-               if (file == RC_FILE_PRESUB) {
-                       if (index != pair->RGB.Src[RC_PAIR_PRESUB_SRC].Index) {
+       /* Make sure only one presubtract operation is used per instruction. */
+       if (file == RC_FILE_PRESUB) {
+               if (rgb && pair->RGB.Src[RC_PAIR_PRESUB_SRC].Used
+                       && index != pair->RGB.Src[RC_PAIR_PRESUB_SRC].Index) {
                                return -1;
-                       }
-               } else {
-                       rgb_used++;
                }
-       }
 
-       if (alpha && pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Used) {
-               if (file == RC_FILE_PRESUB) {
-                       if (index != pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Index) {
+               if (alpha && pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Used
+                       && index != pair->Alpha.Src[RC_PAIR_PRESUB_SRC].Index) {
                                return -1;
-                       }
-               } else {
-                       alpha_used++;
                }
        }
 
@@ -92,17 +85,16 @@ int rc_pair_alloc_source(struct rc_pair_instruction *pair,
                        candidate = i;
                }
        }
-       if (candidate < 0 || (rgb && rgb_used > 2) || (alpha && alpha_used > 2))
+
+       if (file == RC_FILE_PRESUB) {
+               candidate = RC_PAIR_PRESUB_SRC;
+       } else if (candidate < 0 || (rgb && rgb_used > 2)
+                       || (alpha && alpha_used > 2)) {
                return -1;
+       }
 
        /* candidate >= 0 */
 
-       /* Even if we have a presub src, the above loop needs to run,
-        * because we still need to make sure there is a free source.
-        */
-       if (file == RC_FILE_PRESUB)
-               candidate = RC_PAIR_PRESUB_SRC;
-
        if (rgb) {
                pair->RGB.Src[candidate].Used = 1;
                pair->RGB.Src[candidate].File = file;