X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fcompiler%2Fglsl%2Flink_varyings.h;h=b802250819e718bbd2a4da6dcf9e72b68b7406dc;hb=c81fbb42d94293e78e9c767bb00ad22855f9e0b0;hp=7165ecb918468e349629fdd18014050f784350b7;hpb=0c66460fc65e1c45ec2268c978ea11b259441212;p=mesa.git diff --git a/src/compiler/glsl/link_varyings.h b/src/compiler/glsl/link_varyings.h index 7165ecb9184..b802250819e 100644 --- a/src/compiler/glsl/link_varyings.h +++ b/src/compiler/glsl/link_varyings.h @@ -21,7 +21,6 @@ * DEALINGS IN THE SOFTWARE. */ -#pragma once #ifndef GLSL_LINK_VARYINGS_H #define GLSL_LINK_VARYINGS_H @@ -34,7 +33,8 @@ #include "main/glheader.h" - +#include "program/prog_parameter.h" +#include "util/bitset.h" struct gl_shader_program; struct gl_shader; @@ -98,7 +98,10 @@ public: 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); @@ -107,6 +110,14 @@ public: 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; @@ -142,7 +153,7 @@ public: 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 { @@ -151,26 +162,9 @@ public: 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); } /** @@ -201,6 +195,7 @@ private: enum { none, clip_distance, + cull_distance, tess_level_outer, tess_level_inner, } lowered_builtin_array_variable; @@ -278,48 +273,20 @@ private: 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 */