nir: Use 'unsigned' instead of enum types in nir_variable::data
authorJesse Natalie <jenatali@microsoft.com>
Wed, 19 Aug 2020 21:34:11 +0000 (14:34 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 20 Aug 2020 22:22:06 +0000 (22:22 +0000)
MSVC treats enums as signed, so storing values that use the topmost
bit of the explicitly sized field loads as a negative value instead.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6393>

src/compiler/nir/nir.h
src/compiler/nir/nir_builder.h

index 5804670fb9902ee31b6bb087043b945dab97a692..57e0d9ae0922a7e56e703f87920e6f5ed60c6f67 100644 (file)
@@ -328,7 +328,7 @@ typedef struct nir_variable {
        *
        * \sa nir_variable_mode
        */
-      nir_variable_mode mode:11;
+      unsigned mode:11;
 
       /**
        * Is the variable read-only?
@@ -467,12 +467,12 @@ typedef struct nir_variable {
       unsigned per_view:1;
 
       /**
-       * \brief Layout qualifier for gl_FragDepth.
+       * \brief Layout qualifier for gl_FragDepth. See nir_depth_layout.
        *
        * This is not equal to \c ir_depth_layout_none if and only if this
        * variable is \c gl_FragDepth and a layout qualifier is specified.
        */
-      nir_depth_layout depth_layout:3;
+      unsigned depth_layout:3;
 
       /**
        * Vertex stream output identifier.
@@ -483,10 +483,12 @@ typedef struct nir_variable {
       unsigned stream:9;
 
       /**
+       * See gl_access_qualifier.
+       *
        * Access flags for memory variables (SSBO/global), image uniforms, and
        * bindless images in uniforms/inputs/outputs.
        */
-      enum gl_access_qualifier access:8;
+      unsigned access:8;
 
       /**
        * Descriptor set binding for sampler or UBO.
index 4a91d26915ba979fd7aa705ac828df4442684fb2..bcaeae382b5d06388cb81f41755a02c3f694047b 100644 (file)
@@ -990,7 +990,7 @@ nir_build_deref_var(nir_builder *build, nir_variable *var)
    nir_deref_instr *deref =
       nir_deref_instr_create(build->shader, nir_deref_type_var);
 
-   deref->mode = var->data.mode;
+   deref->mode = (nir_variable_mode)var->data.mode;
    deref->type = var->type;
    deref->var = var;