nir/xfb: add component_offset at nir_xfb_info
authorAlejandro Piñeiro <apinheiro@igalia.com>
Tue, 6 Nov 2018 17:10:01 +0000 (18:10 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 8 Mar 2019 14:00:50 +0000 (15:00 +0100)
Where component_offset here is the offset when accessing components of
a packed variable. Or in other words, location_frac on
nir.h. Different places of mesa use different names for it.

Technically nir_xfb_info consumer can get the same from the
component_mask, it seems somewhat forced to make it to compute it,
instead of providing it.

v2: rename local location_frac for comp_offset, more similar to the
intended use (Timothy Arceri)

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/nir/nir_gather_xfb_info.c
src/compiler/nir/nir_xfb_info.h

index c06a7667ab8346b1691724b2629b1eca2f178606..2c50a256a64ab1c0e018114e56b2f7945536734c 100644 (file)
@@ -86,6 +86,7 @@ add_var_xfb_outputs(nir_xfb_info *xfb,
 
       assert(var->data.location_frac + comp_slots <= 8);
       uint8_t comp_mask = ((1 << comp_slots) - 1) << var->data.location_frac;
+      unsigned comp_offset = var->data.location_frac;
 
       while (comp_mask) {
          nir_xfb_output_info *output = &xfb->outputs[xfb->output_count++];
@@ -94,10 +95,12 @@ add_var_xfb_outputs(nir_xfb_info *xfb,
          output->offset = *offset;
          output->location = *location;
          output->component_mask = comp_mask & 0xf;
+         output->component_offset = comp_offset;
 
          *offset += util_bitcount(output->component_mask) * 4;
          (*location)++;
          comp_mask >>= 4;
+         comp_offset = 0;
       }
    }
 }
index 6b16ce2a60aa2d53798bce6a89f23ed5303bfbf6..c6a171fde349db8a50b2ae97673b773c2d270bcc 100644 (file)
@@ -34,6 +34,7 @@ typedef struct {
    uint16_t offset;
    uint8_t location;
    uint8_t component_mask;
+   uint8_t component_offset;
 } nir_xfb_output_info;
 
 typedef struct nir_xfb_info {