* DEALINGS IN THE SOFTWARE.
*/
-#pragma once
#ifndef GLSL_LINK_VARYINGS_H
#define GLSL_LINK_VARYINGS_H
#include "main/glheader.h"
-
+#include "program/prog_parameter.h"
+#include "util/bitset.h"
struct gl_shader_program;
struct gl_shader;
unsigned get_num_outputs() const;
bool store(struct gl_context *ctx, struct gl_shader_program *prog,
struct gl_transform_feedback_info *info, unsigned buffer,
- const unsigned max_outputs, bool has_xfb_qualifiers) const;
+ unsigned buffer_index, const unsigned max_outputs,
+ BITSET_WORD *used_components[MAX_FEEDBACK_BUFFERS],
+ bool *explicit_stride, bool has_xfb_qualifiers,
+ const void *mem_ctx) const;
const tfeedback_candidate *find_candidate(gl_shader_program *prog,
hash_table *tfeedback_candidates);
return this->next_buffer_separator;
}
+ bool is_varying_written() const
+ {
+ if (this->next_buffer_separator || this->skip_components)
+ return false;
+
+ return this->matched_candidate->toplevel_var->data.assigned;
+ }
+
bool is_varying() const
{
return !this->next_buffer_separator && !this->skip_components;
return this->size;
else
return this->vector_elements * this->matrix_columns * this->size *
- (this->is_double() ? 2 : 1);
+ (this->is_64bit() ? 2 : 1);
}
unsigned get_location() const {
private:
- bool is_double() const
+ bool is_64bit() const
{
- switch (this->type) {
- case GL_DOUBLE:
- case GL_DOUBLE_VEC2:
- case GL_DOUBLE_VEC3:
- case GL_DOUBLE_VEC4:
- case GL_DOUBLE_MAT2:
- case GL_DOUBLE_MAT2x3:
- case GL_DOUBLE_MAT2x4:
- case GL_DOUBLE_MAT3:
- case GL_DOUBLE_MAT3x2:
- case GL_DOUBLE_MAT3x4:
- case GL_DOUBLE_MAT4:
- case GL_DOUBLE_MAT4x2:
- case GL_DOUBLE_MAT4x3:
- return true;
- default:
- return false;
- }
+ return _mesa_gl_datatype_is_64bit(this->type);
}
/**
enum {
none,
clip_distance,
+ cull_distance,
tess_level_outer,
tess_level_inner,
} lowered_builtin_array_variable;
unsigned stream_id;
};
-
-void
-cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
- gl_shader *producer, gl_shader *consumer);
-
bool
-parse_tfeedback_decls(struct gl_context *ctx, struct gl_shader_program *prog,
- const void *mem_ctx, unsigned num_names,
- char **varying_names, tfeedback_decl *decls);
-
-bool
-process_xfb_layout_qualifiers(void *mem_ctx, const gl_shader *sh,
- unsigned *num_tfeedback_decls,
- char ***varying_names);
+link_varyings(struct gl_shader_program *prog, unsigned first, unsigned last,
+ struct gl_context *ctx, void *mem_ctx);
void
-remove_unused_shader_inputs_and_outputs(bool is_separate_shader_object,
- gl_shader *sh,
- enum ir_variable_mode mode);
-
-bool
-store_tfeedback_info(struct gl_context *ctx, struct gl_shader_program *prog,
- unsigned num_tfeedback_decls,
- tfeedback_decl *tfeedback_decls,
- bool has_xfb_qualifiers);
-
-bool
-assign_varying_locations(struct gl_context *ctx,
- void *mem_ctx,
- struct gl_shader_program *prog,
- gl_shader *producer, gl_shader *consumer,
- unsigned num_tfeedback_decls,
- tfeedback_decl *tfeedback_decls);
-
-bool
-check_against_output_limit(struct gl_context *ctx,
- struct gl_shader_program *prog,
- gl_shader *producer);
+validate_first_and_last_interface_explicit_locations(struct gl_context *ctx,
+ struct gl_shader_program *prog,
+ gl_shader_stage first,
+ gl_shader_stage last);
-bool
-check_against_input_limit(struct gl_context *ctx,
- struct gl_shader_program *prog,
- gl_shader *consumer);
+void
+cross_validate_outputs_to_inputs(struct gl_context *ctx,
+ struct gl_shader_program *prog,
+ gl_linked_shader *producer,
+ gl_linked_shader *consumer);
#endif /* GLSL_LINK_VARYINGS_H */