X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fdri%2Fi965%2Fbrw_vs.h;h=32959c879e6d13b9adb3427b3f8f059fd71a5f3d;hb=4b2457b548a7e79eb998fe1a33557fc45d7b2e03;hp=722442384dcd80f09da27568b94d2f4c5b5143e0;hpb=d9cb683f81b5daefda2f8599b4ba0365cc6f009a;p=mesa.git diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h index 722442384dc..32959c879e6 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.h +++ b/src/mesa/drivers/dri/i965/brw_vs.h @@ -36,6 +36,7 @@ #include "brw_context.h" #include "brw_eu.h" +#include "brw_program.h" #include "program/program.h" @@ -45,11 +46,39 @@ struct brw_vs_prog_key { * Number of channels of the vertex attribute that need GL_FIXED rescaling */ uint8_t gl_fixed_input_size[VERT_ATTRIB_MAX]; - GLuint nr_userclip:4; + + /** + * True if at least one clip flag is enabled, regardless of whether the + * shader uses clip planes or gl_ClipDistance. + */ + GLuint userclip_active:1; + + /** + * How many user clipping planes are being uploaded to the vertex shader as + * push constants. + */ + GLuint nr_userclip_plane_consts:4; + + /** + * True if the shader uses gl_ClipDistance, regardless of whether any clip + * flags are enabled. + */ + GLuint uses_clip_distance:1; + + /** + * For pre-Gen6 hardware, a bitfield indicating which clipping planes are + * enabled. This is used to compact clip planes. + * + * For Gen6 and later hardware, clip planes are not compacted, so this + * value is zero to avoid provoking unnecessary shader recompiles. + */ + GLuint userclip_planes_enabled_gen_4_5:MAX_CLIP_PLANES; + GLuint copy_edgeflag:1; GLuint point_coord_replace:8; GLuint clamp_vertex_color:1; - GLuint uses_clip_distance:1; + + struct brw_sampler_prog_key_data tex; }; @@ -61,39 +90,16 @@ struct brw_vs_compile { struct brw_vertex_program *vp; - GLuint nr_inputs; - - struct brw_vue_map vue_map; - GLuint first_output; - GLuint last_scratch; - - GLuint first_tmp; - GLuint last_tmp; - - struct brw_reg r0; - struct brw_reg r1; - struct brw_reg regs[PROGRAM_ADDRESS+1][128]; - struct brw_reg tmp; - struct brw_reg stack; - - struct { - GLboolean used_in_src; - struct brw_reg reg; - } output_regs[128]; - - struct brw_reg userplane[6]; - - /** we may need up to 3 constants per instruction (if use_const_buffer) */ - struct { - GLint index; - struct brw_reg reg; - } current_const[3]; - - GLboolean needs_stack; + GLuint last_scratch; /**< measured in 32-byte (register size) units */ }; bool brw_vs_emit(struct gl_shader_program *prog, struct brw_vs_compile *c); -void brw_old_vs_emit(struct brw_vs_compile *c); bool brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog); +void brw_vs_debug_recompile(struct brw_context *brw, + struct gl_shader_program *prog, + const struct brw_vs_prog_key *key); +bool brw_vs_prog_data_compare(const void *a, const void *b, + int aux_size, const void *key); +void brw_vs_prog_data_free(const void *in_prog_data); #endif