Mesa (master): freedreno/ir3: we can't store immediate values

Rob Clark robclark at kemper.freedesktop.org
Tue Apr 5 00:23:19 UTC 2016


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

Author: Rob Clark <robclark at freedesktop.org>
Date:   Mon Apr  4 17:33:19 2016 -0400

freedreno/ir3: we can't store immediate values

Fixes some transform-feedback piglits, like:

bin/ext_transform_feedback-nonflat-integral

Signed-off-by: Rob Clark <robclark at freedesktop.org>

---

 src/gallium/drivers/freedreno/ir3/ir3_cp.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cp.c b/src/gallium/drivers/freedreno/ir3/ir3_cp.c
index 4887007..00fa353 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_cp.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_cp.c
@@ -111,6 +111,19 @@ static bool valid_flags(struct ir3_instruction *instr, unsigned n,
 		valid_flags = IR3_REG_IMMED;
 		if (flags & ~valid_flags)
 			return false;
+
+		if (flags & IR3_REG_IMMED) {
+			/* doesn't seem like we can have immediate src for store
+			 * instructions:
+			 *
+			 * TODO this restriction could also apply to load instructions,
+			 * but for load instructions this arg is the address (and not
+			 * really sure any good way to test a hard-coded immed addr src)
+			 */
+			if (is_store(instr) && (n == 1))
+				return false;
+		}
+
 		break;
 	case 2:
 		valid_flags = ir3_cat2_absneg(instr->opc) |




More information about the mesa-commit mailing list