Mesa (master): glsl: Add validation that a swizzle only references valid channels.
Eric Anholt
anholt at kemper.freedesktop.org
Mon Sep 27 23:00:22 UTC 2010
Module: Mesa
Branch: master
Commit: 5e8ed7a79b381d559b059987bd99c68d40f641ca
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5e8ed7a79b381d559b059987bd99c68d40f641ca
Author: Eric Anholt <eric at anholt.net>
Date: Mon Sep 27 15:48:15 2010 -0700
glsl: Add validation that a swizzle only references valid channels.
Caught the bug in the previous commit.
---
src/glsl/ir_validate.cpp | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
index e35514a..70fb939 100644
--- a/src/glsl/ir_validate.cpp
+++ b/src/glsl/ir_validate.cpp
@@ -67,6 +67,7 @@ public:
virtual ir_visitor_status visit_enter(ir_function_signature *ir);
virtual ir_visitor_status visit_leave(ir_expression *ir);
+ virtual ir_visitor_status visit_leave(ir_swizzle *ir);
virtual ir_visitor_status visit_enter(ir_assignment *ir);
@@ -365,6 +366,23 @@ ir_validate::visit_leave(ir_expression *ir)
}
ir_visitor_status
+ir_validate::visit_leave(ir_swizzle *ir)
+{
+ int chans[4] = {ir->mask.x, ir->mask.y, ir->mask.z, ir->mask.w};
+
+ for (unsigned int i = 0; i < ir->type->vector_elements; i++) {
+ if (chans[i] >= ir->val->type->vector_elements) {
+ printf("ir_swizzle @ %p specifies a channel not present "
+ "in the value.\n", (void *) ir);
+ ir->print();
+ abort();
+ }
+ }
+
+ return visit_continue;
+}
+
+ir_visitor_status
ir_validate::visit(ir_variable *ir)
{
/* An ir_variable is the one thing that can (and will) appear multiple times
More information about the mesa-commit
mailing list