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

Author: Tom Stellard <tstel...@gmail.com>
Date:   Sat Sep  4 19:10:23 2010 -0700

r300/compiler: Clean up rc_pair_alloc_source()

---

 .../dri/r300/compiler/radeon_program_pair.c        |   32 +++++++------------
 1 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c 
b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
index 5a50584..c31efdb 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.c
@@ -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;

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to