nir: pack nir_variable::data::stream
authorMarek Olšák <marek.olsak@amd.com>
Fri, 25 Oct 2019 18:55:06 +0000 (14:55 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 4 Nov 2019 23:17:34 +0000 (18:17 -0500)
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
src/compiler/glsl/glsl_to_nir.cpp
src/compiler/nir/nir.h
src/gallium/drivers/radeonsi/si_shader_nir.c

index c9bba912622f7b109c616b04b8b3ca9299fc2035..9b9da7f81879adc1a8607f82145e17a91017de65 100644 (file)
@@ -445,6 +445,8 @@ nir_visitor::visit(ir_variable *ir)
    var->data.invariant = ir->data.invariant;
    var->data.location = ir->data.location;
    var->data.stream = ir->data.stream;
+   if (ir->data.stream & (1u << 31))
+      var->data.stream |= NIR_STREAM_PACKED;
    var->data.compact = false;
 
    switch(ir->data.mode) {
index 00e5028d27b97ea0e1c7330f472efd05ae0e8585..e1f0fdd707ce952ba3b27404d346d0a9188db844 100644 (file)
@@ -60,6 +60,7 @@ extern "C" {
 #define NIR_TRUE (~0u)
 #define NIR_MAX_VEC_COMPONENTS 4
 #define NIR_MAX_MATRIX_COLUMNS 4
+#define NIR_STREAM_PACKED (1 << 8)
 typedef uint8_t nir_component_mask_t;
 
 /** Defines a cast function
@@ -450,10 +451,10 @@ typedef struct nir_variable {
       /**
        * Vertex stream output identifier.
        *
-       * For packed outputs, bit 31 is set and bits [2*i+1,2*i] indicate the
-       * stream of the i-th component.
+       * For packed outputs, NIR_STREAM_PACKED is set and bits [2*i+1,2*i]
+       * indicate the stream of the i-th component.
        */
-      unsigned stream;
+      unsigned stream:9;
 
       /**
        * output index for dual source blending.
index 4df625ed274068e943367053cc95583fc3b25679..463ec0b5421a3d752bf407522b04337ee18daf7f 100644 (file)
@@ -466,8 +466,8 @@ static void scan_output_slot(const nir_variable *var,
        ubyte usagemask = ((1 << num_components) - 1) << component;
 
        unsigned gs_out_streams;
-       if (var->data.stream & (1u << 31)) {
-               gs_out_streams = var->data.stream & ~(1u << 31);
+       if (var->data.stream & NIR_STREAM_PACKED) {
+               gs_out_streams = var->data.stream & ~NIR_STREAM_PACKED;
        } else {
                assert(var->data.stream < 4);
                gs_out_streams = 0;