summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_sf_emit.c
diff options
context:
space:
mode:
authorPaul Berry <stereotype441@gmail.com>2013-08-23 13:19:19 -0700
committerPaul Berry <stereotype441@gmail.com>2013-08-26 10:15:51 -0700
commitcfe39ea14edc8db13c549b853b214e676f8276f1 (patch)
treedb0e10cf39012dc46f5545e8654f935140c9472c /src/mesa/drivers/dri/i965/brw_sf_emit.c
parent612226c43b072eb45dc3ed21484054824e1c863c (diff)
downloadexternal_mesa3d-cfe39ea14edc8db13c549b853b214e676f8276f1.zip
external_mesa3d-cfe39ea14edc8db13c549b853b214e676f8276f1.tar.gz
external_mesa3d-cfe39ea14edc8db13c549b853b214e676f8276f1.tar.bz2
i965: Allow C++ type safety in the use of enum brw_urb_write_flags.
(From a suggestion by Francisco Jerez) If an enum represents a bitfield of flags, e.g.: enum E { A = 1, B = 2, C = 4, D = 8, }; then C++ normally prohibits statements like this: enum E x = A | B; because A and B are implicitly converted to ints before OR-ing them, and an int can't be stored in an enum without a type cast. C, on the other hand, allows an int to be implicitly converted to an enum without casting. In the past we've dealt with this situation by storing flag bitfields as ints. This avoids ugly casting at the expense of some type safety that C++ would normally have offered (e.g. we get no warning if we accidentally use the wrong enum type). However, we can get the best of both worlds if we override the | operator. The ugly casting is confined to the operator overload, and we still get the benefit of C++ making sure we don't use the wrong enum type. v2: Remove unnecessary comment and unnecessary use of "enum" keyword. Use static_cast. Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_sf_emit.c')
-rw-r--r--src/mesa/drivers/dri/i965/brw_sf_emit.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_sf_emit.c b/src/mesa/drivers/dri/i965/brw_sf_emit.c
index d329bef..b206797 100644
--- a/src/mesa/drivers/dri/i965/brw_sf_emit.c
+++ b/src/mesa/drivers/dri/i965/brw_sf_emit.c
@@ -491,7 +491,8 @@ void brw_emit_tri_setup(struct brw_sf_compile *c, bool allocate)
brw_null_reg(),
0,
brw_vec8_grf(0, 0), /* r0, will be copied to m0 */
- last ? BRW_URB_WRITE_EOT_COMPLETE : 0,
+ last ? BRW_URB_WRITE_EOT_COMPLETE
+ : BRW_URB_WRITE_NO_FLAGS,
4, /* msg len */
0, /* response len */
i*4, /* offset */
@@ -562,7 +563,8 @@ void brw_emit_line_setup(struct brw_sf_compile *c, bool allocate)
brw_null_reg(),
0,
brw_vec8_grf(0, 0),
- last ? BRW_URB_WRITE_EOT_COMPLETE : 0,
+ last ? BRW_URB_WRITE_EOT_COMPLETE
+ : BRW_URB_WRITE_NO_FLAGS,
4, /* msg len */
0, /* response len */
i*4, /* urb destination offset */
@@ -649,7 +651,8 @@ void brw_emit_point_sprite_setup(struct brw_sf_compile *c, bool allocate)
brw_null_reg(),
0,
brw_vec8_grf(0, 0),
- last ? BRW_URB_WRITE_EOT_COMPLETE : 0,
+ last ? BRW_URB_WRITE_EOT_COMPLETE
+ : BRW_URB_WRITE_NO_FLAGS,
4, /* msg len */
0, /* response len */
i*4, /* urb destination offset */
@@ -706,7 +709,8 @@ void brw_emit_point_setup(struct brw_sf_compile *c, bool allocate)
brw_null_reg(),
0,
brw_vec8_grf(0, 0),
- last ? BRW_URB_WRITE_EOT_COMPLETE : 0,
+ last ? BRW_URB_WRITE_EOT_COMPLETE
+ : BRW_URB_WRITE_NO_FLAGS,
4, /* msg len */
0, /* response len */
i*4, /* urb destination offset */