summaryrefslogtreecommitdiffstats
path: root/src/compiler/nir/nir_xfb_info.h
diff options
context:
space:
mode:
authorAlejandro Piñeiro <[email protected]>2019-03-14 11:02:52 +0100
committerAlejandro Piñeiro <[email protected]>2019-03-15 11:59:32 +0100
commit34b3b92bbee1f68a9c121cd26e30e113c8cd39a8 (patch)
tree423f1bc9eb25455542fc1ef9d1cfdc86b70c68ec /src/compiler/nir/nir_xfb_info.h
parentd5befdbe4ad4523e58074063a3b619f389fb9f1f (diff)
nir/xfb: move varyings info out of nir_xfb_info
When varyings was added we moved to use to dynamycally allocated pointers, instead of allocating just one block for everything. That breaks some assumptions of some vulkan drivers (like anv), that make serialization and copying easier. And at the same time, varyings are not needed for vulkan. So this commit moves them out. Although it seems a little an overkill, fixing the anv side would require a similar, or more, changes, so in the end it is about to decide where do we want to put our effort. v2: (from Jason review) * Don't use a temp variable on the _create methods, just return result of rzalloc_size * Wrap some lines too long. Fixes: cf0b2ad486c9 ("nir/xfb: adding varyings on nir_xfb_info and gather_info") Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/compiler/nir/nir_xfb_info.h')
-rw-r--r--src/compiler/nir/nir_xfb_info.h17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/compiler/nir/nir_xfb_info.h b/src/compiler/nir/nir_xfb_info.h
index f0b222b325d..8bdfa808062 100644
--- a/src/compiler/nir/nir_xfb_info.h
+++ b/src/compiler/nir/nir_xfb_info.h
@@ -55,16 +55,15 @@ typedef struct nir_xfb_info {
nir_xfb_buffer_info buffers[NIR_MAX_XFB_BUFFERS];
uint8_t buffer_to_stream[NIR_MAX_XFB_STREAMS];
- uint16_t varying_count;
- nir_xfb_varying_info *varyings;
-
uint16_t output_count;
- nir_xfb_output_info *outputs;
+ nir_xfb_output_info outputs[0];
} nir_xfb_info;
-/* This method doesn't take into account varyings, as it is used to compute
- * how much size is needed to copy only the outputs.
- */
+typedef struct nir_xfb_varyings_info {
+ uint16_t varying_count;
+ nir_xfb_varying_info varyings[0];
+} nir_xfb_varyings_info;
+
static inline size_t
nir_xfb_info_size(uint16_t output_count)
{
@@ -74,4 +73,8 @@ nir_xfb_info_size(uint16_t output_count)
nir_xfb_info *
nir_gather_xfb_info(const nir_shader *shader, void *mem_ctx);
+nir_xfb_info *
+nir_gather_xfb_info_with_varyings(const nir_shader *shader,
+ void *mem_ctx,
+ nir_xfb_varyings_info **varyings_info);
#endif /* NIR_XFB_INFO_H */