nir: fix memleak in error path
[mesa.git] / src / compiler / nir / nir_xfb_info.h
index 6b16ce2a60aa2d53798bce6a89f23ed5303bfbf6..8bdfa8080621513725228c35a2bc1624375322b5 100644 (file)
 #define NIR_MAX_XFB_BUFFERS 4
 #define NIR_MAX_XFB_STREAMS 4
 
+typedef struct {
+   uint16_t stride;
+   uint16_t varying_count;
+} nir_xfb_buffer_info;
+
 typedef struct {
    uint8_t buffer;
    uint16_t offset;
    uint8_t location;
    uint8_t component_mask;
+   uint8_t component_offset;
 } nir_xfb_output_info;
 
+typedef struct {
+   const struct glsl_type *type;
+   uint8_t buffer;
+   uint16_t offset;
+} nir_xfb_varying_info;
+
 typedef struct nir_xfb_info {
    uint8_t buffers_written;
    uint8_t streams_written;
 
-   uint16_t strides[NIR_MAX_XFB_BUFFERS];
+   nir_xfb_buffer_info buffers[NIR_MAX_XFB_BUFFERS];
    uint8_t buffer_to_stream[NIR_MAX_XFB_STREAMS];
 
    uint16_t output_count;
    nir_xfb_output_info outputs[0];
 } nir_xfb_info;
 
+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)
 {
@@ -56,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 */