diff options
Diffstat (limited to 'src/mesa')
97 files changed, 7773 insertions, 7109 deletions
diff --git a/src/mesa/drivers/dri/Makefile.defines b/src/mesa/drivers/dri/Makefile.defines new file mode 100644 index 00000000000..19b6de8b85a --- /dev/null +++ b/src/mesa/drivers/dri/Makefile.defines @@ -0,0 +1,34 @@ +# -*-makefile-*- + +COMMON_GALLIUM_SOURCES = \ + ../common/utils.c \ + ../common/vblank.c \ + ../common/dri_util.c \ + ../common/xmlconfig.c + +COMMON_SOURCES = $(COMMON_GALLIUM_SOURCES) \ + ../../common/driverfuncs.c \ + ../common/texmem.c \ + ../common/drirenderbuffer.c + +INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES) + +OBJECTS = $(C_SOURCES:.c=.o) \ + $(CXX_SOURCES:.cpp=.o) \ + $(ASM_SOURCES:.S=.o) + + +### Include directories +SHARED_INCLUDES = \ + -I. \ + -I$(TOP)/src/mesa/drivers/dri/common \ + -Iserver \ + -I$(TOP)/include \ + -I$(TOP)/src/mapi \ + -I$(TOP)/src/mesa \ + -I$(TOP)/src/egl/main \ + -I$(TOP)/src/egl/drivers/dri \ + $(LIBDRM_CFLAGS) + +INCLUDES += $(API_DEFINES) +CXXFLAGS += $(API_DEFINES) diff --git a/src/mesa/drivers/dri/Makefile.template b/src/mesa/drivers/dri/Makefile.targets index d1a119379ed..436b2a3c477 100644 --- a/src/mesa/drivers/dri/Makefile.template +++ b/src/mesa/drivers/dri/Makefile.targets @@ -1,38 +1,5 @@ # -*-makefile-*- -COMMON_GALLIUM_SOURCES = \ - ../common/utils.c \ - ../common/vblank.c \ - ../common/dri_util.c \ - ../common/xmlconfig.c - -COMMON_SOURCES = $(COMMON_GALLIUM_SOURCES) \ - ../../common/driverfuncs.c \ - ../common/texmem.c \ - ../common/drirenderbuffer.c - -INCLUDES = $(SHARED_INCLUDES) $(EXPAT_INCLUDES) - -OBJECTS = $(C_SOURCES:.c=.o) \ - $(CXX_SOURCES:.cpp=.o) \ - $(ASM_SOURCES:.S=.o) - - -### Include directories -SHARED_INCLUDES = \ - -I. \ - -I$(TOP)/src/mesa/drivers/dri/common \ - -Iserver \ - -I$(TOP)/include \ - -I$(TOP)/src/mapi \ - -I$(TOP)/src/mesa \ - -I$(TOP)/src/egl/main \ - -I$(TOP)/src/egl/drivers/dri \ - $(LIBDRM_CFLAGS) - -CFLAGS += $(API_DEFINES) -CXXFLAGS += $(API_DEFINES) - ##### RULES ##### .c.o: @@ -45,7 +12,7 @@ CXXFLAGS += $(API_DEFINES) $(CC) -c $(INCLUDES) $(DRI_CFLAGS) $(DRIVER_DEFINES) $< -o $@ -##### TARGETS ##### +#### TARGETS ##### default: subdirs lib @@ -55,7 +22,7 @@ lib: symlinks subdirs depend @$(MAKE) $(LIBNAME) $(TOP)/$(LIB_DIR)/$(LIBNAME) $(LIBNAME): $(OBJECTS) $(EXTRA_MODULES) $(MESA_MODULES) Makefile \ - $(TOP)/src/mesa/drivers/dri/Makefile.template $(TOP)/src/mesa/drivers/dri/common/dri_test.o + $(TOP)/src/mesa/drivers/dri/Makefile.targets $(TOP)/src/mesa/drivers/dri/common/dri_test.o $(MKLIB) -o [email protected] -noprefix -linker '$(CXX)' -ldflags '$(LDFLAGS)' \ $(OBJECTS) $(EXTRA_MODULES) $(DRI_LIB_DEPS) $(CXX) $(CFLAGS) -o [email protected] $(TOP)/src/mesa/drivers/dri/common/dri_test.o [email protected] $(DRI_LIB_DEPS) diff --git a/src/mesa/drivers/dri/i810/Makefile b/src/mesa/drivers/dri/i810/Makefile index 54a837d5ea9..edc6dd21732 100644 --- a/src/mesa/drivers/dri/i810/Makefile +++ b/src/mesa/drivers/dri/i810/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = i810_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ i810context.c \ i810ioctl.c \ @@ -24,5 +26,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/i915/Makefile b/src/mesa/drivers/dri/i915/Makefile index 65fd658c047..79e03f2f1d1 100644 --- a/src/mesa/drivers/dri/i915/Makefile +++ b/src/mesa/drivers/dri/i915/Makefile @@ -4,6 +4,8 @@ include $(TOP)/configs/current LIBNAME = i915_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ i830_context.c \ i830_state.c \ @@ -63,7 +65,7 @@ DRIVER_DEFINES = -I../intel -DI915 \ INCLUDES += $(INTEL_CFLAGS) DRI_LIB_DEPS += $(INTEL_LIBS) -include ../Makefile.template +include ../Makefile.targets intel_decode.o: ../intel/intel_decode.c diff --git a/src/mesa/drivers/dri/i915/i915_vtbl.c b/src/mesa/drivers/dri/i915/i915_vtbl.c index 89650b618e4..820feba04ba 100644 --- a/src/mesa/drivers/dri/i915/i915_vtbl.c +++ b/src/mesa/drivers/dri/i915/i915_vtbl.c @@ -687,6 +687,14 @@ i915_assert_not_dirty( struct intel_context *intel ) (void) dirty; } +/** Return false; i915 does not support HiZ. */ +static bool +i915_is_hiz_depth_format(struct intel_context *intel, + gl_format format) +{ + return false; +} + void i915InitVtbl(struct i915_context *i915) { @@ -702,4 +710,5 @@ i915InitVtbl(struct i915_context *i915) i915->intel.vtbl.assert_not_dirty = i915_assert_not_dirty; i915->intel.vtbl.finish_batch = intel_finish_vb; i915->intel.vtbl.render_target_supported = i915_render_target_supported; + i915->intel.vtbl.is_hiz_depth_format = i915_is_hiz_depth_format; } diff --git a/src/mesa/drivers/dri/i965/Makefile b/src/mesa/drivers/dri/i965/Makefile index b96f42bfe88..44f28cd9d15 100644 --- a/src/mesa/drivers/dri/i965/Makefile +++ b/src/mesa/drivers/dri/i965/Makefile @@ -4,6 +4,8 @@ include $(TOP)/configs/current LIBNAME = i965_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ intel_batchbuffer.c \ intel_blit.c \ @@ -116,10 +118,13 @@ C_SOURCES = \ CXX_SOURCES = \ brw_cubemap_normalize.cpp \ brw_fs.cpp \ + brw_fs_emit.cpp \ + brw_fs_visitor.cpp \ brw_fs_channel_expressions.cpp \ brw_fs_reg_allocate.cpp \ brw_fs_schedule_instructions.cpp \ - brw_fs_vector_splitting.cpp + brw_fs_vector_splitting.cpp \ + brw_shader.cpp ASM_SOURCES = @@ -128,7 +133,7 @@ DRIVER_DEFINES = -I../intel INCLUDES += $(INTEL_CFLAGS) DRI_LIB_DEPS += $(INTEL_LIBS) -include ../Makefile.template +include ../Makefile.targets intel_decode.o: ../intel/intel_decode.c intel_tex_layout.o: ../intel/intel_tex_layout.c diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c index df753abed02..0256ab9061f 100644 --- a/src/mesa/drivers/dri/i965/brw_context.c +++ b/src/mesa/drivers/dri/i965/brw_context.c @@ -94,9 +94,9 @@ GLboolean brwCreateContext( int api, ctx->Const.MaxVertexTextureImageUnits + ctx->Const.MaxTextureImageUnits; - /* Mesa limits textures to 4kx4k; it would be nice to fix that someday - */ - ctx->Const.MaxTextureLevels = 13; + ctx->Const.MaxTextureLevels = 14; /* 8192 */ + if (ctx->Const.MaxTextureLevels > MAX_TEXTURE_LEVELS) + ctx->Const.MaxTextureLevels = MAX_TEXTURE_LEVELS; ctx->Const.Max3DTextureLevels = 9; ctx->Const.MaxCubeTextureLevels = 12; ctx->Const.MaxTextureRectSize = (1<<12); diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 1d2ef066db2..621b6f8990b 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -231,8 +231,8 @@ struct brw_wm_prog_data { GLuint first_curbe_grf; GLuint first_curbe_grf_16; - GLuint total_grf; - GLuint total_grf_16; + GLuint reg_blocks; + GLuint reg_blocks_16; GLuint total_scratch; GLuint nr_params; /**< number of float params/constants */ @@ -863,6 +863,17 @@ float convert_param(enum param_conversion conversion, float param) } } +/** + * Pre-gen6, the register file of the EUs was shared between threads, + * and each thread used some subset allocated on a 16-register block + * granularity. The unit states wanted these block counts. + */ +static inline int +brw_register_blocks(int reg_count) +{ + return ALIGN(reg_count, 16) / 16 - 1; +} + GLboolean brw_do_cubemap_normalize(struct exec_list *instructions); #endif diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h index 5eb7892bb08..6d41b1e69d3 100644 --- a/src/mesa/drivers/dri/i965/brw_defines.h +++ b/src/mesa/drivers/dri/i965/brw_defines.h @@ -28,7 +28,10 @@ * Authors: * Keith Whitwell <[email protected]> */ - + +#define INTEL_MASK(high, low) (((1<<((high)-(low)+1))-1)<<(low)) +#define SET_FIELD(value, field) (((value) << field ## _SHIFT) & field ## _MASK) +#define GET_FIELD(word, field) (((word) & field ## _MASK) >> field ## _SHIFT) #ifndef BRW_DEFINES_H #define BRW_DEFINES_H @@ -243,8 +246,17 @@ #define BRW_STENCILOP_DECR 6 #define BRW_STENCILOP_INVERT 7 +/* Surface state DW0 */ +#define BRW_SURFACE_RC_READ_WRITE (1 << 8) +#define BRW_SURFACE_MIPLAYOUT_SHIFT 10 #define BRW_SURFACE_MIPMAPLAYOUT_BELOW 0 #define BRW_SURFACE_MIPMAPLAYOUT_RIGHT 1 +#define BRW_SURFACE_CUBEFACE_ENABLES 0x3f +#define BRW_SURFACE_BLEND_ENABLED (1 << 13) +#define BRW_SURFACE_WRITEDISABLE_B_SHIFT 14 +#define BRW_SURFACE_WRITEDISABLE_G_SHIFT 15 +#define BRW_SURFACE_WRITEDISABLE_R_SHIFT 16 +#define BRW_SURFACE_WRITEDISABLE_A_SHIFT 17 #define BRW_SURFACEFORMAT_R32G32B32A32_FLOAT 0x000 #define BRW_SURFACEFORMAT_R32G32B32A32_SINT 0x001 @@ -403,10 +415,14 @@ #define BRW_SURFACEFORMAT_R16G16B16_SNORM 0x19D #define BRW_SURFACEFORMAT_R16G16B16_SSCALED 0x19E #define BRW_SURFACEFORMAT_R16G16B16_USCALED 0x19F +#define BRW_SURFACE_FORMAT_SHIFT 18 +#define BRW_SURFACE_FORMAT_MASK INTEL_MASK(26, 18) #define BRW_SURFACERETURNFORMAT_FLOAT32 0 #define BRW_SURFACERETURNFORMAT_S1 1 +#define BRW_SURFACE_TYPE_SHIFT 29 +#define BRW_SURFACE_TYPE_MASK INTEL_MASK(31, 29) #define BRW_SURFACE_1D 0 #define BRW_SURFACE_2D 1 #define BRW_SURFACE_3D 2 @@ -414,6 +430,32 @@ #define BRW_SURFACE_BUFFER 4 #define BRW_SURFACE_NULL 7 +/* Surface state DW2 */ +#define BRW_SURFACE_HEIGHT_SHIFT 19 +#define BRW_SURFACE_HEIGHT_MASK INTEL_MASK(31, 19) +#define BRW_SURFACE_WIDTH_SHIFT 6 +#define BRW_SURFACE_WIDTH_MASK INTEL_MASK(18, 6) +#define BRW_SURFACE_LOD_SHIFT 2 +#define BRW_SURFACE_LOD_MASK INTEL_MASK(5, 2) + +/* Surface state DW3 */ +#define BRW_SURFACE_DEPTH_SHIFT 21 +#define BRW_SURFACE_DEPTH_MASK INTEL_MASK(31, 21) +#define BRW_SURFACE_PITCH_SHIFT 3 +#define BRW_SURFACE_PITCH_MASK INTEL_MASK(19, 3) +#define BRW_SURFACE_TILED (1 << 1) +#define BRW_SURFACE_TILED_Y (1 << 0) + +/* Surface state DW4 */ +#define BRW_SURFACE_MIN_LOD_SHIFT 28 +#define BRW_SURFACE_MIN_LOD_MASK INTEL_MASK(31, 28) + +/* Surface state DW5 */ +#define BRW_SURFACE_X_OFFSET_SHIFT 25 +#define BRW_SURFACE_X_OFFSET_MASK INTEL_MASK(31, 25) +#define BRW_SURFACE_Y_OFFSET_SHIFT 20 +#define BRW_SURFACE_Y_OFFSET_MASK INTEL_MASK(23, 20) + #define BRW_TEXCOORDMODE_WRAP 0 #define BRW_TEXCOORDMODE_MIRROR 1 #define BRW_TEXCOORDMODE_CLAMP 2 diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c b/src/mesa/drivers/dri/i965/brw_eu_emit.c index 2d41302d15a..e7370f36064 100644 --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c @@ -93,8 +93,6 @@ static void brw_set_dest(struct brw_compile *p, struct brw_instruction *insn, struct brw_reg dest) { - struct intel_context *intel = &p->brw->intel; - if (dest.file != BRW_ARCHITECTURE_REGISTER_FILE && dest.file != BRW_MESSAGE_REGISTER_FILE) assert(dest.nr < 128); @@ -1254,7 +1252,6 @@ struct brw_instruction *gen6_CONT(struct brw_compile *p, struct brw_instruction *do_insn) { struct brw_instruction *insn; - int br = 2; insn = next_insn(p, BRW_OPCODE_CONTINUE); brw_set_dest(p, insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_D)); diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 6d545afab64..09033aecd7c 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -19,10 +19,13 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. + */ + +/** @file brw_fs.cpp * - * Authors: - * Eric Anholt <[email protected]> - * + * This file drives the GLSL IR -> LIR translation, contains the + * optimizations on the LIR, and drives the generation of native code + * from the LIR. */ extern "C" { @@ -34,7 +37,6 @@ extern "C" { #include "main/uniforms.h" #include "program/prog_parameter.h" #include "program/prog_print.h" -#include "program/prog_optimize.h" #include "program/register_allocate.h" #include "program/sampler.h" #include "program/hash_table.h" @@ -42,113 +44,15 @@ extern "C" { #include "brw_eu.h" #include "brw_wm.h" } +#include "brw_shader.h" #include "brw_fs.h" #include "../glsl/glsl_types.h" -#include "../glsl/ir_optimization.h" #include "../glsl/ir_print_visitor.h" #define MAX_INSTRUCTION (1 << 30) -static struct brw_reg brw_reg_from_fs_reg(class fs_reg *reg); - -struct gl_shader * -brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type) -{ - struct brw_shader *shader; - - shader = rzalloc(NULL, struct brw_shader); - if (shader) { - shader->base.Type = type; - shader->base.Name = name; - _mesa_init_shader(ctx, &shader->base); - } - - return &shader->base; -} - -struct gl_shader_program * -brw_new_shader_program(struct gl_context *ctx, GLuint name) -{ - struct brw_shader_program *prog; - prog = rzalloc(NULL, struct brw_shader_program); - if (prog) { - prog->base.Name = name; - _mesa_init_shader_program(ctx, &prog->base); - } - return &prog->base; -} - -GLboolean -brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) -{ - struct brw_context *brw = brw_context(ctx); - struct intel_context *intel = &brw->intel; - - struct brw_shader *shader = - (struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; - if (shader != NULL) { - void *mem_ctx = ralloc_context(NULL); - bool progress; - - if (shader->ir) - ralloc_free(shader->ir); - shader->ir = new(shader) exec_list; - clone_ir_list(mem_ctx, shader->ir, shader->base.ir); - - do_mat_op_to_vec(shader->ir); - lower_instructions(shader->ir, - MOD_TO_FRACT | - DIV_TO_MUL_RCP | - SUB_TO_ADD_NEG | - EXP_TO_EXP2 | - LOG_TO_LOG2); - - /* Pre-gen6 HW can only nest if-statements 16 deep. Beyond this, - * if-statements need to be flattened. - */ - if (intel->gen < 6) - lower_if_to_cond_assign(shader->ir, 16); - - do_lower_texture_projection(shader->ir); - do_vec_index_to_cond_assign(shader->ir); - brw_do_cubemap_normalize(shader->ir); - lower_noise(shader->ir); - lower_quadop_vector(shader->ir, false); - lower_variable_index_to_cond_assign(shader->ir, - GL_TRUE, /* input */ - GL_TRUE, /* output */ - GL_TRUE, /* temp */ - GL_TRUE /* uniform */ - ); - - do { - progress = false; - - brw_do_channel_expressions(shader->ir); - brw_do_vector_splitting(shader->ir); - - progress = do_lower_jumps(shader->ir, true, true, - true, /* main return */ - false, /* continue */ - false /* loops */ - ) || progress; - - progress = do_common_optimization(shader->ir, true, 32) || progress; - } while (progress); - - validate_ir_tree(shader->ir); - reparent_ir(shader->ir, shader->ir); - ralloc_free(mem_ctx); - } - - if (!_mesa_ir_link_shader(ctx, prog)) - return GL_FALSE; - - return GL_TRUE; -} - -static int -type_size(const struct glsl_type *type) +int +fs_visitor::type_size(const struct glsl_type *type) { unsigned int size, i; @@ -180,17 +84,23 @@ type_size(const struct glsl_type *type) void fs_visitor::fail(const char *format, ...) { - if (!failed) { - failed = true; + va_list va; + char *msg; - if (INTEL_DEBUG & DEBUG_WM) { - fprintf(stderr, "FS compile failed: "); + if (failed) + return; - va_list va; - va_start(va, format); - vfprintf(stderr, format, va); - va_end(va); - } + failed = true; + + va_start(va, format); + msg = ralloc_vasprintf(mem_ctx, format, va); + va_end(va); + msg = ralloc_asprintf(mem_ctx, "FS compile failed: %s\n", msg); + + this->fail_msg = msg; + + if (INTEL_DEBUG & DEBUG_WM) { + fprintf(stderr, msg); } } @@ -297,38 +207,13 @@ fs_reg::fs_reg(enum register_file file, int hw_reg, uint32_t type) this->type = type; } -int -brw_type_for_base_type(const struct glsl_type *type) -{ - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - return BRW_REGISTER_TYPE_F; - case GLSL_TYPE_INT: - case GLSL_TYPE_BOOL: - return BRW_REGISTER_TYPE_D; - case GLSL_TYPE_UINT: - return BRW_REGISTER_TYPE_UD; - case GLSL_TYPE_ARRAY: - case GLSL_TYPE_STRUCT: - case GLSL_TYPE_SAMPLER: - /* These should be overridden with the type of the member when - * dereferenced into. BRW_REGISTER_TYPE_UD seems like a likely - * way to trip up if we don't. - */ - return BRW_REGISTER_TYPE_UD; - default: - assert(!"not reached"); - return BRW_REGISTER_TYPE_F; - } -} - /** Automatic reg constructor. */ fs_reg::fs_reg(class fs_visitor *v, const struct glsl_type *type) { init(); this->file = GRF; - this->reg = v->virtual_grf_alloc(type_size(type)); + this->reg = v->virtual_grf_alloc(v->type_size(type)); this->reg_offset = 0; this->type = brw_type_for_base_type(type); } @@ -584,7 +469,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) attr.reg_offset++; } - if (intel->gen < 6 && !(is_gl_Color && c->key.linear_color)) { + if (intel->gen < 6) { attr.reg_offset -= type->vector_elements; for (unsigned int k = 0; k < type->vector_elements; k++) { emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w); @@ -706,2134 +591,6 @@ fs_visitor::emit_math(fs_opcodes opcode, fs_reg dst, fs_reg src0, fs_reg src1) return inst; } -void -fs_visitor::visit(ir_variable *ir) -{ - fs_reg *reg = NULL; - - if (variable_storage(ir)) - return; - - if (strcmp(ir->name, "gl_FragColor") == 0) { - this->frag_color = ir; - } else if (strcmp(ir->name, "gl_FragData") == 0) { - this->frag_data = ir; - } else if (strcmp(ir->name, "gl_FragDepth") == 0) { - this->frag_depth = ir; - } - - if (ir->mode == ir_var_in) { - if (!strcmp(ir->name, "gl_FragCoord")) { - reg = emit_fragcoord_interpolation(ir); - } else if (!strcmp(ir->name, "gl_FrontFacing")) { - reg = emit_frontfacing_interpolation(ir); - } else { - reg = emit_general_interpolation(ir); - } - assert(reg); - hash_table_insert(this->variable_ht, reg, ir); - return; - } - - if (ir->mode == ir_var_uniform) { - int param_index = c->prog_data.nr_params; - - if (c->dispatch_width == 16) { - if (!variable_storage(ir)) { - fail("Failed to find uniform '%s' in 16-wide\n", ir->name); - } - return; - } - - if (!strncmp(ir->name, "gl_", 3)) { - setup_builtin_uniform_values(ir); - } else { - setup_uniform_values(ir->location, ir->type); - } - - reg = new(this->mem_ctx) fs_reg(UNIFORM, param_index); - reg->type = brw_type_for_base_type(ir->type); - } - - if (!reg) - reg = new(this->mem_ctx) fs_reg(this, ir->type); - - hash_table_insert(this->variable_ht, reg, ir); -} - -void -fs_visitor::visit(ir_dereference_variable *ir) -{ - fs_reg *reg = variable_storage(ir->var); - this->result = *reg; -} - -void -fs_visitor::visit(ir_dereference_record *ir) -{ - const glsl_type *struct_type = ir->record->type; - - ir->record->accept(this); - - unsigned int offset = 0; - for (unsigned int i = 0; i < struct_type->length; i++) { - if (strcmp(struct_type->fields.structure[i].name, ir->field) == 0) - break; - offset += type_size(struct_type->fields.structure[i].type); - } - this->result.reg_offset += offset; - this->result.type = brw_type_for_base_type(ir->type); -} - -void -fs_visitor::visit(ir_dereference_array *ir) -{ - ir_constant *index; - int element_size; - - ir->array->accept(this); - index = ir->array_index->as_constant(); - - element_size = type_size(ir->type); - this->result.type = brw_type_for_base_type(ir->type); - - if (index) { - assert(this->result.file == UNIFORM || - (this->result.file == GRF && - this->result.reg != 0)); - this->result.reg_offset += index->value.i[0] * element_size; - } else { - assert(!"FINISHME: non-constant array element"); - } -} - -/* Instruction selection: Produce a MOV.sat instead of - * MIN(MAX(val, 0), 1) when possible. - */ -bool -fs_visitor::try_emit_saturate(ir_expression *ir) -{ - ir_rvalue *sat_val = ir->as_rvalue_to_saturate(); - - if (!sat_val) - return false; - - sat_val->accept(this); - fs_reg src = this->result; - - this->result = fs_reg(this, ir->type); - fs_inst *inst = emit(BRW_OPCODE_MOV, this->result, src); - inst->saturate = true; - - return true; -} - -static uint32_t -brw_conditional_for_comparison(unsigned int op) -{ - switch (op) { - case ir_binop_less: - return BRW_CONDITIONAL_L; - case ir_binop_greater: - return BRW_CONDITIONAL_G; - case ir_binop_lequal: - return BRW_CONDITIONAL_LE; - case ir_binop_gequal: - return BRW_CONDITIONAL_GE; - case ir_binop_equal: - case ir_binop_all_equal: /* same as equal for scalars */ - return BRW_CONDITIONAL_Z; - case ir_binop_nequal: - case ir_binop_any_nequal: /* same as nequal for scalars */ - return BRW_CONDITIONAL_NZ; - default: - assert(!"not reached: bad operation for comparison"); - return BRW_CONDITIONAL_NZ; - } -} - -void -fs_visitor::visit(ir_expression *ir) -{ - unsigned int operand; - fs_reg op[2], temp; - fs_inst *inst; - - assert(ir->get_num_operands() <= 2); - - if (try_emit_saturate(ir)) - return; - - for (operand = 0; operand < ir->get_num_operands(); operand++) { - ir->operands[operand]->accept(this); - if (this->result.file == BAD_FILE) { - ir_print_visitor v; - fail("Failed to get tree for expression operand:\n"); - ir->operands[operand]->accept(&v); - } - op[operand] = this->result; - - /* Matrix expression operands should have been broken down to vector - * operations already. - */ - assert(!ir->operands[operand]->type->is_matrix()); - /* And then those vector operands should have been broken down to scalar. - */ - assert(!ir->operands[operand]->type->is_vector()); - } - - /* Storage for our result. If our result goes into an assignment, it will - * just get copy-propagated out, so no worries. - */ - this->result = fs_reg(this, ir->type); - - switch (ir->operation) { - case ir_unop_logic_not: - /* Note that BRW_OPCODE_NOT is not appropriate here, since it is - * ones complement of the whole register, not just bit 0. - */ - emit(BRW_OPCODE_XOR, this->result, op[0], fs_reg(1)); - break; - case ir_unop_neg: - op[0].negate = !op[0].negate; - this->result = op[0]; - break; - case ir_unop_abs: - op[0].abs = true; - op[0].negate = false; - this->result = op[0]; - break; - case ir_unop_sign: - temp = fs_reg(this, ir->type); - - emit(BRW_OPCODE_MOV, this->result, fs_reg(0.0f)); - - inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)); - inst->conditional_mod = BRW_CONDITIONAL_G; - inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(1.0f)); - inst->predicated = true; - - inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)); - inst->conditional_mod = BRW_CONDITIONAL_L; - inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(-1.0f)); - inst->predicated = true; - - break; - case ir_unop_rcp: - emit_math(FS_OPCODE_RCP, this->result, op[0]); - break; - - case ir_unop_exp2: - emit_math(FS_OPCODE_EXP2, this->result, op[0]); - break; - case ir_unop_log2: - emit_math(FS_OPCODE_LOG2, this->result, op[0]); - break; - case ir_unop_exp: - case ir_unop_log: - assert(!"not reached: should be handled by ir_explog_to_explog2"); - break; - case ir_unop_sin: - case ir_unop_sin_reduced: - emit_math(FS_OPCODE_SIN, this->result, op[0]); - break; - case ir_unop_cos: - case ir_unop_cos_reduced: - emit_math(FS_OPCODE_COS, this->result, op[0]); - break; - - case ir_unop_dFdx: - emit(FS_OPCODE_DDX, this->result, op[0]); - break; - case ir_unop_dFdy: - emit(FS_OPCODE_DDY, this->result, op[0]); - break; - - case ir_binop_add: - emit(BRW_OPCODE_ADD, this->result, op[0], op[1]); - break; - case ir_binop_sub: - assert(!"not reached: should be handled by ir_sub_to_add_neg"); - break; - - case ir_binop_mul: - emit(BRW_OPCODE_MUL, this->result, op[0], op[1]); - break; - case ir_binop_div: - assert(!"not reached: should be handled by ir_div_to_mul_rcp"); - break; - case ir_binop_mod: - assert(!"ir_binop_mod should have been converted to b * fract(a/b)"); - break; - - case ir_binop_less: - case ir_binop_greater: - case ir_binop_lequal: - case ir_binop_gequal: - case ir_binop_equal: - case ir_binop_all_equal: - case ir_binop_nequal: - case ir_binop_any_nequal: - temp = this->result; - /* original gen4 does implicit conversion before comparison. */ - if (intel->gen < 5) - temp.type = op[0].type; - - inst = emit(BRW_OPCODE_CMP, temp, op[0], op[1]); - inst->conditional_mod = brw_conditional_for_comparison(ir->operation); - emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)); - break; - - case ir_binop_logic_xor: - emit(BRW_OPCODE_XOR, this->result, op[0], op[1]); - break; - - case ir_binop_logic_or: - emit(BRW_OPCODE_OR, this->result, op[0], op[1]); - break; - - case ir_binop_logic_and: - emit(BRW_OPCODE_AND, this->result, op[0], op[1]); - break; - - case ir_binop_dot: - case ir_unop_any: - assert(!"not reached: should be handled by brw_fs_channel_expressions"); - break; - - case ir_unop_noise: - assert(!"not reached: should be handled by lower_noise"); - break; - - case ir_quadop_vector: - assert(!"not reached: should be handled by lower_quadop_vector"); - break; - - case ir_unop_sqrt: - emit_math(FS_OPCODE_SQRT, this->result, op[0]); - break; - - case ir_unop_rsq: - emit_math(FS_OPCODE_RSQ, this->result, op[0]); - break; - - case ir_unop_i2f: - case ir_unop_b2f: - case ir_unop_b2i: - case ir_unop_f2i: - emit(BRW_OPCODE_MOV, this->result, op[0]); - break; - case ir_unop_f2b: - case ir_unop_i2b: - temp = this->result; - /* original gen4 does implicit conversion before comparison. */ - if (intel->gen < 5) - temp.type = op[0].type; - - inst = emit(BRW_OPCODE_CMP, temp, op[0], fs_reg(0.0f)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - inst = emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(1)); - break; - - case ir_unop_trunc: - emit(BRW_OPCODE_RNDZ, this->result, op[0]); - break; - case ir_unop_ceil: - op[0].negate = !op[0].negate; - inst = emit(BRW_OPCODE_RNDD, this->result, op[0]); - this->result.negate = true; - break; - case ir_unop_floor: - inst = emit(BRW_OPCODE_RNDD, this->result, op[0]); - break; - case ir_unop_fract: - inst = emit(BRW_OPCODE_FRC, this->result, op[0]); - break; - case ir_unop_round_even: - emit(BRW_OPCODE_RNDE, this->result, op[0]); - break; - - case ir_binop_min: - inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_L; - - inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); - inst->predicated = true; - break; - case ir_binop_max: - inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_G; - - inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); - inst->predicated = true; - break; - - case ir_binop_pow: - emit_math(FS_OPCODE_POW, this->result, op[0], op[1]); - break; - - case ir_unop_bit_not: - inst = emit(BRW_OPCODE_NOT, this->result, op[0]); - break; - case ir_binop_bit_and: - inst = emit(BRW_OPCODE_AND, this->result, op[0], op[1]); - break; - case ir_binop_bit_xor: - inst = emit(BRW_OPCODE_XOR, this->result, op[0], op[1]); - break; - case ir_binop_bit_or: - inst = emit(BRW_OPCODE_OR, this->result, op[0], op[1]); - break; - - case ir_unop_u2f: - case ir_binop_lshift: - case ir_binop_rshift: - assert(!"GLSL 1.30 features unsupported"); - break; - } -} - -void -fs_visitor::emit_assignment_writes(fs_reg &l, fs_reg &r, - const glsl_type *type, bool predicated) -{ - switch (type->base_type) { - case GLSL_TYPE_FLOAT: - case GLSL_TYPE_UINT: - case GLSL_TYPE_INT: - case GLSL_TYPE_BOOL: - for (unsigned int i = 0; i < type->components(); i++) { - l.type = brw_type_for_base_type(type); - r.type = brw_type_for_base_type(type); - - fs_inst *inst = emit(BRW_OPCODE_MOV, l, r); - inst->predicated = predicated; - - l.reg_offset++; - r.reg_offset++; - } - break; - case GLSL_TYPE_ARRAY: - for (unsigned int i = 0; i < type->length; i++) { - emit_assignment_writes(l, r, type->fields.array, predicated); - } - break; - - case GLSL_TYPE_STRUCT: - for (unsigned int i = 0; i < type->length; i++) { - emit_assignment_writes(l, r, type->fields.structure[i].type, - predicated); - } - break; - - case GLSL_TYPE_SAMPLER: - break; - - default: - assert(!"not reached"); - break; - } -} - -void -fs_visitor::visit(ir_assignment *ir) -{ - struct fs_reg l, r; - fs_inst *inst; - - /* FINISHME: arrays on the lhs */ - ir->lhs->accept(this); - l = this->result; - - ir->rhs->accept(this); - r = this->result; - - assert(l.file != BAD_FILE); - assert(r.file != BAD_FILE); - - if (ir->condition) { - emit_bool_to_cond_code(ir->condition); - } - - if (ir->lhs->type->is_scalar() || - ir->lhs->type->is_vector()) { - for (int i = 0; i < ir->lhs->type->vector_elements; i++) { - if (ir->write_mask & (1 << i)) { - inst = emit(BRW_OPCODE_MOV, l, r); - if (ir->condition) - inst->predicated = true; - r.reg_offset++; - } - l.reg_offset++; - } - } else { - emit_assignment_writes(l, r, ir->lhs->type, ir->condition != NULL); - } -} - -fs_inst * -fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, - int sampler) -{ - int mlen; - int base_mrf = 1; - bool simd16 = false; - fs_reg orig_dst; - - /* g0 header. */ - mlen = 1; - - if (ir->shadow_comparitor) { - for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { - fs_inst *inst = emit(BRW_OPCODE_MOV, - fs_reg(MRF, base_mrf + mlen + i), coordinate); - if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) - inst->saturate = true; - - coordinate.reg_offset++; - } - /* gen4's SIMD8 sampler always has the slots for u,v,r present. */ - mlen += 3; - - if (ir->op == ir_tex) { - /* There's no plain shadow compare message, so we use shadow - * compare with a bias of 0.0. - */ - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), fs_reg(0.0f)); - mlen++; - } else if (ir->op == ir_txb) { - ir->lod_info.bias->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen++; - } else { - assert(ir->op == ir_txl); - ir->lod_info.lod->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen++; - } - - ir->shadow_comparitor->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen++; - } else if (ir->op == ir_tex) { - for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { - fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i), - coordinate); - if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) - inst->saturate = true; - coordinate.reg_offset++; - } - /* gen4's SIMD8 sampler always has the slots for u,v,r present. */ - mlen += 3; - } else if (ir->op == ir_txd) { - assert(!"TXD isn't supported on gen4 yet."); - } else { - /* Oh joy. gen4 doesn't have SIMD8 non-shadow-compare bias/lod - * instructions. We'll need to do SIMD16 here. - */ - assert(ir->op == ir_txb || ir->op == ir_txl); - - for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { - fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, - base_mrf + mlen + i * 2), - coordinate); - if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) - inst->saturate = true; - coordinate.reg_offset++; - } - - /* lod/bias appears after u/v/r. */ - mlen += 6; - - if (ir->op == ir_txb) { - ir->lod_info.bias->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen++; - } else { - ir->lod_info.lod->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen++; - } - - /* The unused upper half. */ - mlen++; - - /* Now, since we're doing simd16, the return is 2 interleaved - * vec4s where the odd-indexed ones are junk. We'll need to move - * this weirdness around to the expected layout. - */ - simd16 = true; - orig_dst = dst; - dst = fs_reg(this, glsl_type::get_array_instance(glsl_type::vec4_type, - 2)); - dst.type = BRW_REGISTER_TYPE_F; - } - - fs_inst *inst = NULL; - switch (ir->op) { - case ir_tex: - inst = emit(FS_OPCODE_TEX, dst); - break; - case ir_txb: - inst = emit(FS_OPCODE_TXB, dst); - break; - case ir_txl: - inst = emit(FS_OPCODE_TXL, dst); - break; - case ir_txd: - inst = emit(FS_OPCODE_TXD, dst); - break; - case ir_txf: - assert(!"GLSL 1.30 features unsupported"); - break; - } - inst->base_mrf = base_mrf; - inst->mlen = mlen; - inst->header_present = true; - - if (simd16) { - for (int i = 0; i < 4; i++) { - emit(BRW_OPCODE_MOV, orig_dst, dst); - orig_dst.reg_offset++; - dst.reg_offset += 2; - } - } - - return inst; -} - -/* gen5's sampler has slots for u, v, r, array index, then optional - * parameters like shadow comparitor or LOD bias. If optional - * parameters aren't present, those base slots are optional and don't - * need to be included in the message. - * - * We don't fill in the unnecessary slots regardless, which may look - * surprising in the disassembly. - */ -fs_inst * -fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate, - int sampler) -{ - int mlen = 0; - int base_mrf = 2; - int reg_width = c->dispatch_width / 8; - bool header_present = false; - - if (ir->offset) { - /* The offsets set up by the ir_texture visitor are in the - * m1 header, so we can't go headerless. - */ - header_present = true; - mlen++; - base_mrf--; - } - - for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { - fs_inst *inst = emit(BRW_OPCODE_MOV, - fs_reg(MRF, base_mrf + mlen + i * reg_width), - coordinate); - if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) - inst->saturate = true; - coordinate.reg_offset++; - } - mlen += ir->coordinate->type->vector_elements * reg_width; - - if (ir->shadow_comparitor) { - mlen = MAX2(mlen, header_present + 4 * reg_width); - - ir->shadow_comparitor->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - } - - fs_inst *inst = NULL; - switch (ir->op) { - case ir_tex: - inst = emit(FS_OPCODE_TEX, dst); - break; - case ir_txb: - ir->lod_info.bias->accept(this); - mlen = MAX2(mlen, header_present + 4 * reg_width); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - - inst = emit(FS_OPCODE_TXB, dst); - - break; - case ir_txl: - ir->lod_info.lod->accept(this); - mlen = MAX2(mlen, header_present + 4 * reg_width); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - - inst = emit(FS_OPCODE_TXL, dst); - break; - case ir_txd: - case ir_txf: - assert(!"GLSL 1.30 features unsupported"); - break; - } - inst->base_mrf = base_mrf; - inst->mlen = mlen; - inst->header_present = header_present; - - if (mlen > 11) { - fail("Message length >11 disallowed by hardware\n"); - } - - return inst; -} - -fs_inst * -fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, - int sampler) -{ - int mlen = 0; - int base_mrf = 2; - int reg_width = c->dispatch_width / 8; - bool header_present = false; - - if (ir->offset) { - /* The offsets set up by the ir_texture visitor are in the - * m1 header, so we can't go headerless. - */ - header_present = true; - mlen++; - base_mrf--; - } - - if (ir->shadow_comparitor) { - ir->shadow_comparitor->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - } - - /* Set up the LOD info */ - switch (ir->op) { - case ir_tex: - break; - case ir_txb: - ir->lod_info.bias->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - break; - case ir_txl: - ir->lod_info.lod->accept(this); - emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); - mlen += reg_width; - break; - case ir_txd: - case ir_txf: - assert(!"GLSL 1.30 features unsupported"); - break; - } - - /* Set up the coordinate */ - for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { - fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), - coordinate); - if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) - inst->saturate = true; - coordinate.reg_offset++; - mlen += reg_width; - } - - /* Generate the SEND */ - fs_inst *inst = NULL; - switch (ir->op) { - case ir_tex: inst = emit(FS_OPCODE_TEX, dst); break; - case ir_txb: inst = emit(FS_OPCODE_TXB, dst); break; - case ir_txl: inst = emit(FS_OPCODE_TXL, dst); break; - case ir_txd: inst = emit(FS_OPCODE_TXD, dst); break; - case ir_txf: assert(!"TXF unsupported."); - } - inst->base_mrf = base_mrf; - inst->mlen = mlen; - inst->header_present = header_present; - - if (mlen > 11) { - fail("Message length >11 disallowed by hardware\n"); - } - - return inst; -} - -void -fs_visitor::visit(ir_texture *ir) -{ - int sampler; - fs_inst *inst = NULL; - - ir->coordinate->accept(this); - fs_reg coordinate = this->result; - - if (ir->offset != NULL) { - ir_constant *offset = ir->offset->as_constant(); - assert(offset != NULL); - - signed char offsets[3]; - for (unsigned i = 0; i < ir->offset->type->vector_elements; i++) - offsets[i] = (signed char) offset->value.i[i]; - - /* Combine all three offsets into a single unsigned dword: - * - * bits 11:8 - U Offset (X component) - * bits 7:4 - V Offset (Y component) - * bits 3:0 - R Offset (Z component) - */ - unsigned offset_bits = 0; - for (unsigned i = 0; i < ir->offset->type->vector_elements; i++) { - const unsigned shift = 4 * (2 - i); - offset_bits |= (offsets[i] << shift) & (0xF << shift); - } - - /* Explicitly set up the message header by copying g0 to msg reg m1. */ - emit(BRW_OPCODE_MOV, fs_reg(MRF, 1, BRW_REGISTER_TYPE_UD), - fs_reg(GRF, 0, BRW_REGISTER_TYPE_UD)); - - /* Then set the offset bits in DWord 2 of the message header. */ - emit(BRW_OPCODE_MOV, - fs_reg(retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 1, 2), - BRW_REGISTER_TYPE_UD)), - fs_reg(brw_imm_uw(offset_bits))); - } - - /* Should be lowered by do_lower_texture_projection */ - assert(!ir->projector); - - sampler = _mesa_get_sampler_uniform_value(ir->sampler, - ctx->Shader.CurrentFragmentProgram, - &brw->fragment_program->Base); - sampler = c->fp->program.Base.SamplerUnits[sampler]; - - /* The 965 requires the EU to do the normalization of GL rectangle - * texture coordinates. We use the program parameter state - * tracking to get the scaling factor. - */ - if (ir->sampler->type->sampler_dimensionality == GLSL_SAMPLER_DIM_RECT) { - struct gl_program_parameter_list *params = c->fp->program.Base.Parameters; - int tokens[STATE_LENGTH] = { - STATE_INTERNAL, - STATE_TEXRECT_SCALE, - sampler, - 0, - 0 - }; - - if (c->dispatch_width == 16) { - fail("rectangle scale uniform setup not supported on 16-wide\n"); - this->result = fs_reg(this, ir->type); - return; - } - - c->prog_data.param_convert[c->prog_data.nr_params] = - PARAM_NO_CONVERT; - c->prog_data.param_convert[c->prog_data.nr_params + 1] = - PARAM_NO_CONVERT; - - fs_reg scale_x = fs_reg(UNIFORM, c->prog_data.nr_params); - fs_reg scale_y = fs_reg(UNIFORM, c->prog_data.nr_params + 1); - GLuint index = _mesa_add_state_reference(params, - (gl_state_index *)tokens); - - this->param_index[c->prog_data.nr_params] = index; - this->param_offset[c->prog_data.nr_params] = 0; - c->prog_data.nr_params++; - this->param_index[c->prog_data.nr_params] = index; - this->param_offset[c->prog_data.nr_params] = 1; - c->prog_data.nr_params++; - - fs_reg dst = fs_reg(this, ir->coordinate->type); - fs_reg src = coordinate; - coordinate = dst; - - emit(BRW_OPCODE_MUL, dst, src, scale_x); - dst.reg_offset++; - src.reg_offset++; - emit(BRW_OPCODE_MUL, dst, src, scale_y); - } - - /* Writemasking doesn't eliminate channels on SIMD8 texture - * samples, so don't worry about them. - */ - fs_reg dst = fs_reg(this, glsl_type::vec4_type); - - if (intel->gen >= 7) { - inst = emit_texture_gen7(ir, dst, coordinate, sampler); - } else if (intel->gen >= 5) { - inst = emit_texture_gen5(ir, dst, coordinate, sampler); - } else { - inst = emit_texture_gen4(ir, dst, coordinate, sampler); - } - - /* If there's an offset, we already set up m1. To avoid the implied move, - * use the null register. Otherwise, we want an implied move from g0. - */ - if (ir->offset != NULL || !inst->header_present) - inst->src[0] = fs_reg(brw_null_reg()); - else - inst->src[0] = fs_reg(retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW)); - - inst->sampler = sampler; - - this->result = dst; - - if (ir->shadow_comparitor) - inst->shadow_compare = true; - - if (ir->type == glsl_type::float_type) { - /* Ignore DEPTH_TEXTURE_MODE swizzling. */ - assert(ir->sampler->type->sampler_shadow); - } else if (c->key.tex_swizzles[inst->sampler] != SWIZZLE_NOOP) { - fs_reg swizzle_dst = fs_reg(this, glsl_type::vec4_type); - - for (int i = 0; i < 4; i++) { - int swiz = GET_SWZ(c->key.tex_swizzles[inst->sampler], i); - fs_reg l = swizzle_dst; - l.reg_offset += i; - - if (swiz == SWIZZLE_ZERO) { - emit(BRW_OPCODE_MOV, l, fs_reg(0.0f)); - } else if (swiz == SWIZZLE_ONE) { - emit(BRW_OPCODE_MOV, l, fs_reg(1.0f)); - } else { - fs_reg r = dst; - r.reg_offset += GET_SWZ(c->key.tex_swizzles[inst->sampler], i); - emit(BRW_OPCODE_MOV, l, r); - } - } - this->result = swizzle_dst; - } -} - -void -fs_visitor::visit(ir_swizzle *ir) -{ - ir->val->accept(this); - fs_reg val = this->result; - - if (ir->type->vector_elements == 1) { - this->result.reg_offset += ir->mask.x; - return; - } - - fs_reg result = fs_reg(this, ir->type); - this->result = result; - - for (unsigned int i = 0; i < ir->type->vector_elements; i++) { - fs_reg channel = val; - int swiz = 0; - - switch (i) { - case 0: - swiz = ir->mask.x; - break; - case 1: - swiz = ir->mask.y; - break; - case 2: - swiz = ir->mask.z; - break; - case 3: - swiz = ir->mask.w; - break; - } - - channel.reg_offset += swiz; - emit(BRW_OPCODE_MOV, result, channel); - result.reg_offset++; - } -} - -void -fs_visitor::visit(ir_discard *ir) -{ - assert(ir->condition == NULL); /* FINISHME */ - - emit(FS_OPCODE_DISCARD); - kill_emitted = true; -} - -void -fs_visitor::visit(ir_constant *ir) -{ - /* Set this->result to reg at the bottom of the function because some code - * paths will cause this visitor to be applied to other fields. This will - * cause the value stored in this->result to be modified. - * - * Make reg constant so that it doesn't get accidentally modified along the - * way. Yes, I actually had this problem. :( - */ - const fs_reg reg(this, ir->type); - fs_reg dst_reg = reg; - - if (ir->type->is_array()) { - const unsigned size = type_size(ir->type->fields.array); - - for (unsigned i = 0; i < ir->type->length; i++) { - ir->array_elements[i]->accept(this); - fs_reg src_reg = this->result; - - dst_reg.type = src_reg.type; - for (unsigned j = 0; j < size; j++) { - emit(BRW_OPCODE_MOV, dst_reg, src_reg); - src_reg.reg_offset++; - dst_reg.reg_offset++; - } - } - } else if (ir->type->is_record()) { - foreach_list(node, &ir->components) { - ir_instruction *const field = (ir_instruction *) node; - const unsigned size = type_size(field->type); - - field->accept(this); - fs_reg src_reg = this->result; - - dst_reg.type = src_reg.type; - for (unsigned j = 0; j < size; j++) { - emit(BRW_OPCODE_MOV, dst_reg, src_reg); - src_reg.reg_offset++; - dst_reg.reg_offset++; - } - } - } else { - const unsigned size = type_size(ir->type); - - for (unsigned i = 0; i < size; i++) { - switch (ir->type->base_type) { - case GLSL_TYPE_FLOAT: - emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.f[i])); - break; - case GLSL_TYPE_UINT: - emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.u[i])); - break; - case GLSL_TYPE_INT: - emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.i[i])); - break; - case GLSL_TYPE_BOOL: - emit(BRW_OPCODE_MOV, dst_reg, fs_reg((int)ir->value.b[i])); - break; - default: - assert(!"Non-float/uint/int/bool constant"); - } - dst_reg.reg_offset++; - } - } - - this->result = reg; -} - -void -fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir) -{ - ir_expression *expr = ir->as_expression(); - - if (expr) { - fs_reg op[2]; - fs_inst *inst; - - assert(expr->get_num_operands() <= 2); - for (unsigned int i = 0; i < expr->get_num_operands(); i++) { - assert(expr->operands[i]->type->is_scalar()); - - expr->operands[i]->accept(this); - op[i] = this->result; - } - - switch (expr->operation) { - case ir_unop_logic_not: - inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], fs_reg(1)); - inst->conditional_mod = BRW_CONDITIONAL_Z; - break; - - case ir_binop_logic_xor: - inst = emit(BRW_OPCODE_XOR, reg_null_d, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - break; - - case ir_binop_logic_or: - inst = emit(BRW_OPCODE_OR, reg_null_d, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - break; - - case ir_binop_logic_and: - inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - break; - - case ir_unop_f2b: - if (intel->gen >= 6) { - inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0.0f)); - } else { - inst = emit(BRW_OPCODE_MOV, reg_null_f, op[0]); - } - inst->conditional_mod = BRW_CONDITIONAL_NZ; - break; - - case ir_unop_i2b: - if (intel->gen >= 6) { - inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0)); - } else { - inst = emit(BRW_OPCODE_MOV, reg_null_d, op[0]); - } - inst->conditional_mod = BRW_CONDITIONAL_NZ; - break; - - case ir_binop_greater: - case ir_binop_gequal: - case ir_binop_less: - case ir_binop_lequal: - case ir_binop_equal: - case ir_binop_all_equal: - case ir_binop_nequal: - case ir_binop_any_nequal: - inst = emit(BRW_OPCODE_CMP, reg_null_cmp, op[0], op[1]); - inst->conditional_mod = - brw_conditional_for_comparison(expr->operation); - break; - - default: - assert(!"not reached"); - fail("bad cond code\n"); - break; - } - return; - } - - ir->accept(this); - - if (intel->gen >= 6) { - fs_inst *inst = emit(BRW_OPCODE_AND, reg_null_d, this->result, fs_reg(1)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - } else { - fs_inst *inst = emit(BRW_OPCODE_MOV, reg_null_d, this->result); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - } -} - -/** - * Emit a gen6 IF statement with the comparison folded into the IF - * instruction. - */ -void -fs_visitor::emit_if_gen6(ir_if *ir) -{ - ir_expression *expr = ir->condition->as_expression(); - - if (expr) { - fs_reg op[2]; - fs_inst *inst; - fs_reg temp; - - assert(expr->get_num_operands() <= 2); - for (unsigned int i = 0; i < expr->get_num_operands(); i++) { - assert(expr->operands[i]->type->is_scalar()); - - expr->operands[i]->accept(this); - op[i] = this->result; - } - - switch (expr->operation) { - case ir_unop_logic_not: - inst = emit(BRW_OPCODE_IF, temp, op[0], fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_Z; - return; - - case ir_binop_logic_xor: - inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - return; - - case ir_binop_logic_or: - temp = fs_reg(this, glsl_type::bool_type); - emit(BRW_OPCODE_OR, temp, op[0], op[1]); - inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - return; - - case ir_binop_logic_and: - temp = fs_reg(this, glsl_type::bool_type); - emit(BRW_OPCODE_AND, temp, op[0], op[1]); - inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - return; - - case ir_unop_f2b: - inst = emit(BRW_OPCODE_IF, reg_null_f, op[0], fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - return; - - case ir_unop_i2b: - inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - return; - - case ir_binop_greater: - case ir_binop_gequal: - case ir_binop_less: - case ir_binop_lequal: - case ir_binop_equal: - case ir_binop_all_equal: - case ir_binop_nequal: - case ir_binop_any_nequal: - inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]); - inst->conditional_mod = - brw_conditional_for_comparison(expr->operation); - return; - default: - assert(!"not reached"); - inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; - fail("bad condition\n"); - return; - } - return; - } - - ir->condition->accept(this); - - fs_inst *inst = emit(BRW_OPCODE_IF, reg_null_d, this->result, fs_reg(0)); - inst->conditional_mod = BRW_CONDITIONAL_NZ; -} - -void -fs_visitor::visit(ir_if *ir) -{ - fs_inst *inst; - - if (intel->gen != 6 && c->dispatch_width == 16) { - fail("Can't support (non-uniform) control flow on 16-wide\n"); - } - - /* Don't point the annotation at the if statement, because then it plus - * the then and else blocks get printed. - */ - this->base_ir = ir->condition; - - if (intel->gen == 6) { - emit_if_gen6(ir); - } else { - emit_bool_to_cond_code(ir->condition); - - inst = emit(BRW_OPCODE_IF); - inst->predicated = true; - } - - foreach_iter(exec_list_iterator, iter, ir->then_instructions) { - ir_instruction *ir = (ir_instruction *)iter.get(); - this->base_ir = ir; - - ir->accept(this); - } - - if (!ir->else_instructions.is_empty()) { - emit(BRW_OPCODE_ELSE); - - foreach_iter(exec_list_iterator, iter, ir->else_instructions) { - ir_instruction *ir = (ir_instruction *)iter.get(); - this->base_ir = ir; - - ir->accept(this); - } - } - - emit(BRW_OPCODE_ENDIF); -} - -void -fs_visitor::visit(ir_loop *ir) -{ - fs_reg counter = reg_undef; - - if (c->dispatch_width == 16) { - fail("Can't support (non-uniform) control flow on 16-wide\n"); - } - - if (ir->counter) { - this->base_ir = ir->counter; - ir->counter->accept(this); - counter = *(variable_storage(ir->counter)); - - if (ir->from) { - this->base_ir = ir->from; - ir->from->accept(this); - - emit(BRW_OPCODE_MOV, counter, this->result); - } - } - - emit(BRW_OPCODE_DO); - - if (ir->to) { - this->base_ir = ir->to; - ir->to->accept(this); - - fs_inst *inst = emit(BRW_OPCODE_CMP, reg_null_cmp, counter, this->result); - inst->conditional_mod = brw_conditional_for_comparison(ir->cmp); - - inst = emit(BRW_OPCODE_BREAK); - inst->predicated = true; - } - - foreach_iter(exec_list_iterator, iter, ir->body_instructions) { - ir_instruction *ir = (ir_instruction *)iter.get(); - - this->base_ir = ir; - ir->accept(this); - } - - if (ir->increment) { - this->base_ir = ir->increment; - ir->increment->accept(this); - emit(BRW_OPCODE_ADD, counter, counter, this->result); - } - - emit(BRW_OPCODE_WHILE); -} - -void -fs_visitor::visit(ir_loop_jump *ir) -{ - switch (ir->mode) { - case ir_loop_jump::jump_break: - emit(BRW_OPCODE_BREAK); - break; - case ir_loop_jump::jump_continue: - emit(BRW_OPCODE_CONTINUE); - break; - } -} - -void -fs_visitor::visit(ir_call *ir) -{ - assert(!"FINISHME"); -} - -void -fs_visitor::visit(ir_return *ir) -{ - assert(!"FINISHME"); -} - -void -fs_visitor::visit(ir_function *ir) -{ - /* Ignore function bodies other than main() -- we shouldn't see calls to - * them since they should all be inlined before we get to ir_to_mesa. - */ - if (strcmp(ir->name, "main") == 0) { - const ir_function_signature *sig; - exec_list empty; - - sig = ir->matching_signature(&empty); - - assert(sig); - - foreach_iter(exec_list_iterator, iter, sig->body) { - ir_instruction *ir = (ir_instruction *)iter.get(); - this->base_ir = ir; - - ir->accept(this); - } - } -} - -void -fs_visitor::visit(ir_function_signature *ir) -{ - assert(!"not reached"); - (void)ir; -} - -fs_inst * -fs_visitor::emit(fs_inst inst) -{ - fs_inst *list_inst = new(mem_ctx) fs_inst; - *list_inst = inst; - - if (force_uncompressed_stack > 0) - list_inst->force_uncompressed = true; - else if (force_sechalf_stack > 0) - list_inst->force_sechalf = true; - - list_inst->annotation = this->current_annotation; - list_inst->ir = this->base_ir; - - this->instructions.push_tail(list_inst); - - return list_inst; -} - -/** Emits a dummy fragment shader consisting of magenta for bringup purposes. */ -void -fs_visitor::emit_dummy_fs() -{ - /* Everyone's favorite color. */ - emit(BRW_OPCODE_MOV, fs_reg(MRF, 2), fs_reg(1.0f)); - emit(BRW_OPCODE_MOV, fs_reg(MRF, 3), fs_reg(0.0f)); - emit(BRW_OPCODE_MOV, fs_reg(MRF, 4), fs_reg(1.0f)); - emit(BRW_OPCODE_MOV, fs_reg(MRF, 5), fs_reg(0.0f)); - - fs_inst *write; - write = emit(FS_OPCODE_FB_WRITE, fs_reg(0), fs_reg(0)); - write->base_mrf = 0; -} - -/* The register location here is relative to the start of the URB - * data. It will get adjusted to be a real location before - * generate_code() time. - */ -struct brw_reg -fs_visitor::interp_reg(int location, int channel) -{ - int regnr = urb_setup[location] * 2 + channel / 2; - int stride = (channel & 1) * 4; - - assert(urb_setup[location] != -1); - - return brw_vec1_grf(regnr, stride); -} - -/** Emits the interpolation for the varying inputs. */ -void -fs_visitor::emit_interpolation_setup_gen4() -{ - this->current_annotation = "compute pixel centers"; - this->pixel_x = fs_reg(this, glsl_type::uint_type); - this->pixel_y = fs_reg(this, glsl_type::uint_type); - this->pixel_x.type = BRW_REGISTER_TYPE_UW; - this->pixel_y.type = BRW_REGISTER_TYPE_UW; - - emit(FS_OPCODE_PIXEL_X, this->pixel_x); - emit(FS_OPCODE_PIXEL_Y, this->pixel_y); - - this->current_annotation = "compute pixel deltas from v0"; - if (brw->has_pln) { - this->delta_x = fs_reg(this, glsl_type::vec2_type); - this->delta_y = this->delta_x; - this->delta_y.reg_offset++; - } else { - this->delta_x = fs_reg(this, glsl_type::float_type); - this->delta_y = fs_reg(this, glsl_type::float_type); - } - emit(BRW_OPCODE_ADD, this->delta_x, - this->pixel_x, fs_reg(negate(brw_vec1_grf(1, 0)))); - emit(BRW_OPCODE_ADD, this->delta_y, - this->pixel_y, fs_reg(negate(brw_vec1_grf(1, 1)))); - - this->current_annotation = "compute pos.w and 1/pos.w"; - /* Compute wpos.w. It's always in our setup, since it's needed to - * interpolate the other attributes. - */ - this->wpos_w = fs_reg(this, glsl_type::float_type); - emit(FS_OPCODE_LINTERP, wpos_w, this->delta_x, this->delta_y, - interp_reg(FRAG_ATTRIB_WPOS, 3)); - /* Compute the pixel 1/W value from wpos.w. */ - this->pixel_w = fs_reg(this, glsl_type::float_type); - emit_math(FS_OPCODE_RCP, this->pixel_w, wpos_w); - this->current_annotation = NULL; -} - -/** Emits the interpolation for the varying inputs. */ -void -fs_visitor::emit_interpolation_setup_gen6() -{ - struct brw_reg g1_uw = retype(brw_vec1_grf(1, 0), BRW_REGISTER_TYPE_UW); - - /* If the pixel centers end up used, the setup is the same as for gen4. */ - this->current_annotation = "compute pixel centers"; - fs_reg int_pixel_x = fs_reg(this, glsl_type::uint_type); - fs_reg int_pixel_y = fs_reg(this, glsl_type::uint_type); - int_pixel_x.type = BRW_REGISTER_TYPE_UW; - int_pixel_y.type = BRW_REGISTER_TYPE_UW; - emit(BRW_OPCODE_ADD, - int_pixel_x, - fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)), - fs_reg(brw_imm_v(0x10101010))); - emit(BRW_OPCODE_ADD, - int_pixel_y, - fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)), - fs_reg(brw_imm_v(0x11001100))); - - /* As of gen6, we can no longer mix float and int sources. We have - * to turn the integer pixel centers into floats for their actual - * use. - */ - this->pixel_x = fs_reg(this, glsl_type::float_type); - this->pixel_y = fs_reg(this, glsl_type::float_type); - emit(BRW_OPCODE_MOV, this->pixel_x, int_pixel_x); - emit(BRW_OPCODE_MOV, this->pixel_y, int_pixel_y); - - this->current_annotation = "compute pos.w"; - this->pixel_w = fs_reg(brw_vec8_grf(c->source_w_reg, 0)); - this->wpos_w = fs_reg(this, glsl_type::float_type); - emit_math(FS_OPCODE_RCP, this->wpos_w, this->pixel_w); - - this->delta_x = fs_reg(brw_vec8_grf(2, 0)); - this->delta_y = fs_reg(brw_vec8_grf(3, 0)); - - this->current_annotation = NULL; -} - -void -fs_visitor::emit_color_write(int index, int first_color_mrf, fs_reg color) -{ - int reg_width = c->dispatch_width / 8; - - if (c->dispatch_width == 8 || intel->gen == 6) { - /* SIMD8 write looks like: - * m + 0: r0 - * m + 1: r1 - * m + 2: g0 - * m + 3: g1 - * - * gen6 SIMD16 DP write looks like: - * m + 0: r0 - * m + 1: r1 - * m + 2: g0 - * m + 3: g1 - * m + 4: b0 - * m + 5: b1 - * m + 6: a0 - * m + 7: a1 - */ - emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index * reg_width), - color); - } else { - /* pre-gen6 SIMD16 single source DP write looks like: - * m + 0: r0 - * m + 1: g0 - * m + 2: b0 - * m + 3: a0 - * m + 4: r1 - * m + 5: g1 - * m + 6: b1 - * m + 7: a1 - */ - if (brw->has_compr4) { - /* By setting the high bit of the MRF register number, we - * indicate that we want COMPR4 mode - instead of doing the - * usual destination + 1 for the second half we get - * destination + 4. - */ - emit(BRW_OPCODE_MOV, - fs_reg(MRF, BRW_MRF_COMPR4 + first_color_mrf + index), color); - } else { - push_force_uncompressed(); - emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index), color); - pop_force_uncompressed(); - - push_force_sechalf(); - color.sechalf = true; - emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index + 4), color); - pop_force_sechalf(); - color.sechalf = false; - } - } -} - -void -fs_visitor::emit_fb_writes() -{ - this->current_annotation = "FB write header"; - GLboolean header_present = GL_TRUE; - int nr = 0; - int reg_width = c->dispatch_width / 8; - - if (intel->gen >= 6 && - !this->kill_emitted && - c->key.nr_color_regions == 1) { - header_present = false; - } - - if (header_present) { - /* m0, m1 header */ - nr += 2; - } - - if (c->aa_dest_stencil_reg) { - push_force_uncompressed(); - emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++), - fs_reg(brw_vec8_grf(c->aa_dest_stencil_reg, 0))); - pop_force_uncompressed(); - } - - /* Reserve space for color. It'll be filled in per MRT below. */ - int color_mrf = nr; - nr += 4 * reg_width; - - if (c->source_depth_to_render_target) { - if (intel->gen == 6 && c->dispatch_width == 16) { - /* For outputting oDepth on gen6, SIMD8 writes have to be - * used. This would require 8-wide moves of each half to - * message regs, kind of like pre-gen5 SIMD16 FB writes. - * Just bail on doing so for now. - */ - fail("Missing support for simd16 depth writes on gen6\n"); - } - - if (c->computes_depth) { - /* Hand over gl_FragDepth. */ - assert(this->frag_depth); - fs_reg depth = *(variable_storage(this->frag_depth)); - - emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), depth); - } else { - /* Pass through the payload depth. */ - emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), - fs_reg(brw_vec8_grf(c->source_depth_reg, 0))); - } - nr += reg_width; - } - - if (c->dest_depth_reg) { - emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), - fs_reg(brw_vec8_grf(c->dest_depth_reg, 0))); - nr += reg_width; - } - - fs_reg color = reg_undef; - if (this->frag_color) - color = *(variable_storage(this->frag_color)); - else if (this->frag_data) { - color = *(variable_storage(this->frag_data)); - color.type = BRW_REGISTER_TYPE_F; - } - - for (int target = 0; target < c->key.nr_color_regions; target++) { - this->current_annotation = ralloc_asprintf(this->mem_ctx, - "FB write target %d", - target); - if (this->frag_color || this->frag_data) { - for (int i = 0; i < 4; i++) { - emit_color_write(i, color_mrf, color); - color.reg_offset++; - } - } - - if (this->frag_color) - color.reg_offset -= 4; - - fs_inst *inst = emit(FS_OPCODE_FB_WRITE); - inst->target = target; - inst->base_mrf = 0; - inst->mlen = nr; - if (target == c->key.nr_color_regions - 1) - inst->eot = true; - inst->header_present = header_present; - } - - if (c->key.nr_color_regions == 0) { - if (c->key.alpha_test && (this->frag_color || this->frag_data)) { - /* If the alpha test is enabled but there's no color buffer, - * we still need to send alpha out the pipeline to our null - * renderbuffer. - */ - color.reg_offset += 3; - emit_color_write(3, color_mrf, color); - } - - fs_inst *inst = emit(FS_OPCODE_FB_WRITE); - inst->base_mrf = 0; - inst->mlen = nr; - inst->eot = true; - inst->header_present = header_present; - } - - this->current_annotation = NULL; -} - -void -fs_visitor::generate_fb_write(fs_inst *inst) -{ - GLboolean eot = inst->eot; - struct brw_reg implied_header; - - /* Header is 2 regs, g0 and g1 are the contents. g0 will be implied - * move, here's g1. - */ - brw_push_insn_state(p); - brw_set_mask_control(p, BRW_MASK_DISABLE); - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - - if (inst->header_present) { - if (intel->gen >= 6) { - brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); - brw_MOV(p, - retype(brw_message_reg(inst->base_mrf), BRW_REGISTER_TYPE_UD), - retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD)); - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - - if (inst->target > 0) { - /* Set the render target index for choosing BLEND_STATE. */ - brw_MOV(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 2), - BRW_REGISTER_TYPE_UD), - brw_imm_ud(inst->target)); - } - - implied_header = brw_null_reg(); - } else { - implied_header = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW); - - brw_MOV(p, - brw_message_reg(inst->base_mrf + 1), - brw_vec8_grf(1, 0)); - } - } else { - implied_header = brw_null_reg(); - } - - brw_pop_insn_state(p); - - brw_fb_WRITE(p, - c->dispatch_width, - inst->base_mrf, - implied_header, - inst->target, - inst->mlen, - 0, - eot, - inst->header_present); -} - -/* Computes the integer pixel x,y values from the origin. - * - * This is the basis of gl_FragCoord computation, but is also used - * pre-gen6 for computing the deltas from v0 for computing - * interpolation. - */ -void -fs_visitor::generate_pixel_xy(struct brw_reg dst, bool is_x) -{ - struct brw_reg g1_uw = retype(brw_vec1_grf(1, 0), BRW_REGISTER_TYPE_UW); - struct brw_reg src; - struct brw_reg deltas; - - if (is_x) { - src = stride(suboffset(g1_uw, 4), 2, 4, 0); - deltas = brw_imm_v(0x10101010); - } else { - src = stride(suboffset(g1_uw, 5), 2, 4, 0); - deltas = brw_imm_v(0x11001100); - } - - if (c->dispatch_width == 16) { - dst = vec16(dst); - } - - /* We do this 8 or 16-wide, but since the destination is UW we - * don't do compression in the 16-wide case. - */ - brw_push_insn_state(p); - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - brw_ADD(p, dst, src, deltas); - brw_pop_insn_state(p); -} - -void -fs_visitor::generate_linterp(fs_inst *inst, - struct brw_reg dst, struct brw_reg *src) -{ - struct brw_reg delta_x = src[0]; - struct brw_reg delta_y = src[1]; - struct brw_reg interp = src[2]; - - if (brw->has_pln && - delta_y.nr == delta_x.nr + 1 && - (intel->gen >= 6 || (delta_x.nr & 1) == 0)) { - brw_PLN(p, dst, interp, delta_x); - } else { - brw_LINE(p, brw_null_reg(), interp, delta_x); - brw_MAC(p, dst, suboffset(interp, 1), delta_y); - } -} - -void -fs_visitor::generate_math(fs_inst *inst, - struct brw_reg dst, struct brw_reg *src) -{ - int op; - - switch (inst->opcode) { - case FS_OPCODE_RCP: - op = BRW_MATH_FUNCTION_INV; - break; - case FS_OPCODE_RSQ: - op = BRW_MATH_FUNCTION_RSQ; - break; - case FS_OPCODE_SQRT: - op = BRW_MATH_FUNCTION_SQRT; - break; - case FS_OPCODE_EXP2: - op = BRW_MATH_FUNCTION_EXP; - break; - case FS_OPCODE_LOG2: - op = BRW_MATH_FUNCTION_LOG; - break; - case FS_OPCODE_POW: - op = BRW_MATH_FUNCTION_POW; - break; - case FS_OPCODE_SIN: - op = BRW_MATH_FUNCTION_SIN; - break; - case FS_OPCODE_COS: - op = BRW_MATH_FUNCTION_COS; - break; - default: - assert(!"not reached: unknown math function"); - op = 0; - break; - } - - if (intel->gen >= 6) { - assert(inst->mlen == 0); - - if (inst->opcode == FS_OPCODE_POW) { - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - brw_math2(p, dst, op, src[0], src[1]); - - if (c->dispatch_width == 16) { - brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); - brw_math2(p, sechalf(dst), op, sechalf(src[0]), sechalf(src[1])); - brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); - } - } else { - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - brw_math(p, dst, - op, - inst->saturate ? BRW_MATH_SATURATE_SATURATE : - BRW_MATH_SATURATE_NONE, - 0, src[0], - BRW_MATH_DATA_VECTOR, - BRW_MATH_PRECISION_FULL); - - if (c->dispatch_width == 16) { - brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); - brw_math(p, sechalf(dst), - op, - inst->saturate ? BRW_MATH_SATURATE_SATURATE : - BRW_MATH_SATURATE_NONE, - 0, sechalf(src[0]), - BRW_MATH_DATA_VECTOR, - BRW_MATH_PRECISION_FULL); - brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); - } - } - } else /* gen <= 5 */{ - assert(inst->mlen >= 1); - - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - brw_math(p, dst, - op, - inst->saturate ? BRW_MATH_SATURATE_SATURATE : - BRW_MATH_SATURATE_NONE, - inst->base_mrf, src[0], - BRW_MATH_DATA_VECTOR, - BRW_MATH_PRECISION_FULL); - - if (c->dispatch_width == 16) { - brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); - brw_math(p, sechalf(dst), - op, - inst->saturate ? BRW_MATH_SATURATE_SATURATE : - BRW_MATH_SATURATE_NONE, - inst->base_mrf + 1, sechalf(src[0]), - BRW_MATH_DATA_VECTOR, - BRW_MATH_PRECISION_FULL); - - brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); - } - } -} - -void -fs_visitor::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src) -{ - int msg_type = -1; - int rlen = 4; - uint32_t simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8; - - if (c->dispatch_width == 16) - simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; - - if (intel->gen >= 5) { - switch (inst->opcode) { - case FS_OPCODE_TEX: - if (inst->shadow_compare) { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_COMPARE; - } else { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE; - } - break; - case FS_OPCODE_TXB: - if (inst->shadow_compare) { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE; - } else { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS; - } - break; - case FS_OPCODE_TXL: - if (inst->shadow_compare) { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE; - } else { - msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD; - } - break; - case FS_OPCODE_TXD: - assert(!"TXD isn't supported on gen5+ yet."); - break; - } - } else { - switch (inst->opcode) { - case FS_OPCODE_TEX: - /* Note that G45 and older determines shadow compare and dispatch width - * from message length for most messages. - */ - assert(c->dispatch_width == 8); - msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE; - if (inst->shadow_compare) { - assert(inst->mlen == 6); - } else { - assert(inst->mlen <= 4); - } - break; - case FS_OPCODE_TXB: - if (inst->shadow_compare) { - assert(inst->mlen == 6); - msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_COMPARE; - } else { - assert(inst->mlen == 9); - msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS; - simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; - } - break; - case FS_OPCODE_TXL: - if (inst->shadow_compare) { - assert(inst->mlen == 6); - msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_LOD_COMPARE; - } else { - assert(inst->mlen == 9); - msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD; - simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; - } - break; - case FS_OPCODE_TXD: - assert(!"TXD isn't supported on gen4 yet."); - break; - } - } - assert(msg_type != -1); - - if (simd_mode == BRW_SAMPLER_SIMD_MODE_SIMD16) { - rlen = 8; - dst = vec16(dst); - } - - brw_SAMPLE(p, - retype(dst, BRW_REGISTER_TYPE_UW), - inst->base_mrf, - src, - SURF_INDEX_TEXTURE(inst->sampler), - inst->sampler, - WRITEMASK_XYZW, - msg_type, - rlen, - inst->mlen, - 0, - inst->header_present, - simd_mode); -} - - -/* For OPCODE_DDX and OPCODE_DDY, per channel of output we've got input - * looking like: - * - * arg0: ss0.tl ss0.tr ss0.bl ss0.br ss1.tl ss1.tr ss1.bl ss1.br - * - * and we're trying to produce: - * - * DDX DDY - * dst: (ss0.tr - ss0.tl) (ss0.tl - ss0.bl) - * (ss0.tr - ss0.tl) (ss0.tr - ss0.br) - * (ss0.br - ss0.bl) (ss0.tl - ss0.bl) - * (ss0.br - ss0.bl) (ss0.tr - ss0.br) - * (ss1.tr - ss1.tl) (ss1.tl - ss1.bl) - * (ss1.tr - ss1.tl) (ss1.tr - ss1.br) - * (ss1.br - ss1.bl) (ss1.tl - ss1.bl) - * (ss1.br - ss1.bl) (ss1.tr - ss1.br) - * - * and add another set of two more subspans if in 16-pixel dispatch mode. - * - * For DDX, it ends up being easy: width = 2, horiz=0 gets us the same result - * for each pair, and vertstride = 2 jumps us 2 elements after processing a - * pair. But for DDY, it's harder, as we want to produce the pairs swizzled - * between each other. We could probably do it like ddx and swizzle the right - * order later, but bail for now and just produce - * ((ss0.tl - ss0.bl)x4 (ss1.tl - ss1.bl)x4) - */ -void -fs_visitor::generate_ddx(fs_inst *inst, struct brw_reg dst, struct brw_reg src) -{ - struct brw_reg src0 = brw_reg(src.file, src.nr, 1, - BRW_REGISTER_TYPE_F, - BRW_VERTICAL_STRIDE_2, - BRW_WIDTH_2, - BRW_HORIZONTAL_STRIDE_0, - BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); - struct brw_reg src1 = brw_reg(src.file, src.nr, 0, - BRW_REGISTER_TYPE_F, - BRW_VERTICAL_STRIDE_2, - BRW_WIDTH_2, - BRW_HORIZONTAL_STRIDE_0, - BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); - brw_ADD(p, dst, src0, negate(src1)); -} - -void -fs_visitor::generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src) -{ - struct brw_reg src0 = brw_reg(src.file, src.nr, 0, - BRW_REGISTER_TYPE_F, - BRW_VERTICAL_STRIDE_4, - BRW_WIDTH_4, - BRW_HORIZONTAL_STRIDE_0, - BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); - struct brw_reg src1 = brw_reg(src.file, src.nr, 2, - BRW_REGISTER_TYPE_F, - BRW_VERTICAL_STRIDE_4, - BRW_WIDTH_4, - BRW_HORIZONTAL_STRIDE_0, - BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); - brw_ADD(p, dst, src0, negate(src1)); -} - -void -fs_visitor::generate_discard(fs_inst *inst) -{ - struct brw_reg f0 = brw_flag_reg(); - - if (intel->gen >= 6) { - struct brw_reg g1 = retype(brw_vec1_grf(1, 7), BRW_REGISTER_TYPE_UW); - struct brw_reg some_register; - - /* As of gen6, we no longer have the mask register to look at, - * so life gets a bit more complicated. - */ - - /* Load the flag register with all ones. */ - brw_push_insn_state(p); - brw_set_mask_control(p, BRW_MASK_DISABLE); - brw_MOV(p, f0, brw_imm_uw(0xffff)); - brw_pop_insn_state(p); - - /* Do a comparison that should always fail, to produce 0s in the flag - * reg where we have active channels. - */ - some_register = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW); - brw_CMP(p, retype(brw_null_reg(), BRW_REGISTER_TYPE_UD), - BRW_CONDITIONAL_NZ, some_register, some_register); - - /* Undo CMP's whacking of predication*/ - brw_set_predicate_control(p, BRW_PREDICATE_NONE); - - brw_push_insn_state(p); - brw_set_mask_control(p, BRW_MASK_DISABLE); - brw_AND(p, g1, f0, g1); - brw_pop_insn_state(p); - } else { - struct brw_reg g0 = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW); - struct brw_reg mask = brw_uw1_reg(mask.file, mask.nr, 0); - - brw_push_insn_state(p); - brw_set_mask_control(p, BRW_MASK_DISABLE); - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - - /* Unlike the 965, we have the mask reg, so we just need - * somewhere to invert that (containing channels to be disabled) - * so it can be ANDed with the mask of pixels still to be - * written. Use the flag reg for consistency with gen6+. - */ - brw_NOT(p, f0, brw_mask_reg(1)); /* IMASK */ - brw_AND(p, g0, f0, g0); - - brw_pop_insn_state(p); - } -} - -void -fs_visitor::generate_spill(fs_inst *inst, struct brw_reg src) -{ - assert(inst->mlen != 0); - - brw_MOV(p, - retype(brw_message_reg(inst->base_mrf + 1), BRW_REGISTER_TYPE_UD), - retype(src, BRW_REGISTER_TYPE_UD)); - brw_oword_block_write_scratch(p, brw_message_reg(inst->base_mrf), 1, - inst->offset); -} - -void -fs_visitor::generate_unspill(fs_inst *inst, struct brw_reg dst) -{ - assert(inst->mlen != 0); - - /* Clear any post destination dependencies that would be ignored by - * the block read. See the B-Spec for pre-gen5 send instruction. - * - * This could use a better solution, since texture sampling and - * math reads could potentially run into it as well -- anywhere - * that we have a SEND with a destination that is a register that - * was written but not read within the last N instructions (what's - * N? unsure). This is rare because of dead code elimination, but - * not impossible. - */ - if (intel->gen == 4 && !intel->is_g4x) - brw_MOV(p, brw_null_reg(), dst); - - brw_oword_block_read_scratch(p, dst, brw_message_reg(inst->base_mrf), 1, - inst->offset); - - if (intel->gen == 4 && !intel->is_g4x) { - /* gen4 errata: destination from a send can't be used as a - * destination until it's been read. Just read it so we don't - * have to worry. - */ - brw_MOV(p, brw_null_reg(), dst); - } -} - - -void -fs_visitor::generate_pull_constant_load(fs_inst *inst, struct brw_reg dst) -{ - assert(inst->mlen != 0); - - /* Clear any post destination dependencies that would be ignored by - * the block read. See the B-Spec for pre-gen5 send instruction. - * - * This could use a better solution, since texture sampling and - * math reads could potentially run into it as well -- anywhere - * that we have a SEND with a destination that is a register that - * was written but not read within the last N instructions (what's - * N? unsure). This is rare because of dead code elimination, but - * not impossible. - */ - if (intel->gen == 4 && !intel->is_g4x) - brw_MOV(p, brw_null_reg(), dst); - - brw_oword_block_read(p, dst, brw_message_reg(inst->base_mrf), - inst->offset, SURF_INDEX_FRAG_CONST_BUFFER); - - if (intel->gen == 4 && !intel->is_g4x) { - /* gen4 errata: destination from a send can't be used as a - * destination until it's been read. Just read it so we don't - * have to worry. - */ - brw_MOV(p, brw_null_reg(), dst); - } -} - /** * To be called after the last _mesa_add_state_reference() call, to * set up prog_data.param[] for assign_curb_setup() and @@ -2892,7 +649,7 @@ fs_visitor::calculate_urb_setup() /* Figure out where each of the incoming setup attributes lands. */ if (intel->gen >= 6) { for (unsigned int i = 0; i < FRAG_ATTRIB_MAX; i++) { - if (brw->fragment_program->Base.InputsRead & BITFIELD64_BIT(i)) { + if (fp->Base.InputsRead & BITFIELD64_BIT(i)) { urb_setup[i] = urb_next++; } } @@ -3276,12 +1033,16 @@ fs_visitor::propagate_constants() scan_inst->src[i] = inst->src[0]; progress = true; } else if (i == 0 && scan_inst->src[1].file != IMM) { - /* Fit this constant in by swapping the operands and - * flipping the predicate - */ scan_inst->src[0] = scan_inst->src[1]; scan_inst->src[1] = inst->src[0]; - scan_inst->predicate_inverse = !scan_inst->predicate_inverse; + + /* If this was predicated, flipping operands means + * we also need to flip the predicate. + */ + if (scan_inst->conditional_mod == BRW_CONDITIONAL_NONE) { + scan_inst->predicate_inverse = + !scan_inst->predicate_inverse; + } progress = true; } break; @@ -3734,355 +1495,6 @@ fs_visitor::virtual_grf_interferes(int a, int b) return start < end; } -static struct brw_reg brw_reg_from_fs_reg(fs_reg *reg) -{ - struct brw_reg brw_reg; - - switch (reg->file) { - case GRF: - case ARF: - case MRF: - if (reg->smear == -1) { - brw_reg = brw_vec8_reg(reg->file, - reg->hw_reg, 0); - } else { - brw_reg = brw_vec1_reg(reg->file, - reg->hw_reg, reg->smear); - } - brw_reg = retype(brw_reg, reg->type); - if (reg->sechalf) - brw_reg = sechalf(brw_reg); - break; - case IMM: - switch (reg->type) { - case BRW_REGISTER_TYPE_F: - brw_reg = brw_imm_f(reg->imm.f); - break; - case BRW_REGISTER_TYPE_D: - brw_reg = brw_imm_d(reg->imm.i); - break; - case BRW_REGISTER_TYPE_UD: - brw_reg = brw_imm_ud(reg->imm.u); - break; - default: - assert(!"not reached"); - brw_reg = brw_null_reg(); - break; - } - break; - case FIXED_HW_REG: - brw_reg = reg->fixed_hw_reg; - break; - case BAD_FILE: - /* Probably unused. */ - brw_reg = brw_null_reg(); - break; - case UNIFORM: - assert(!"not reached"); - brw_reg = brw_null_reg(); - break; - default: - assert(!"not reached"); - brw_reg = brw_null_reg(); - break; - } - if (reg->abs) - brw_reg = brw_abs(brw_reg); - if (reg->negate) - brw_reg = negate(brw_reg); - - return brw_reg; -} - -void -fs_visitor::generate_code() -{ - int last_native_inst = p->nr_insn; - const char *last_annotation_string = NULL; - ir_instruction *last_annotation_ir = NULL; - - int loop_stack_array_size = 16; - int loop_stack_depth = 0; - brw_instruction **loop_stack = - rzalloc_array(this->mem_ctx, brw_instruction *, loop_stack_array_size); - int *if_depth_in_loop = - rzalloc_array(this->mem_ctx, int, loop_stack_array_size); - - - if (unlikely(INTEL_DEBUG & DEBUG_WM)) { - printf("Native code for fragment shader %d (%d-wide dispatch):\n", - ctx->Shader.CurrentFragmentProgram->Name, c->dispatch_width); - } - - foreach_iter(exec_list_iterator, iter, this->instructions) { - fs_inst *inst = (fs_inst *)iter.get(); - struct brw_reg src[3], dst; - - if (unlikely(INTEL_DEBUG & DEBUG_WM)) { - if (last_annotation_ir != inst->ir) { - last_annotation_ir = inst->ir; - if (last_annotation_ir) { - printf(" "); - last_annotation_ir->print(); - printf("\n"); - } - } - if (last_annotation_string != inst->annotation) { - last_annotation_string = inst->annotation; - if (last_annotation_string) - printf(" %s\n", last_annotation_string); - } - } - - for (unsigned int i = 0; i < 3; i++) { - src[i] = brw_reg_from_fs_reg(&inst->src[i]); - } - dst = brw_reg_from_fs_reg(&inst->dst); - - brw_set_conditionalmod(p, inst->conditional_mod); - brw_set_predicate_control(p, inst->predicated); - brw_set_predicate_inverse(p, inst->predicate_inverse); - brw_set_saturate(p, inst->saturate); - - if (inst->force_uncompressed || c->dispatch_width == 8) { - brw_set_compression_control(p, BRW_COMPRESSION_NONE); - } else if (inst->force_sechalf) { - brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); - } else { - brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); - } - - switch (inst->opcode) { - case BRW_OPCODE_MOV: - brw_MOV(p, dst, src[0]); - break; - case BRW_OPCODE_ADD: - brw_ADD(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_MUL: - brw_MUL(p, dst, src[0], src[1]); - break; - - case BRW_OPCODE_FRC: - brw_FRC(p, dst, src[0]); - break; - case BRW_OPCODE_RNDD: - brw_RNDD(p, dst, src[0]); - break; - case BRW_OPCODE_RNDE: - brw_RNDE(p, dst, src[0]); - break; - case BRW_OPCODE_RNDZ: - brw_RNDZ(p, dst, src[0]); - break; - - case BRW_OPCODE_AND: - brw_AND(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_OR: - brw_OR(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_XOR: - brw_XOR(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_NOT: - brw_NOT(p, dst, src[0]); - break; - case BRW_OPCODE_ASR: - brw_ASR(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_SHR: - brw_SHR(p, dst, src[0], src[1]); - break; - case BRW_OPCODE_SHL: - brw_SHL(p, dst, src[0], src[1]); - break; - - case BRW_OPCODE_CMP: - brw_CMP(p, dst, inst->conditional_mod, src[0], src[1]); - break; - case BRW_OPCODE_SEL: - brw_SEL(p, dst, src[0], src[1]); - break; - - case BRW_OPCODE_IF: - if (inst->src[0].file != BAD_FILE) { - /* The instruction has an embedded compare (only allowed on gen6) */ - assert(intel->gen == 6); - gen6_IF(p, inst->conditional_mod, src[0], src[1]); - } else { - brw_IF(p, c->dispatch_width == 16 ? BRW_EXECUTE_16 : BRW_EXECUTE_8); - } - if_depth_in_loop[loop_stack_depth]++; - break; - - case BRW_OPCODE_ELSE: - brw_ELSE(p); - break; - case BRW_OPCODE_ENDIF: - brw_ENDIF(p); - if_depth_in_loop[loop_stack_depth]--; - break; - - case BRW_OPCODE_DO: - loop_stack[loop_stack_depth++] = brw_DO(p, BRW_EXECUTE_8); - if (loop_stack_array_size <= loop_stack_depth) { - loop_stack_array_size *= 2; - loop_stack = reralloc(this->mem_ctx, loop_stack, brw_instruction *, - loop_stack_array_size); - if_depth_in_loop = reralloc(this->mem_ctx, if_depth_in_loop, int, - loop_stack_array_size); - } - if_depth_in_loop[loop_stack_depth] = 0; - break; - - case BRW_OPCODE_BREAK: - brw_BREAK(p, if_depth_in_loop[loop_stack_depth]); - brw_set_predicate_control(p, BRW_PREDICATE_NONE); - break; - case BRW_OPCODE_CONTINUE: - /* FINISHME: We need to write the loop instruction support still. */ - if (intel->gen >= 6) - gen6_CONT(p, loop_stack[loop_stack_depth - 1]); - else - brw_CONT(p, if_depth_in_loop[loop_stack_depth]); - brw_set_predicate_control(p, BRW_PREDICATE_NONE); - break; - - case BRW_OPCODE_WHILE: { - struct brw_instruction *inst0, *inst1; - GLuint br = 1; - - if (intel->gen >= 5) - br = 2; - - assert(loop_stack_depth > 0); - loop_stack_depth--; - inst0 = inst1 = brw_WHILE(p, loop_stack[loop_stack_depth]); - if (intel->gen < 6) { - /* patch all the BREAK/CONT instructions from last BGNLOOP */ - while (inst0 > loop_stack[loop_stack_depth]) { - inst0--; - if (inst0->header.opcode == BRW_OPCODE_BREAK && - inst0->bits3.if_else.jump_count == 0) { - inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1); - } - else if (inst0->header.opcode == BRW_OPCODE_CONTINUE && - inst0->bits3.if_else.jump_count == 0) { - inst0->bits3.if_else.jump_count = br * (inst1 - inst0); - } - } - } - } - break; - - case FS_OPCODE_RCP: - case FS_OPCODE_RSQ: - case FS_OPCODE_SQRT: - case FS_OPCODE_EXP2: - case FS_OPCODE_LOG2: - case FS_OPCODE_POW: - case FS_OPCODE_SIN: - case FS_OPCODE_COS: - generate_math(inst, dst, src); - break; - case FS_OPCODE_PIXEL_X: - generate_pixel_xy(dst, true); - break; - case FS_OPCODE_PIXEL_Y: - generate_pixel_xy(dst, false); - break; - case FS_OPCODE_CINTERP: - brw_MOV(p, dst, src[0]); - break; - case FS_OPCODE_LINTERP: - generate_linterp(inst, dst, src); - break; - case FS_OPCODE_TEX: - case FS_OPCODE_TXB: - case FS_OPCODE_TXD: - case FS_OPCODE_TXL: - generate_tex(inst, dst, src[0]); - break; - case FS_OPCODE_DISCARD: - generate_discard(inst); - break; - case FS_OPCODE_DDX: - generate_ddx(inst, dst, src[0]); - break; - case FS_OPCODE_DDY: - generate_ddy(inst, dst, src[0]); - break; - - case FS_OPCODE_SPILL: - generate_spill(inst, src[0]); - break; - - case FS_OPCODE_UNSPILL: - generate_unspill(inst, dst); - break; - - case FS_OPCODE_PULL_CONSTANT_LOAD: - generate_pull_constant_load(inst, dst); - break; - - case FS_OPCODE_FB_WRITE: - generate_fb_write(inst); - break; - default: - if (inst->opcode < (int)ARRAY_SIZE(brw_opcodes)) { - _mesa_problem(ctx, "Unsupported opcode `%s' in FS", - brw_opcodes[inst->opcode].name); - } else { - _mesa_problem(ctx, "Unsupported opcode %d in FS", inst->opcode); - } - fail("unsupported opcode in FS\n"); - } - - if (unlikely(INTEL_DEBUG & DEBUG_WM)) { - for (unsigned int i = last_native_inst; i < p->nr_insn; i++) { - if (0) { - printf("0x%08x 0x%08x 0x%08x 0x%08x ", - ((uint32_t *)&p->store[i])[3], - ((uint32_t *)&p->store[i])[2], - ((uint32_t *)&p->store[i])[1], - ((uint32_t *)&p->store[i])[0]); - } - brw_disasm(stdout, &p->store[i], intel->gen); - } - } - - last_native_inst = p->nr_insn; - } - - if (unlikely(INTEL_DEBUG & DEBUG_WM)) { - printf("\n"); - } - - ralloc_free(loop_stack); - ralloc_free(if_depth_in_loop); - - brw_set_uip_jip(p); - - /* OK, while the INTEL_DEBUG=wm above is very nice for debugging FS - * emit issues, it doesn't get the jump distances into the output, - * which is often something we want to debug. So this is here in - * case you're doing that. - */ - if (0) { - if (unlikely(INTEL_DEBUG & DEBUG_WM)) { - for (unsigned int i = 0; i < p->nr_insn; i++) { - printf("0x%08x 0x%08x 0x%08x 0x%08x ", - ((uint32_t *)&p->store[i])[3], - ((uint32_t *)&p->store[i])[2], - ((uint32_t *)&p->store[i])[1], - ((uint32_t *)&p->store[i])[0]); - brw_disasm(stdout, &p->store[i], intel->gen); - } - } - } -} - bool fs_visitor::run() { @@ -4118,6 +1530,7 @@ fs_visitor::run() foreach_iter(exec_list_iterator, iter, *shader->ir) { ir_instruction *ir = (ir_instruction *)iter.get(); base_ir = ir; + this->result = reg_undef; ir->accept(this); } @@ -4171,9 +1584,9 @@ fs_visitor::run() generate_code(); if (c->dispatch_width == 8) { - c->prog_data.total_grf = grf_used; + c->prog_data.reg_blocks = brw_register_blocks(grf_used); } else { - c->prog_data.total_grf_16 = grf_used; + c->prog_data.reg_blocks_16 = brw_register_blocks(grf_used); c->prog_data.prog_offset_16 = prog_offset_16; /* Make sure we didn't try to sneak in an extra uniform */ @@ -4184,11 +1597,10 @@ fs_visitor::run() } bool -brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c) +brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c, + struct gl_shader_program *prog) { struct intel_context *intel = &brw->intel; - struct gl_context *ctx = &intel->ctx; - struct gl_shader_program *prog = ctx->Shader.CurrentFragmentProgram; if (!prog) return false; @@ -4208,16 +1620,17 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c) */ c->dispatch_width = 8; - fs_visitor v(c, shader); + fs_visitor v(c, prog, shader); if (!v.run()) { - /* FINISHME: Cleanly fail, test at link time, etc. */ - assert(!"not reached"); + prog->LinkStatus = GL_FALSE; + prog->InfoLog = ralloc_strdup(prog, v.fail_msg); + return false; } if (intel->gen >= 5 && c->prog_data.nr_pull_params == 0) { c->dispatch_width = 16; - fs_visitor v2(c, shader); + fs_visitor v2(c, prog, shader); v2.import_uniforms(v.variable_ht); v2.run(); } @@ -4226,3 +1639,73 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c) return true; } + +bool +brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog) +{ + struct brw_context *brw = brw_context(ctx); + struct brw_wm_prog_key key; + struct gl_fragment_program *fp = prog->FragmentProgram; + struct brw_fragment_program *bfp = brw_fragment_program(fp); + + if (!fp) + return true; + + memset(&key, 0, sizeof(key)); + + if (fp->UsesKill) + key.iz_lookup |= IZ_PS_KILL_ALPHATEST_BIT; + + if (fp->Base.OutputsWritten & BITFIELD64_BIT(FRAG_RESULT_DEPTH)) + key.iz_lookup |= IZ_PS_COMPUTES_DEPTH_BIT; + + /* Just assume depth testing. */ + key.iz_lookup |= IZ_DEPTH_TEST_ENABLE_BIT; + key.iz_lookup |= IZ_DEPTH_WRITE_ENABLE_BIT; + + key.vp_outputs_written |= BITFIELD64_BIT(FRAG_ATTRIB_WPOS); + for (int i = 0; i < FRAG_ATTRIB_MAX; i++) { + int vp_index = -1; + + if (!(fp->Base.InputsRead & BITFIELD64_BIT(i))) + continue; + + key.proj_attrib_mask |= 1 << i; + + if (i <= FRAG_ATTRIB_TEX7) + vp_index = i; + else if (i >= FRAG_ATTRIB_VAR0) + vp_index = i - FRAG_ATTRIB_VAR0 + VERT_RESULT_VAR0; + + if (vp_index >= 0) + key.vp_outputs_written |= BITFIELD64_BIT(vp_index); + } + + key.clamp_fragment_color = true; + + for (int i = 0; i < BRW_MAX_TEX_UNIT; i++) { + /* FINISHME: depth compares might use (0,0,0,W) for example */ + key.tex_swizzles[i] = SWIZZLE_XYZW; + } + + if (fp->Base.InputsRead & FRAG_BIT_WPOS) { + key.drawable_height = ctx->DrawBuffer->Height; + key.render_to_fbo = ctx->DrawBuffer->Name != 0; + } + + key.nr_color_regions = 1; + + key.program_string_id = bfp->id; + + drm_intel_bo *old_prog_bo = brw->wm.prog_bo; + struct brw_wm_prog_data *old_prog_data = brw->wm.prog_data; + brw->wm.prog_bo = NULL; + + bool success = do_wm_prog(brw, prog, bfp, &key); + + drm_intel_bo_unreference(brw->wm.prog_bo); + brw->wm.prog_bo = old_prog_bo; + brw->wm.prog_data = old_prog_data; + + return success; +} diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 4b355c979eb..7570dda1024 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -359,12 +359,14 @@ class fs_visitor : public ir_visitor { public: - fs_visitor(struct brw_wm_compile *c, struct brw_shader *shader) + fs_visitor(struct brw_wm_compile *c, struct gl_shader_program *prog, + struct brw_shader *shader) { this->c = c; this->p = &c->func; this->brw = p->brw; - this->fp = brw->fragment_program; + this->fp = prog->FragmentProgram; + this->prog = prog; this->intel = &brw->intel; this->ctx = &intel->ctx; this->mem_ctx = ralloc_context(NULL); @@ -466,6 +468,8 @@ public: return emit(fs_inst(opcode, dst, src0, src1, src2)); } + int type_size(const struct glsl_type *type); + bool run(); void setup_paramvalues_refs(); void assign_curb_setup(); @@ -542,6 +546,7 @@ public: struct brw_wm_compile *c; struct brw_compile *p; struct brw_shader *shader; + struct gl_shader_program *prog; void *mem_ctx; exec_list instructions; @@ -570,8 +575,12 @@ public: /** @} */ bool failed; + char *fail_msg; - /* Result of last visit() method. */ + /* On entry to a visit() method, this is the storage for the + * result. On exit, the visit() called may have changed it, in + * which case the parent must use the new storage instead. + */ fs_reg result; fs_reg pixel_x; @@ -590,3 +599,4 @@ public: GLboolean brw_do_channel_expressions(struct exec_list *instructions); GLboolean brw_do_vector_splitting(struct exec_list *instructions); +bool brw_fs_precompile(struct gl_context *ctx, struct gl_shader_program *prog); diff --git a/src/mesa/drivers/dri/i965/brw_fs_emit.cpp b/src/mesa/drivers/dri/i965/brw_fs_emit.cpp new file mode 100644 index 00000000000..6b7c434949c --- /dev/null +++ b/src/mesa/drivers/dri/i965/brw_fs_emit.cpp @@ -0,0 +1,875 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/** @file brw_fs_emit.cpp + * + * This file supports emitting code from the FS LIR to the actual + * native instructions. + */ + +extern "C" { +#include "main/macros.h" +#include "brw_context.h" +#include "brw_eu.h" +} /* extern "C" */ + +#include "brw_fs.h" +#include "../glsl/ir_print_visitor.h" + +void +fs_visitor::generate_fb_write(fs_inst *inst) +{ + GLboolean eot = inst->eot; + struct brw_reg implied_header; + + /* Header is 2 regs, g0 and g1 are the contents. g0 will be implied + * move, here's g1. + */ + brw_push_insn_state(p); + brw_set_mask_control(p, BRW_MASK_DISABLE); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + + if (inst->header_present) { + if (intel->gen >= 6) { + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + brw_MOV(p, + retype(brw_message_reg(inst->base_mrf), BRW_REGISTER_TYPE_UD), + retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UD)); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + + if (inst->target > 0) { + /* Set the render target index for choosing BLEND_STATE. */ + brw_MOV(p, retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 0, 2), + BRW_REGISTER_TYPE_UD), + brw_imm_ud(inst->target)); + } + + implied_header = brw_null_reg(); + } else { + implied_header = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW); + + brw_MOV(p, + brw_message_reg(inst->base_mrf + 1), + brw_vec8_grf(1, 0)); + } + } else { + implied_header = brw_null_reg(); + } + + brw_pop_insn_state(p); + + brw_fb_WRITE(p, + c->dispatch_width, + inst->base_mrf, + implied_header, + inst->target, + inst->mlen, + 0, + eot, + inst->header_present); +} + +/* Computes the integer pixel x,y values from the origin. + * + * This is the basis of gl_FragCoord computation, but is also used + * pre-gen6 for computing the deltas from v0 for computing + * interpolation. + */ +void +fs_visitor::generate_pixel_xy(struct brw_reg dst, bool is_x) +{ + struct brw_reg g1_uw = retype(brw_vec1_grf(1, 0), BRW_REGISTER_TYPE_UW); + struct brw_reg src; + struct brw_reg deltas; + + if (is_x) { + src = stride(suboffset(g1_uw, 4), 2, 4, 0); + deltas = brw_imm_v(0x10101010); + } else { + src = stride(suboffset(g1_uw, 5), 2, 4, 0); + deltas = brw_imm_v(0x11001100); + } + + if (c->dispatch_width == 16) { + dst = vec16(dst); + } + + /* We do this 8 or 16-wide, but since the destination is UW we + * don't do compression in the 16-wide case. + */ + brw_push_insn_state(p); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_ADD(p, dst, src, deltas); + brw_pop_insn_state(p); +} + +void +fs_visitor::generate_linterp(fs_inst *inst, + struct brw_reg dst, struct brw_reg *src) +{ + struct brw_reg delta_x = src[0]; + struct brw_reg delta_y = src[1]; + struct brw_reg interp = src[2]; + + if (brw->has_pln && + delta_y.nr == delta_x.nr + 1 && + (intel->gen >= 6 || (delta_x.nr & 1) == 0)) { + brw_PLN(p, dst, interp, delta_x); + } else { + brw_LINE(p, brw_null_reg(), interp, delta_x); + brw_MAC(p, dst, suboffset(interp, 1), delta_y); + } +} + +void +fs_visitor::generate_math(fs_inst *inst, + struct brw_reg dst, struct brw_reg *src) +{ + int op; + + switch (inst->opcode) { + case FS_OPCODE_RCP: + op = BRW_MATH_FUNCTION_INV; + break; + case FS_OPCODE_RSQ: + op = BRW_MATH_FUNCTION_RSQ; + break; + case FS_OPCODE_SQRT: + op = BRW_MATH_FUNCTION_SQRT; + break; + case FS_OPCODE_EXP2: + op = BRW_MATH_FUNCTION_EXP; + break; + case FS_OPCODE_LOG2: + op = BRW_MATH_FUNCTION_LOG; + break; + case FS_OPCODE_POW: + op = BRW_MATH_FUNCTION_POW; + break; + case FS_OPCODE_SIN: + op = BRW_MATH_FUNCTION_SIN; + break; + case FS_OPCODE_COS: + op = BRW_MATH_FUNCTION_COS; + break; + default: + assert(!"not reached: unknown math function"); + op = 0; + break; + } + + if (intel->gen >= 6) { + assert(inst->mlen == 0); + + if (inst->opcode == FS_OPCODE_POW) { + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_math2(p, dst, op, src[0], src[1]); + + if (c->dispatch_width == 16) { + brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); + brw_math2(p, sechalf(dst), op, sechalf(src[0]), sechalf(src[1])); + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + } + } else { + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_math(p, dst, + op, + inst->saturate ? BRW_MATH_SATURATE_SATURATE : + BRW_MATH_SATURATE_NONE, + 0, src[0], + BRW_MATH_DATA_VECTOR, + BRW_MATH_PRECISION_FULL); + + if (c->dispatch_width == 16) { + brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); + brw_math(p, sechalf(dst), + op, + inst->saturate ? BRW_MATH_SATURATE_SATURATE : + BRW_MATH_SATURATE_NONE, + 0, sechalf(src[0]), + BRW_MATH_DATA_VECTOR, + BRW_MATH_PRECISION_FULL); + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + } + } + } else /* gen <= 5 */{ + assert(inst->mlen >= 1); + + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_math(p, dst, + op, + inst->saturate ? BRW_MATH_SATURATE_SATURATE : + BRW_MATH_SATURATE_NONE, + inst->base_mrf, src[0], + BRW_MATH_DATA_VECTOR, + BRW_MATH_PRECISION_FULL); + + if (c->dispatch_width == 16) { + brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); + brw_math(p, sechalf(dst), + op, + inst->saturate ? BRW_MATH_SATURATE_SATURATE : + BRW_MATH_SATURATE_NONE, + inst->base_mrf + 1, sechalf(src[0]), + BRW_MATH_DATA_VECTOR, + BRW_MATH_PRECISION_FULL); + + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + } + } +} + +void +fs_visitor::generate_tex(fs_inst *inst, struct brw_reg dst, struct brw_reg src) +{ + int msg_type = -1; + int rlen = 4; + uint32_t simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8; + + if (c->dispatch_width == 16) + simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; + + if (intel->gen >= 5) { + switch (inst->opcode) { + case FS_OPCODE_TEX: + if (inst->shadow_compare) { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_COMPARE; + } else { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE; + } + break; + case FS_OPCODE_TXB: + if (inst->shadow_compare) { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS_COMPARE; + } else { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_BIAS; + } + break; + case FS_OPCODE_TXL: + if (inst->shadow_compare) { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD_COMPARE; + } else { + msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_LOD; + } + break; + case FS_OPCODE_TXD: + assert(!"TXD isn't supported on gen5+ yet."); + break; + } + } else { + switch (inst->opcode) { + case FS_OPCODE_TEX: + /* Note that G45 and older determines shadow compare and dispatch width + * from message length for most messages. + */ + assert(c->dispatch_width == 8); + msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE; + if (inst->shadow_compare) { + assert(inst->mlen == 6); + } else { + assert(inst->mlen <= 4); + } + break; + case FS_OPCODE_TXB: + if (inst->shadow_compare) { + assert(inst->mlen == 6); + msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_BIAS_COMPARE; + } else { + assert(inst->mlen == 9); + msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_BIAS; + simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; + } + break; + case FS_OPCODE_TXL: + if (inst->shadow_compare) { + assert(inst->mlen == 6); + msg_type = BRW_SAMPLER_MESSAGE_SIMD8_SAMPLE_LOD_COMPARE; + } else { + assert(inst->mlen == 9); + msg_type = BRW_SAMPLER_MESSAGE_SIMD16_SAMPLE_LOD; + simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; + } + break; + case FS_OPCODE_TXD: + assert(!"TXD isn't supported on gen4 yet."); + break; + } + } + assert(msg_type != -1); + + if (simd_mode == BRW_SAMPLER_SIMD_MODE_SIMD16) { + rlen = 8; + dst = vec16(dst); + } + + brw_SAMPLE(p, + retype(dst, BRW_REGISTER_TYPE_UW), + inst->base_mrf, + src, + SURF_INDEX_TEXTURE(inst->sampler), + inst->sampler, + WRITEMASK_XYZW, + msg_type, + rlen, + inst->mlen, + 0, + inst->header_present, + simd_mode); +} + + +/* For OPCODE_DDX and OPCODE_DDY, per channel of output we've got input + * looking like: + * + * arg0: ss0.tl ss0.tr ss0.bl ss0.br ss1.tl ss1.tr ss1.bl ss1.br + * + * and we're trying to produce: + * + * DDX DDY + * dst: (ss0.tr - ss0.tl) (ss0.tl - ss0.bl) + * (ss0.tr - ss0.tl) (ss0.tr - ss0.br) + * (ss0.br - ss0.bl) (ss0.tl - ss0.bl) + * (ss0.br - ss0.bl) (ss0.tr - ss0.br) + * (ss1.tr - ss1.tl) (ss1.tl - ss1.bl) + * (ss1.tr - ss1.tl) (ss1.tr - ss1.br) + * (ss1.br - ss1.bl) (ss1.tl - ss1.bl) + * (ss1.br - ss1.bl) (ss1.tr - ss1.br) + * + * and add another set of two more subspans if in 16-pixel dispatch mode. + * + * For DDX, it ends up being easy: width = 2, horiz=0 gets us the same result + * for each pair, and vertstride = 2 jumps us 2 elements after processing a + * pair. But for DDY, it's harder, as we want to produce the pairs swizzled + * between each other. We could probably do it like ddx and swizzle the right + * order later, but bail for now and just produce + * ((ss0.tl - ss0.bl)x4 (ss1.tl - ss1.bl)x4) + */ +void +fs_visitor::generate_ddx(fs_inst *inst, struct brw_reg dst, struct brw_reg src) +{ + struct brw_reg src0 = brw_reg(src.file, src.nr, 1, + BRW_REGISTER_TYPE_F, + BRW_VERTICAL_STRIDE_2, + BRW_WIDTH_2, + BRW_HORIZONTAL_STRIDE_0, + BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); + struct brw_reg src1 = brw_reg(src.file, src.nr, 0, + BRW_REGISTER_TYPE_F, + BRW_VERTICAL_STRIDE_2, + BRW_WIDTH_2, + BRW_HORIZONTAL_STRIDE_0, + BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); + brw_ADD(p, dst, src0, negate(src1)); +} + +void +fs_visitor::generate_ddy(fs_inst *inst, struct brw_reg dst, struct brw_reg src) +{ + struct brw_reg src0 = brw_reg(src.file, src.nr, 0, + BRW_REGISTER_TYPE_F, + BRW_VERTICAL_STRIDE_4, + BRW_WIDTH_4, + BRW_HORIZONTAL_STRIDE_0, + BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); + struct brw_reg src1 = brw_reg(src.file, src.nr, 2, + BRW_REGISTER_TYPE_F, + BRW_VERTICAL_STRIDE_4, + BRW_WIDTH_4, + BRW_HORIZONTAL_STRIDE_0, + BRW_SWIZZLE_XYZW, WRITEMASK_XYZW); + brw_ADD(p, dst, src0, negate(src1)); +} + +void +fs_visitor::generate_discard(fs_inst *inst) +{ + struct brw_reg f0 = brw_flag_reg(); + + if (intel->gen >= 6) { + struct brw_reg g1 = retype(brw_vec1_grf(1, 7), BRW_REGISTER_TYPE_UW); + struct brw_reg some_register; + + /* As of gen6, we no longer have the mask register to look at, + * so life gets a bit more complicated. + */ + + /* Load the flag register with all ones. */ + brw_push_insn_state(p); + brw_set_mask_control(p, BRW_MASK_DISABLE); + brw_MOV(p, f0, brw_imm_uw(0xffff)); + brw_pop_insn_state(p); + + /* Do a comparison that should always fail, to produce 0s in the flag + * reg where we have active channels. + */ + some_register = retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW); + brw_CMP(p, retype(brw_null_reg(), BRW_REGISTER_TYPE_UD), + BRW_CONDITIONAL_NZ, some_register, some_register); + + /* Undo CMP's whacking of predication*/ + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + + brw_push_insn_state(p); + brw_set_mask_control(p, BRW_MASK_DISABLE); + brw_AND(p, g1, f0, g1); + brw_pop_insn_state(p); + } else { + struct brw_reg g0 = retype(brw_vec1_grf(0, 0), BRW_REGISTER_TYPE_UW); + + brw_push_insn_state(p); + brw_set_mask_control(p, BRW_MASK_DISABLE); + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + + /* Unlike the 965, we have the mask reg, so we just need + * somewhere to invert that (containing channels to be disabled) + * so it can be ANDed with the mask of pixels still to be + * written. Use the flag reg for consistency with gen6+. + */ + brw_NOT(p, f0, brw_mask_reg(1)); /* IMASK */ + brw_AND(p, g0, f0, g0); + + brw_pop_insn_state(p); + } +} + +void +fs_visitor::generate_spill(fs_inst *inst, struct brw_reg src) +{ + assert(inst->mlen != 0); + + brw_MOV(p, + retype(brw_message_reg(inst->base_mrf + 1), BRW_REGISTER_TYPE_UD), + retype(src, BRW_REGISTER_TYPE_UD)); + brw_oword_block_write_scratch(p, brw_message_reg(inst->base_mrf), 1, + inst->offset); +} + +void +fs_visitor::generate_unspill(fs_inst *inst, struct brw_reg dst) +{ + assert(inst->mlen != 0); + + /* Clear any post destination dependencies that would be ignored by + * the block read. See the B-Spec for pre-gen5 send instruction. + * + * This could use a better solution, since texture sampling and + * math reads could potentially run into it as well -- anywhere + * that we have a SEND with a destination that is a register that + * was written but not read within the last N instructions (what's + * N? unsure). This is rare because of dead code elimination, but + * not impossible. + */ + if (intel->gen == 4 && !intel->is_g4x) + brw_MOV(p, brw_null_reg(), dst); + + brw_oword_block_read_scratch(p, dst, brw_message_reg(inst->base_mrf), 1, + inst->offset); + + if (intel->gen == 4 && !intel->is_g4x) { + /* gen4 errata: destination from a send can't be used as a + * destination until it's been read. Just read it so we don't + * have to worry. + */ + brw_MOV(p, brw_null_reg(), dst); + } +} + +void +fs_visitor::generate_pull_constant_load(fs_inst *inst, struct brw_reg dst) +{ + assert(inst->mlen != 0); + + /* Clear any post destination dependencies that would be ignored by + * the block read. See the B-Spec for pre-gen5 send instruction. + * + * This could use a better solution, since texture sampling and + * math reads could potentially run into it as well -- anywhere + * that we have a SEND with a destination that is a register that + * was written but not read within the last N instructions (what's + * N? unsure). This is rare because of dead code elimination, but + * not impossible. + */ + if (intel->gen == 4 && !intel->is_g4x) + brw_MOV(p, brw_null_reg(), dst); + + brw_oword_block_read(p, dst, brw_message_reg(inst->base_mrf), + inst->offset, SURF_INDEX_FRAG_CONST_BUFFER); + + if (intel->gen == 4 && !intel->is_g4x) { + /* gen4 errata: destination from a send can't be used as a + * destination until it's been read. Just read it so we don't + * have to worry. + */ + brw_MOV(p, brw_null_reg(), dst); + } +} + +static struct brw_reg +brw_reg_from_fs_reg(fs_reg *reg) +{ + struct brw_reg brw_reg; + + switch (reg->file) { + case GRF: + case ARF: + case MRF: + if (reg->smear == -1) { + brw_reg = brw_vec8_reg(reg->file, + reg->hw_reg, 0); + } else { + brw_reg = brw_vec1_reg(reg->file, + reg->hw_reg, reg->smear); + } + brw_reg = retype(brw_reg, reg->type); + if (reg->sechalf) + brw_reg = sechalf(brw_reg); + break; + case IMM: + switch (reg->type) { + case BRW_REGISTER_TYPE_F: + brw_reg = brw_imm_f(reg->imm.f); + break; + case BRW_REGISTER_TYPE_D: + brw_reg = brw_imm_d(reg->imm.i); + break; + case BRW_REGISTER_TYPE_UD: + brw_reg = brw_imm_ud(reg->imm.u); + break; + default: + assert(!"not reached"); + brw_reg = brw_null_reg(); + break; + } + break; + case FIXED_HW_REG: + brw_reg = reg->fixed_hw_reg; + break; + case BAD_FILE: + /* Probably unused. */ + brw_reg = brw_null_reg(); + break; + case UNIFORM: + assert(!"not reached"); + brw_reg = brw_null_reg(); + break; + default: + assert(!"not reached"); + brw_reg = brw_null_reg(); + break; + } + if (reg->abs) + brw_reg = brw_abs(brw_reg); + if (reg->negate) + brw_reg = negate(brw_reg); + + return brw_reg; +} + +void +fs_visitor::generate_code() +{ + int last_native_inst = p->nr_insn; + const char *last_annotation_string = NULL; + ir_instruction *last_annotation_ir = NULL; + + int loop_stack_array_size = 16; + int loop_stack_depth = 0; + brw_instruction **loop_stack = + rzalloc_array(this->mem_ctx, brw_instruction *, loop_stack_array_size); + int *if_depth_in_loop = + rzalloc_array(this->mem_ctx, int, loop_stack_array_size); + + + if (unlikely(INTEL_DEBUG & DEBUG_WM)) { + printf("Native code for fragment shader %d (%d-wide dispatch):\n", + prog->Name, c->dispatch_width); + } + + foreach_iter(exec_list_iterator, iter, this->instructions) { + fs_inst *inst = (fs_inst *)iter.get(); + struct brw_reg src[3], dst; + + if (unlikely(INTEL_DEBUG & DEBUG_WM)) { + if (last_annotation_ir != inst->ir) { + last_annotation_ir = inst->ir; + if (last_annotation_ir) { + printf(" "); + last_annotation_ir->print(); + printf("\n"); + } + } + if (last_annotation_string != inst->annotation) { + last_annotation_string = inst->annotation; + if (last_annotation_string) + printf(" %s\n", last_annotation_string); + } + } + + for (unsigned int i = 0; i < 3; i++) { + src[i] = brw_reg_from_fs_reg(&inst->src[i]); + } + dst = brw_reg_from_fs_reg(&inst->dst); + + brw_set_conditionalmod(p, inst->conditional_mod); + brw_set_predicate_control(p, inst->predicated); + brw_set_predicate_inverse(p, inst->predicate_inverse); + brw_set_saturate(p, inst->saturate); + + if (inst->force_uncompressed || c->dispatch_width == 8) { + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + } else if (inst->force_sechalf) { + brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); + } else { + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + } + + switch (inst->opcode) { + case BRW_OPCODE_MOV: + brw_MOV(p, dst, src[0]); + break; + case BRW_OPCODE_ADD: + brw_ADD(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_MUL: + brw_MUL(p, dst, src[0], src[1]); + break; + + case BRW_OPCODE_FRC: + brw_FRC(p, dst, src[0]); + break; + case BRW_OPCODE_RNDD: + brw_RNDD(p, dst, src[0]); + break; + case BRW_OPCODE_RNDE: + brw_RNDE(p, dst, src[0]); + break; + case BRW_OPCODE_RNDZ: + brw_RNDZ(p, dst, src[0]); + break; + + case BRW_OPCODE_AND: + brw_AND(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_OR: + brw_OR(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_XOR: + brw_XOR(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_NOT: + brw_NOT(p, dst, src[0]); + break; + case BRW_OPCODE_ASR: + brw_ASR(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_SHR: + brw_SHR(p, dst, src[0], src[1]); + break; + case BRW_OPCODE_SHL: + brw_SHL(p, dst, src[0], src[1]); + break; + + case BRW_OPCODE_CMP: + brw_CMP(p, dst, inst->conditional_mod, src[0], src[1]); + break; + case BRW_OPCODE_SEL: + brw_SEL(p, dst, src[0], src[1]); + break; + + case BRW_OPCODE_IF: + if (inst->src[0].file != BAD_FILE) { + /* The instruction has an embedded compare (only allowed on gen6) */ + assert(intel->gen == 6); + gen6_IF(p, inst->conditional_mod, src[0], src[1]); + } else { + brw_IF(p, c->dispatch_width == 16 ? BRW_EXECUTE_16 : BRW_EXECUTE_8); + } + if_depth_in_loop[loop_stack_depth]++; + break; + + case BRW_OPCODE_ELSE: + brw_ELSE(p); + break; + case BRW_OPCODE_ENDIF: + brw_ENDIF(p); + if_depth_in_loop[loop_stack_depth]--; + break; + + case BRW_OPCODE_DO: + loop_stack[loop_stack_depth++] = brw_DO(p, BRW_EXECUTE_8); + if (loop_stack_array_size <= loop_stack_depth) { + loop_stack_array_size *= 2; + loop_stack = reralloc(this->mem_ctx, loop_stack, brw_instruction *, + loop_stack_array_size); + if_depth_in_loop = reralloc(this->mem_ctx, if_depth_in_loop, int, + loop_stack_array_size); + } + if_depth_in_loop[loop_stack_depth] = 0; + break; + + case BRW_OPCODE_BREAK: + brw_BREAK(p, if_depth_in_loop[loop_stack_depth]); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + break; + case BRW_OPCODE_CONTINUE: + /* FINISHME: We need to write the loop instruction support still. */ + if (intel->gen >= 6) + gen6_CONT(p, loop_stack[loop_stack_depth - 1]); + else + brw_CONT(p, if_depth_in_loop[loop_stack_depth]); + brw_set_predicate_control(p, BRW_PREDICATE_NONE); + break; + + case BRW_OPCODE_WHILE: { + struct brw_instruction *inst0, *inst1; + GLuint br = 1; + + if (intel->gen >= 5) + br = 2; + + assert(loop_stack_depth > 0); + loop_stack_depth--; + inst0 = inst1 = brw_WHILE(p, loop_stack[loop_stack_depth]); + if (intel->gen < 6) { + /* patch all the BREAK/CONT instructions from last BGNLOOP */ + while (inst0 > loop_stack[loop_stack_depth]) { + inst0--; + if (inst0->header.opcode == BRW_OPCODE_BREAK && + inst0->bits3.if_else.jump_count == 0) { + inst0->bits3.if_else.jump_count = br * (inst1 - inst0 + 1); + } + else if (inst0->header.opcode == BRW_OPCODE_CONTINUE && + inst0->bits3.if_else.jump_count == 0) { + inst0->bits3.if_else.jump_count = br * (inst1 - inst0); + } + } + } + } + break; + + case FS_OPCODE_RCP: + case FS_OPCODE_RSQ: + case FS_OPCODE_SQRT: + case FS_OPCODE_EXP2: + case FS_OPCODE_LOG2: + case FS_OPCODE_POW: + case FS_OPCODE_SIN: + case FS_OPCODE_COS: + generate_math(inst, dst, src); + break; + case FS_OPCODE_PIXEL_X: + generate_pixel_xy(dst, true); + break; + case FS_OPCODE_PIXEL_Y: + generate_pixel_xy(dst, false); + break; + case FS_OPCODE_CINTERP: + brw_MOV(p, dst, src[0]); + break; + case FS_OPCODE_LINTERP: + generate_linterp(inst, dst, src); + break; + case FS_OPCODE_TEX: + case FS_OPCODE_TXB: + case FS_OPCODE_TXD: + case FS_OPCODE_TXL: + generate_tex(inst, dst, src[0]); + break; + case FS_OPCODE_DISCARD: + generate_discard(inst); + break; + case FS_OPCODE_DDX: + generate_ddx(inst, dst, src[0]); + break; + case FS_OPCODE_DDY: + generate_ddy(inst, dst, src[0]); + break; + + case FS_OPCODE_SPILL: + generate_spill(inst, src[0]); + break; + + case FS_OPCODE_UNSPILL: + generate_unspill(inst, dst); + break; + + case FS_OPCODE_PULL_CONSTANT_LOAD: + generate_pull_constant_load(inst, dst); + break; + + case FS_OPCODE_FB_WRITE: + generate_fb_write(inst); + break; + default: + if (inst->opcode < (int)ARRAY_SIZE(brw_opcodes)) { + _mesa_problem(ctx, "Unsupported opcode `%s' in FS", + brw_opcodes[inst->opcode].name); + } else { + _mesa_problem(ctx, "Unsupported opcode %d in FS", inst->opcode); + } + fail("unsupported opcode in FS\n"); + } + + if (unlikely(INTEL_DEBUG & DEBUG_WM)) { + for (unsigned int i = last_native_inst; i < p->nr_insn; i++) { + if (0) { + printf("0x%08x 0x%08x 0x%08x 0x%08x ", + ((uint32_t *)&p->store[i])[3], + ((uint32_t *)&p->store[i])[2], + ((uint32_t *)&p->store[i])[1], + ((uint32_t *)&p->store[i])[0]); + } + brw_disasm(stdout, &p->store[i], intel->gen); + } + } + + last_native_inst = p->nr_insn; + } + + if (unlikely(INTEL_DEBUG & DEBUG_WM)) { + printf("\n"); + } + + ralloc_free(loop_stack); + ralloc_free(if_depth_in_loop); + + brw_set_uip_jip(p); + + /* OK, while the INTEL_DEBUG=wm above is very nice for debugging FS + * emit issues, it doesn't get the jump distances into the output, + * which is often something we want to debug. So this is here in + * case you're doing that. + */ + if (0) { + if (unlikely(INTEL_DEBUG & DEBUG_WM)) { + for (unsigned int i = 0; i < p->nr_insn; i++) { + printf("0x%08x 0x%08x 0x%08x 0x%08x ", + ((uint32_t *)&p->store[i])[3], + ((uint32_t *)&p->store[i])[2], + ((uint32_t *)&p->store[i])[1], + ((uint32_t *)&p->store[i])[0]); + brw_disasm(stdout, &p->store[i], intel->gen); + } + } + } +} diff --git a/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp b/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp index fb1192c810a..d8218c26edb 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_schedule_instructions.cpp @@ -140,6 +140,7 @@ public: } void add_barrier_deps(schedule_node *n); void add_dep(schedule_node *before, schedule_node *after, int latency); + void add_dep(schedule_node *before, schedule_node *after); void add_inst(fs_inst *inst); void calculate_deps(); @@ -210,6 +211,15 @@ instruction_scheduler::add_dep(schedule_node *before, schedule_node *after, after->parent_count++; } +void +instruction_scheduler::add_dep(schedule_node *before, schedule_node *after) +{ + if (!before) + return; + + add_dep(before, after, before->latency); +} + /** * Sometimes we really want this node to execute after everything that * was before it and before everything that followed it. This adds @@ -253,6 +263,12 @@ instruction_scheduler::calculate_deps() schedule_node *last_grf_write[virtual_grf_count]; schedule_node *last_mrf_write[BRW_MAX_MRF]; schedule_node *last_conditional_mod = NULL; + /* Fixed HW registers are assumed to be separate from the virtual + * GRFs, so they can be tracked separately. We don't really write + * to fixed GRFs much, so don't bother tracking them on a more + * granular level. + */ + schedule_node *last_fixed_grf_write = NULL; /* The last instruction always needs to still be the last * instruction. Either it's flow control (IF, ELSE, ENDIF, DO, @@ -274,10 +290,11 @@ instruction_scheduler::calculate_deps() /* read-after-write deps. */ for (int i = 0; i < 3; i++) { if (inst->src[i].file == GRF) { - if (last_grf_write[inst->src[i].reg]) { - add_dep(last_grf_write[inst->src[i].reg], n, - last_grf_write[inst->src[i].reg]->latency); - } + add_dep(last_grf_write[inst->src[i].reg], n); + } else if (inst->src[i].file == FIXED_HW_REG && + (inst->src[i].fixed_hw_reg.file == + BRW_GENERAL_REGISTER_FILE)) { + add_dep(last_fixed_grf_write, n); } else if (inst->src[i].file != BAD_FILE && inst->src[i].file != IMM && inst->src[i].file != UNIFORM) { @@ -291,53 +308,41 @@ instruction_scheduler::calculate_deps() * instruction once it's sent, not when the result comes * back. */ - if (last_mrf_write[inst->base_mrf + i]) { - add_dep(last_mrf_write[inst->base_mrf + i], n, - last_mrf_write[inst->base_mrf + i]->latency); - } + add_dep(last_mrf_write[inst->base_mrf + i], n); } if (inst->predicated) { assert(last_conditional_mod); - add_dep(last_conditional_mod, n, last_conditional_mod->latency); + add_dep(last_conditional_mod, n); } /* write-after-write deps. */ if (inst->dst.file == GRF) { - if (last_grf_write[inst->dst.reg]) { - add_dep(last_grf_write[inst->dst.reg], n, - last_grf_write[inst->dst.reg]->latency); - } + add_dep(last_grf_write[inst->dst.reg], n); last_grf_write[inst->dst.reg] = n; } else if (inst->dst.file == MRF) { int reg = inst->dst.hw_reg & ~BRW_MRF_COMPR4; - if (last_mrf_write[reg]) { - add_dep(last_mrf_write[reg], n, - last_mrf_write[reg]->latency); - } + add_dep(last_mrf_write[reg], n); last_mrf_write[reg] = n; if (is_compressed(inst)) { if (inst->dst.hw_reg & BRW_MRF_COMPR4) reg += 4; else reg++; - if (last_mrf_write[reg]) { - add_dep(last_mrf_write[reg], n, - last_mrf_write[reg]->latency); - } + add_dep(last_mrf_write[reg], n); last_mrf_write[reg] = n; } + } else if (inst->dst.file == FIXED_HW_REG && + inst->dst.fixed_hw_reg.file == BRW_GENERAL_REGISTER_FILE) { + last_fixed_grf_write = n; } else if (inst->dst.file != BAD_FILE) { add_barrier_deps(n); } if (inst->mlen > 0) { for (int i = 0; i < v->implied_mrf_writes(inst); i++) { - if (last_mrf_write[inst->base_mrf + i]) { - add_dep(last_mrf_write[inst->base_mrf + i], n, - last_mrf_write[inst->base_mrf + i]->latency); - } + add_dep(last_mrf_write[inst->base_mrf + i], n); last_mrf_write[inst->base_mrf + i] = n; } } @@ -352,6 +357,7 @@ instruction_scheduler::calculate_deps() memset(last_grf_write, 0, sizeof(last_grf_write)); memset(last_mrf_write, 0, sizeof(last_mrf_write)); last_conditional_mod = NULL; + last_fixed_grf_write = NULL; exec_node *node; exec_node *prev; @@ -364,9 +370,11 @@ instruction_scheduler::calculate_deps() /* write-after-read deps. */ for (int i = 0; i < 3; i++) { if (inst->src[i].file == GRF) { - if (last_grf_write[inst->src[i].reg]) { - add_dep(n, last_grf_write[inst->src[i].reg], n->latency); - } + add_dep(n, last_grf_write[inst->src[i].reg]); + } else if (inst->src[i].file == FIXED_HW_REG && + (inst->src[i].fixed_hw_reg.file == + BRW_GENERAL_REGISTER_FILE)) { + add_dep(n, last_fixed_grf_write); } else if (inst->src[i].file != BAD_FILE && inst->src[i].file != IMM && inst->src[i].file != UNIFORM) { @@ -384,9 +392,7 @@ instruction_scheduler::calculate_deps() } if (inst->predicated) { - if (last_conditional_mod) { - add_dep(n, last_conditional_mod, n->latency); - } + add_dep(n, last_conditional_mod); } /* Update the things this instruction wrote, so earlier reads @@ -407,6 +413,9 @@ instruction_scheduler::calculate_deps() last_mrf_write[reg] = n; } + } else if (inst->dst.file == FIXED_HW_REG && + inst->dst.fixed_hw_reg.file == BRW_GENERAL_REGISTER_FILE) { + last_fixed_grf_write = n; } else if (inst->dst.file != BAD_FILE) { add_barrier_deps(n); } diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp new file mode 100644 index 00000000000..b4857871c78 --- /dev/null +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -0,0 +1,1734 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +/** @file brw_fs_visitor.cpp + * + * This file supports generating the FS LIR from the GLSL IR. The LIR + * makes it easier to do backend-specific optimizations than doing so + * in the GLSL IR or in the native code. + */ +extern "C" { + +#include <sys/types.h> + +#include "main/macros.h" +#include "main/shaderobj.h" +#include "main/uniforms.h" +#include "program/prog_parameter.h" +#include "program/prog_print.h" +#include "program/prog_optimize.h" +#include "program/register_allocate.h" +#include "program/sampler.h" +#include "program/hash_table.h" +#include "brw_context.h" +#include "brw_eu.h" +#include "brw_wm.h" +} +#include "brw_shader.h" +#include "brw_fs.h" +#include "../glsl/glsl_types.h" +#include "../glsl/ir_optimization.h" +#include "../glsl/ir_print_visitor.h" + +void +fs_visitor::visit(ir_variable *ir) +{ + fs_reg *reg = NULL; + + if (variable_storage(ir)) + return; + + if (strcmp(ir->name, "gl_FragColor") == 0) { + this->frag_color = ir; + } else if (strcmp(ir->name, "gl_FragData") == 0) { + this->frag_data = ir; + } else if (strcmp(ir->name, "gl_FragDepth") == 0) { + this->frag_depth = ir; + } + + if (ir->mode == ir_var_in) { + if (!strcmp(ir->name, "gl_FragCoord")) { + reg = emit_fragcoord_interpolation(ir); + } else if (!strcmp(ir->name, "gl_FrontFacing")) { + reg = emit_frontfacing_interpolation(ir); + } else { + reg = emit_general_interpolation(ir); + } + assert(reg); + hash_table_insert(this->variable_ht, reg, ir); + return; + } + + if (ir->mode == ir_var_uniform) { + int param_index = c->prog_data.nr_params; + + if (c->dispatch_width == 16) { + if (!variable_storage(ir)) { + fail("Failed to find uniform '%s' in 16-wide\n", ir->name); + } + return; + } + + if (!strncmp(ir->name, "gl_", 3)) { + setup_builtin_uniform_values(ir); + } else { + setup_uniform_values(ir->location, ir->type); + } + + reg = new(this->mem_ctx) fs_reg(UNIFORM, param_index); + reg->type = brw_type_for_base_type(ir->type); + } + + if (!reg) + reg = new(this->mem_ctx) fs_reg(this, ir->type); + + hash_table_insert(this->variable_ht, reg, ir); +} + +void +fs_visitor::visit(ir_dereference_variable *ir) +{ + fs_reg *reg = variable_storage(ir->var); + this->result = *reg; +} + +void +fs_visitor::visit(ir_dereference_record *ir) +{ + const glsl_type *struct_type = ir->record->type; + + ir->record->accept(this); + + unsigned int offset = 0; + for (unsigned int i = 0; i < struct_type->length; i++) { + if (strcmp(struct_type->fields.structure[i].name, ir->field) == 0) + break; + offset += type_size(struct_type->fields.structure[i].type); + } + this->result.reg_offset += offset; + this->result.type = brw_type_for_base_type(ir->type); +} + +void +fs_visitor::visit(ir_dereference_array *ir) +{ + ir_constant *index; + int element_size; + + ir->array->accept(this); + index = ir->array_index->as_constant(); + + element_size = type_size(ir->type); + this->result.type = brw_type_for_base_type(ir->type); + + if (index) { + assert(this->result.file == UNIFORM || + (this->result.file == GRF && + this->result.reg != 0)); + this->result.reg_offset += index->value.i[0] * element_size; + } else { + assert(!"FINISHME: non-constant array element"); + } +} + +/* Instruction selection: Produce a MOV.sat instead of + * MIN(MAX(val, 0), 1) when possible. + */ +bool +fs_visitor::try_emit_saturate(ir_expression *ir) +{ + ir_rvalue *sat_val = ir->as_rvalue_to_saturate(); + + if (!sat_val) + return false; + + this->result = reg_undef; + sat_val->accept(this); + fs_reg src = this->result; + + this->result = fs_reg(this, ir->type); + fs_inst *inst = emit(BRW_OPCODE_MOV, this->result, src); + inst->saturate = true; + + return true; +} + +void +fs_visitor::visit(ir_expression *ir) +{ + unsigned int operand; + fs_reg op[2], temp; + fs_inst *inst; + + assert(ir->get_num_operands() <= 2); + + if (try_emit_saturate(ir)) + return; + + /* This is where our caller would like us to put the result, if possible. */ + fs_reg saved_result_storage = this->result; + + for (operand = 0; operand < ir->get_num_operands(); operand++) { + this->result = reg_undef; + ir->operands[operand]->accept(this); + if (this->result.file == BAD_FILE) { + ir_print_visitor v; + fail("Failed to get tree for expression operand:\n"); + ir->operands[operand]->accept(&v); + } + op[operand] = this->result; + + /* Matrix expression operands should have been broken down to vector + * operations already. + */ + assert(!ir->operands[operand]->type->is_matrix()); + /* And then those vector operands should have been broken down to scalar. + */ + assert(!ir->operands[operand]->type->is_vector()); + } + + /* Inherit storage from our parent if possible, and otherwise we + * alloc a temporary. + */ + if (saved_result_storage.file == BAD_FILE) { + this->result = fs_reg(this, ir->type); + } else { + this->result = saved_result_storage; + } + + switch (ir->operation) { + case ir_unop_logic_not: + /* Note that BRW_OPCODE_NOT is not appropriate here, since it is + * ones complement of the whole register, not just bit 0. + */ + emit(BRW_OPCODE_XOR, this->result, op[0], fs_reg(1)); + break; + case ir_unop_neg: + op[0].negate = !op[0].negate; + this->result = op[0]; + break; + case ir_unop_abs: + op[0].abs = true; + op[0].negate = false; + this->result = op[0]; + break; + case ir_unop_sign: + temp = fs_reg(this, ir->type); + + /* Unalias the destination. (imagine a = sign(a)) */ + this->result = fs_reg(this, ir->type); + + emit(BRW_OPCODE_MOV, this->result, fs_reg(0.0f)); + + inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)); + inst->conditional_mod = BRW_CONDITIONAL_G; + inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(1.0f)); + inst->predicated = true; + + inst = emit(BRW_OPCODE_CMP, reg_null_f, op[0], fs_reg(0.0f)); + inst->conditional_mod = BRW_CONDITIONAL_L; + inst = emit(BRW_OPCODE_MOV, this->result, fs_reg(-1.0f)); + inst->predicated = true; + + break; + case ir_unop_rcp: + emit_math(FS_OPCODE_RCP, this->result, op[0]); + break; + + case ir_unop_exp2: + emit_math(FS_OPCODE_EXP2, this->result, op[0]); + break; + case ir_unop_log2: + emit_math(FS_OPCODE_LOG2, this->result, op[0]); + break; + case ir_unop_exp: + case ir_unop_log: + assert(!"not reached: should be handled by ir_explog_to_explog2"); + break; + case ir_unop_sin: + case ir_unop_sin_reduced: + emit_math(FS_OPCODE_SIN, this->result, op[0]); + break; + case ir_unop_cos: + case ir_unop_cos_reduced: + emit_math(FS_OPCODE_COS, this->result, op[0]); + break; + + case ir_unop_dFdx: + emit(FS_OPCODE_DDX, this->result, op[0]); + break; + case ir_unop_dFdy: + emit(FS_OPCODE_DDY, this->result, op[0]); + break; + + case ir_binop_add: + emit(BRW_OPCODE_ADD, this->result, op[0], op[1]); + break; + case ir_binop_sub: + assert(!"not reached: should be handled by ir_sub_to_add_neg"); + break; + + case ir_binop_mul: + emit(BRW_OPCODE_MUL, this->result, op[0], op[1]); + break; + case ir_binop_div: + assert(!"not reached: should be handled by ir_div_to_mul_rcp"); + break; + case ir_binop_mod: + assert(!"ir_binop_mod should have been converted to b * fract(a/b)"); + break; + + case ir_binop_less: + case ir_binop_greater: + case ir_binop_lequal: + case ir_binop_gequal: + case ir_binop_equal: + case ir_binop_all_equal: + case ir_binop_nequal: + case ir_binop_any_nequal: + temp = this->result; + /* original gen4 does implicit conversion before comparison. */ + if (intel->gen < 5) + temp.type = op[0].type; + + inst = emit(BRW_OPCODE_CMP, temp, op[0], op[1]); + inst->conditional_mod = brw_conditional_for_comparison(ir->operation); + emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(0x1)); + break; + + case ir_binop_logic_xor: + emit(BRW_OPCODE_XOR, this->result, op[0], op[1]); + break; + + case ir_binop_logic_or: + emit(BRW_OPCODE_OR, this->result, op[0], op[1]); + break; + + case ir_binop_logic_and: + emit(BRW_OPCODE_AND, this->result, op[0], op[1]); + break; + + case ir_binop_dot: + case ir_unop_any: + assert(!"not reached: should be handled by brw_fs_channel_expressions"); + break; + + case ir_unop_noise: + assert(!"not reached: should be handled by lower_noise"); + break; + + case ir_quadop_vector: + assert(!"not reached: should be handled by lower_quadop_vector"); + break; + + case ir_unop_sqrt: + emit_math(FS_OPCODE_SQRT, this->result, op[0]); + break; + + case ir_unop_rsq: + emit_math(FS_OPCODE_RSQ, this->result, op[0]); + break; + + case ir_unop_i2f: + case ir_unop_b2f: + case ir_unop_b2i: + case ir_unop_f2i: + emit(BRW_OPCODE_MOV, this->result, op[0]); + break; + case ir_unop_f2b: + case ir_unop_i2b: + temp = this->result; + /* original gen4 does implicit conversion before comparison. */ + if (intel->gen < 5) + temp.type = op[0].type; + + inst = emit(BRW_OPCODE_CMP, temp, op[0], fs_reg(0.0f)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + inst = emit(BRW_OPCODE_AND, this->result, this->result, fs_reg(1)); + break; + + case ir_unop_trunc: + emit(BRW_OPCODE_RNDZ, this->result, op[0]); + break; + case ir_unop_ceil: + op[0].negate = !op[0].negate; + inst = emit(BRW_OPCODE_RNDD, this->result, op[0]); + this->result.negate = true; + break; + case ir_unop_floor: + inst = emit(BRW_OPCODE_RNDD, this->result, op[0]); + break; + case ir_unop_fract: + inst = emit(BRW_OPCODE_FRC, this->result, op[0]); + break; + case ir_unop_round_even: + emit(BRW_OPCODE_RNDE, this->result, op[0]); + break; + + case ir_binop_min: + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_L; + } else { + /* Unalias the destination */ + this->result = fs_reg(this, ir->type); + + inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_L; + + inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); + inst->predicated = true; + } + break; + case ir_binop_max: + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_GE; + } else { + /* Unalias the destination */ + this->result = fs_reg(this, ir->type); + + inst = emit(BRW_OPCODE_CMP, this->result, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_G; + + inst = emit(BRW_OPCODE_SEL, this->result, op[0], op[1]); + inst->predicated = true; + } + break; + + case ir_binop_pow: + emit_math(FS_OPCODE_POW, this->result, op[0], op[1]); + break; + + case ir_unop_bit_not: + inst = emit(BRW_OPCODE_NOT, this->result, op[0]); + break; + case ir_binop_bit_and: + inst = emit(BRW_OPCODE_AND, this->result, op[0], op[1]); + break; + case ir_binop_bit_xor: + inst = emit(BRW_OPCODE_XOR, this->result, op[0], op[1]); + break; + case ir_binop_bit_or: + inst = emit(BRW_OPCODE_OR, this->result, op[0], op[1]); + break; + + case ir_unop_u2f: + case ir_binop_lshift: + case ir_binop_rshift: + assert(!"GLSL 1.30 features unsupported"); + break; + } +} + +void +fs_visitor::emit_assignment_writes(fs_reg &l, fs_reg &r, + const glsl_type *type, bool predicated) +{ + switch (type->base_type) { + case GLSL_TYPE_FLOAT: + case GLSL_TYPE_UINT: + case GLSL_TYPE_INT: + case GLSL_TYPE_BOOL: + for (unsigned int i = 0; i < type->components(); i++) { + l.type = brw_type_for_base_type(type); + r.type = brw_type_for_base_type(type); + + if (predicated || !l.equals(&r)) { + fs_inst *inst = emit(BRW_OPCODE_MOV, l, r); + inst->predicated = predicated; + } + + l.reg_offset++; + r.reg_offset++; + } + break; + case GLSL_TYPE_ARRAY: + for (unsigned int i = 0; i < type->length; i++) { + emit_assignment_writes(l, r, type->fields.array, predicated); + } + break; + + case GLSL_TYPE_STRUCT: + for (unsigned int i = 0; i < type->length; i++) { + emit_assignment_writes(l, r, type->fields.structure[i].type, + predicated); + } + break; + + case GLSL_TYPE_SAMPLER: + break; + + default: + assert(!"not reached"); + break; + } +} + +void +fs_visitor::visit(ir_assignment *ir) +{ + struct fs_reg l, r; + fs_inst *inst; + + /* FINISHME: arrays on the lhs */ + this->result = reg_undef; + ir->lhs->accept(this); + l = this->result; + + /* If we're doing a direct assignment, an RHS expression could + * drop its result right into our destination. Otherwise, tell it + * not to. + */ + if (ir->condition || + !(ir->lhs->type->is_scalar() || + (ir->lhs->type->is_vector() && + ir->write_mask == (1 << ir->lhs->type->vector_elements) - 1))) { + this->result = reg_undef; + } + + ir->rhs->accept(this); + r = this->result; + + assert(l.file != BAD_FILE); + assert(r.file != BAD_FILE); + + if (ir->condition) { + emit_bool_to_cond_code(ir->condition); + } + + if (ir->lhs->type->is_scalar() || + ir->lhs->type->is_vector()) { + for (int i = 0; i < ir->lhs->type->vector_elements; i++) { + if (ir->write_mask & (1 << i)) { + if (ir->condition) { + inst = emit(BRW_OPCODE_MOV, l, r); + inst->predicated = true; + } else if (!l.equals(&r)) { + inst = emit(BRW_OPCODE_MOV, l, r); + } + + r.reg_offset++; + } + l.reg_offset++; + } + } else { + emit_assignment_writes(l, r, ir->lhs->type, ir->condition != NULL); + } +} + +fs_inst * +fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, + int sampler) +{ + int mlen; + int base_mrf = 1; + bool simd16 = false; + fs_reg orig_dst; + + /* g0 header. */ + mlen = 1; + + if (ir->shadow_comparitor) { + for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { + fs_inst *inst = emit(BRW_OPCODE_MOV, + fs_reg(MRF, base_mrf + mlen + i), coordinate); + if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) + inst->saturate = true; + + coordinate.reg_offset++; + } + /* gen4's SIMD8 sampler always has the slots for u,v,r present. */ + mlen += 3; + + if (ir->op == ir_tex) { + /* There's no plain shadow compare message, so we use shadow + * compare with a bias of 0.0. + */ + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), fs_reg(0.0f)); + mlen++; + } else if (ir->op == ir_txb) { + this->result = reg_undef; + ir->lod_info.bias->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen++; + } else { + assert(ir->op == ir_txl); + this->result = reg_undef; + ir->lod_info.lod->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen++; + } + + this->result = reg_undef; + ir->shadow_comparitor->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen++; + } else if (ir->op == ir_tex) { + for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { + fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen + i), + coordinate); + if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) + inst->saturate = true; + coordinate.reg_offset++; + } + /* gen4's SIMD8 sampler always has the slots for u,v,r present. */ + mlen += 3; + } else if (ir->op == ir_txd) { + assert(!"TXD isn't supported on gen4 yet."); + } else { + /* Oh joy. gen4 doesn't have SIMD8 non-shadow-compare bias/lod + * instructions. We'll need to do SIMD16 here. + */ + assert(ir->op == ir_txb || ir->op == ir_txl); + + for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { + fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, + base_mrf + mlen + i * 2), + coordinate); + if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) + inst->saturate = true; + coordinate.reg_offset++; + } + + /* lod/bias appears after u/v/r. */ + mlen += 6; + + if (ir->op == ir_txb) { + this->result = reg_undef; + ir->lod_info.bias->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen++; + } else { + this->result = reg_undef; + ir->lod_info.lod->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen++; + } + + /* The unused upper half. */ + mlen++; + + /* Now, since we're doing simd16, the return is 2 interleaved + * vec4s where the odd-indexed ones are junk. We'll need to move + * this weirdness around to the expected layout. + */ + simd16 = true; + orig_dst = dst; + dst = fs_reg(this, glsl_type::get_array_instance(glsl_type::vec4_type, + 2)); + dst.type = BRW_REGISTER_TYPE_F; + } + + fs_inst *inst = NULL; + switch (ir->op) { + case ir_tex: + inst = emit(FS_OPCODE_TEX, dst); + break; + case ir_txb: + inst = emit(FS_OPCODE_TXB, dst); + break; + case ir_txl: + inst = emit(FS_OPCODE_TXL, dst); + break; + case ir_txd: + inst = emit(FS_OPCODE_TXD, dst); + break; + case ir_txf: + assert(!"GLSL 1.30 features unsupported"); + break; + } + inst->base_mrf = base_mrf; + inst->mlen = mlen; + inst->header_present = true; + + if (simd16) { + for (int i = 0; i < 4; i++) { + emit(BRW_OPCODE_MOV, orig_dst, dst); + orig_dst.reg_offset++; + dst.reg_offset += 2; + } + } + + return inst; +} + +/* gen5's sampler has slots for u, v, r, array index, then optional + * parameters like shadow comparitor or LOD bias. If optional + * parameters aren't present, those base slots are optional and don't + * need to be included in the message. + * + * We don't fill in the unnecessary slots regardless, which may look + * surprising in the disassembly. + */ +fs_inst * +fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate, + int sampler) +{ + int mlen = 0; + int base_mrf = 2; + int reg_width = c->dispatch_width / 8; + bool header_present = false; + + if (ir->offset) { + /* The offsets set up by the ir_texture visitor are in the + * m1 header, so we can't go headerless. + */ + header_present = true; + mlen++; + base_mrf--; + } + + for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { + fs_inst *inst = emit(BRW_OPCODE_MOV, + fs_reg(MRF, base_mrf + mlen + i * reg_width), + coordinate); + if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) + inst->saturate = true; + coordinate.reg_offset++; + } + mlen += ir->coordinate->type->vector_elements * reg_width; + + if (ir->shadow_comparitor) { + mlen = MAX2(mlen, header_present + 4 * reg_width); + + this->result = reg_undef; + ir->shadow_comparitor->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + } + + fs_inst *inst = NULL; + switch (ir->op) { + case ir_tex: + inst = emit(FS_OPCODE_TEX, dst); + break; + case ir_txb: + this->result = reg_undef; + ir->lod_info.bias->accept(this); + mlen = MAX2(mlen, header_present + 4 * reg_width); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + + inst = emit(FS_OPCODE_TXB, dst); + + break; + case ir_txl: + this->result = reg_undef; + ir->lod_info.lod->accept(this); + mlen = MAX2(mlen, header_present + 4 * reg_width); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + + inst = emit(FS_OPCODE_TXL, dst); + break; + case ir_txd: + case ir_txf: + assert(!"GLSL 1.30 features unsupported"); + break; + } + inst->base_mrf = base_mrf; + inst->mlen = mlen; + inst->header_present = header_present; + + if (mlen > 11) { + fail("Message length >11 disallowed by hardware\n"); + } + + return inst; +} + +fs_inst * +fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, + int sampler) +{ + int mlen = 0; + int base_mrf = 2; + int reg_width = c->dispatch_width / 8; + bool header_present = false; + + if (ir->offset) { + /* The offsets set up by the ir_texture visitor are in the + * m1 header, so we can't go headerless. + */ + header_present = true; + mlen++; + base_mrf--; + } + + if (ir->shadow_comparitor) { + ir->shadow_comparitor->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + } + + /* Set up the LOD info */ + switch (ir->op) { + case ir_tex: + break; + case ir_txb: + ir->lod_info.bias->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + break; + case ir_txl: + ir->lod_info.lod->accept(this); + emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result); + mlen += reg_width; + break; + case ir_txd: + case ir_txf: + assert(!"GLSL 1.30 features unsupported"); + break; + } + + /* Set up the coordinate */ + for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { + fs_inst *inst = emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), + coordinate); + if (i < 3 && c->key.gl_clamp_mask[i] & (1 << sampler)) + inst->saturate = true; + coordinate.reg_offset++; + mlen += reg_width; + } + + /* Generate the SEND */ + fs_inst *inst = NULL; + switch (ir->op) { + case ir_tex: inst = emit(FS_OPCODE_TEX, dst); break; + case ir_txb: inst = emit(FS_OPCODE_TXB, dst); break; + case ir_txl: inst = emit(FS_OPCODE_TXL, dst); break; + case ir_txd: inst = emit(FS_OPCODE_TXD, dst); break; + case ir_txf: assert(!"TXF unsupported."); + } + inst->base_mrf = base_mrf; + inst->mlen = mlen; + inst->header_present = header_present; + + if (mlen > 11) { + fail("Message length >11 disallowed by hardware\n"); + } + + return inst; +} + +void +fs_visitor::visit(ir_texture *ir) +{ + int sampler; + fs_inst *inst = NULL; + + this->result = reg_undef; + ir->coordinate->accept(this); + fs_reg coordinate = this->result; + + if (ir->offset != NULL) { + ir_constant *offset = ir->offset->as_constant(); + assert(offset != NULL); + + signed char offsets[3]; + for (unsigned i = 0; i < ir->offset->type->vector_elements; i++) + offsets[i] = (signed char) offset->value.i[i]; + + /* Combine all three offsets into a single unsigned dword: + * + * bits 11:8 - U Offset (X component) + * bits 7:4 - V Offset (Y component) + * bits 3:0 - R Offset (Z component) + */ + unsigned offset_bits = 0; + for (unsigned i = 0; i < ir->offset->type->vector_elements; i++) { + const unsigned shift = 4 * (2 - i); + offset_bits |= (offsets[i] << shift) & (0xF << shift); + } + + /* Explicitly set up the message header by copying g0 to msg reg m1. */ + emit(BRW_OPCODE_MOV, fs_reg(MRF, 1, BRW_REGISTER_TYPE_UD), + fs_reg(GRF, 0, BRW_REGISTER_TYPE_UD)); + + /* Then set the offset bits in DWord 2 of the message header. */ + emit(BRW_OPCODE_MOV, + fs_reg(retype(brw_vec1_reg(BRW_MESSAGE_REGISTER_FILE, 1, 2), + BRW_REGISTER_TYPE_UD)), + fs_reg(brw_imm_uw(offset_bits))); + } + + /* Should be lowered by do_lower_texture_projection */ + assert(!ir->projector); + + sampler = _mesa_get_sampler_uniform_value(ir->sampler, + prog, + &fp->Base); + sampler = fp->Base.SamplerUnits[sampler]; + + /* The 965 requires the EU to do the normalization of GL rectangle + * texture coordinates. We use the program parameter state + * tracking to get the scaling factor. + */ + if (ir->sampler->type->sampler_dimensionality == GLSL_SAMPLER_DIM_RECT) { + struct gl_program_parameter_list *params = c->fp->program.Base.Parameters; + int tokens[STATE_LENGTH] = { + STATE_INTERNAL, + STATE_TEXRECT_SCALE, + sampler, + 0, + 0 + }; + + if (c->dispatch_width == 16) { + fail("rectangle scale uniform setup not supported on 16-wide\n"); + this->result = fs_reg(this, ir->type); + return; + } + + c->prog_data.param_convert[c->prog_data.nr_params] = + PARAM_NO_CONVERT; + c->prog_data.param_convert[c->prog_data.nr_params + 1] = + PARAM_NO_CONVERT; + + fs_reg scale_x = fs_reg(UNIFORM, c->prog_data.nr_params); + fs_reg scale_y = fs_reg(UNIFORM, c->prog_data.nr_params + 1); + GLuint index = _mesa_add_state_reference(params, + (gl_state_index *)tokens); + + this->param_index[c->prog_data.nr_params] = index; + this->param_offset[c->prog_data.nr_params] = 0; + c->prog_data.nr_params++; + this->param_index[c->prog_data.nr_params] = index; + this->param_offset[c->prog_data.nr_params] = 1; + c->prog_data.nr_params++; + + fs_reg dst = fs_reg(this, ir->coordinate->type); + fs_reg src = coordinate; + coordinate = dst; + + emit(BRW_OPCODE_MUL, dst, src, scale_x); + dst.reg_offset++; + src.reg_offset++; + emit(BRW_OPCODE_MUL, dst, src, scale_y); + } + + /* Writemasking doesn't eliminate channels on SIMD8 texture + * samples, so don't worry about them. + */ + fs_reg dst = fs_reg(this, glsl_type::vec4_type); + + if (intel->gen >= 7) { + inst = emit_texture_gen7(ir, dst, coordinate, sampler); + } else if (intel->gen >= 5) { + inst = emit_texture_gen5(ir, dst, coordinate, sampler); + } else { + inst = emit_texture_gen4(ir, dst, coordinate, sampler); + } + + /* If there's an offset, we already set up m1. To avoid the implied move, + * use the null register. Otherwise, we want an implied move from g0. + */ + if (ir->offset != NULL || !inst->header_present) + inst->src[0] = reg_undef; + else + inst->src[0] = fs_reg(retype(brw_vec8_grf(0, 0), BRW_REGISTER_TYPE_UW)); + + inst->sampler = sampler; + + this->result = dst; + + if (ir->shadow_comparitor) + inst->shadow_compare = true; + + if (ir->type == glsl_type::float_type) { + /* Ignore DEPTH_TEXTURE_MODE swizzling. */ + assert(ir->sampler->type->sampler_shadow); + } else if (c->key.tex_swizzles[inst->sampler] != SWIZZLE_NOOP) { + fs_reg swizzle_dst = fs_reg(this, glsl_type::vec4_type); + + for (int i = 0; i < 4; i++) { + int swiz = GET_SWZ(c->key.tex_swizzles[inst->sampler], i); + fs_reg l = swizzle_dst; + l.reg_offset += i; + + if (swiz == SWIZZLE_ZERO) { + emit(BRW_OPCODE_MOV, l, fs_reg(0.0f)); + } else if (swiz == SWIZZLE_ONE) { + emit(BRW_OPCODE_MOV, l, fs_reg(1.0f)); + } else { + fs_reg r = dst; + r.reg_offset += GET_SWZ(c->key.tex_swizzles[inst->sampler], i); + emit(BRW_OPCODE_MOV, l, r); + } + } + this->result = swizzle_dst; + } +} + +void +fs_visitor::visit(ir_swizzle *ir) +{ + this->result = reg_undef; + ir->val->accept(this); + fs_reg val = this->result; + + if (ir->type->vector_elements == 1) { + this->result.reg_offset += ir->mask.x; + return; + } + + fs_reg result = fs_reg(this, ir->type); + this->result = result; + + for (unsigned int i = 0; i < ir->type->vector_elements; i++) { + fs_reg channel = val; + int swiz = 0; + + switch (i) { + case 0: + swiz = ir->mask.x; + break; + case 1: + swiz = ir->mask.y; + break; + case 2: + swiz = ir->mask.z; + break; + case 3: + swiz = ir->mask.w; + break; + } + + channel.reg_offset += swiz; + emit(BRW_OPCODE_MOV, result, channel); + result.reg_offset++; + } +} + +void +fs_visitor::visit(ir_discard *ir) +{ + assert(ir->condition == NULL); /* FINISHME */ + + emit(FS_OPCODE_DISCARD); + kill_emitted = true; +} + +void +fs_visitor::visit(ir_constant *ir) +{ + /* Set this->result to reg at the bottom of the function because some code + * paths will cause this visitor to be applied to other fields. This will + * cause the value stored in this->result to be modified. + * + * Make reg constant so that it doesn't get accidentally modified along the + * way. Yes, I actually had this problem. :( + */ + const fs_reg reg(this, ir->type); + fs_reg dst_reg = reg; + + if (ir->type->is_array()) { + const unsigned size = type_size(ir->type->fields.array); + + for (unsigned i = 0; i < ir->type->length; i++) { + this->result = reg_undef; + ir->array_elements[i]->accept(this); + fs_reg src_reg = this->result; + + dst_reg.type = src_reg.type; + for (unsigned j = 0; j < size; j++) { + emit(BRW_OPCODE_MOV, dst_reg, src_reg); + src_reg.reg_offset++; + dst_reg.reg_offset++; + } + } + } else if (ir->type->is_record()) { + foreach_list(node, &ir->components) { + ir_instruction *const field = (ir_instruction *) node; + const unsigned size = type_size(field->type); + + this->result = reg_undef; + field->accept(this); + fs_reg src_reg = this->result; + + dst_reg.type = src_reg.type; + for (unsigned j = 0; j < size; j++) { + emit(BRW_OPCODE_MOV, dst_reg, src_reg); + src_reg.reg_offset++; + dst_reg.reg_offset++; + } + } + } else { + const unsigned size = type_size(ir->type); + + for (unsigned i = 0; i < size; i++) { + switch (ir->type->base_type) { + case GLSL_TYPE_FLOAT: + emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.f[i])); + break; + case GLSL_TYPE_UINT: + emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.u[i])); + break; + case GLSL_TYPE_INT: + emit(BRW_OPCODE_MOV, dst_reg, fs_reg(ir->value.i[i])); + break; + case GLSL_TYPE_BOOL: + emit(BRW_OPCODE_MOV, dst_reg, fs_reg((int)ir->value.b[i])); + break; + default: + assert(!"Non-float/uint/int/bool constant"); + } + dst_reg.reg_offset++; + } + } + + this->result = reg; +} + +void +fs_visitor::emit_bool_to_cond_code(ir_rvalue *ir) +{ + ir_expression *expr = ir->as_expression(); + + if (expr) { + fs_reg op[2]; + fs_inst *inst; + + assert(expr->get_num_operands() <= 2); + for (unsigned int i = 0; i < expr->get_num_operands(); i++) { + assert(expr->operands[i]->type->is_scalar()); + + this->result = reg_undef; + expr->operands[i]->accept(this); + op[i] = this->result; + } + + switch (expr->operation) { + case ir_unop_logic_not: + inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], fs_reg(1)); + inst->conditional_mod = BRW_CONDITIONAL_Z; + break; + + case ir_binop_logic_xor: + inst = emit(BRW_OPCODE_XOR, reg_null_d, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + break; + + case ir_binop_logic_or: + inst = emit(BRW_OPCODE_OR, reg_null_d, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + break; + + case ir_binop_logic_and: + inst = emit(BRW_OPCODE_AND, reg_null_d, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + break; + + case ir_unop_f2b: + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0.0f)); + } else { + inst = emit(BRW_OPCODE_MOV, reg_null_f, op[0]); + } + inst->conditional_mod = BRW_CONDITIONAL_NZ; + break; + + case ir_unop_i2b: + if (intel->gen >= 6) { + inst = emit(BRW_OPCODE_CMP, reg_null_d, op[0], fs_reg(0)); + } else { + inst = emit(BRW_OPCODE_MOV, reg_null_d, op[0]); + } + inst->conditional_mod = BRW_CONDITIONAL_NZ; + break; + + case ir_binop_greater: + case ir_binop_gequal: + case ir_binop_less: + case ir_binop_lequal: + case ir_binop_equal: + case ir_binop_all_equal: + case ir_binop_nequal: + case ir_binop_any_nequal: + inst = emit(BRW_OPCODE_CMP, reg_null_cmp, op[0], op[1]); + inst->conditional_mod = + brw_conditional_for_comparison(expr->operation); + break; + + default: + assert(!"not reached"); + fail("bad cond code\n"); + break; + } + return; + } + + this->result = reg_undef; + ir->accept(this); + + if (intel->gen >= 6) { + fs_inst *inst = emit(BRW_OPCODE_AND, reg_null_d, this->result, fs_reg(1)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } else { + fs_inst *inst = emit(BRW_OPCODE_MOV, reg_null_d, this->result); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + } +} + +/** + * Emit a gen6 IF statement with the comparison folded into the IF + * instruction. + */ +void +fs_visitor::emit_if_gen6(ir_if *ir) +{ + ir_expression *expr = ir->condition->as_expression(); + + if (expr) { + fs_reg op[2]; + fs_inst *inst; + fs_reg temp; + + assert(expr->get_num_operands() <= 2); + for (unsigned int i = 0; i < expr->get_num_operands(); i++) { + assert(expr->operands[i]->type->is_scalar()); + + this->result = reg_undef; + expr->operands[i]->accept(this); + op[i] = this->result; + } + + switch (expr->operation) { + case ir_unop_logic_not: + inst = emit(BRW_OPCODE_IF, temp, op[0], fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_Z; + return; + + case ir_binop_logic_xor: + inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + return; + + case ir_binop_logic_or: + temp = fs_reg(this, glsl_type::bool_type); + emit(BRW_OPCODE_OR, temp, op[0], op[1]); + inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + return; + + case ir_binop_logic_and: + temp = fs_reg(this, glsl_type::bool_type); + emit(BRW_OPCODE_AND, temp, op[0], op[1]); + inst = emit(BRW_OPCODE_IF, reg_null_d, temp, fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + return; + + case ir_unop_f2b: + inst = emit(BRW_OPCODE_IF, reg_null_f, op[0], fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + return; + + case ir_unop_i2b: + inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + return; + + case ir_binop_greater: + case ir_binop_gequal: + case ir_binop_less: + case ir_binop_lequal: + case ir_binop_equal: + case ir_binop_all_equal: + case ir_binop_nequal: + case ir_binop_any_nequal: + inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], op[1]); + inst->conditional_mod = + brw_conditional_for_comparison(expr->operation); + return; + default: + assert(!"not reached"); + inst = emit(BRW_OPCODE_IF, reg_null_d, op[0], fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + fail("bad condition\n"); + return; + } + return; + } + + this->result = reg_undef; + ir->condition->accept(this); + + fs_inst *inst = emit(BRW_OPCODE_IF, reg_null_d, this->result, fs_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; +} + +void +fs_visitor::visit(ir_if *ir) +{ + fs_inst *inst; + + if (intel->gen != 6 && c->dispatch_width == 16) { + fail("Can't support (non-uniform) control flow on 16-wide\n"); + } + + /* Don't point the annotation at the if statement, because then it plus + * the then and else blocks get printed. + */ + this->base_ir = ir->condition; + + if (intel->gen == 6) { + emit_if_gen6(ir); + } else { + emit_bool_to_cond_code(ir->condition); + + inst = emit(BRW_OPCODE_IF); + inst->predicated = true; + } + + foreach_iter(exec_list_iterator, iter, ir->then_instructions) { + ir_instruction *ir = (ir_instruction *)iter.get(); + this->base_ir = ir; + this->result = reg_undef; + ir->accept(this); + } + + if (!ir->else_instructions.is_empty()) { + emit(BRW_OPCODE_ELSE); + + foreach_iter(exec_list_iterator, iter, ir->else_instructions) { + ir_instruction *ir = (ir_instruction *)iter.get(); + this->base_ir = ir; + this->result = reg_undef; + ir->accept(this); + } + } + + emit(BRW_OPCODE_ENDIF); +} + +void +fs_visitor::visit(ir_loop *ir) +{ + fs_reg counter = reg_undef; + + if (c->dispatch_width == 16) { + fail("Can't support (non-uniform) control flow on 16-wide\n"); + } + + if (ir->counter) { + this->base_ir = ir->counter; + ir->counter->accept(this); + counter = *(variable_storage(ir->counter)); + + if (ir->from) { + this->result = counter; + + this->base_ir = ir->from; + this->result = counter; + ir->from->accept(this); + + if (!this->result.equals(&counter)) + emit(BRW_OPCODE_MOV, counter, this->result); + } + } + + emit(BRW_OPCODE_DO); + + if (ir->to) { + this->base_ir = ir->to; + this->result = reg_undef; + ir->to->accept(this); + + fs_inst *inst = emit(BRW_OPCODE_CMP, reg_null_cmp, counter, this->result); + inst->conditional_mod = brw_conditional_for_comparison(ir->cmp); + + inst = emit(BRW_OPCODE_BREAK); + inst->predicated = true; + } + + foreach_iter(exec_list_iterator, iter, ir->body_instructions) { + ir_instruction *ir = (ir_instruction *)iter.get(); + + this->base_ir = ir; + this->result = reg_undef; + ir->accept(this); + } + + if (ir->increment) { + this->base_ir = ir->increment; + this->result = reg_undef; + ir->increment->accept(this); + emit(BRW_OPCODE_ADD, counter, counter, this->result); + } + + emit(BRW_OPCODE_WHILE); +} + +void +fs_visitor::visit(ir_loop_jump *ir) +{ + switch (ir->mode) { + case ir_loop_jump::jump_break: + emit(BRW_OPCODE_BREAK); + break; + case ir_loop_jump::jump_continue: + emit(BRW_OPCODE_CONTINUE); + break; + } +} + +void +fs_visitor::visit(ir_call *ir) +{ + assert(!"FINISHME"); +} + +void +fs_visitor::visit(ir_return *ir) +{ + assert(!"FINISHME"); +} + +void +fs_visitor::visit(ir_function *ir) +{ + /* Ignore function bodies other than main() -- we shouldn't see calls to + * them since they should all be inlined before we get to ir_to_mesa. + */ + if (strcmp(ir->name, "main") == 0) { + const ir_function_signature *sig; + exec_list empty; + + sig = ir->matching_signature(&empty); + + assert(sig); + + foreach_iter(exec_list_iterator, iter, sig->body) { + ir_instruction *ir = (ir_instruction *)iter.get(); + this->base_ir = ir; + this->result = reg_undef; + ir->accept(this); + } + } +} + +void +fs_visitor::visit(ir_function_signature *ir) +{ + assert(!"not reached"); + (void)ir; +} + +fs_inst * +fs_visitor::emit(fs_inst inst) +{ + fs_inst *list_inst = new(mem_ctx) fs_inst; + *list_inst = inst; + + if (force_uncompressed_stack > 0) + list_inst->force_uncompressed = true; + else if (force_sechalf_stack > 0) + list_inst->force_sechalf = true; + + list_inst->annotation = this->current_annotation; + list_inst->ir = this->base_ir; + + this->instructions.push_tail(list_inst); + + return list_inst; +} + +/** Emits a dummy fragment shader consisting of magenta for bringup purposes. */ +void +fs_visitor::emit_dummy_fs() +{ + /* Everyone's favorite color. */ + emit(BRW_OPCODE_MOV, fs_reg(MRF, 2), fs_reg(1.0f)); + emit(BRW_OPCODE_MOV, fs_reg(MRF, 3), fs_reg(0.0f)); + emit(BRW_OPCODE_MOV, fs_reg(MRF, 4), fs_reg(1.0f)); + emit(BRW_OPCODE_MOV, fs_reg(MRF, 5), fs_reg(0.0f)); + + fs_inst *write; + write = emit(FS_OPCODE_FB_WRITE, fs_reg(0), fs_reg(0)); + write->base_mrf = 0; +} + +/* The register location here is relative to the start of the URB + * data. It will get adjusted to be a real location before + * generate_code() time. + */ +struct brw_reg +fs_visitor::interp_reg(int location, int channel) +{ + int regnr = urb_setup[location] * 2 + channel / 2; + int stride = (channel & 1) * 4; + + assert(urb_setup[location] != -1); + + return brw_vec1_grf(regnr, stride); +} + +/** Emits the interpolation for the varying inputs. */ +void +fs_visitor::emit_interpolation_setup_gen4() +{ + this->current_annotation = "compute pixel centers"; + this->pixel_x = fs_reg(this, glsl_type::uint_type); + this->pixel_y = fs_reg(this, glsl_type::uint_type); + this->pixel_x.type = BRW_REGISTER_TYPE_UW; + this->pixel_y.type = BRW_REGISTER_TYPE_UW; + + emit(FS_OPCODE_PIXEL_X, this->pixel_x); + emit(FS_OPCODE_PIXEL_Y, this->pixel_y); + + this->current_annotation = "compute pixel deltas from v0"; + if (brw->has_pln) { + this->delta_x = fs_reg(this, glsl_type::vec2_type); + this->delta_y = this->delta_x; + this->delta_y.reg_offset++; + } else { + this->delta_x = fs_reg(this, glsl_type::float_type); + this->delta_y = fs_reg(this, glsl_type::float_type); + } + emit(BRW_OPCODE_ADD, this->delta_x, + this->pixel_x, fs_reg(negate(brw_vec1_grf(1, 0)))); + emit(BRW_OPCODE_ADD, this->delta_y, + this->pixel_y, fs_reg(negate(brw_vec1_grf(1, 1)))); + + this->current_annotation = "compute pos.w and 1/pos.w"; + /* Compute wpos.w. It's always in our setup, since it's needed to + * interpolate the other attributes. + */ + this->wpos_w = fs_reg(this, glsl_type::float_type); + emit(FS_OPCODE_LINTERP, wpos_w, this->delta_x, this->delta_y, + interp_reg(FRAG_ATTRIB_WPOS, 3)); + /* Compute the pixel 1/W value from wpos.w. */ + this->pixel_w = fs_reg(this, glsl_type::float_type); + emit_math(FS_OPCODE_RCP, this->pixel_w, wpos_w); + this->current_annotation = NULL; +} + +/** Emits the interpolation for the varying inputs. */ +void +fs_visitor::emit_interpolation_setup_gen6() +{ + struct brw_reg g1_uw = retype(brw_vec1_grf(1, 0), BRW_REGISTER_TYPE_UW); + + /* If the pixel centers end up used, the setup is the same as for gen4. */ + this->current_annotation = "compute pixel centers"; + fs_reg int_pixel_x = fs_reg(this, glsl_type::uint_type); + fs_reg int_pixel_y = fs_reg(this, glsl_type::uint_type); + int_pixel_x.type = BRW_REGISTER_TYPE_UW; + int_pixel_y.type = BRW_REGISTER_TYPE_UW; + emit(BRW_OPCODE_ADD, + int_pixel_x, + fs_reg(stride(suboffset(g1_uw, 4), 2, 4, 0)), + fs_reg(brw_imm_v(0x10101010))); + emit(BRW_OPCODE_ADD, + int_pixel_y, + fs_reg(stride(suboffset(g1_uw, 5), 2, 4, 0)), + fs_reg(brw_imm_v(0x11001100))); + + /* As of gen6, we can no longer mix float and int sources. We have + * to turn the integer pixel centers into floats for their actual + * use. + */ + this->pixel_x = fs_reg(this, glsl_type::float_type); + this->pixel_y = fs_reg(this, glsl_type::float_type); + emit(BRW_OPCODE_MOV, this->pixel_x, int_pixel_x); + emit(BRW_OPCODE_MOV, this->pixel_y, int_pixel_y); + + this->current_annotation = "compute pos.w"; + this->pixel_w = fs_reg(brw_vec8_grf(c->source_w_reg, 0)); + this->wpos_w = fs_reg(this, glsl_type::float_type); + emit_math(FS_OPCODE_RCP, this->wpos_w, this->pixel_w); + + this->delta_x = fs_reg(brw_vec8_grf(2, 0)); + this->delta_y = fs_reg(brw_vec8_grf(3, 0)); + + this->current_annotation = NULL; +} + +void +fs_visitor::emit_color_write(int index, int first_color_mrf, fs_reg color) +{ + int reg_width = c->dispatch_width / 8; + + if (c->dispatch_width == 8 || intel->gen == 6) { + /* SIMD8 write looks like: + * m + 0: r0 + * m + 1: r1 + * m + 2: g0 + * m + 3: g1 + * + * gen6 SIMD16 DP write looks like: + * m + 0: r0 + * m + 1: r1 + * m + 2: g0 + * m + 3: g1 + * m + 4: b0 + * m + 5: b1 + * m + 6: a0 + * m + 7: a1 + */ + emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index * reg_width), + color); + } else { + /* pre-gen6 SIMD16 single source DP write looks like: + * m + 0: r0 + * m + 1: g0 + * m + 2: b0 + * m + 3: a0 + * m + 4: r1 + * m + 5: g1 + * m + 6: b1 + * m + 7: a1 + */ + if (brw->has_compr4) { + /* By setting the high bit of the MRF register number, we + * indicate that we want COMPR4 mode - instead of doing the + * usual destination + 1 for the second half we get + * destination + 4. + */ + emit(BRW_OPCODE_MOV, + fs_reg(MRF, BRW_MRF_COMPR4 + first_color_mrf + index), color); + } else { + push_force_uncompressed(); + emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index), color); + pop_force_uncompressed(); + + push_force_sechalf(); + color.sechalf = true; + emit(BRW_OPCODE_MOV, fs_reg(MRF, first_color_mrf + index + 4), color); + pop_force_sechalf(); + color.sechalf = false; + } + } +} + +void +fs_visitor::emit_fb_writes() +{ + this->current_annotation = "FB write header"; + GLboolean header_present = GL_TRUE; + int nr = 0; + int reg_width = c->dispatch_width / 8; + + if (intel->gen >= 6 && + !this->kill_emitted && + c->key.nr_color_regions == 1) { + header_present = false; + } + + if (header_present) { + /* m0, m1 header */ + nr += 2; + } + + if (c->aa_dest_stencil_reg) { + push_force_uncompressed(); + emit(BRW_OPCODE_MOV, fs_reg(MRF, nr++), + fs_reg(brw_vec8_grf(c->aa_dest_stencil_reg, 0))); + pop_force_uncompressed(); + } + + /* Reserve space for color. It'll be filled in per MRT below. */ + int color_mrf = nr; + nr += 4 * reg_width; + + if (c->source_depth_to_render_target) { + if (intel->gen == 6 && c->dispatch_width == 16) { + /* For outputting oDepth on gen6, SIMD8 writes have to be + * used. This would require 8-wide moves of each half to + * message regs, kind of like pre-gen5 SIMD16 FB writes. + * Just bail on doing so for now. + */ + fail("Missing support for simd16 depth writes on gen6\n"); + } + + if (c->computes_depth) { + /* Hand over gl_FragDepth. */ + assert(this->frag_depth); + fs_reg depth = *(variable_storage(this->frag_depth)); + + emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), depth); + } else { + /* Pass through the payload depth. */ + emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), + fs_reg(brw_vec8_grf(c->source_depth_reg, 0))); + } + nr += reg_width; + } + + if (c->dest_depth_reg) { + emit(BRW_OPCODE_MOV, fs_reg(MRF, nr), + fs_reg(brw_vec8_grf(c->dest_depth_reg, 0))); + nr += reg_width; + } + + fs_reg color = reg_undef; + if (this->frag_color) + color = *(variable_storage(this->frag_color)); + else if (this->frag_data) { + color = *(variable_storage(this->frag_data)); + color.type = BRW_REGISTER_TYPE_F; + } + + for (int target = 0; target < c->key.nr_color_regions; target++) { + this->current_annotation = ralloc_asprintf(this->mem_ctx, + "FB write target %d", + target); + if (this->frag_color || this->frag_data) { + for (int i = 0; i < 4; i++) { + emit_color_write(i, color_mrf, color); + color.reg_offset++; + } + } + + if (this->frag_color) + color.reg_offset -= 4; + + fs_inst *inst = emit(FS_OPCODE_FB_WRITE); + inst->target = target; + inst->base_mrf = 0; + inst->mlen = nr; + if (target == c->key.nr_color_regions - 1) + inst->eot = true; + inst->header_present = header_present; + } + + if (c->key.nr_color_regions == 0) { + if (c->key.alpha_test && (this->frag_color || this->frag_data)) { + /* If the alpha test is enabled but there's no color buffer, + * we still need to send alpha out the pipeline to our null + * renderbuffer. + */ + color.reg_offset += 3; + emit_color_write(3, color_mrf, color); + } + + fs_inst *inst = emit(FS_OPCODE_FB_WRITE); + inst->base_mrf = 0; + inst->mlen = nr; + inst->eot = true; + inst->header_present = header_present; + } + + this->current_annotation = NULL; +} diff --git a/src/mesa/drivers/dri/i965/brw_sf.c b/src/mesa/drivers/dri/i965/brw_sf.c index 9b82fe159f9..c2227777cfb 100644 --- a/src/mesa/drivers/dri/i965/brw_sf.c +++ b/src/mesa/drivers/dri/i965/brw_sf.c @@ -181,9 +181,6 @@ static void upload_sf_prog(struct brw_context *brw) key.do_flat_shading = (ctx->Light.ShadeModel == GL_FLAT); key.do_twoside_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide); - /* _NEW_HINT */ - key.linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST); - /* _NEW_POLYGON */ if (key.do_twoside_color) { /* If we're rendering to a FBO, we have to invert the polygon diff --git a/src/mesa/drivers/dri/i965/brw_sf.h b/src/mesa/drivers/dri/i965/brw_sf.h index e525c730d3f..be32085c697 100644 --- a/src/mesa/drivers/dri/i965/brw_sf.h +++ b/src/mesa/drivers/dri/i965/brw_sf.h @@ -52,7 +52,6 @@ struct brw_sf_prog_key { GLuint do_flat_shading:1; GLuint frontface_ccw:1; GLuint do_point_sprite:1; - GLuint linear_color:1; /**< linear interp vs. perspective interp */ GLuint sprite_origin_lower_left:1; GLuint pad:24; }; diff --git a/src/mesa/drivers/dri/i965/brw_sf_emit.c b/src/mesa/drivers/dri/i965/brw_sf_emit.c index 4b2e26cbed7..52a3fb3893d 100644 --- a/src/mesa/drivers/dri/i965/brw_sf_emit.c +++ b/src/mesa/drivers/dri/i965/brw_sf_emit.c @@ -316,7 +316,7 @@ static GLboolean calculate_masks( struct brw_sf_compile *c, GLbitfield64 persp_mask; GLbitfield64 linear_mask; - if (c->key.do_flat_shading || c->key.linear_color) + if (c->key.do_flat_shading) persp_mask = c->key.attrs & ~(FRAG_BIT_WPOS | FRAG_BIT_COL0 | FRAG_BIT_COL1); diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp new file mode 100644 index 00000000000..9471883fb2b --- /dev/null +++ b/src/mesa/drivers/dri/i965/brw_shader.cpp @@ -0,0 +1,194 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +extern "C" { +#include "main/macros.h" +#include "brw_context.h" +} +#include "brw_fs.h" +#include "../glsl/ir_optimization.h" +#include "../glsl/ir_print_visitor.h" + +struct gl_shader * +brw_new_shader(struct gl_context *ctx, GLuint name, GLuint type) +{ + struct brw_shader *shader; + + shader = rzalloc(NULL, struct brw_shader); + if (shader) { + shader->base.Type = type; + shader->base.Name = name; + _mesa_init_shader(ctx, &shader->base); + } + + return &shader->base; +} + +struct gl_shader_program * +brw_new_shader_program(struct gl_context *ctx, GLuint name) +{ + struct brw_shader_program *prog; + prog = rzalloc(NULL, struct brw_shader_program); + if (prog) { + prog->base.Name = name; + _mesa_init_shader_program(ctx, &prog->base); + } + return &prog->base; +} + +/** + * Performs a compile of the shader stages even when we don't know + * what non-orthogonal state will be set, in the hope that it reflects + * the eventual NOS used, and thus allows us to produce link failures. + */ +bool +brw_shader_precompile(struct gl_context *ctx, struct gl_shader_program *prog) +{ + if (!brw_fs_precompile(ctx, prog)) + return false; + + return true; +} + +GLboolean +brw_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) +{ + struct brw_context *brw = brw_context(ctx); + struct intel_context *intel = &brw->intel; + + struct brw_shader *shader = + (struct brw_shader *)prog->_LinkedShaders[MESA_SHADER_FRAGMENT]; + if (shader != NULL) { + void *mem_ctx = ralloc_context(NULL); + bool progress; + + if (shader->ir) + ralloc_free(shader->ir); + shader->ir = new(shader) exec_list; + clone_ir_list(mem_ctx, shader->ir, shader->base.ir); + + do_mat_op_to_vec(shader->ir); + lower_instructions(shader->ir, + MOD_TO_FRACT | + DIV_TO_MUL_RCP | + SUB_TO_ADD_NEG | + EXP_TO_EXP2 | + LOG_TO_LOG2); + + /* Pre-gen6 HW can only nest if-statements 16 deep. Beyond this, + * if-statements need to be flattened. + */ + if (intel->gen < 6) + lower_if_to_cond_assign(shader->ir, 16); + + do_lower_texture_projection(shader->ir); + do_vec_index_to_cond_assign(shader->ir); + brw_do_cubemap_normalize(shader->ir); + lower_noise(shader->ir); + lower_quadop_vector(shader->ir, false); + lower_variable_index_to_cond_assign(shader->ir, + GL_TRUE, /* input */ + GL_TRUE, /* output */ + GL_TRUE, /* temp */ + GL_TRUE /* uniform */ + ); + + do { + progress = false; + + brw_do_channel_expressions(shader->ir); + brw_do_vector_splitting(shader->ir); + + progress = do_lower_jumps(shader->ir, true, true, + true, /* main return */ + false, /* continue */ + false /* loops */ + ) || progress; + + progress = do_common_optimization(shader->ir, true, 32) || progress; + } while (progress); + + validate_ir_tree(shader->ir); + + reparent_ir(shader->ir, shader->ir); + ralloc_free(mem_ctx); + } + + if (!_mesa_ir_link_shader(ctx, prog)) + return GL_FALSE; + + if (!brw_shader_precompile(ctx, prog)) + return GL_FALSE; + + return GL_TRUE; +} + + +int +brw_type_for_base_type(const struct glsl_type *type) +{ + switch (type->base_type) { + case GLSL_TYPE_FLOAT: + return BRW_REGISTER_TYPE_F; + case GLSL_TYPE_INT: + case GLSL_TYPE_BOOL: + return BRW_REGISTER_TYPE_D; + case GLSL_TYPE_UINT: + return BRW_REGISTER_TYPE_UD; + case GLSL_TYPE_ARRAY: + case GLSL_TYPE_STRUCT: + case GLSL_TYPE_SAMPLER: + /* These should be overridden with the type of the member when + * dereferenced into. BRW_REGISTER_TYPE_UD seems like a likely + * way to trip up if we don't. + */ + return BRW_REGISTER_TYPE_UD; + default: + assert(!"not reached"); + return BRW_REGISTER_TYPE_F; + } +} + +uint32_t +brw_conditional_for_comparison(unsigned int op) +{ + switch (op) { + case ir_binop_less: + return BRW_CONDITIONAL_L; + case ir_binop_greater: + return BRW_CONDITIONAL_G; + case ir_binop_lequal: + return BRW_CONDITIONAL_LE; + case ir_binop_gequal: + return BRW_CONDITIONAL_GE; + case ir_binop_equal: + case ir_binop_all_equal: /* same as equal for scalars */ + return BRW_CONDITIONAL_Z; + case ir_binop_nequal: + case ir_binop_any_nequal: /* same as nequal for scalars */ + return BRW_CONDITIONAL_NZ; + default: + assert(!"not reached: bad operation for comparison"); + return BRW_CONDITIONAL_NZ; + } +} diff --git a/src/mesa/drivers/dri/i965/brw_shader.h b/src/mesa/drivers/dri/i965/brw_shader.h new file mode 100644 index 00000000000..4c568a26caa --- /dev/null +++ b/src/mesa/drivers/dri/i965/brw_shader.h @@ -0,0 +1,25 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +int brw_type_for_base_type(const struct glsl_type *type); +uint32_t brw_conditional_for_comparison(unsigned int op); diff --git a/src/mesa/drivers/dri/i965/brw_state_dump.c b/src/mesa/drivers/dri/i965/brw_state_dump.c index 3a3aa8c0346..ef58619702d 100644 --- a/src/mesa/drivers/dri/i965/brw_state_dump.c +++ b/src/mesa/drivers/dri/i965/brw_state_dump.c @@ -110,7 +110,7 @@ static void dump_wm_surface_state(struct brw_context *brw) for (i = 0; i < brw->wm.nr_surfaces; i++) { unsigned int surfoff; - struct brw_surface_state *surf; + uint32_t *surf; char name[20]; if (brw->wm.surf_offset[i] == 0) { @@ -118,21 +118,25 @@ static void dump_wm_surface_state(struct brw_context *brw) continue; } surfoff = bo->offset + brw->wm.surf_offset[i]; - surf = (struct brw_surface_state *)(base + brw->wm.surf_offset[i]); + surf = (uint32_t *)(base + brw->wm.surf_offset[i]); sprintf(name, "WM SURF%d", i); state_out(name, surf, surfoff, 0, "%s %s\n", - get_965_surfacetype(surf->ss0.surface_type), - get_965_surface_format(surf->ss0.surface_format)); + get_965_surfacetype(GET_FIELD(surf[0], BRW_SURFACE_TYPE)), + get_965_surface_format(GET_FIELD(surf[0], BRW_SURFACE_FORMAT))); state_out(name, surf, surfoff, 1, "offset\n"); state_out(name, surf, surfoff, 2, "%dx%d size, %d mips\n", - surf->ss2.width + 1, surf->ss2.height + 1, surf->ss2.mip_count); - state_out(name, surf, surfoff, 3, "pitch %d, %stiled\n", - surf->ss3.pitch + 1, surf->ss3.tiled_surface ? "" : "not "); + GET_FIELD(surf[2], BRW_SURFACE_WIDTH) + 1, + GET_FIELD(surf[2], BRW_SURFACE_HEIGHT) + 1); + state_out(name, surf, surfoff, 3, "pitch %d, %s tiled\n", + GET_FIELD(surf[3], BRW_SURFACE_PITCH) + 1, + (surf[3] & BRW_SURFACE_TILED) ? + ((surf[3] & BRW_SURFACE_TILED_Y) ? "Y" : "X") : "not"); state_out(name, surf, surfoff, 4, "mip base %d\n", - surf->ss4.min_lod); + GET_FIELD(surf[4], BRW_SURFACE_MIN_LOD)); state_out(name, surf, surfoff, 5, "x,y offset: %d,%d\n", - surf->ss5.x_offset, surf->ss5.y_offset); + GET_FIELD(surf[5], BRW_SURFACE_X_OFFSET), + GET_FIELD(surf[5], BRW_SURFACE_Y_OFFSET)); } drm_intel_bo_unmap(bo); } diff --git a/src/mesa/drivers/dri/i965/brw_structs.h b/src/mesa/drivers/dri/i965/brw_structs.h index ad31222e9ec..7b9cdba4cbf 100644 --- a/src/mesa/drivers/dri/i965/brw_structs.h +++ b/src/mesa/drivers/dri/i965/brw_structs.h @@ -1225,80 +1225,6 @@ struct gen7_sf_clip_viewport { GLfloat pad1[4]; }; -/* Documented in the subsystem/shared-functions/sampler chapter... - * - * vol5c Shared Functions - 1.13.4.1.1 - */ -struct brw_surface_state -{ - struct { - GLuint cube_pos_z:1; - GLuint cube_neg_z:1; - GLuint cube_pos_y:1; - GLuint cube_neg_y:1; - GLuint cube_pos_x:1; - GLuint cube_neg_x:1; - GLuint pad:2; - /* Required on gen6 for surfaces accessed through render cache messages. - */ - GLuint render_cache_read_write:1; - /* Ironlake and newer: instead of replicating one of the texels */ - GLuint cube_corner_average:1; - GLuint mipmap_layout_mode:1; - GLuint vert_line_stride_ofs:1; - GLuint vert_line_stride:1; - GLuint color_blend:1; - GLuint writedisable_blue:1; - GLuint writedisable_green:1; - GLuint writedisable_red:1; - GLuint writedisable_alpha:1; - GLuint surface_format:9; /**< BRW_SURFACEFORMAT_x */ - GLuint data_return_format:1; - GLuint pad0:1; - GLuint surface_type:3; /**< BRW_SURFACE_1D/2D/3D/CUBE */ - } ss0; - - struct { - GLuint base_addr; - } ss1; - - struct { - GLuint pad:2; - GLuint mip_count:4; - GLuint width:13; - GLuint height:13; - } ss2; - - struct { - GLuint tile_walk:1; - GLuint tiled_surface:1; - GLuint pad:1; - GLuint pitch:18; - GLuint depth:11; - } ss3; - - struct { - GLuint multisample_position_palette_index:3; - GLuint pad1:1; - GLuint num_multisamples:3; - GLuint pad0:1; - GLuint render_target_view_extent:9; - GLuint min_array_elt:11; - GLuint min_lod:4; - } ss4; - - struct { - GLuint pad1:16; - GLuint cache_control:2; - GLuint gfdt:1; - GLuint encrypt:1; - GLuint y_offset:4; - GLuint pad0:1; - GLuint x_offset:7; - } ss5; /* New in G4X */ - -}; - /* volume 5c Shared Functions - 1.13.4.1.2 */ struct gen7_surface_state { diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c b/src/mesa/drivers/dri/i965/brw_tex_layout.c index 9ac0713a1d3..4a3a2bfada2 100644 --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c @@ -61,7 +61,7 @@ GLboolean brw_miptree_layout(struct intel_context *intel, */ h0 = ALIGN(mt->height0, align_h); h1 = ALIGN(minify(h0), align_h); - qpitch = (h0 + h1 + 11 * align_h); + qpitch = (h0 + h1 + (intel->gen >= 7 ? 12 : 11) * align_h); if (mt->compressed) qpitch /= 4; @@ -152,9 +152,6 @@ GLboolean brw_miptree_layout(struct intel_context *intel, * in the texture surfaces run, so they may be "vertical" through * memory. As a result, the docs say in Surface Padding Requirements: * Sampling Engine Surfaces that two extra rows of padding are required. - * We don't know of similar requirements for pre-965, but given that - * those docs are silent on padding requirements in general, let's play - * it safe. */ if (mt->target == GL_TEXTURE_CUBE_MAP) mt->total_height += 2; diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c b/src/mesa/drivers/dri/i965/brw_vs_constval.c index 47cc0a7da7a..9fdfebe9f76 100644 --- a/src/mesa/drivers/dri/i965/brw_vs_constval.c +++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c @@ -194,11 +194,19 @@ static void calc_wm_input_sizes( struct brw_context *brw ) /* BRW_NEW_VERTEX_PROGRAM */ const struct brw_vertex_program *vp = brw_vertex_program_const(brw->vertex_program); + /* BRW_NEW_FRAGMENT_PROGRAM */ + struct gl_shader_program *prog = ctx->Shader.CurrentFragmentProgram; /* BRW_NEW_INPUT_DIMENSIONS */ struct tracker t; GLuint insn; GLuint i; + /* If we're going to go through brw_fs.cpp, we don't end up using + * brw->wm.input_size_masks. + */ + if (prog && prog->_LinkedShaders[MESA_SHADER_FRAGMENT]) + return; + memset(&t, 0, sizeof(t)); /* _NEW_LIGHT */ @@ -238,7 +246,9 @@ static void calc_wm_input_sizes( struct brw_context *brw ) const struct brw_tracked_state brw_wm_input_sizes = { .dirty = { .mesa = _NEW_LIGHT, - .brw = BRW_NEW_VERTEX_PROGRAM | BRW_NEW_INPUT_DIMENSIONS, + .brw = (BRW_NEW_FRAGMENT_PROGRAM | + BRW_NEW_VERTEX_PROGRAM | + BRW_NEW_INPUT_DIMENSIONS), .cache = 0 }, .prepare = calc_wm_input_sizes diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c index 9f99ef57214..69650e1df77 100644 --- a/src/mesa/drivers/dri/i965/brw_vtbl.c +++ b/src/mesa/drivers/dri/i965/brw_vtbl.c @@ -136,6 +136,16 @@ static void brw_invalidate_state( struct intel_context *intel, GLuint new_state /* nothing */ } +/** + * \see intel_context.vtbl.is_hiz_depth_format + */ +static bool brw_is_hiz_depth_format(struct intel_context *intel, + gl_format format) +{ + /* In the future, this will support Z_FLOAT32. */ + return intel->has_hiz && (format == MESA_FORMAT_X8_Z24); +} + void brwInitVtbl( struct brw_context *brw ) { @@ -152,4 +162,5 @@ void brwInitVtbl( struct brw_context *brw ) brw->intel.vtbl.set_draw_region = brw_set_draw_region; brw->intel.vtbl.debug_batch = brw_debug_batch; brw->intel.vtbl.render_target_supported = brw_render_target_supported; + brw->intel.vtbl.is_hiz_depth_format = brw_is_hiz_depth_format; } diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index 907976295ab..1aebd12df49 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -34,6 +34,7 @@ #include "brw_state.h" #include "main/formats.h" #include "main/samplerobj.h" +#include "program/prog_parameter.h" #include "../glsl/ralloc.h" @@ -115,7 +116,7 @@ brw_wm_non_glsl_emit(struct brw_context *brw, struct brw_wm_compile *c) brw_wm_pass2(c); /* how many general-purpose registers are used */ - c->prog_data.total_grf = c->max_wm_grf; + c->prog_data.reg_blocks = brw_register_blocks(c->max_wm_grf); /* Emit GEN4 code. */ @@ -184,9 +185,10 @@ brw_wm_payload_setup(struct brw_context *brw, * Depending on the instructions used (i.e. flow control instructions) * we'll use one of two code generators. */ -static void do_wm_prog( struct brw_context *brw, - struct brw_fragment_program *fp, - struct brw_wm_prog_key *key) +bool do_wm_prog(struct brw_context *brw, + struct gl_shader_program *prog, + struct brw_fragment_program *fp, + struct brw_wm_prog_key *key) { struct intel_context *intel = &brw->intel; struct brw_wm_compile *c; @@ -202,7 +204,7 @@ static void do_wm_prog( struct brw_context *brw, * without triggering a segfault, no way to signal, * so just return. */ - return; + return false; } c->instruction = rzalloc_array(c, struct brw_wm_instruction, BRW_WM_MAX_INSN); c->prog_instructions = rzalloc_array(c, struct prog_instruction, BRW_WM_MAX_INSN); @@ -226,7 +228,10 @@ static void do_wm_prog( struct brw_context *brw, brw_init_compile(brw, &c->func, c); - if (!brw_wm_fs_emit(brw, c)) { + if (prog && prog->FragmentProgram) { + if (!brw_wm_fs_emit(brw, c, prog)) + return false; + } else { /* Fallback for fixed function and ARB_fp shaders. */ c->dispatch_width = 16; brw_wm_payload_setup(brw, c); @@ -274,6 +279,8 @@ static void do_wm_prog( struct brw_context *brw, program, program_size, &c->prog_data, sizeof(c->prog_data), &brw->wm.prog_data); + + return true; } @@ -355,9 +362,6 @@ static void brw_wm_populate_key( struct brw_context *brw, /* _NEW_LIGHT */ key->flat_shade = (ctx->Light.ShadeModel == GL_FLAT); - /* _NEW_HINT */ - key->linear_color = (ctx->Hint.PerspectiveCorrection == GL_FASTEST); - /* _NEW_FRAG_CLAMP | _NEW_BUFFERS */ key->clamp_fragment_color = ctx->Color._ClampFragmentColor; @@ -426,9 +430,6 @@ static void brw_wm_populate_key( struct brw_context *brw, } } - /* Shadow */ - key->shadowtex_mask = fp->program.Base.ShadowSamplers; - /* _NEW_BUFFERS */ /* * Include the draw buffer origin and height so that we can calculate @@ -468,6 +469,8 @@ static void brw_wm_populate_key( struct brw_context *brw, static void brw_prepare_wm_prog(struct brw_context *brw) { + struct intel_context *intel = &brw->intel; + struct gl_context *ctx = &intel->ctx; struct brw_wm_prog_key key; struct brw_fragment_program *fp = (struct brw_fragment_program *) brw->fragment_program; @@ -480,8 +483,11 @@ static void brw_prepare_wm_prog(struct brw_context *brw) brw->wm.prog_bo = brw_search_cache(&brw->cache, BRW_WM_PROG, &key, sizeof(key), &brw->wm.prog_data); - if (brw->wm.prog_bo == NULL) - do_wm_prog(brw, fp, &key); + if (brw->wm.prog_bo == NULL) { + bool success = do_wm_prog(brw, ctx->Shader.CurrentFragmentProgram, fp, + &key); + assert(success); + } } @@ -489,7 +495,6 @@ const struct brw_tracked_state brw_wm_prog = { .dirty = { .mesa = (_NEW_COLOR | _NEW_DEPTH | - _NEW_HINT | _NEW_STENCIL | _NEW_POLYGON | _NEW_LINE | diff --git a/src/mesa/drivers/dri/i965/brw_wm.h b/src/mesa/drivers/dri/i965/brw_wm.h index 8ab531bdf87..e244b55a083 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.h +++ b/src/mesa/drivers/dri/i965/brw_wm.h @@ -59,16 +59,16 @@ #define AA_ALWAYS 2 struct brw_wm_prog_key { + uint8_t iz_lookup; GLuint stats_wm:1; GLuint flat_shade:1; - GLuint linear_color:1; /**< linear interpolation vs perspective interp */ GLuint nr_color_regions:5; GLuint render_to_fbo:1; GLuint alpha_test:1; GLuint clamp_fragment_color:1; + GLuint line_aa:2; GLbitfield proj_attrib_mask; /**< one bit per fragment program attribute */ - GLuint shadowtex_mask:16; GLuint yuvtex_mask:16; GLuint yuvtex_swap_mask:16; /* UV swaped */ uint16_t gl_clamp_mask[3]; @@ -76,8 +76,6 @@ struct brw_wm_prog_key { GLushort tex_swizzles[BRW_MAX_TEX_UNIT]; GLushort drawable_height; GLbitfield64 vp_outputs_written; - GLuint iz_lookup; - GLuint line_aa; GLuint program_string_id:32; }; @@ -314,7 +312,8 @@ void brw_wm_print_program( struct brw_wm_compile *c, void brw_wm_lookup_iz(struct intel_context *intel, struct brw_wm_compile *c); -bool brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c); +bool brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c, + struct gl_shader_program *prog); /* brw_wm_emit.c */ void emit_alu1(struct brw_compile *p, @@ -476,5 +475,9 @@ bool brw_color_buffer_write_enabled(struct brw_context *brw); bool brw_render_target_supported(gl_format format); void brw_wm_payload_setup(struct brw_context *brw, struct brw_wm_compile *c); +bool do_wm_prog(struct brw_context *brw, + struct gl_shader_program *prog, + struct brw_fragment_program *fp, + struct brw_wm_prog_key *key); #endif diff --git a/src/mesa/drivers/dri/i965/brw_wm_fp.c b/src/mesa/drivers/dri/i965/brw_wm_fp.c index 9ddbee2edf4..59dcda7b414 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_fp.c +++ b/src/mesa/drivers/dri/i965/brw_wm_fp.c @@ -417,25 +417,14 @@ static void emit_interp( struct brw_wm_compile *c, src_undef()); } else { - if (c->key.linear_color) { - emit_op(c, - WM_LINTERP, - dst, - 0, - interp, - deltas, - src_undef()); - } - else { - /* perspective-corrected color interpolation */ - emit_op(c, - WM_PINTERP, - dst, - 0, - interp, - deltas, - get_pixel_w(c)); - } + /* perspective-corrected color interpolation */ + emit_op(c, + WM_PINTERP, + dst, + 0, + interp, + deltas, + get_pixel_w(c)); } break; case FRAG_ATTRIB_FOGC: diff --git a/src/mesa/drivers/dri/i965/brw_wm_state.c b/src/mesa/drivers/dri/i965/brw_wm_state.c index a356711470a..ef98f8126dc 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_state.c @@ -91,8 +91,8 @@ brw_prepare_wm_unit(struct brw_context *brw) } /* CACHE_NEW_WM_PROG */ - wm->thread0.grf_reg_count = ALIGN(brw->wm.prog_data->total_grf, 16) / 16 - 1; - wm->wm9.grf_reg_count_2 = ALIGN(brw->wm.prog_data->total_grf_16, 16) / 16 - 1; + wm->thread0.grf_reg_count = brw->wm.prog_data->reg_blocks; + wm->wm9.grf_reg_count_2 = brw->wm.prog_data->reg_blocks_16; wm->thread0.kernel_start_pointer = brw->wm.prog_bo->offset >> 6; /* reloc */ /* reloc */ wm->wm9.kernel_start_pointer_2 = (brw->wm.prog_bo->offset + diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index de1953ed600..6c1eba69d4b 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -200,22 +200,16 @@ translate_tex_format(gl_format mesa_format, } } -static void -brw_set_surface_tiling(struct brw_surface_state *surf, uint32_t tiling) +static uint32_t +brw_get_surface_tiling_bits(uint32_t tiling) { switch (tiling) { - case I915_TILING_NONE: - surf->ss3.tiled_surface = 0; - surf->ss3.tile_walk = 0; - break; case I915_TILING_X: - surf->ss3.tiled_surface = 1; - surf->ss3.tile_walk = BRW_TILEWALK_XMAJOR; - break; + return BRW_SURFACE_TILED; case I915_TILING_Y: - surf->ss3.tiled_surface = 1; - surf->ss3.tile_walk = BRW_TILEWALK_YMAJOR; - break; + return BRW_SURFACE_TILED | BRW_SURFACE_TILED_Y; + default: + return 0; } } @@ -228,46 +222,36 @@ brw_update_texture_surface( struct gl_context *ctx, GLuint unit ) struct gl_texture_image *firstImage = tObj->Image[0][tObj->BaseLevel]; struct gl_sampler_object *sampler = _mesa_get_samplerobj(ctx, unit); const GLuint surf_index = SURF_INDEX_TEXTURE(unit); - struct brw_surface_state *surf; + uint32_t *surf; - surf = brw_state_batch(brw, sizeof(*surf), 32, - &brw->wm.surf_offset[surf_index]); - memset(surf, 0, sizeof(*surf)); + surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[surf_index]); - surf->ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW; - surf->ss0.surface_type = translate_tex_target(tObj->Target); - surf->ss0.surface_format = translate_tex_format(firstImage->TexFormat, - firstImage->InternalFormat, - sampler->DepthMode, - sampler->sRGBDecode); + surf[0] = (translate_tex_target(tObj->Target) << BRW_SURFACE_TYPE_SHIFT | + BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | + BRW_SURFACE_CUBEFACE_ENABLES | + (translate_tex_format(firstImage->TexFormat, + firstImage->InternalFormat, + sampler->DepthMode, + sampler->sRGBDecode) << + BRW_SURFACE_FORMAT_SHIFT)); - /* This is ok for all textures with channel width 8bit or less: - */ -/* surf->ss0.data_return_format = BRW_SURFACERETURNFORMAT_S1; */ - surf->ss1.base_addr = intelObj->mt->region->buffer->offset; /* reloc */ + surf[1] = intelObj->mt->region->buffer->offset; /* reloc */ - surf->ss2.mip_count = intelObj->_MaxLevel - tObj->BaseLevel; - surf->ss2.width = firstImage->Width - 1; - surf->ss2.height = firstImage->Height - 1; - brw_set_surface_tiling(surf, intelObj->mt->region->tiling); - surf->ss3.pitch = (intelObj->mt->region->pitch * intelObj->mt->cpp) - 1; - surf->ss3.depth = firstImage->Depth - 1; + surf[2] = ((intelObj->_MaxLevel - tObj->BaseLevel) << BRW_SURFACE_LOD_SHIFT | + (firstImage->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | + (firstImage->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); - surf->ss4.min_lod = 0; - - if (tObj->Target == GL_TEXTURE_CUBE_MAP) { - surf->ss0.cube_pos_x = 1; - surf->ss0.cube_pos_y = 1; - surf->ss0.cube_pos_z = 1; - surf->ss0.cube_neg_x = 1; - surf->ss0.cube_neg_y = 1; - surf->ss0.cube_neg_z = 1; - } + surf[3] = (brw_get_surface_tiling_bits(intelObj->mt->region->tiling) | + (firstImage->Depth - 1) << BRW_SURFACE_DEPTH_SHIFT | + ((intelObj->mt->region->pitch * intelObj->mt->cpp) - 1) << + BRW_SURFACE_PITCH_SHIFT); + + surf[4] = 0; + surf[5] = 0; /* Emit relocation to surface contents */ drm_intel_bo_emit_reloc(brw->intel.batch.bo, - brw->wm.surf_offset[surf_index] + - offsetof(struct brw_surface_state, ss1), + brw->wm.surf_offset[surf_index] + 4, intelObj->mt->region->buffer, 0, I915_GEM_DOMAIN_SAMPLER, 0); } @@ -284,34 +268,34 @@ brw_create_constant_surface(struct brw_context *brw, { struct intel_context *intel = &brw->intel; const GLint w = width - 1; - struct brw_surface_state *surf; + uint32_t *surf; - surf = brw_state_batch(brw, sizeof(*surf), 32, out_offset); - memset(surf, 0, sizeof(*surf)); + surf = brw_state_batch(brw, 6 * 4, 32, out_offset); - surf->ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW; - surf->ss0.surface_type = BRW_SURFACE_BUFFER; - surf->ss0.surface_format = BRW_SURFACEFORMAT_R32G32B32A32_FLOAT; + surf[0] = (BRW_SURFACE_BUFFER << BRW_SURFACE_TYPE_SHIFT | + BRW_SURFACE_MIPMAPLAYOUT_BELOW << BRW_SURFACE_MIPLAYOUT_SHIFT | + BRW_SURFACEFORMAT_R32G32B32A32_FLOAT << BRW_SURFACE_FORMAT_SHIFT); if (intel->gen >= 6) - surf->ss0.render_cache_read_write = 1; + surf[0] |= BRW_SURFACE_RC_READ_WRITE; + + surf[1] = bo->offset; /* reloc */ - assert(bo); - surf->ss1.base_addr = bo->offset; /* reloc */ + surf[2] = (((w & 0x7f) - 1) << BRW_SURFACE_WIDTH_SHIFT | + (((w >> 7) & 0x1fff) - 1) << BRW_SURFACE_HEIGHT_SHIFT); - surf->ss2.width = w & 0x7f; /* bits 6:0 of size or width */ - surf->ss2.height = (w >> 7) & 0x1fff; /* bits 19:7 of size or width */ - surf->ss3.depth = (w >> 20) & 0x7f; /* bits 26:20 of size or width */ - surf->ss3.pitch = (width * 16) - 1; /* ignored?? */ - brw_set_surface_tiling(surf, I915_TILING_NONE); /* tiling now allowed */ + surf[3] = ((((w >> 20) & 0x7f) - 1) << BRW_SURFACE_DEPTH_SHIFT | + (width * 16 - 1) << BRW_SURFACE_PITCH_SHIFT); + + surf[4] = 0; + surf[5] = 0; /* Emit relocation to surface contents. Section 5.1.1 of the gen4 * bspec ("Data Cache") says that the data cache does not exist as * a separate cache and is just the sampler cache. */ drm_intel_bo_emit_reloc(brw->intel.batch.bo, - (*out_offset + - offsetof(struct brw_surface_state, ss1)), + *out_offset + 4, bo, 0, I915_GEM_DOMAIN_SAMPLER, 0); } @@ -416,23 +400,23 @@ static void brw_update_null_renderbuffer_surface(struct brw_context *brw, unsigned int unit) { struct intel_context *intel = &brw->intel; - struct brw_surface_state *surf; - - surf = brw_state_batch(brw, sizeof(*surf), 32, - &brw->wm.surf_offset[unit]); - memset(surf, 0, sizeof(*surf)); + uint32_t *surf; - surf->ss0.surface_type = BRW_SURFACE_NULL; - surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; + surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[unit]); + surf[0] = (BRW_SURFACE_NULL << BRW_SURFACE_TYPE_SHIFT | + BRW_SURFACEFORMAT_B8G8R8A8_UNORM << BRW_SURFACE_FORMAT_SHIFT); if (intel->gen < 6) { - /* _NEW_COLOR */ - surf->ss0.color_blend = 0; - surf->ss0.writedisable_red = 1; - surf->ss0.writedisable_green = 1; - surf->ss0.writedisable_blue = 1; - surf->ss0.writedisable_alpha = 1; + surf[0] |= (1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT | + 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT | + 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT | + 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT); } + surf[1] = 0; + surf[2] = 0; + surf[3] = 0; + surf[4] = 0; + surf[5] = 0; } /** @@ -449,12 +433,11 @@ brw_update_renderbuffer_surface(struct brw_context *brw, struct gl_context *ctx = &intel->ctx; struct intel_renderbuffer *irb = intel_renderbuffer(rb); struct intel_region *region = irb->region; - struct brw_surface_state *surf; + uint32_t *surf; uint32_t tile_x, tile_y; + uint32_t format = 0; - surf = brw_state_batch(brw, sizeof(*surf), 32, - &brw->wm.surf_offset[unit]); - memset(surf, 0, sizeof(*surf)); + surf = brw_state_batch(brw, 6 * 4, 32, &brw->wm.surf_offset[unit]); switch (irb->Base.Format) { case MESA_FORMAT_XRGB8888: @@ -465,7 +448,7 @@ brw_update_renderbuffer_surface(struct brw_context *brw, * cases where GL_DST_ALPHA (or GL_ONE_MINUS_DST_ALPHA) is * used. */ - surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; + format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; break; case MESA_FORMAT_INTENSITY_FLOAT32: case MESA_FORMAT_LUMINANCE_FLOAT32: @@ -473,25 +456,35 @@ brw_update_renderbuffer_surface(struct brw_context *brw, * channel into R, which is to say that we just treat them as * GL_RED. */ - surf->ss0.surface_format = BRW_SURFACEFORMAT_R32_FLOAT; + format = BRW_SURFACEFORMAT_R32_FLOAT; break; case MESA_FORMAT_SARGB8: /* without GL_EXT_framebuffer_sRGB we shouldn't bind sRGB surfaces to the blend/update as sRGB */ if (ctx->Color.sRGBEnabled) - surf->ss0.surface_format = brw_format_for_mesa_format(irb->Base.Format); + format = brw_format_for_mesa_format(irb->Base.Format); else - surf->ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; + format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; break; default: assert(brw_render_target_supported(irb->Base.Format)); - surf->ss0.surface_format = brw_format_for_mesa_format(irb->Base.Format); + format = brw_format_for_mesa_format(irb->Base.Format); } - surf->ss0.surface_type = BRW_SURFACE_2D; + surf[0] = (BRW_SURFACE_2D << BRW_SURFACE_TYPE_SHIFT | + format << BRW_SURFACE_FORMAT_SHIFT); + /* reloc */ - surf->ss1.base_addr = intel_region_tile_offsets(region, &tile_x, &tile_y); - surf->ss1.base_addr += region->buffer->offset; /* reloc */ + surf[1] = (intel_region_tile_offsets(region, &tile_x, &tile_y) + + region->buffer->offset); + + surf[2] = ((rb->Width - 1) << BRW_SURFACE_WIDTH_SHIFT | + (rb->Height - 1) << BRW_SURFACE_HEIGHT_SHIFT); + + surf[3] = (brw_get_surface_tiling_bits(region->tiling) | + ((region->pitch * region->cpp) - 1) << BRW_SURFACE_PITCH_SHIFT); + + surf[4] = 0; assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0)); /* Note that the low bits of these fields are missing, so @@ -499,35 +492,35 @@ brw_update_renderbuffer_surface(struct brw_context *brw, */ assert(tile_x % 4 == 0); assert(tile_y % 2 == 0); - surf->ss5.x_offset = tile_x / 4; - surf->ss5.y_offset = tile_y / 2; - - surf->ss2.width = rb->Width - 1; - surf->ss2.height = rb->Height - 1; - brw_set_surface_tiling(surf, region->tiling); - surf->ss3.pitch = (region->pitch * region->cpp) - 1; + surf[5] = ((tile_x / 4) << BRW_SURFACE_X_OFFSET_SHIFT | + (tile_y / 2) << BRW_SURFACE_Y_OFFSET_SHIFT); if (intel->gen < 6) { /* _NEW_COLOR */ - surf->ss0.color_blend = (!ctx->Color._LogicOpEnabled && - (ctx->Color.BlendEnabled & (1 << unit))); - surf->ss0.writedisable_red = !ctx->Color.ColorMask[unit][0]; - surf->ss0.writedisable_green = !ctx->Color.ColorMask[unit][1]; - surf->ss0.writedisable_blue = !ctx->Color.ColorMask[unit][2]; + if (!ctx->Color._LogicOpEnabled && + (ctx->Color.BlendEnabled & (1 << unit))) + surf[0] |= BRW_SURFACE_BLEND_ENABLED; + + if (!ctx->Color.ColorMask[unit][0]) + surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_R_SHIFT; + if (!ctx->Color.ColorMask[unit][1]) + surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_G_SHIFT; + if (!ctx->Color.ColorMask[unit][2]) + surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_B_SHIFT; + /* As mentioned above, disable writes to the alpha component when the * renderbuffer is XRGB. */ - if (ctx->DrawBuffer->Visual.alphaBits == 0) - surf->ss0.writedisable_alpha = 1; - else - surf->ss0.writedisable_alpha = !ctx->Color.ColorMask[unit][3]; + if (ctx->DrawBuffer->Visual.alphaBits == 0 || + !ctx->Color.ColorMask[unit][3]) { + surf[0] |= 1 << BRW_SURFACE_WRITEDISABLE_A_SHIFT; + } } drm_intel_bo_emit_reloc(brw->intel.batch.bo, - brw->wm.surf_offset[unit] + - offsetof(struct brw_surface_state, ss1), + brw->wm.surf_offset[unit] + 4, region->buffer, - surf->ss1.base_addr - region->buffer->offset, + surf[1] - region->buffer->offset, I915_GEM_DOMAIN_RENDER, I915_GEM_DOMAIN_RENDER); } @@ -539,16 +532,14 @@ prepare_wm_surfaces(struct brw_context *brw) int i; int nr_surfaces = 0; - if (ctx->DrawBuffer->_NumColorDrawBuffers >= 1) { - for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { - struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[i]; - struct intel_renderbuffer *irb = intel_renderbuffer(rb); - struct intel_region *region = irb ? irb->region : NULL; + for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { + struct gl_renderbuffer *rb = ctx->DrawBuffer->_ColorDrawBuffers[i]; + struct intel_renderbuffer *irb = intel_renderbuffer(rb); + struct intel_region *region = irb ? irb->region : NULL; - if (region) - brw_add_validated_bo(brw, region->buffer); - nr_surfaces = SURF_INDEX_DRAW(i) + 1; - } + if (region) + brw_add_validated_bo(brw, region->buffer); + nr_surfaces = SURF_INDEX_DRAW(i) + 1; } if (brw->wm.const_bo) { @@ -558,10 +549,11 @@ prepare_wm_surfaces(struct brw_context *brw) for (i = 0; i < BRW_MAX_TEX_UNIT; i++) { const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[i]; - struct gl_texture_object *tObj = texUnit->_Current; - struct intel_texture_object *intelObj = intel_texture_object(tObj); if (texUnit->_ReallyEnabled) { + struct gl_texture_object *tObj = texUnit->_Current; + struct intel_texture_object *intelObj = intel_texture_object(tObj); + brw_add_validated_bo(brw, intelObj->mt->region->buffer); nr_surfaces = SURF_INDEX_TEXTURE(i) + 1; } diff --git a/src/mesa/drivers/dri/i965/gen7_vs_state.c b/src/mesa/drivers/dri/i965/gen7_vs_state.c index 6a7add8e562..ae7a1d6c35c 100644 --- a/src/mesa/drivers/dri/i965/gen7_vs_state.c +++ b/src/mesa/drivers/dri/i965/gen7_vs_state.c @@ -33,7 +33,6 @@ static void upload_vs_state(struct brw_context *brw) { struct intel_context *intel = &brw->intel; - struct gl_context *ctx = &intel->ctx; BEGIN_BATCH(2); OUT_BATCH(_3DSTATE_BINDING_TABLE_POINTERS_VS << 16 | (2 - 2)); diff --git a/src/mesa/drivers/dri/intel/intel_buffers.c b/src/mesa/drivers/dri/intel/intel_buffers.c index ee551ef60d4..7eb50edc6b4 100644 --- a/src/mesa/drivers/dri/intel/intel_buffers.c +++ b/src/mesa/drivers/dri/intel/intel_buffers.c @@ -93,6 +93,7 @@ intel_draw_buffer(struct gl_context * ctx, struct gl_framebuffer *fb) struct intel_context *intel = intel_context(ctx); struct intel_region *colorRegions[MAX_DRAW_BUFFERS], *depthRegion = NULL; struct intel_renderbuffer *irbDepth = NULL, *irbStencil = NULL; + bool fb_has_hiz = intel_framebuffer_has_hiz(fb); if (!fb) { /* this can happen during the initial context initialization */ @@ -166,11 +167,11 @@ intel_draw_buffer(struct gl_context * ctx, struct gl_framebuffer *fb) /*** *** Get depth buffer region and check if we need a software fallback. - *** Note that the depth buffer is usually a DEPTH_STENCIL buffer. ***/ if (fb->_DepthBuffer && fb->_DepthBuffer->Wrapped) { irbDepth = intel_renderbuffer(fb->_DepthBuffer->Wrapped); if (irbDepth && irbDepth->region) { + assert(!fb_has_hiz || irbDepth->Base.Format != MESA_FORMAT_S8_Z24); FALLBACK(intel, INTEL_FALLBACK_DEPTH_BUFFER, GL_FALSE); depthRegion = irbDepth->region; } @@ -187,13 +188,16 @@ intel_draw_buffer(struct gl_context * ctx, struct gl_framebuffer *fb) /*** *** Stencil buffer - *** This can only be hardware accelerated if we're using a - *** combined DEPTH_STENCIL buffer. ***/ if (fb->_StencilBuffer && fb->_StencilBuffer->Wrapped) { irbStencil = intel_renderbuffer(fb->_StencilBuffer->Wrapped); if (irbStencil && irbStencil->region) { - ASSERT(irbStencil->Base.Format == MESA_FORMAT_S8_Z24); + if (!intel->has_separate_stencil) + assert(irbStencil->Base.Format == MESA_FORMAT_S8_Z24); + if (fb_has_hiz || intel->must_use_separate_stencil) + assert(irbStencil->Base.Format == MESA_FORMAT_S8); + if (irbStencil->Base.Format == MESA_FORMAT_S8) + assert(intel->has_separate_stencil); FALLBACK(intel, INTEL_FALLBACK_STENCIL_BUFFER, GL_FALSE); } else { @@ -208,8 +212,10 @@ intel_draw_buffer(struct gl_context * ctx, struct gl_framebuffer *fb) /* If we have a (packed) stencil buffer attached but no depth buffer, * we still need to set up the shared depth/stencil state so we can use it. */ - if (depthRegion == NULL && irbStencil && irbStencil->region) + if (depthRegion == NULL && irbStencil && irbStencil->region + && irbStencil->Base.Format == MESA_FORMAT_S8_Z24) { depthRegion = irbStencil->region; + } /* * Update depth and stencil test state @@ -302,18 +308,6 @@ intelReadBuffer(struct gl_context * ctx, GLenum mode) if (!was_front_buffer_reading && intel->is_front_buffer_reading) dri2InvalidateDrawable(intel->driContext->driReadablePriv); } - - if (ctx->ReadBuffer == ctx->DrawBuffer) { - /* This will update FBO completeness status. - * A framebuffer will be incomplete if the GL_READ_BUFFER setting - * refers to a missing renderbuffer. Calling glReadBuffer can set - * that straight and can make the drawing buffer complete. - */ - intel_draw_buffer(ctx, ctx->DrawBuffer); - } - /* Generally, functions which read pixels (glReadPixels, glCopyPixels, etc) - * reference ctx->ReadBuffer and do appropriate state checks. - */ } diff --git a/src/mesa/drivers/dri/intel/intel_context.c b/src/mesa/drivers/dri/intel/intel_context.c index 4516db20ffc..2ea52c26106 100644 --- a/src/mesa/drivers/dri/intel/intel_context.c +++ b/src/mesa/drivers/dri/intel/intel_context.c @@ -620,6 +620,53 @@ intelInitDriverFunctions(struct dd_function_table *functions) intel_init_syncobj_functions(functions); } +/** + * Override intel->has_hiz with environment variable INTEL_HIZ. + * + * Valid values for INTEL_HIZ are "0" and "1". If an invalid valid value is + * encountered, a warning is emitted and INTEL_HIZ is ignored. + */ +static void +intel_override_hiz(struct intel_context *intel) +{ + const char *s = getenv("INTEL_HIZ"); + if (!s) { + return; + } else if (!strncmp("0", s, 2)) { + intel->has_hiz = false; + } else if (!strncmp("1", s, 2)) { + intel->has_hiz = true; + } else { + _mesa_warning(&intel->ctx, + "env variable INTEL_HIZ=\"%s\" has invalid value and " + "is ignored", s); + } +} + +/** + * Override intel->has_separate_stencil with environment variable + * INTEL_SEPARATE_STENCIL. + * + * Valid values for INTEL_SEPARATE_STENCIL are "0" and "1". If an invalid + * value is encountered, a warning is emitted and INTEL_SEPARATE_STENCIL is + * ignored. + */ +static void +intel_override_separate_stencil(struct intel_context *intel) +{ + const char *s = getenv("INTEL_SEPARATE_STENCIL"); + if (!s) { + return; + } else if (!strncmp("0", s, 2)) { + intel->has_separate_stencil = false; + } else if (!strncmp("1", s, 2)) { + intel->has_separate_stencil = true; + } else { + _mesa_warning(&intel->ctx, + "env variable INTEL_SEPARATE_STENCIL=\"%s\" has invalid " + "value and is ignored", s); + } +} GLboolean intelInitContext(struct intel_context *intel, @@ -667,9 +714,14 @@ intelInitContext(struct intel_context *intel, if (IS_GEN7(intel->intelScreen->deviceID)) { intel->needs_ff_sync = GL_TRUE; intel->has_luminance_srgb = GL_TRUE; + /* FINISHME: Enable intel->has_separate_stencil on Gen7. */ + /* FINISHME: Enable intel->must_use_separate_stencil on Gen7. */ + /* FINISHME: Enable intel->has_hiz on Gen7. */ } else if (IS_GEN6(intel->intelScreen->deviceID)) { intel->needs_ff_sync = GL_TRUE; intel->has_luminance_srgb = GL_TRUE; + /* FINISHME: Enable intel->has_separate_stencil on Gen6. */ + /* FINISHME: Enable intel->has_hiz on Gen6. */ } else if (IS_GEN5(intel->intelScreen->deviceID)) { intel->needs_ff_sync = GL_TRUE; intel->has_luminance_srgb = GL_TRUE; @@ -689,6 +741,9 @@ intelInitContext(struct intel_context *intel, } } + intel_override_hiz(intel); + intel_override_separate_stencil(intel); + memset(&ctx->TextureFormatSupported, 0, sizeof(ctx->TextureFormatSupported)); ctx->TextureFormatSupported[MESA_FORMAT_ARGB8888] = GL_TRUE; @@ -703,7 +758,12 @@ intelInitContext(struct intel_context *intel, ctx->TextureFormatSupported[MESA_FORMAT_AL88] = GL_TRUE; if (intel->gen >= 4) ctx->TextureFormatSupported[MESA_FORMAT_AL1616] = GL_TRUE; - ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = GL_TRUE; + + /* Depth and stencil */ + ctx->TextureFormatSupported[MESA_FORMAT_S8_Z24] = !intel->must_use_separate_stencil; + ctx->TextureFormatSupported[MESA_FORMAT_X8_Z24] = intel->has_separate_stencil; + ctx->TextureFormatSupported[MESA_FORMAT_S8] = intel->has_separate_stencil; + /* * This was disabled in initial FBO enabling to avoid combinations * of depth+stencil that wouldn't work together. We since decided diff --git a/src/mesa/drivers/dri/intel/intel_context.h b/src/mesa/drivers/dri/intel/intel_context.h index d3a8a659caa..f599861cba8 100644 --- a/src/mesa/drivers/dri/intel/intel_context.h +++ b/src/mesa/drivers/dri/intel/intel_context.h @@ -149,6 +149,10 @@ struct intel_context void (*debug_batch)(struct intel_context *intel); bool (*render_target_supported)(gl_format format); + + /** Can HiZ be enabled on a depthbuffer of the given format? */ + bool (*is_hiz_depth_format)(struct intel_context *intel, + gl_format format); } vtbl; GLbitfield Fallback; /**< mask of INTEL_FALLBACK_x bits */ @@ -166,6 +170,9 @@ struct intel_context GLboolean is_945; GLboolean has_luminance_srgb; GLboolean has_xrgb_textures; + GLboolean has_separate_stencil; + GLboolean must_use_separate_stencil; + GLboolean has_hiz; int urb_size; diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index ad2468a3237..7434e0efff6 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -79,6 +79,9 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb) if (intel && irb->region) { intel_region_release(&irb->region); } + if (intel && irb->hiz_region) { + intel_region_release(&irb->hiz_region); + } free(irb); } @@ -129,7 +132,12 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer case GL_STENCIL_INDEX8_EXT: case GL_STENCIL_INDEX16_EXT: /* These aren't actual texture formats, so force them here. */ - rb->Format = MESA_FORMAT_S8_Z24; + if (intel->has_separate_stencil) { + rb->Format = MESA_FORMAT_S8; + } else { + assert(!intel->must_use_separate_stencil); + rb->Format = MESA_FORMAT_S8_Z24; + } break; } @@ -143,6 +151,9 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer if (irb->region) { intel_region_release(&irb->region); } + if (irb->hiz_region) { + intel_region_release(&irb->hiz_region); + } /* allocate new memory region/renderbuffer */ @@ -154,19 +165,54 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer GLenum base_format = _mesa_get_format_base_format(rb->Format); if (intel->gen >= 4 && (base_format == GL_DEPTH_COMPONENT || + base_format == GL_STENCIL_INDEX || base_format == GL_DEPTH_STENCIL)) tiling = I915_TILING_Y; else tiling = I915_TILING_X; } - irb->region = intel_region_alloc(intel->intelScreen, tiling, cpp, - width, height, GL_TRUE); + if (irb->Base.Format == MESA_FORMAT_S8) { + /* + * The stencil buffer has quirky pitch requirements. From Vol 2a, + * 11.5.6.2.1 3DSTATE_STENCIL_BUFFER, field "Surface Pitch": + * The pitch must be set to 2x the value computed based on width, as + * the stencil buffer is stored with two rows interleaved. + * To accomplish this, we resort to the nasty hack of doubling the drm + * region's cpp and halving its height. + * + * If we neglect to double the pitch, then drm_intel_gem_bo_map_gtt() + * maps the memory incorrectly. + */ + irb->region = intel_region_alloc(intel->intelScreen, + I915_TILING_Y, + cpp * 2, + width, + height / 2, + GL_TRUE); + } else { + irb->region = intel_region_alloc(intel->intelScreen, tiling, cpp, + width, height, GL_TRUE); + } + if (!irb->region) return GL_FALSE; /* out of memory? */ ASSERT(irb->region->buffer); + if (intel->vtbl.is_hiz_depth_format(intel, rb->Format)) { + irb->hiz_region = intel_region_alloc(intel->intelScreen, + I915_TILING_Y, + irb->region->cpp, + irb->region->width, + irb->region->height, + GL_TRUE); + if (!irb->hiz_region) { + intel_region_release(&irb->region); + return GL_FALSE; + } + } + rb->Width = width; rb->Height = height; @@ -374,6 +420,9 @@ static GLboolean intel_update_wrapper(struct gl_context *ctx, struct intel_renderbuffer *irb, struct gl_texture_image *texImage) { + struct intel_context *intel = intel_context(ctx); + struct intel_texture_image *intel_image = intel_texture_image(texImage); + if (!intel_span_supports_format(texImage->TexFormat)) { DBG("Render to texture BAD FORMAT %s\n", _mesa_get_format_name(texImage->TexFormat)); @@ -392,6 +441,32 @@ intel_update_wrapper(struct gl_context *ctx, struct intel_renderbuffer *irb, irb->Base.Delete = intel_delete_renderbuffer; irb->Base.AllocStorage = intel_nop_alloc_storage; + /* Point the renderbuffer's region to the texture's region. */ + if (irb->region != intel_image->mt->region) { + intel_region_release(&irb->region); + intel_region_reference(&irb->region, intel_image->mt->region); + } + + /* Allocate the texture's hiz region if necessary. */ + if (intel->vtbl.is_hiz_depth_format(intel, texImage->TexFormat) + && !intel_image->mt->hiz_region) { + intel_image->mt->hiz_region = + intel_region_alloc(intel->intelScreen, + I915_TILING_Y, + _mesa_get_format_bytes(texImage->TexFormat), + texImage->Width, + texImage->Height, + GL_TRUE); + if (!intel_image->mt->hiz_region) + return GL_FALSE; + } + + /* Point the renderbuffer's hiz region to the texture's hiz region. */ + if (irb->hiz_region != intel_image->mt->hiz_region) { + intel_region_release(&irb->hiz_region); + intel_region_reference(&irb->hiz_region, intel_image->mt->hiz_region); + } + return GL_TRUE; } @@ -497,13 +572,6 @@ intel_render_texture(struct gl_context * ctx, att->Texture->Name, newImage->Width, newImage->Height, irb->Base.RefCount); - /* point the renderbufer's region to the texture image region */ - if (irb->region != intel_image->mt->region) { - if (irb->region) - intel_region_release(&irb->region); - intel_region_reference(&irb->region, intel_image->mt->region); - } - intel_set_draw_offset_for_image(intel_image, att->Zoffset); intel_image->used_as_render_target = GL_TRUE; @@ -597,21 +665,33 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) intel_get_renderbuffer(fb, BUFFER_STENCIL); int i; - if (depthRb && stencilRb && stencilRb != depthRb) { - if (fb->Attachment[BUFFER_DEPTH].Type == GL_TEXTURE && - fb->Attachment[BUFFER_STENCIL].Type == GL_TEXTURE && - (fb->Attachment[BUFFER_DEPTH].Texture->Name == - fb->Attachment[BUFFER_STENCIL].Texture->Name)) { - /* OK */ - } else { - /* we only support combined depth/stencil buffers, not separate - * stencil buffers. - */ - DBG("Only supports combined depth/stencil (found %s, %s)\n", - depthRb ? _mesa_get_format_name(depthRb->Base.Format): "NULL", - stencilRb ? _mesa_get_format_name(stencilRb->Base.Format): "NULL"); - fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; - } + /* + * The depth and stencil renderbuffers are the same renderbuffer or wrap + * the same texture. + */ + bool depth_stencil_are_same; + if (depthRb && stencilRb && depthRb == stencilRb) + depth_stencil_are_same = true; + else if (depthRb && stencilRb && depthRb != stencilRb + && (fb->Attachment[BUFFER_DEPTH].Type == GL_TEXTURE) + && (fb->Attachment[BUFFER_STENCIL].Type == GL_TEXTURE) + && (fb->Attachment[BUFFER_DEPTH].Texture->Name + == fb->Attachment[BUFFER_STENCIL].Texture->Name)) + depth_stencil_are_same = true; + else + depth_stencil_are_same = false; + + bool fb_has_combined_depth_stencil_format = + (depthRb && depthRb->Base.Format == MESA_FORMAT_S8_Z24) || + (stencilRb && stencilRb->Base.Format == MESA_FORMAT_S8_Z24); + + bool fb_has_hiz = intel_framebuffer_has_hiz(fb); + + if ((intel->must_use_separate_stencil || fb_has_hiz) + && (depth_stencil_are_same || fb_has_combined_depth_stencil_format)) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; + } else if (!intel->has_separate_stencil && depthRb && stencilRb && !depth_stencil_are_same) { + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; } for (i = 0; i < Elements(fb->Attachment); i++) { diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h b/src/mesa/drivers/dri/intel/intel_fbo.h index 028f657d12d..212dd9aadc8 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.h +++ b/src/mesa/drivers/dri/intel/intel_fbo.h @@ -28,6 +28,7 @@ #ifndef INTEL_FBO_H #define INTEL_FBO_H +#include <stdbool.h> #include "main/formats.h" #include "intel_screen.h" @@ -40,6 +41,9 @@ struct intel_renderbuffer { struct gl_renderbuffer Base; struct intel_region *region; + + /** Only used by depth renderbuffers for which HiZ is enabled. */ + struct intel_region *hiz_region; }; @@ -80,6 +84,29 @@ intel_get_renderbuffer(struct gl_framebuffer *fb, int attIndex) return NULL; } +/** + * If the framebuffer has a depth buffer attached, then return its HiZ region. + * The HiZ region may be null. + */ +static INLINE struct intel_region* +intel_framebuffer_get_hiz_region(struct gl_framebuffer *fb) +{ + struct intel_renderbuffer *rb = NULL; + if (fb) + rb = intel_get_renderbuffer(fb, BUFFER_DEPTH); + + if (rb) + return rb->hiz_region; + else + return NULL; +} + +static INLINE bool +intel_framebuffer_has_hiz(struct gl_framebuffer *fb) +{ + return intel_framebuffer_get_hiz_region(fb) != NULL; +} + extern void intel_renderbuffer_set_region(struct intel_context *intel, diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index a3409274fb7..e62905de7c3 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -200,6 +200,7 @@ intel_miptree_release(struct intel_context *intel, DBG("%s deleting %p\n", __FUNCTION__, *mt); intel_region_release(&((*mt)->region)); + intel_region_release(&((*mt)->hiz_region)); for (i = 0; i < MAX_TEXTURE_LEVELS; i++) { free((*mt)->level[i].x_offset); diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index 760a8bce601..325e3916981 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -113,6 +113,20 @@ struct intel_mipmap_tree */ struct intel_region *region; + /** + * This points to an auxillary hiz region if all of the following hold: + * 1. The texture has been attached to an FBO as a depthbuffer. + * 2. The texture format is hiz compatible. + * 3. The intel context supports hiz. + * + * When a texture is attached to multiple FBO's, a separate renderbuffer + * wrapper is created for each attachment. This necessitates storing the + * hiz region in the texture itself instead of the renderbuffer wrapper. + * + * \see intel_fbo.c:intel_wrap_texture() + */ + struct intel_region *hiz_region; + /* These are also refcounted: */ GLuint refcount; diff --git a/src/mesa/drivers/dri/intel/intel_span.c b/src/mesa/drivers/dri/intel/intel_span.c index 16bce20317e..5290342c3e1 100644 --- a/src/mesa/drivers/dri/intel/intel_span.c +++ b/src/mesa/drivers/dri/intel/intel_span.c @@ -70,9 +70,6 @@ intel_set_span_functions(struct intel_context *intel, #define HW_UNLOCK() -/* Convenience macros to avoid typing the address argument over and over */ -#define NO_TILE(_X, _Y) (((_Y) * irb->region->pitch + (_X)) * irb->region->cpp) - /* r5g6b5 color span and pixel functions */ #define SPANTMP_PIXEL_FMT GL_RGB #define SPANTMP_PIXEL_TYPE GL_UNSIGNED_SHORT_5_6_5 diff --git a/src/mesa/drivers/dri/intel/intel_tex_format.c b/src/mesa/drivers/dri/intel/intel_tex_format.c index befa615d1e6..6890a690ab1 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_format.c +++ b/src/mesa/drivers/dri/intel/intel_tex_format.c @@ -22,6 +22,7 @@ intel_mesa_format_to_rb_datatype(gl_format format) case MESA_FORMAT_RGB565: case MESA_FORMAT_ARGB1555: case MESA_FORMAT_ARGB4444: + case MESA_FORMAT_S8: return GL_UNSIGNED_BYTE; case MESA_FORMAT_R16: case MESA_FORMAT_RG1616: diff --git a/src/mesa/drivers/dri/mach64/Makefile b/src/mesa/drivers/dri/mach64/Makefile index c20fdece297..0474c1a165f 100644 --- a/src/mesa/drivers/dri/mach64/Makefile +++ b/src/mesa/drivers/dri/mach64/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = mach64_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ mach64_context.c \ mach64_ioctl.c \ @@ -25,5 +27,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/mga/Makefile b/src/mesa/drivers/dri/mga/Makefile index 92533bccc29..9948ee767ac 100644 --- a/src/mesa/drivers/dri/mga/Makefile +++ b/src/mesa/drivers/dri/mga/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = mga_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ mgadd.c \ mgaioctl.c \ @@ -27,5 +29,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/nouveau/Makefile b/src/mesa/drivers/dri/nouveau/Makefile index 3b506a91ffa..e485a98761f 100644 --- a/src/mesa/drivers/dri/nouveau/Makefile +++ b/src/mesa/drivers/dri/nouveau/Makefile @@ -3,11 +3,10 @@ TOP = ../../../../.. include $(TOP)/configs/current -CFLAGS += $(shell pkg-config libdrm libdrm_nouveau --cflags) -DRI_LIB_DEPS += $(shell pkg-config libdrm_nouveau --libs) - LIBNAME = nouveau_vieux_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ nouveau_screen.c \ nouveau_context.c \ @@ -51,7 +50,9 @@ C_SOURCES = \ ASM_SOURCES = +INCLUDES += $(NOUVEAU_CFLAGS) +DRI_LIB_DEPS += $(NOUVEAU_LIBS) -include ../Makefile.template +include ../Makefile.targets symlinks: diff --git a/src/mesa/drivers/dri/r128/Makefile b/src/mesa/drivers/dri/r128/Makefile index 8144c9b43ff..8b23ccc8cbe 100644 --- a/src/mesa/drivers/dri/r128/Makefile +++ b/src/mesa/drivers/dri/r128/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = r128_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ r128_context.c \ r128_lock.c \ @@ -25,5 +27,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/r200/Makefile b/src/mesa/drivers/dri/r200/Makefile index 8013768e9fb..4547f7e2ee0 100644 --- a/src/mesa/drivers/dri/r200/Makefile +++ b/src/mesa/drivers/dri/r200/Makefile @@ -3,10 +3,10 @@ TOP = ../../../../.. include $(TOP)/configs/current -CFLAGS += $(RADEON_CFLAGS) - LIBNAME = r200_dri.so +include ../Makefile.defines + ifeq ($(RADEON_LDFLAGS),) CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c endif @@ -55,12 +55,13 @@ X86_SOURCES = DRIVER_DEFINES = -DRADEON_R200 +INCLUDES += $(RADEON_CFLAGS) DRI_LIB_DEPS += $(RADEON_LDFLAGS) ##### TARGETS ##### -include ../Makefile.template +include ../Makefile.targets #INCLUDES += -I../radeon/server diff --git a/src/mesa/drivers/dri/r300/Makefile b/src/mesa/drivers/dri/r300/Makefile index 2245998c952..9f23a8496aa 100644 --- a/src/mesa/drivers/dri/r300/Makefile +++ b/src/mesa/drivers/dri/r300/Makefile @@ -3,17 +3,17 @@ TOP = ../../../../.. include $(TOP)/configs/current -CFLAGS += $(RADEON_CFLAGS) - LIBNAME = r300_dri.so +include ../Makefile.defines + ifeq ($(RADEON_LDFLAGS),) CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c endif COMMON_SOURCES = \ ../../common/driverfuncs.c \ - ../common/mm.c \ + ../common/drirenderbuffer.c \ ../common/utils.c \ ../common/texmem.c \ ../common/vblank.c \ @@ -64,6 +64,7 @@ C_SOURCES = $(COMMON_SOURCES) $(DRIVER_SOURCES) DRIVER_DEFINES = -DRADEON_R300 # -DRADEON_BO_TRACK \ +INCLUDES += $(RADEON_CFLAGS) DRI_LIB_DEPS += $(RADEON_LDFLAGS) SUBDIRS = compiler @@ -73,5 +74,5 @@ EXTRA_MODULES = compiler/libr300compiler.a ##### TARGETS ##### -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/r300/compiler/Makefile b/src/mesa/drivers/dri/r300/compiler/Makefile index 4bedfacd632..5aa13329ac2 100644 --- a/src/mesa/drivers/dri/r300/compiler/Makefile +++ b/src/mesa/drivers/dri/r300/compiler/Makefile @@ -38,7 +38,9 @@ C_SOURCES = \ r3xx_vertprog.c \ r3xx_vertprog_dump.c \ \ - memory_pool.c + memory_pool.c \ + $(TOP)/src/glsl/ralloc.c \ + $(TOP)/src/mesa/program/register_allocate.c ### Basic defines ### @@ -52,6 +54,7 @@ INCLUDES = \ -I$(TOP)/include \ -I$(TOP)/src/mesa \ -I$(TOP)/src/glsl \ + -I$(TOP)/src/mapi ##### TARGETS ##### diff --git a/src/mesa/drivers/dri/r300/compiler/SConscript b/src/mesa/drivers/dri/r300/compiler/SConscript index 9931537492e..2c748b6e214 100755 --- a/src/mesa/drivers/dri/r300/compiler/SConscript +++ b/src/mesa/drivers/dri/r300/compiler/SConscript @@ -4,6 +4,7 @@ env = env.Clone() env.Append(CPPPATH = '#/include') env.Append(CPPPATH = '#/src/mesa') env.Append(CPPPATH = '#/src/glsl') +env.Append(CPPPATH = '#/src/mapi') # temporary fix env['CFLAGS'] = str(env['CFLAGS']).replace('-Werror=declaration-after-statement', '') @@ -43,6 +44,8 @@ r300compiler = env.ConvenienceLibrary( 'r3xx_vertprog.c', 'r3xx_vertprog_dump.c', 'memory_pool.c', + '#/src/glsl/ralloc.c', + '#/src/mesa/program/register_allocate.c' ]) Return('r300compiler') diff --git a/src/mesa/drivers/dri/r300/r300_state.c b/src/mesa/drivers/dri/r300/r300_state.c index da6c8b602e1..93a0dd168f4 100644 --- a/src/mesa/drivers/dri/r300/r300_state.c +++ b/src/mesa/drivers/dri/r300/r300_state.c @@ -1619,7 +1619,6 @@ static void r500SetupRSUnit(struct gl_context * ctx) WARN_ONCE("Don't know how to satisfy InputsRead=0x%08x\n", InputsRead); } -#define MIN3(a, b, c) ((a) < (b) ? MIN2(a, c) : MIN2(b, c)) void r300VapCntl(r300ContextPtr rmesa, GLuint input_count, GLuint output_count, GLuint temp_count) diff --git a/src/mesa/drivers/dri/r600/Makefile b/src/mesa/drivers/dri/r600/Makefile index 200bc20f647..bec0b5a53fe 100644 --- a/src/mesa/drivers/dri/r600/Makefile +++ b/src/mesa/drivers/dri/r600/Makefile @@ -3,17 +3,17 @@ TOP = ../../../../.. include $(TOP)/configs/current -CFLAGS += $(RADEON_CFLAGS) - LIBNAME = r600_dri.so +include ../Makefile.defines + ifeq ($(RADEON_LDFLAGS),) CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c endif COMMON_SOURCES = \ ../../common/driverfuncs.c \ - ../common/mm.c \ + ../common/drirenderbuffer.c \ ../common/utils.c \ ../common/texmem.c \ ../common/vblank.c \ @@ -78,9 +78,10 @@ C_SOURCES = $(COMMON_SOURCES) $(DRIVER_SOURCES) DRIVER_DEFINES = -DRADEON_R600 # -DRADEON_BO_TRACK \ +INCLUDES += $(RADEON_CFLAGS) DRI_LIB_DEPS += $(RADEON_LDFLAGS) ##### TARGETS ##### -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/r600/evergreen_blit.c b/src/mesa/drivers/dri/r600/evergreen_blit.c index 0e4da5499ba..95ac4aee5ce 100644 --- a/src/mesa/drivers/dri/r600/evergreen_blit.c +++ b/src/mesa/drivers/dri/r600/evergreen_blit.c @@ -1525,6 +1525,48 @@ eg_set_default_state(context_t *context) num_hs_stack_entries = 42; num_ls_stack_entries = 42; break; + case CHIP_FAMILY_SUMO: + num_ps_gprs = 93; + num_vs_gprs = 46; + num_temp_gprs = 4; + num_gs_gprs = 31; + num_es_gprs = 31; + num_hs_gprs = 23; + num_ls_gprs = 23; + num_ps_threads = 96; + num_vs_threads = 25; + num_gs_threads = 25; + num_es_threads = 25; + num_hs_threads = 25; + num_ls_threads = 25; + num_ps_stack_entries = 42; + num_vs_stack_entries = 42; + num_gs_stack_entries = 42; + num_es_stack_entries = 42; + num_hs_stack_entries = 42; + num_ls_stack_entries = 42; + break; + case CHIP_FAMILY_SUMO2: + num_ps_gprs = 93; + num_vs_gprs = 46; + num_temp_gprs = 4; + num_gs_gprs = 31; + num_es_gprs = 31; + num_hs_gprs = 23; + num_ls_gprs = 23; + num_ps_threads = 96; + num_vs_threads = 25; + num_gs_threads = 25; + num_es_threads = 25; + num_hs_threads = 25; + num_ls_threads = 25; + num_ps_stack_entries = 85; + num_vs_stack_entries = 85; + num_gs_stack_entries = 85; + num_es_stack_entries = 85; + num_hs_stack_entries = 85; + num_ls_stack_entries = 85; + break; case CHIP_FAMILY_BARTS: num_ps_gprs = 93; num_vs_gprs = 46; @@ -1592,6 +1634,8 @@ eg_set_default_state(context_t *context) if ((context->radeon.radeonScreen->chip_family == CHIP_FAMILY_CEDAR) || (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_PALM) || + (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_SUMO) || + (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_SUMO2) || (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_CAICOS)) CLEARbit(sq_config, EG_SQ_CONFIG__VC_ENABLE_bit); else diff --git a/src/mesa/drivers/dri/r600/evergreen_chip.c b/src/mesa/drivers/dri/r600/evergreen_chip.c index 42566e537a5..388a96ff067 100644 --- a/src/mesa/drivers/dri/r600/evergreen_chip.c +++ b/src/mesa/drivers/dri/r600/evergreen_chip.c @@ -287,7 +287,9 @@ static void evergreenSetupVTXConstants(struct gl_context * ctx, return; if ((context->radeon.radeonScreen->chip_family == CHIP_FAMILY_CEDAR) || - (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_PALM)) + (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_PALM) || + (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_SUMO) || + (context->radeon.radeonScreen->chip_family == CHIP_FAMILY_SUMO2)) r700SyncSurf(context, paos->bo, RADEON_GEM_DOMAIN_GTT, 0, TC_ACTION_ENA_bit); else r700SyncSurf(context, paos->bo, RADEON_GEM_DOMAIN_GTT, 0, VC_ACTION_ENA_bit); diff --git a/src/mesa/drivers/dri/r600/evergreen_state.c b/src/mesa/drivers/dri/r600/evergreen_state.c index 309c93fe088..81bf1172dc3 100644 --- a/src/mesa/drivers/dri/r600/evergreen_state.c +++ b/src/mesa/drivers/dri/r600/evergreen_state.c @@ -1470,6 +1470,22 @@ static void evergreenInitSQConfig(struct gl_context * ctx) uMaxThreads = 192; uMaxStackEntries = 256; break; + case CHIP_FAMILY_SUMO: + uSqNumCfInsts = 2; + bVC_ENABLE = GL_FALSE; + uMaxGPRs = 256; + uPSThreadCount = 96; + uMaxThreads = 248; + uMaxStackEntries = 256; + break; + case CHIP_FAMILY_SUMO2: + uSqNumCfInsts = 2; + bVC_ENABLE = GL_FALSE; + uMaxGPRs = 256; + uPSThreadCount = 96; + uMaxThreads = 248; + uMaxStackEntries = 512; + break; case CHIP_FAMILY_BARTS: uSqNumCfInsts = 2; bVC_ENABLE = GL_TRUE; diff --git a/src/mesa/drivers/dri/radeon/Makefile b/src/mesa/drivers/dri/radeon/Makefile index 93219e40afd..6b5d3335452 100644 --- a/src/mesa/drivers/dri/radeon/Makefile +++ b/src/mesa/drivers/dri/radeon/Makefile @@ -4,10 +4,10 @@ TOP = ../../../../.. include $(TOP)/configs/current -CFLAGS += $(RADEON_CFLAGS) - LIBNAME = radeon_dri.so +include ../Makefile.defines + ifeq ($(RADEON_LDFLAGS),) CS_SOURCES = radeon_cs_space_drm.c radeon_bo.c radeon_cs.c endif @@ -53,9 +53,10 @@ C_SOURCES = \ DRIVER_DEFINES = -DRADEON_R100 +INCLUDES += $(RADEON_CFLAGS) DRI_LIB_DEPS += $(RADEON_LDFLAGS) X86_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/radeon/radeon_chipset.h b/src/mesa/drivers/dri/radeon/radeon_chipset.h index 9145023826e..bd236625122 100644 --- a/src/mesa/drivers/dri/radeon/radeon_chipset.h +++ b/src/mesa/drivers/dri/radeon/radeon_chipset.h @@ -450,6 +450,18 @@ #define PCI_CHIP_PALM_9806 0x9806 #define PCI_CHIP_PALM_9807 0x9807 +#define PCI_CHIP_SUMO_9640 0x9640 +#define PCI_CHIP_SUMO_9641 0x9641 +#define PCI_CHIP_SUMO2_9642 0x9642 +#define PCI_CHIP_SUMO2_9643 0x9643 +#define PCI_CHIP_SUMO2_9644 0x9644 +#define PCI_CHIP_SUMO2_9645 0x9645 +#define PCI_CHIP_SUMO_9647 0x9647 +#define PCI_CHIP_SUMO_9648 0x9648 +#define PCI_CHIP_SUMO_964A 0x964a +#define PCI_CHIP_SUMO_964E 0x964e +#define PCI_CHIP_SUMO_964F 0x964f + #define PCI_CHIP_BARTS_6720 0x6720 #define PCI_CHIP_BARTS_6721 0x6721 #define PCI_CHIP_BARTS_6722 0x6722 @@ -534,6 +546,8 @@ enum { CHIP_FAMILY_CYPRESS, CHIP_FAMILY_HEMLOCK, CHIP_FAMILY_PALM, + CHIP_FAMILY_SUMO, + CHIP_FAMILY_SUMO2, CHIP_FAMILY_BARTS, CHIP_FAMILY_TURKS, CHIP_FAMILY_CAICOS, diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.c b/src/mesa/drivers/dri/radeon/radeon_common_context.c index 5d7b3973d57..bf8925f61d0 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.c +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.c @@ -98,6 +98,8 @@ static const char* get_chip_family_name(int chip_family) case CHIP_FAMILY_CYPRESS: return "CYPRESS"; case CHIP_FAMILY_HEMLOCK: return "HEMLOCK"; case CHIP_FAMILY_PALM: return "PALM"; + case CHIP_FAMILY_SUMO: return "SUMO"; + case CHIP_FAMILY_SUMO2: return "SUMO2"; case CHIP_FAMILY_BARTS: return "BARTS"; case CHIP_FAMILY_TURKS: return "TURKS"; case CHIP_FAMILY_CAICOS: return "CAICOS"; diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c index 6449229e088..6cf843406f9 100644 --- a/src/mesa/drivers/dri/radeon/radeon_screen.c +++ b/src/mesa/drivers/dri/radeon/radeon_screen.c @@ -1168,6 +1168,25 @@ static int radeon_set_screen_flags(radeonScreenPtr screen, int device_id) screen->chip_flags = RADEON_CHIPSET_TCL; break; + case PCI_CHIP_SUMO_9640: + case PCI_CHIP_SUMO_9641: + case PCI_CHIP_SUMO_9647: + case PCI_CHIP_SUMO_9648: + case PCI_CHIP_SUMO_964A: + case PCI_CHIP_SUMO_964E: + case PCI_CHIP_SUMO_964F: + screen->chip_family = CHIP_FAMILY_SUMO; + screen->chip_flags = RADEON_CHIPSET_TCL; + break; + + case PCI_CHIP_SUMO2_9642: + case PCI_CHIP_SUMO2_9643: + case PCI_CHIP_SUMO2_9644: + case PCI_CHIP_SUMO2_9645: + screen->chip_family = CHIP_FAMILY_SUMO2; + screen->chip_flags = RADEON_CHIPSET_TCL; + break; + case PCI_CHIP_BARTS_6720: case PCI_CHIP_BARTS_6721: case PCI_CHIP_BARTS_6722: diff --git a/src/mesa/drivers/dri/savage/Makefile b/src/mesa/drivers/dri/savage/Makefile index 53511552c6d..03be3468da9 100644 --- a/src/mesa/drivers/dri/savage/Makefile +++ b/src/mesa/drivers/dri/savage/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = savage_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ savage_xmesa.c \ savagedd.c \ @@ -22,5 +24,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/sis/Makefile b/src/mesa/drivers/dri/sis/Makefile index 6b4f938bab3..0e0bf0d4eac 100644 --- a/src/mesa/drivers/dri/sis/Makefile +++ b/src/mesa/drivers/dri/sis/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = sis_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ sis6326_state.c \ sis6326_clear.c \ @@ -28,5 +30,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/swrast/Makefile b/src/mesa/drivers/dri/swrast/Makefile index d2cf6dbc55b..4cb99fd0eb7 100644 --- a/src/mesa/drivers/dri/swrast/Makefile +++ b/src/mesa/drivers/dri/swrast/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = swrast_dri.so +include ../Makefile.defines + DRIVER_DEFINES = -D__NOT_HAVE_DRM_H DRIVER_SOURCES = \ @@ -22,5 +24,5 @@ SWRAST_COMMON_SOURCES = \ ../common/utils.c \ ../common/drisw_util.c -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/tdfx/Makefile b/src/mesa/drivers/dri/tdfx/Makefile index 96bd8f8202f..ed84df20925 100644 --- a/src/mesa/drivers/dri/tdfx/Makefile +++ b/src/mesa/drivers/dri/tdfx/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = tdfx_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ tdfx_context.c \ tdfx_dd.c \ @@ -27,6 +29,6 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/drivers/dri/unichrome/Makefile b/src/mesa/drivers/dri/unichrome/Makefile index 14cf9f30386..373da6016e4 100644 --- a/src/mesa/drivers/dri/unichrome/Makefile +++ b/src/mesa/drivers/dri/unichrome/Makefile @@ -5,6 +5,8 @@ include $(TOP)/configs/current LIBNAME = unichrome_dri.so +include ../Makefile.defines + DRIVER_SOURCES = \ via_context.c \ via_fb.c \ @@ -25,5 +27,5 @@ C_SOURCES = \ ASM_SOURCES = -include ../Makefile.template +include ../Makefile.targets diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 993519f61b2..2981d42297a 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -396,7 +396,8 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi GLboolean _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices, GLsizei numInstances) + const GLvoid *indices, GLsizei numInstances, + GLint basevertex) { ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); @@ -447,7 +448,7 @@ _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, return GL_FALSE; } - if (!check_index_bounds(ctx, count, type, indices, 0)) + if (!check_index_bounds(ctx, count, type, indices, basevertex)) return GL_FALSE; return GL_TRUE; diff --git a/src/mesa/main/api_validate.h b/src/mesa/main/api_validate.h index 16b9c2b2647..09e9522d20e 100644 --- a/src/mesa/main/api_validate.h +++ b/src/mesa/main/api_validate.h @@ -62,7 +62,8 @@ _mesa_validate_DrawArraysInstanced(struct gl_context *ctx, GLenum mode, GLint fi extern GLboolean _mesa_validate_DrawElementsInstanced(struct gl_context *ctx, GLenum mode, GLsizei count, GLenum type, - const GLvoid *indices, GLsizei primcount); + const GLvoid *indices, GLsizei primcount, + GLint basevertex); #endif diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c index 96ee1ace728..63f53e2b080 100644 --- a/src/mesa/main/buffers.c +++ b/src/mesa/main/buffers.c @@ -340,6 +340,26 @@ _mesa_DrawBuffersARB(GLsizei n, const GLenum *buffers) ctx->Driver.DrawBuffer(ctx, n > 0 ? buffers[0] : GL_NONE); } +/** + * Performs necessary state updates when _mesa_drawbuffers makes an + * actual change. + */ +static void +updated_drawbuffers(struct gl_context *ctx) +{ + FLUSH_VERTICES(ctx, _NEW_BUFFERS); + +#if FEATURE_GL + if (ctx->API == API_OPENGL && !ctx->Extensions.ARB_ES2_compatibility) { + struct gl_framebuffer *fb = ctx->DrawBuffer; + + /* Flag the FBO as requiring validation. */ + if (fb->Name != 0) { + fb->_Status = 0; + } + } +#endif +} /** * Helper function to set the GL_DRAW_BUFFER state in the context and @@ -361,7 +381,6 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers, { struct gl_framebuffer *fb = ctx->DrawBuffer; GLbitfield mask[MAX_DRAW_BUFFERS]; - GLboolean newState = GL_FALSE; if (!destMask) { /* compute destMask values now */ @@ -384,16 +403,16 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers, while (destMask0) { GLint bufIndex = _mesa_ffs(destMask0) - 1; if (fb->_ColorDrawBufferIndexes[count] != bufIndex) { + updated_drawbuffers(ctx); fb->_ColorDrawBufferIndexes[count] = bufIndex; - newState = GL_TRUE; } count++; destMask0 &= ~(1 << bufIndex); } fb->ColorDrawBuffer[0] = buffers[0]; if (fb->_NumColorDrawBuffers != count) { + updated_drawbuffers(ctx); fb->_NumColorDrawBuffers = count; - newState = GL_TRUE; } } else { @@ -404,15 +423,15 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers, /* only one bit should be set in the destMask[buf] field */ ASSERT(_mesa_bitcount(destMask[buf]) == 1); if (fb->_ColorDrawBufferIndexes[buf] != bufIndex) { + updated_drawbuffers(ctx); fb->_ColorDrawBufferIndexes[buf] = bufIndex; - newState = GL_TRUE; } count = buf + 1; } else { if (fb->_ColorDrawBufferIndexes[buf] != -1) { + updated_drawbuffers(ctx); fb->_ColorDrawBufferIndexes[buf] = -1; - newState = GL_TRUE; } } fb->ColorDrawBuffer[buf] = buffers[buf]; @@ -420,8 +439,8 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers, /* set remaining outputs to -1 (GL_NONE) */ while (buf < ctx->Const.MaxDrawBuffers) { if (fb->_ColorDrawBufferIndexes[buf] != -1) { + updated_drawbuffers(ctx); fb->_ColorDrawBufferIndexes[buf] = -1; - newState = GL_TRUE; } fb->ColorDrawBuffer[buf] = GL_NONE; buf++; @@ -434,14 +453,11 @@ _mesa_drawbuffers(struct gl_context *ctx, GLuint n, const GLenum *buffers, GLuint buf; for (buf = 0; buf < ctx->Const.MaxDrawBuffers; buf++) { if (ctx->Color.DrawBuffer[buf] != fb->ColorDrawBuffer[buf]) { + updated_drawbuffers(ctx); ctx->Color.DrawBuffer[buf] = fb->ColorDrawBuffer[buf]; - newState = GL_TRUE; } } } - - if (newState) - FLUSH_VERTICES(ctx, _NEW_BUFFERS); } diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index d749b245e13..9fe6d527f92 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1177,6 +1177,9 @@ typedef struct { void (GLAPIENTRYP DrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); + void (GLAPIENTRYP DrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices, + GLsizei primcount, GLint basevertex); /*@}*/ /** diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index 2aba82fc016..c23593bc30d 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -57,6 +57,9 @@ #include "pack.h" #include "pbo.h" #include "queryobj.h" +#include "samplerobj.h" +#include "shaderapi.h" +#include "syncobj.h" #include "teximage.h" #include "mtypes.h" #include "varray.h" @@ -421,6 +424,10 @@ typedef enum /* GL_EXT_transform_feedback */ OPCODE_BEGIN_TRANSFORM_FEEDBACK, OPCODE_END_TRANSFORM_FEEDBACK, + OPCODE_BIND_TRANSFORM_FEEDBACK, + OPCODE_PAUSE_TRANSFORM_FEEDBACK, + OPCODE_RESUME_TRANSFORM_FEEDBACK, + OPCODE_DRAW_TRANSFORM_FEEDBACK, /* GL_EXT_texture_integer */ OPCODE_CLEARCOLOR_I, @@ -440,6 +447,18 @@ typedef enum /* GL_ARB_sampler_object */ OPCODE_BIND_SAMPLER, + OPCODE_SAMPLER_PARAMETERIV, + OPCODE_SAMPLER_PARAMETERFV, + OPCODE_SAMPLER_PARAMETERIIV, + OPCODE_SAMPLER_PARAMETERUIV, + + /* GL_ARB_geometry_shader4 */ + OPCODE_PROGRAM_PARAMETERI, + OPCODE_FRAMEBUFFER_TEXTURE, + OPCODE_FRAMEBUFFER_TEXTURE_FACE, + + /* GL_ARB_sync */ + OPCODE_WAIT_SYNC, /* The following three are meta instructions */ OPCODE_ERROR, /* raise compiled-in error */ @@ -482,6 +501,17 @@ typedef union gl_dlist_node Node; /** + * Used to store a 64-bit uint in a pair of "Nodes" for the sake of 32-bit + * environment. In 64-bit env, sizeof(Node)==8 anyway. + */ +union uint64_pair +{ + GLuint64 uint64; + GLuint uint32[2]; +}; + + +/** * How many nodes to allocate at a time. * * \note Reduced now that we hold vertices etc. elsewhere. @@ -6263,6 +6293,69 @@ save_EndTransformFeedback(void) } } +static void GLAPIENTRY +save_TransformFeedbackVaryings(GLuint program, GLsizei count, + const GLchar **varyings, GLenum bufferMode) +{ + GET_CURRENT_CONTEXT(ctx); + _mesa_problem(ctx, + "glTransformFeedbackVarying() display list support not done"); +} + +static void GLAPIENTRY +save_BindTransformFeedback(GLenum target, GLuint name) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_BIND_TRANSFORM_FEEDBACK, 2); + if (n) { + n[1].e = target; + n[2].ui = name; + } + if (ctx->ExecuteFlag) { + CALL_BindTransformFeedback(ctx->Exec, (target, name)); + } +} + +static void GLAPIENTRY +save_PauseTransformFeedback(void) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + (void) alloc_instruction(ctx, OPCODE_PAUSE_TRANSFORM_FEEDBACK, 0); + if (ctx->ExecuteFlag) { + CALL_PauseTransformFeedback(ctx->Exec, ()); + } +} + +static void GLAPIENTRY +save_ResumeTransformFeedback(void) +{ + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + (void) alloc_instruction(ctx, OPCODE_RESUME_TRANSFORM_FEEDBACK, 0); + if (ctx->ExecuteFlag) { + CALL_ResumeTransformFeedback(ctx->Exec, ()); + } +} + +static void GLAPIENTRY +save_DrawTransformFeedback(GLenum mode, GLuint name) +{ + GET_CURRENT_CONTEXT(ctx); + Node *n; + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_DRAW_TRANSFORM_FEEDBACK, 2); + if (n) { + n[1].e = mode; + n[2].ui = name; + } + if (ctx->ExecuteFlag) { + CALL_DrawTransformFeedback(ctx->Exec, (mode, name)); + } +} + /* aka UseProgram() */ static void GLAPIENTRY @@ -7087,6 +7180,198 @@ save_BindSampler(GLuint unit, GLuint sampler) } } +static void GLAPIENTRY +save_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_SAMPLER_PARAMETERIV, 6); + if (n) { + n[1].ui = sampler; + n[2].e = pname; + n[3].i = params[0]; + if (pname == GL_TEXTURE_BORDER_COLOR) { + n[4].i = params[1]; + n[5].i = params[2]; + n[6].i = params[3]; + } + else { + n[4].i = n[5].i = n[6].i = 0; + } + } + if (ctx->ExecuteFlag) { + CALL_SamplerParameteriv(ctx->Exec, (sampler, pname, params)); + } +} + +static void GLAPIENTRY +save_SamplerParameteri(GLuint sampler, GLenum pname, GLint param) +{ + save_SamplerParameteriv(sampler, pname, ¶m); +} + +static void GLAPIENTRY +save_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_SAMPLER_PARAMETERFV, 6); + if (n) { + n[1].ui = sampler; + n[2].e = pname; + n[3].f = params[0]; + if (pname == GL_TEXTURE_BORDER_COLOR) { + n[4].f = params[1]; + n[5].f = params[2]; + n[6].f = params[3]; + } + else { + n[4].f = n[5].f = n[6].f = 0.0F; + } + } + if (ctx->ExecuteFlag) { + CALL_SamplerParameterfv(ctx->Exec, (sampler, pname, params)); + } +} + +static void GLAPIENTRY +save_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) +{ + save_SamplerParameterfv(sampler, pname, ¶m); +} + +static void GLAPIENTRY +save_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_SAMPLER_PARAMETERIIV, 6); + if (n) { + n[1].ui = sampler; + n[2].e = pname; + n[3].i = params[0]; + if (pname == GL_TEXTURE_BORDER_COLOR) { + n[4].i = params[1]; + n[5].i = params[2]; + n[6].i = params[3]; + } + else { + n[4].i = n[5].i = n[6].i = 0; + } + } + if (ctx->ExecuteFlag) { + CALL_SamplerParameterIiv(ctx->Exec, (sampler, pname, params)); + } +} + +static void GLAPIENTRY +save_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_SAMPLER_PARAMETERUIV, 6); + if (n) { + n[1].ui = sampler; + n[2].e = pname; + n[3].ui = params[0]; + if (pname == GL_TEXTURE_BORDER_COLOR) { + n[4].ui = params[1]; + n[5].ui = params[2]; + n[6].ui = params[3]; + } + else { + n[4].ui = n[5].ui = n[6].ui = 0; + } + } + if (ctx->ExecuteFlag) { + CALL_SamplerParameterIuiv(ctx->Exec, (sampler, pname, params)); + } +} + +/* GL_ARB_geometry_shader4 */ +static void GLAPIENTRY +save_ProgramParameteri(GLuint program, GLenum pname, GLint value) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_PROGRAM_PARAMETERI, 3); + if (n) { + n[1].ui = program; + n[2].e = pname; + n[3].i = value; + } + if (ctx->ExecuteFlag) { + CALL_ProgramParameteriARB(ctx->Exec, (program, pname, value)); + } +} + +static void GLAPIENTRY +save_FramebufferTexture(GLenum target, GLenum attachment, + GLuint texture, GLint level) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_FRAMEBUFFER_TEXTURE, 4); + if (n) { + n[1].e = target; + n[2].e = attachment; + n[3].ui = texture; + n[4].i = level; + } + if (ctx->ExecuteFlag) { + CALL_FramebufferTextureARB(ctx->Exec, (target, attachment, texture, level)); + } +} + +static void GLAPIENTRY +save_FramebufferTextureFace(GLenum target, GLenum attachment, + GLuint texture, GLint level, GLenum face) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_FRAMEBUFFER_TEXTURE_FACE, 5); + if (n) { + n[1].e = target; + n[2].e = attachment; + n[3].ui = texture; + n[4].i = level; + n[5].e = face; + } + if (ctx->ExecuteFlag) { + CALL_FramebufferTextureFaceARB(ctx->Exec, (target, attachment, texture, + level, face)); + } +} + + + +static void GLAPIENTRY +save_WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) +{ + Node *n; + GET_CURRENT_CONTEXT(ctx); + ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx); + n = alloc_instruction(ctx, OPCODE_WAIT_SYNC, 4); + if (n) { + union uint64_pair p; + p.uint64 = timeout; + n[1].data = sync; + n[2].e = flags; + n[3].ui = p.uint32[0]; + n[4].ui = p.uint32[1]; + } + if (ctx->ExecuteFlag) { + CALL_WaitSync(ctx->Exec, (sync, flags, timeout)); + } +} + /** * Save an error-generating command into display list. @@ -7715,12 +8000,6 @@ execute_list(struct gl_context *ctx, GLuint list) case OPCODE_PROVOKING_VERTEX: CALL_ProvokingVertexEXT(ctx->Exec, (n[1].e)); break; - case OPCODE_BEGIN_TRANSFORM_FEEDBACK: - CALL_BeginTransformFeedbackEXT(ctx->Exec, (n[1].e)); - break; - case OPCODE_END_TRANSFORM_FEEDBACK: - CALL_EndTransformFeedbackEXT(ctx->Exec, ()); - break; case OPCODE_STENCIL_FUNC: CALL_StencilFunc(ctx->Exec, (n[1].e, n[2].i, n[3].ui)); break; @@ -8271,9 +8550,93 @@ execute_list(struct gl_context *ctx, GLuint list) CALL_TextureBarrierNV(ctx->Exec, ()); break; + /* GL_EXT/ARB_transform_feedback */ + case OPCODE_BEGIN_TRANSFORM_FEEDBACK: + CALL_BeginTransformFeedbackEXT(ctx->Exec, (n[1].e)); + break; + case OPCODE_END_TRANSFORM_FEEDBACK: + CALL_EndTransformFeedbackEXT(ctx->Exec, ()); + break; + case OPCODE_BIND_TRANSFORM_FEEDBACK: + CALL_BindTransformFeedback(ctx->Exec, (n[1].e, n[2].ui)); + break; + case OPCODE_PAUSE_TRANSFORM_FEEDBACK: + CALL_PauseTransformFeedback(ctx->Exec, ()); + break; + case OPCODE_RESUME_TRANSFORM_FEEDBACK: + CALL_ResumeTransformFeedback(ctx->Exec, ()); + break; + case OPCODE_DRAW_TRANSFORM_FEEDBACK: + CALL_DrawTransformFeedback(ctx->Exec, (n[1].e, n[2].ui)); + break; + + case OPCODE_BIND_SAMPLER: CALL_BindSampler(ctx->Exec, (n[1].ui, n[2].ui)); break; + case OPCODE_SAMPLER_PARAMETERIV: + { + GLint params[4]; + params[0] = n[3].i; + params[1] = n[4].i; + params[2] = n[5].i; + params[3] = n[6].i; + CALL_SamplerParameteriv(ctx->Exec, (n[1].ui, n[2].e, params)); + } + break; + case OPCODE_SAMPLER_PARAMETERFV: + { + GLfloat params[4]; + params[0] = n[3].f; + params[1] = n[4].f; + params[2] = n[5].f; + params[3] = n[6].f; + CALL_SamplerParameterfv(ctx->Exec, (n[1].ui, n[2].e, params)); + } + break; + case OPCODE_SAMPLER_PARAMETERIIV: + { + GLint params[4]; + params[0] = n[3].i; + params[1] = n[4].i; + params[2] = n[5].i; + params[3] = n[6].i; + CALL_SamplerParameterIiv(ctx->Exec, (n[1].ui, n[2].e, params)); + } + break; + case OPCODE_SAMPLER_PARAMETERUIV: + { + GLuint params[4]; + params[0] = n[3].ui; + params[1] = n[4].ui; + params[2] = n[5].ui; + params[3] = n[6].ui; + CALL_SamplerParameterIuiv(ctx->Exec, (n[1].ui, n[2].e, params)); + } + break; + + /* GL_ARB_geometry_shader4 */ + case OPCODE_PROGRAM_PARAMETERI: + CALL_ProgramParameteriARB(ctx->Exec, (n[1].ui, n[2].e, n[3].i)); + break; + case OPCODE_FRAMEBUFFER_TEXTURE: + CALL_FramebufferTextureARB(ctx->Exec, (n[1].e, n[2].e, + n[3].ui, n[4].i)); + break; + case OPCODE_FRAMEBUFFER_TEXTURE_FACE: + CALL_FramebufferTextureFaceARB(ctx->Exec, (n[1].e, n[2].e, + n[3].ui, n[4].i, n[5].e)); + break; + + /* GL_ARB_sync */ + case OPCODE_WAIT_SYNC: + { + union uint64_pair p; + p.uint32[0] = n[3].ui; + p.uint32[1] = n[4].ui; + CALL_WaitSync(ctx->Exec, (n[1].data, n[2].bf, p.uint64)); + } + break; case OPCODE_CONTINUE: n = (Node *) n[1].next; @@ -9741,6 +10104,10 @@ _mesa_create_save_table(void) SET_GenVertexArraysAPPLE(table, _mesa_GenVertexArraysAPPLE); SET_IsVertexArrayAPPLE(table, _mesa_IsVertexArrayAPPLE); + /* GL_ARB_vertex_array_object */ + SET_BindVertexArray(table, _mesa_BindVertexArray); + SET_GenVertexArrays(table, _mesa_GenVertexArrays); + /* ???. GL_EXT_depth_bounds_test */ SET_DepthBoundsEXT(table, save_DepthBoundsEXT); @@ -9823,15 +10190,11 @@ _mesa_create_save_table(void) #endif #if FEATURE_queryobj + _mesa_init_queryobj_dispatch(table); /* glGetQuery, etc */ SET_BeginQueryARB(table, save_BeginQueryARB); SET_EndQueryARB(table, save_EndQueryARB); - SET_GenQueriesARB(table, _mesa_GenQueriesARB); - SET_DeleteQueriesARB(table, _mesa_DeleteQueriesARB); - SET_IsQueryARB(table, _mesa_IsQueryARB); - SET_GetQueryivARB(table, _mesa_GetQueryivARB); - SET_GetQueryObjectivARB(table, _mesa_GetQueryObjectivARB); - SET_GetQueryObjectuivARB(table, _mesa_GetQueryObjectuivARB); #endif + SET_DrawBuffersARB(table, save_DrawBuffersARB); #if FEATURE_EXT_framebuffer_blit @@ -9839,6 +10202,7 @@ _mesa_create_save_table(void) #endif /* GL_ARB_shader_objects */ + _mesa_init_shader_dispatch(table); /* Plug in glCreate/Delete/Get, etc */ SET_UseProgramObjectARB(table, save_UseProgramObjectARB); SET_Uniform1fARB(table, save_Uniform1fARB); SET_Uniform2fARB(table, save_Uniform2fARB); @@ -9890,12 +10254,6 @@ _mesa_create_save_table(void) /* ARB 59. GL_ARB_copy_buffer */ SET_CopyBufferSubData(table, _mesa_CopyBufferSubData); /* no dlist save */ - /* 352. GL_EXT_transform_feedback */ -#if FEATURE_EXT_transform_feedback - SET_BeginTransformFeedbackEXT(table, save_BeginTransformFeedback); - SET_EndTransformFeedbackEXT(table, save_EndTransformFeedback); -#endif - /* 364. GL_EXT_provoking_vertex */ SET_ProvokingVertexEXT(table, save_ProvokingVertexEXT); @@ -9903,6 +10261,7 @@ _mesa_create_save_table(void) #if FEATURE_APPLE_object_purgeable SET_ObjectPurgeableAPPLE(table, _mesa_ObjectPurgeableAPPLE); SET_ObjectUnpurgeableAPPLE(table, _mesa_ObjectUnpurgeableAPPLE); + SET_GetObjectParameterivAPPLE(table, _mesa_GetObjectParameterivAPPLE); #endif /* GL_EXT_texture_integer */ @@ -9922,11 +10281,11 @@ _mesa_create_save_table(void) SET_ClampColor(table, save_ClampColorARB); /* GL 3.0 */ -#if 0 SET_ClearBufferiv(table, save_ClearBufferiv); SET_ClearBufferuiv(table, save_ClearBufferuiv); SET_ClearBufferfv(table, save_ClearBufferfv); SET_ClearBufferfi(table, save_ClearBufferfi); +#if 0 SET_Uniform1ui(table, save_Uniform1ui); SET_Uniform2ui(table, save_Uniform2ui); SET_Uniform3ui(table, save_Uniform3ui); @@ -9936,10 +10295,6 @@ _mesa_create_save_table(void) SET_Uniform3uiv(table, save_Uniform3uiv); SET_Uniform4uiv(table, save_Uniform4uiv); #else - (void) save_ClearBufferiv; - (void) save_ClearBufferuiv; - (void) save_ClearBufferfv; - (void) save_ClearBufferfi; (void) save_Uniform1ui; (void) save_Uniform2ui; (void) save_Uniform3ui; @@ -9950,6 +10305,16 @@ _mesa_create_save_table(void) (void) save_Uniform4uiv; #endif +#if FEATURE_EXT_transform_feedback + SET_BeginTransformFeedbackEXT(table, save_BeginTransformFeedback); + SET_EndTransformFeedbackEXT(table, save_EndTransformFeedback); + SET_TransformFeedbackVaryingsEXT(table, save_TransformFeedbackVaryings); + SET_BindTransformFeedback(table, save_BindTransformFeedback); + SET_PauseTransformFeedback(table, save_PauseTransformFeedback); + SET_ResumeTransformFeedback(table, save_ResumeTransformFeedback); + SET_DrawTransformFeedback(table, save_DrawTransformFeedback); +#endif + /* GL_ARB_instanced_arrays */ SET_VertexAttribDivisorARB(table, save_VertexAttribDivisor); @@ -9957,7 +10322,14 @@ _mesa_create_save_table(void) SET_TextureBarrierNV(table, save_TextureBarrierNV); /* GL_ARB_sampler_objects */ + _mesa_init_sampler_object_dispatch(table); /* plug in Gen/Get/etc functions */ SET_BindSampler(table, save_BindSampler); + SET_SamplerParameteri(table, save_SamplerParameteri); + SET_SamplerParameterf(table, save_SamplerParameterf); + SET_SamplerParameteriv(table, save_SamplerParameteriv); + SET_SamplerParameterfv(table, save_SamplerParameterfv); + SET_SamplerParameterIiv(table, save_SamplerParameterIiv); + SET_SamplerParameterIuiv(table, save_SamplerParameterIuiv); /* GL_ARB_draw_buffer_blend */ SET_BlendFunciARB(table, save_BlendFunci); @@ -9965,6 +10337,15 @@ _mesa_create_save_table(void) SET_BlendEquationiARB(table, save_BlendEquationi); SET_BlendEquationSeparateiARB(table, save_BlendEquationSeparatei); + /* GL_ARB_geometry_shader4 */ + SET_ProgramParameteriARB(table, save_ProgramParameteri); + SET_FramebufferTextureARB(table, save_FramebufferTexture); + SET_FramebufferTextureFaceARB(table, save_FramebufferTextureFace); + + /* GL_ARB_sync */ + _mesa_init_sync_dispatch(table); + SET_WaitSync(table, save_WaitSync); + return table; } diff --git a/src/mesa/main/es_generator.py b/src/mesa/main/es_generator.py index a56debe0170..87d8bd31682 100644 --- a/src/mesa/main/es_generator.py +++ b/src/mesa/main/es_generator.py @@ -687,10 +687,6 @@ print """ #define need_MESA_remap_table #include "%sapi/main/remap_helper.h" -/* force SET_* macros to use the local remap table */ -#define driDispatchRemapTable remap_table -static int remap_table[driDispatchRemapTable_size]; - static void init_remap_table(void) { diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 67df53b889c..d4400709aef 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -795,7 +795,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, } #if FEATURE_GL - if (ctx->API == API_OPENGL) { + if (ctx->API == API_OPENGL && !ctx->Extensions.ARB_ES2_compatibility) { /* Check that all DrawBuffers are present */ for (j = 0; j < ctx->Const.MaxDrawBuffers; j++) { if (fb->ColorDrawBuffer[j] != GL_NONE) { @@ -2161,6 +2161,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, if (att->Type == GL_TEXTURE) { *params = att->TextureLevel; } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetFramebufferAttachmentParameterivEXT(pname)"); @@ -2175,6 +2179,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, *params = 0; } } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetFramebufferAttachmentParameterivEXT(pname)"); @@ -2189,6 +2197,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, *params = 0; } } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetFramebufferAttachmentParameterivEXT(pname)"); @@ -2199,6 +2211,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, _mesa_error(ctx, GL_INVALID_ENUM, "glGetFramebufferAttachmentParameterivEXT(pname)"); } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else { if (ctx->Extensions.EXT_framebuffer_sRGB && ctx->Const.sRGBCapable) { *params = _mesa_get_format_color_encoding(att->Renderbuffer->Format); @@ -2216,6 +2232,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, "glGetFramebufferAttachmentParameterivEXT(pname)"); return; } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else { gl_format format = att->Renderbuffer->Format; if (format == MESA_FORMAT_CI8 || format == MESA_FORMAT_S8) { @@ -2237,6 +2257,10 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, _mesa_error(ctx, GL_INVALID_ENUM, "glGetFramebufferAttachmentParameterivEXT(pname)"); } + else if (att->Type == GL_NONE) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glGetFramebufferAttachmentParameterivEXT(pname)"); + } else if (att->Texture) { const struct gl_texture_image *texImage = _mesa_select_tex_image(ctx, att->Texture, att->Texture->Target, @@ -2254,7 +2278,8 @@ _mesa_GetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, att->Renderbuffer->Format); } else { - *params = 0; + _mesa_problem(ctx, "glGetFramebufferAttachmentParameterivEXT:" + " invalid FBO attachment structure"); } return; default: diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 60e8ae390a5..e88ba43971b 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -1118,8 +1118,10 @@ _mesa_get_format_name(gl_format format) * Return bytes needed to store a block of pixels in the given format. * Normally, a block is 1x1 (a single pixel). But for compressed formats * a block may be 4x4 or 8x4, etc. + * + * Note: not GLuint, so as not to coerce math to unsigned. cf. fdo #37351 */ -GLuint +GLint _mesa_get_format_bytes(gl_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h index df9ed70a3e0..0640bbc4af1 100644 --- a/src/mesa/main/formats.h +++ b/src/mesa/main/formats.h @@ -216,7 +216,7 @@ typedef enum extern const char * _mesa_get_format_name(gl_format format); -extern GLuint +extern GLint _mesa_get_format_bytes(gl_format format); extern GLint diff --git a/src/mesa/main/glapidispatch.h b/src/mesa/main/glapidispatch.h index 4a9a58b5e05..44342102fec 100644 --- a/src/mesa/main/glapidispatch.h +++ b/src/mesa/main/glapidispatch.h @@ -59,7 +59,7 @@ } while(0) /* total number of offsets below */ -#define _gloffset_COUNT 928 +#define _gloffset_COUNT 929 #define _gloffset_NewList 0 #define _gloffset_EndList 1 @@ -658,344 +658,345 @@ #define _gloffset_IsSync 591 #define _gloffset_WaitSync 592 #define _gloffset_DrawElementsBaseVertex 593 -#define _gloffset_DrawRangeElementsBaseVertex 594 -#define _gloffset_MultiDrawElementsBaseVertex 595 -#define _gloffset_BlendEquationSeparateiARB 596 -#define _gloffset_BlendEquationiARB 597 -#define _gloffset_BlendFuncSeparateiARB 598 -#define _gloffset_BlendFunciARB 599 -#define _gloffset_BindSampler 600 -#define _gloffset_DeleteSamplers 601 -#define _gloffset_GenSamplers 602 -#define _gloffset_GetSamplerParameterIiv 603 -#define _gloffset_GetSamplerParameterIuiv 604 -#define _gloffset_GetSamplerParameterfv 605 -#define _gloffset_GetSamplerParameteriv 606 -#define _gloffset_IsSampler 607 -#define _gloffset_SamplerParameterIiv 608 -#define _gloffset_SamplerParameterIuiv 609 -#define _gloffset_SamplerParameterf 610 -#define _gloffset_SamplerParameterfv 611 -#define _gloffset_SamplerParameteri 612 -#define _gloffset_SamplerParameteriv 613 -#define _gloffset_BindTransformFeedback 614 -#define _gloffset_DeleteTransformFeedbacks 615 -#define _gloffset_DrawTransformFeedback 616 -#define _gloffset_GenTransformFeedbacks 617 -#define _gloffset_IsTransformFeedback 618 -#define _gloffset_PauseTransformFeedback 619 -#define _gloffset_ResumeTransformFeedback 620 -#define _gloffset_ClearDepthf 621 -#define _gloffset_DepthRangef 622 -#define _gloffset_GetShaderPrecisionFormat 623 -#define _gloffset_ReleaseShaderCompiler 624 -#define _gloffset_ShaderBinary 625 -#define _gloffset_GetGraphicsResetStatusARB 626 -#define _gloffset_GetnColorTableARB 627 -#define _gloffset_GetnCompressedTexImageARB 628 -#define _gloffset_GetnConvolutionFilterARB 629 -#define _gloffset_GetnHistogramARB 630 -#define _gloffset_GetnMapdvARB 631 -#define _gloffset_GetnMapfvARB 632 -#define _gloffset_GetnMapivARB 633 -#define _gloffset_GetnMinmaxARB 634 -#define _gloffset_GetnPixelMapfvARB 635 -#define _gloffset_GetnPixelMapuivARB 636 -#define _gloffset_GetnPixelMapusvARB 637 -#define _gloffset_GetnPolygonStippleARB 638 -#define _gloffset_GetnSeparableFilterARB 639 -#define _gloffset_GetnTexImageARB 640 -#define _gloffset_GetnUniformdvARB 641 -#define _gloffset_GetnUniformfvARB 642 -#define _gloffset_GetnUniformivARB 643 -#define _gloffset_GetnUniformuivARB 644 -#define _gloffset_ReadnPixelsARB 645 -#define _gloffset_PolygonOffsetEXT 646 -#define _gloffset_GetPixelTexGenParameterfvSGIS 647 -#define _gloffset_GetPixelTexGenParameterivSGIS 648 -#define _gloffset_PixelTexGenParameterfSGIS 649 -#define _gloffset_PixelTexGenParameterfvSGIS 650 -#define _gloffset_PixelTexGenParameteriSGIS 651 -#define _gloffset_PixelTexGenParameterivSGIS 652 -#define _gloffset_SampleMaskSGIS 653 -#define _gloffset_SamplePatternSGIS 654 -#define _gloffset_ColorPointerEXT 655 -#define _gloffset_EdgeFlagPointerEXT 656 -#define _gloffset_IndexPointerEXT 657 -#define _gloffset_NormalPointerEXT 658 -#define _gloffset_TexCoordPointerEXT 659 -#define _gloffset_VertexPointerEXT 660 -#define _gloffset_PointParameterfEXT 661 -#define _gloffset_PointParameterfvEXT 662 -#define _gloffset_LockArraysEXT 663 -#define _gloffset_UnlockArraysEXT 664 -#define _gloffset_SecondaryColor3bEXT 665 -#define _gloffset_SecondaryColor3bvEXT 666 -#define _gloffset_SecondaryColor3dEXT 667 -#define _gloffset_SecondaryColor3dvEXT 668 -#define _gloffset_SecondaryColor3fEXT 669 -#define _gloffset_SecondaryColor3fvEXT 670 -#define _gloffset_SecondaryColor3iEXT 671 -#define _gloffset_SecondaryColor3ivEXT 672 -#define _gloffset_SecondaryColor3sEXT 673 -#define _gloffset_SecondaryColor3svEXT 674 -#define _gloffset_SecondaryColor3ubEXT 675 -#define _gloffset_SecondaryColor3ubvEXT 676 -#define _gloffset_SecondaryColor3uiEXT 677 -#define _gloffset_SecondaryColor3uivEXT 678 -#define _gloffset_SecondaryColor3usEXT 679 -#define _gloffset_SecondaryColor3usvEXT 680 -#define _gloffset_SecondaryColorPointerEXT 681 -#define _gloffset_MultiDrawArraysEXT 682 -#define _gloffset_MultiDrawElementsEXT 683 -#define _gloffset_FogCoordPointerEXT 684 -#define _gloffset_FogCoorddEXT 685 -#define _gloffset_FogCoorddvEXT 686 -#define _gloffset_FogCoordfEXT 687 -#define _gloffset_FogCoordfvEXT 688 -#define _gloffset_PixelTexGenSGIX 689 -#define _gloffset_BlendFuncSeparateEXT 690 -#define _gloffset_FlushVertexArrayRangeNV 691 -#define _gloffset_VertexArrayRangeNV 692 -#define _gloffset_CombinerInputNV 693 -#define _gloffset_CombinerOutputNV 694 -#define _gloffset_CombinerParameterfNV 695 -#define _gloffset_CombinerParameterfvNV 696 -#define _gloffset_CombinerParameteriNV 697 -#define _gloffset_CombinerParameterivNV 698 -#define _gloffset_FinalCombinerInputNV 699 -#define _gloffset_GetCombinerInputParameterfvNV 700 -#define _gloffset_GetCombinerInputParameterivNV 701 -#define _gloffset_GetCombinerOutputParameterfvNV 702 -#define _gloffset_GetCombinerOutputParameterivNV 703 -#define _gloffset_GetFinalCombinerInputParameterfvNV 704 -#define _gloffset_GetFinalCombinerInputParameterivNV 705 -#define _gloffset_ResizeBuffersMESA 706 -#define _gloffset_WindowPos2dMESA 707 -#define _gloffset_WindowPos2dvMESA 708 -#define _gloffset_WindowPos2fMESA 709 -#define _gloffset_WindowPos2fvMESA 710 -#define _gloffset_WindowPos2iMESA 711 -#define _gloffset_WindowPos2ivMESA 712 -#define _gloffset_WindowPos2sMESA 713 -#define _gloffset_WindowPos2svMESA 714 -#define _gloffset_WindowPos3dMESA 715 -#define _gloffset_WindowPos3dvMESA 716 -#define _gloffset_WindowPos3fMESA 717 -#define _gloffset_WindowPos3fvMESA 718 -#define _gloffset_WindowPos3iMESA 719 -#define _gloffset_WindowPos3ivMESA 720 -#define _gloffset_WindowPos3sMESA 721 -#define _gloffset_WindowPos3svMESA 722 -#define _gloffset_WindowPos4dMESA 723 -#define _gloffset_WindowPos4dvMESA 724 -#define _gloffset_WindowPos4fMESA 725 -#define _gloffset_WindowPos4fvMESA 726 -#define _gloffset_WindowPos4iMESA 727 -#define _gloffset_WindowPos4ivMESA 728 -#define _gloffset_WindowPos4sMESA 729 -#define _gloffset_WindowPos4svMESA 730 -#define _gloffset_MultiModeDrawArraysIBM 731 -#define _gloffset_MultiModeDrawElementsIBM 732 -#define _gloffset_DeleteFencesNV 733 -#define _gloffset_FinishFenceNV 734 -#define _gloffset_GenFencesNV 735 -#define _gloffset_GetFenceivNV 736 -#define _gloffset_IsFenceNV 737 -#define _gloffset_SetFenceNV 738 -#define _gloffset_TestFenceNV 739 -#define _gloffset_AreProgramsResidentNV 740 -#define _gloffset_BindProgramNV 741 -#define _gloffset_DeleteProgramsNV 742 -#define _gloffset_ExecuteProgramNV 743 -#define _gloffset_GenProgramsNV 744 -#define _gloffset_GetProgramParameterdvNV 745 -#define _gloffset_GetProgramParameterfvNV 746 -#define _gloffset_GetProgramStringNV 747 -#define _gloffset_GetProgramivNV 748 -#define _gloffset_GetTrackMatrixivNV 749 -#define _gloffset_GetVertexAttribPointervNV 750 -#define _gloffset_GetVertexAttribdvNV 751 -#define _gloffset_GetVertexAttribfvNV 752 -#define _gloffset_GetVertexAttribivNV 753 -#define _gloffset_IsProgramNV 754 -#define _gloffset_LoadProgramNV 755 -#define _gloffset_ProgramParameters4dvNV 756 -#define _gloffset_ProgramParameters4fvNV 757 -#define _gloffset_RequestResidentProgramsNV 758 -#define _gloffset_TrackMatrixNV 759 -#define _gloffset_VertexAttrib1dNV 760 -#define _gloffset_VertexAttrib1dvNV 761 -#define _gloffset_VertexAttrib1fNV 762 -#define _gloffset_VertexAttrib1fvNV 763 -#define _gloffset_VertexAttrib1sNV 764 -#define _gloffset_VertexAttrib1svNV 765 -#define _gloffset_VertexAttrib2dNV 766 -#define _gloffset_VertexAttrib2dvNV 767 -#define _gloffset_VertexAttrib2fNV 768 -#define _gloffset_VertexAttrib2fvNV 769 -#define _gloffset_VertexAttrib2sNV 770 -#define _gloffset_VertexAttrib2svNV 771 -#define _gloffset_VertexAttrib3dNV 772 -#define _gloffset_VertexAttrib3dvNV 773 -#define _gloffset_VertexAttrib3fNV 774 -#define _gloffset_VertexAttrib3fvNV 775 -#define _gloffset_VertexAttrib3sNV 776 -#define _gloffset_VertexAttrib3svNV 777 -#define _gloffset_VertexAttrib4dNV 778 -#define _gloffset_VertexAttrib4dvNV 779 -#define _gloffset_VertexAttrib4fNV 780 -#define _gloffset_VertexAttrib4fvNV 781 -#define _gloffset_VertexAttrib4sNV 782 -#define _gloffset_VertexAttrib4svNV 783 -#define _gloffset_VertexAttrib4ubNV 784 -#define _gloffset_VertexAttrib4ubvNV 785 -#define _gloffset_VertexAttribPointerNV 786 -#define _gloffset_VertexAttribs1dvNV 787 -#define _gloffset_VertexAttribs1fvNV 788 -#define _gloffset_VertexAttribs1svNV 789 -#define _gloffset_VertexAttribs2dvNV 790 -#define _gloffset_VertexAttribs2fvNV 791 -#define _gloffset_VertexAttribs2svNV 792 -#define _gloffset_VertexAttribs3dvNV 793 -#define _gloffset_VertexAttribs3fvNV 794 -#define _gloffset_VertexAttribs3svNV 795 -#define _gloffset_VertexAttribs4dvNV 796 -#define _gloffset_VertexAttribs4fvNV 797 -#define _gloffset_VertexAttribs4svNV 798 -#define _gloffset_VertexAttribs4ubvNV 799 -#define _gloffset_GetTexBumpParameterfvATI 800 -#define _gloffset_GetTexBumpParameterivATI 801 -#define _gloffset_TexBumpParameterfvATI 802 -#define _gloffset_TexBumpParameterivATI 803 -#define _gloffset_AlphaFragmentOp1ATI 804 -#define _gloffset_AlphaFragmentOp2ATI 805 -#define _gloffset_AlphaFragmentOp3ATI 806 -#define _gloffset_BeginFragmentShaderATI 807 -#define _gloffset_BindFragmentShaderATI 808 -#define _gloffset_ColorFragmentOp1ATI 809 -#define _gloffset_ColorFragmentOp2ATI 810 -#define _gloffset_ColorFragmentOp3ATI 811 -#define _gloffset_DeleteFragmentShaderATI 812 -#define _gloffset_EndFragmentShaderATI 813 -#define _gloffset_GenFragmentShadersATI 814 -#define _gloffset_PassTexCoordATI 815 -#define _gloffset_SampleMapATI 816 -#define _gloffset_SetFragmentShaderConstantATI 817 -#define _gloffset_PointParameteriNV 818 -#define _gloffset_PointParameterivNV 819 -#define _gloffset_ActiveStencilFaceEXT 820 -#define _gloffset_BindVertexArrayAPPLE 821 -#define _gloffset_DeleteVertexArraysAPPLE 822 -#define _gloffset_GenVertexArraysAPPLE 823 -#define _gloffset_IsVertexArrayAPPLE 824 -#define _gloffset_GetProgramNamedParameterdvNV 825 -#define _gloffset_GetProgramNamedParameterfvNV 826 -#define _gloffset_ProgramNamedParameter4dNV 827 -#define _gloffset_ProgramNamedParameter4dvNV 828 -#define _gloffset_ProgramNamedParameter4fNV 829 -#define _gloffset_ProgramNamedParameter4fvNV 830 -#define _gloffset_PrimitiveRestartIndexNV 831 -#define _gloffset_PrimitiveRestartNV 832 -#define _gloffset_DepthBoundsEXT 833 -#define _gloffset_BlendEquationSeparateEXT 834 -#define _gloffset_BindFramebufferEXT 835 -#define _gloffset_BindRenderbufferEXT 836 -#define _gloffset_CheckFramebufferStatusEXT 837 -#define _gloffset_DeleteFramebuffersEXT 838 -#define _gloffset_DeleteRenderbuffersEXT 839 -#define _gloffset_FramebufferRenderbufferEXT 840 -#define _gloffset_FramebufferTexture1DEXT 841 -#define _gloffset_FramebufferTexture2DEXT 842 -#define _gloffset_FramebufferTexture3DEXT 843 -#define _gloffset_GenFramebuffersEXT 844 -#define _gloffset_GenRenderbuffersEXT 845 -#define _gloffset_GenerateMipmapEXT 846 -#define _gloffset_GetFramebufferAttachmentParameterivEXT 847 -#define _gloffset_GetRenderbufferParameterivEXT 848 -#define _gloffset_IsFramebufferEXT 849 -#define _gloffset_IsRenderbufferEXT 850 -#define _gloffset_RenderbufferStorageEXT 851 -#define _gloffset_BlitFramebufferEXT 852 -#define _gloffset_BufferParameteriAPPLE 853 -#define _gloffset_FlushMappedBufferRangeAPPLE 854 -#define _gloffset_BindFragDataLocationEXT 855 -#define _gloffset_GetFragDataLocationEXT 856 -#define _gloffset_GetUniformuivEXT 857 -#define _gloffset_GetVertexAttribIivEXT 858 -#define _gloffset_GetVertexAttribIuivEXT 859 -#define _gloffset_Uniform1uiEXT 860 -#define _gloffset_Uniform1uivEXT 861 -#define _gloffset_Uniform2uiEXT 862 -#define _gloffset_Uniform2uivEXT 863 -#define _gloffset_Uniform3uiEXT 864 -#define _gloffset_Uniform3uivEXT 865 -#define _gloffset_Uniform4uiEXT 866 -#define _gloffset_Uniform4uivEXT 867 -#define _gloffset_VertexAttribI1iEXT 868 -#define _gloffset_VertexAttribI1ivEXT 869 -#define _gloffset_VertexAttribI1uiEXT 870 -#define _gloffset_VertexAttribI1uivEXT 871 -#define _gloffset_VertexAttribI2iEXT 872 -#define _gloffset_VertexAttribI2ivEXT 873 -#define _gloffset_VertexAttribI2uiEXT 874 -#define _gloffset_VertexAttribI2uivEXT 875 -#define _gloffset_VertexAttribI3iEXT 876 -#define _gloffset_VertexAttribI3ivEXT 877 -#define _gloffset_VertexAttribI3uiEXT 878 -#define _gloffset_VertexAttribI3uivEXT 879 -#define _gloffset_VertexAttribI4bvEXT 880 -#define _gloffset_VertexAttribI4iEXT 881 -#define _gloffset_VertexAttribI4ivEXT 882 -#define _gloffset_VertexAttribI4svEXT 883 -#define _gloffset_VertexAttribI4ubvEXT 884 -#define _gloffset_VertexAttribI4uiEXT 885 -#define _gloffset_VertexAttribI4uivEXT 886 -#define _gloffset_VertexAttribI4usvEXT 887 -#define _gloffset_VertexAttribIPointerEXT 888 -#define _gloffset_FramebufferTextureLayerEXT 889 -#define _gloffset_ColorMaskIndexedEXT 890 -#define _gloffset_DisableIndexedEXT 891 -#define _gloffset_EnableIndexedEXT 892 -#define _gloffset_GetBooleanIndexedvEXT 893 -#define _gloffset_GetIntegerIndexedvEXT 894 -#define _gloffset_IsEnabledIndexedEXT 895 -#define _gloffset_ClearColorIiEXT 896 -#define _gloffset_ClearColorIuiEXT 897 -#define _gloffset_GetTexParameterIivEXT 898 -#define _gloffset_GetTexParameterIuivEXT 899 -#define _gloffset_TexParameterIivEXT 900 -#define _gloffset_TexParameterIuivEXT 901 -#define _gloffset_BeginConditionalRenderNV 902 -#define _gloffset_EndConditionalRenderNV 903 -#define _gloffset_BeginTransformFeedbackEXT 904 -#define _gloffset_BindBufferBaseEXT 905 -#define _gloffset_BindBufferOffsetEXT 906 -#define _gloffset_BindBufferRangeEXT 907 -#define _gloffset_EndTransformFeedbackEXT 908 -#define _gloffset_GetTransformFeedbackVaryingEXT 909 -#define _gloffset_TransformFeedbackVaryingsEXT 910 -#define _gloffset_ProvokingVertexEXT 911 -#define _gloffset_GetTexParameterPointervAPPLE 912 -#define _gloffset_TextureRangeAPPLE 913 -#define _gloffset_GetObjectParameterivAPPLE 914 -#define _gloffset_ObjectPurgeableAPPLE 915 -#define _gloffset_ObjectUnpurgeableAPPLE 916 -#define _gloffset_ActiveProgramEXT 917 -#define _gloffset_CreateShaderProgramEXT 918 -#define _gloffset_UseShaderProgramEXT 919 -#define _gloffset_TextureBarrierNV 920 -#define _gloffset_StencilFuncSeparateATI 921 -#define _gloffset_ProgramEnvParameters4fvEXT 922 -#define _gloffset_ProgramLocalParameters4fvEXT 923 -#define _gloffset_GetQueryObjecti64vEXT 924 -#define _gloffset_GetQueryObjectui64vEXT 925 -#define _gloffset_EGLImageTargetRenderbufferStorageOES 926 -#define _gloffset_EGLImageTargetTexture2DOES 927 +#define _gloffset_DrawElementsInstancedBaseVertex 594 +#define _gloffset_DrawRangeElementsBaseVertex 595 +#define _gloffset_MultiDrawElementsBaseVertex 596 +#define _gloffset_BlendEquationSeparateiARB 597 +#define _gloffset_BlendEquationiARB 598 +#define _gloffset_BlendFuncSeparateiARB 599 +#define _gloffset_BlendFunciARB 600 +#define _gloffset_BindSampler 601 +#define _gloffset_DeleteSamplers 602 +#define _gloffset_GenSamplers 603 +#define _gloffset_GetSamplerParameterIiv 604 +#define _gloffset_GetSamplerParameterIuiv 605 +#define _gloffset_GetSamplerParameterfv 606 +#define _gloffset_GetSamplerParameteriv 607 +#define _gloffset_IsSampler 608 +#define _gloffset_SamplerParameterIiv 609 +#define _gloffset_SamplerParameterIuiv 610 +#define _gloffset_SamplerParameterf 611 +#define _gloffset_SamplerParameterfv 612 +#define _gloffset_SamplerParameteri 613 +#define _gloffset_SamplerParameteriv 614 +#define _gloffset_BindTransformFeedback 615 +#define _gloffset_DeleteTransformFeedbacks 616 +#define _gloffset_DrawTransformFeedback 617 +#define _gloffset_GenTransformFeedbacks 618 +#define _gloffset_IsTransformFeedback 619 +#define _gloffset_PauseTransformFeedback 620 +#define _gloffset_ResumeTransformFeedback 621 +#define _gloffset_ClearDepthf 622 +#define _gloffset_DepthRangef 623 +#define _gloffset_GetShaderPrecisionFormat 624 +#define _gloffset_ReleaseShaderCompiler 625 +#define _gloffset_ShaderBinary 626 +#define _gloffset_GetGraphicsResetStatusARB 627 +#define _gloffset_GetnColorTableARB 628 +#define _gloffset_GetnCompressedTexImageARB 629 +#define _gloffset_GetnConvolutionFilterARB 630 +#define _gloffset_GetnHistogramARB 631 +#define _gloffset_GetnMapdvARB 632 +#define _gloffset_GetnMapfvARB 633 +#define _gloffset_GetnMapivARB 634 +#define _gloffset_GetnMinmaxARB 635 +#define _gloffset_GetnPixelMapfvARB 636 +#define _gloffset_GetnPixelMapuivARB 637 +#define _gloffset_GetnPixelMapusvARB 638 +#define _gloffset_GetnPolygonStippleARB 639 +#define _gloffset_GetnSeparableFilterARB 640 +#define _gloffset_GetnTexImageARB 641 +#define _gloffset_GetnUniformdvARB 642 +#define _gloffset_GetnUniformfvARB 643 +#define _gloffset_GetnUniformivARB 644 +#define _gloffset_GetnUniformuivARB 645 +#define _gloffset_ReadnPixelsARB 646 +#define _gloffset_PolygonOffsetEXT 647 +#define _gloffset_GetPixelTexGenParameterfvSGIS 648 +#define _gloffset_GetPixelTexGenParameterivSGIS 649 +#define _gloffset_PixelTexGenParameterfSGIS 650 +#define _gloffset_PixelTexGenParameterfvSGIS 651 +#define _gloffset_PixelTexGenParameteriSGIS 652 +#define _gloffset_PixelTexGenParameterivSGIS 653 +#define _gloffset_SampleMaskSGIS 654 +#define _gloffset_SamplePatternSGIS 655 +#define _gloffset_ColorPointerEXT 656 +#define _gloffset_EdgeFlagPointerEXT 657 +#define _gloffset_IndexPointerEXT 658 +#define _gloffset_NormalPointerEXT 659 +#define _gloffset_TexCoordPointerEXT 660 +#define _gloffset_VertexPointerEXT 661 +#define _gloffset_PointParameterfEXT 662 +#define _gloffset_PointParameterfvEXT 663 +#define _gloffset_LockArraysEXT 664 +#define _gloffset_UnlockArraysEXT 665 +#define _gloffset_SecondaryColor3bEXT 666 +#define _gloffset_SecondaryColor3bvEXT 667 +#define _gloffset_SecondaryColor3dEXT 668 +#define _gloffset_SecondaryColor3dvEXT 669 +#define _gloffset_SecondaryColor3fEXT 670 +#define _gloffset_SecondaryColor3fvEXT 671 +#define _gloffset_SecondaryColor3iEXT 672 +#define _gloffset_SecondaryColor3ivEXT 673 +#define _gloffset_SecondaryColor3sEXT 674 +#define _gloffset_SecondaryColor3svEXT 675 +#define _gloffset_SecondaryColor3ubEXT 676 +#define _gloffset_SecondaryColor3ubvEXT 677 +#define _gloffset_SecondaryColor3uiEXT 678 +#define _gloffset_SecondaryColor3uivEXT 679 +#define _gloffset_SecondaryColor3usEXT 680 +#define _gloffset_SecondaryColor3usvEXT 681 +#define _gloffset_SecondaryColorPointerEXT 682 +#define _gloffset_MultiDrawArraysEXT 683 +#define _gloffset_MultiDrawElementsEXT 684 +#define _gloffset_FogCoordPointerEXT 685 +#define _gloffset_FogCoorddEXT 686 +#define _gloffset_FogCoorddvEXT 687 +#define _gloffset_FogCoordfEXT 688 +#define _gloffset_FogCoordfvEXT 689 +#define _gloffset_PixelTexGenSGIX 690 +#define _gloffset_BlendFuncSeparateEXT 691 +#define _gloffset_FlushVertexArrayRangeNV 692 +#define _gloffset_VertexArrayRangeNV 693 +#define _gloffset_CombinerInputNV 694 +#define _gloffset_CombinerOutputNV 695 +#define _gloffset_CombinerParameterfNV 696 +#define _gloffset_CombinerParameterfvNV 697 +#define _gloffset_CombinerParameteriNV 698 +#define _gloffset_CombinerParameterivNV 699 +#define _gloffset_FinalCombinerInputNV 700 +#define _gloffset_GetCombinerInputParameterfvNV 701 +#define _gloffset_GetCombinerInputParameterivNV 702 +#define _gloffset_GetCombinerOutputParameterfvNV 703 +#define _gloffset_GetCombinerOutputParameterivNV 704 +#define _gloffset_GetFinalCombinerInputParameterfvNV 705 +#define _gloffset_GetFinalCombinerInputParameterivNV 706 +#define _gloffset_ResizeBuffersMESA 707 +#define _gloffset_WindowPos2dMESA 708 +#define _gloffset_WindowPos2dvMESA 709 +#define _gloffset_WindowPos2fMESA 710 +#define _gloffset_WindowPos2fvMESA 711 +#define _gloffset_WindowPos2iMESA 712 +#define _gloffset_WindowPos2ivMESA 713 +#define _gloffset_WindowPos2sMESA 714 +#define _gloffset_WindowPos2svMESA 715 +#define _gloffset_WindowPos3dMESA 716 +#define _gloffset_WindowPos3dvMESA 717 +#define _gloffset_WindowPos3fMESA 718 +#define _gloffset_WindowPos3fvMESA 719 +#define _gloffset_WindowPos3iMESA 720 +#define _gloffset_WindowPos3ivMESA 721 +#define _gloffset_WindowPos3sMESA 722 +#define _gloffset_WindowPos3svMESA 723 +#define _gloffset_WindowPos4dMESA 724 +#define _gloffset_WindowPos4dvMESA 725 +#define _gloffset_WindowPos4fMESA 726 +#define _gloffset_WindowPos4fvMESA 727 +#define _gloffset_WindowPos4iMESA 728 +#define _gloffset_WindowPos4ivMESA 729 +#define _gloffset_WindowPos4sMESA 730 +#define _gloffset_WindowPos4svMESA 731 +#define _gloffset_MultiModeDrawArraysIBM 732 +#define _gloffset_MultiModeDrawElementsIBM 733 +#define _gloffset_DeleteFencesNV 734 +#define _gloffset_FinishFenceNV 735 +#define _gloffset_GenFencesNV 736 +#define _gloffset_GetFenceivNV 737 +#define _gloffset_IsFenceNV 738 +#define _gloffset_SetFenceNV 739 +#define _gloffset_TestFenceNV 740 +#define _gloffset_AreProgramsResidentNV 741 +#define _gloffset_BindProgramNV 742 +#define _gloffset_DeleteProgramsNV 743 +#define _gloffset_ExecuteProgramNV 744 +#define _gloffset_GenProgramsNV 745 +#define _gloffset_GetProgramParameterdvNV 746 +#define _gloffset_GetProgramParameterfvNV 747 +#define _gloffset_GetProgramStringNV 748 +#define _gloffset_GetProgramivNV 749 +#define _gloffset_GetTrackMatrixivNV 750 +#define _gloffset_GetVertexAttribPointervNV 751 +#define _gloffset_GetVertexAttribdvNV 752 +#define _gloffset_GetVertexAttribfvNV 753 +#define _gloffset_GetVertexAttribivNV 754 +#define _gloffset_IsProgramNV 755 +#define _gloffset_LoadProgramNV 756 +#define _gloffset_ProgramParameters4dvNV 757 +#define _gloffset_ProgramParameters4fvNV 758 +#define _gloffset_RequestResidentProgramsNV 759 +#define _gloffset_TrackMatrixNV 760 +#define _gloffset_VertexAttrib1dNV 761 +#define _gloffset_VertexAttrib1dvNV 762 +#define _gloffset_VertexAttrib1fNV 763 +#define _gloffset_VertexAttrib1fvNV 764 +#define _gloffset_VertexAttrib1sNV 765 +#define _gloffset_VertexAttrib1svNV 766 +#define _gloffset_VertexAttrib2dNV 767 +#define _gloffset_VertexAttrib2dvNV 768 +#define _gloffset_VertexAttrib2fNV 769 +#define _gloffset_VertexAttrib2fvNV 770 +#define _gloffset_VertexAttrib2sNV 771 +#define _gloffset_VertexAttrib2svNV 772 +#define _gloffset_VertexAttrib3dNV 773 +#define _gloffset_VertexAttrib3dvNV 774 +#define _gloffset_VertexAttrib3fNV 775 +#define _gloffset_VertexAttrib3fvNV 776 +#define _gloffset_VertexAttrib3sNV 777 +#define _gloffset_VertexAttrib3svNV 778 +#define _gloffset_VertexAttrib4dNV 779 +#define _gloffset_VertexAttrib4dvNV 780 +#define _gloffset_VertexAttrib4fNV 781 +#define _gloffset_VertexAttrib4fvNV 782 +#define _gloffset_VertexAttrib4sNV 783 +#define _gloffset_VertexAttrib4svNV 784 +#define _gloffset_VertexAttrib4ubNV 785 +#define _gloffset_VertexAttrib4ubvNV 786 +#define _gloffset_VertexAttribPointerNV 787 +#define _gloffset_VertexAttribs1dvNV 788 +#define _gloffset_VertexAttribs1fvNV 789 +#define _gloffset_VertexAttribs1svNV 790 +#define _gloffset_VertexAttribs2dvNV 791 +#define _gloffset_VertexAttribs2fvNV 792 +#define _gloffset_VertexAttribs2svNV 793 +#define _gloffset_VertexAttribs3dvNV 794 +#define _gloffset_VertexAttribs3fvNV 795 +#define _gloffset_VertexAttribs3svNV 796 +#define _gloffset_VertexAttribs4dvNV 797 +#define _gloffset_VertexAttribs4fvNV 798 +#define _gloffset_VertexAttribs4svNV 799 +#define _gloffset_VertexAttribs4ubvNV 800 +#define _gloffset_GetTexBumpParameterfvATI 801 +#define _gloffset_GetTexBumpParameterivATI 802 +#define _gloffset_TexBumpParameterfvATI 803 +#define _gloffset_TexBumpParameterivATI 804 +#define _gloffset_AlphaFragmentOp1ATI 805 +#define _gloffset_AlphaFragmentOp2ATI 806 +#define _gloffset_AlphaFragmentOp3ATI 807 +#define _gloffset_BeginFragmentShaderATI 808 +#define _gloffset_BindFragmentShaderATI 809 +#define _gloffset_ColorFragmentOp1ATI 810 +#define _gloffset_ColorFragmentOp2ATI 811 +#define _gloffset_ColorFragmentOp3ATI 812 +#define _gloffset_DeleteFragmentShaderATI 813 +#define _gloffset_EndFragmentShaderATI 814 +#define _gloffset_GenFragmentShadersATI 815 +#define _gloffset_PassTexCoordATI 816 +#define _gloffset_SampleMapATI 817 +#define _gloffset_SetFragmentShaderConstantATI 818 +#define _gloffset_PointParameteriNV 819 +#define _gloffset_PointParameterivNV 820 +#define _gloffset_ActiveStencilFaceEXT 821 +#define _gloffset_BindVertexArrayAPPLE 822 +#define _gloffset_DeleteVertexArraysAPPLE 823 +#define _gloffset_GenVertexArraysAPPLE 824 +#define _gloffset_IsVertexArrayAPPLE 825 +#define _gloffset_GetProgramNamedParameterdvNV 826 +#define _gloffset_GetProgramNamedParameterfvNV 827 +#define _gloffset_ProgramNamedParameter4dNV 828 +#define _gloffset_ProgramNamedParameter4dvNV 829 +#define _gloffset_ProgramNamedParameter4fNV 830 +#define _gloffset_ProgramNamedParameter4fvNV 831 +#define _gloffset_PrimitiveRestartIndexNV 832 +#define _gloffset_PrimitiveRestartNV 833 +#define _gloffset_DepthBoundsEXT 834 +#define _gloffset_BlendEquationSeparateEXT 835 +#define _gloffset_BindFramebufferEXT 836 +#define _gloffset_BindRenderbufferEXT 837 +#define _gloffset_CheckFramebufferStatusEXT 838 +#define _gloffset_DeleteFramebuffersEXT 839 +#define _gloffset_DeleteRenderbuffersEXT 840 +#define _gloffset_FramebufferRenderbufferEXT 841 +#define _gloffset_FramebufferTexture1DEXT 842 +#define _gloffset_FramebufferTexture2DEXT 843 +#define _gloffset_FramebufferTexture3DEXT 844 +#define _gloffset_GenFramebuffersEXT 845 +#define _gloffset_GenRenderbuffersEXT 846 +#define _gloffset_GenerateMipmapEXT 847 +#define _gloffset_GetFramebufferAttachmentParameterivEXT 848 +#define _gloffset_GetRenderbufferParameterivEXT 849 +#define _gloffset_IsFramebufferEXT 850 +#define _gloffset_IsRenderbufferEXT 851 +#define _gloffset_RenderbufferStorageEXT 852 +#define _gloffset_BlitFramebufferEXT 853 +#define _gloffset_BufferParameteriAPPLE 854 +#define _gloffset_FlushMappedBufferRangeAPPLE 855 +#define _gloffset_BindFragDataLocationEXT 856 +#define _gloffset_GetFragDataLocationEXT 857 +#define _gloffset_GetUniformuivEXT 858 +#define _gloffset_GetVertexAttribIivEXT 859 +#define _gloffset_GetVertexAttribIuivEXT 860 +#define _gloffset_Uniform1uiEXT 861 +#define _gloffset_Uniform1uivEXT 862 +#define _gloffset_Uniform2uiEXT 863 +#define _gloffset_Uniform2uivEXT 864 +#define _gloffset_Uniform3uiEXT 865 +#define _gloffset_Uniform3uivEXT 866 +#define _gloffset_Uniform4uiEXT 867 +#define _gloffset_Uniform4uivEXT 868 +#define _gloffset_VertexAttribI1iEXT 869 +#define _gloffset_VertexAttribI1ivEXT 870 +#define _gloffset_VertexAttribI1uiEXT 871 +#define _gloffset_VertexAttribI1uivEXT 872 +#define _gloffset_VertexAttribI2iEXT 873 +#define _gloffset_VertexAttribI2ivEXT 874 +#define _gloffset_VertexAttribI2uiEXT 875 +#define _gloffset_VertexAttribI2uivEXT 876 +#define _gloffset_VertexAttribI3iEXT 877 +#define _gloffset_VertexAttribI3ivEXT 878 +#define _gloffset_VertexAttribI3uiEXT 879 +#define _gloffset_VertexAttribI3uivEXT 880 +#define _gloffset_VertexAttribI4bvEXT 881 +#define _gloffset_VertexAttribI4iEXT 882 +#define _gloffset_VertexAttribI4ivEXT 883 +#define _gloffset_VertexAttribI4svEXT 884 +#define _gloffset_VertexAttribI4ubvEXT 885 +#define _gloffset_VertexAttribI4uiEXT 886 +#define _gloffset_VertexAttribI4uivEXT 887 +#define _gloffset_VertexAttribI4usvEXT 888 +#define _gloffset_VertexAttribIPointerEXT 889 +#define _gloffset_FramebufferTextureLayerEXT 890 +#define _gloffset_ColorMaskIndexedEXT 891 +#define _gloffset_DisableIndexedEXT 892 +#define _gloffset_EnableIndexedEXT 893 +#define _gloffset_GetBooleanIndexedvEXT 894 +#define _gloffset_GetIntegerIndexedvEXT 895 +#define _gloffset_IsEnabledIndexedEXT 896 +#define _gloffset_ClearColorIiEXT 897 +#define _gloffset_ClearColorIuiEXT 898 +#define _gloffset_GetTexParameterIivEXT 899 +#define _gloffset_GetTexParameterIuivEXT 900 +#define _gloffset_TexParameterIivEXT 901 +#define _gloffset_TexParameterIuivEXT 902 +#define _gloffset_BeginConditionalRenderNV 903 +#define _gloffset_EndConditionalRenderNV 904 +#define _gloffset_BeginTransformFeedbackEXT 905 +#define _gloffset_BindBufferBaseEXT 906 +#define _gloffset_BindBufferOffsetEXT 907 +#define _gloffset_BindBufferRangeEXT 908 +#define _gloffset_EndTransformFeedbackEXT 909 +#define _gloffset_GetTransformFeedbackVaryingEXT 910 +#define _gloffset_TransformFeedbackVaryingsEXT 911 +#define _gloffset_ProvokingVertexEXT 912 +#define _gloffset_GetTexParameterPointervAPPLE 913 +#define _gloffset_TextureRangeAPPLE 914 +#define _gloffset_GetObjectParameterivAPPLE 915 +#define _gloffset_ObjectPurgeableAPPLE 916 +#define _gloffset_ObjectUnpurgeableAPPLE 917 +#define _gloffset_ActiveProgramEXT 918 +#define _gloffset_CreateShaderProgramEXT 919 +#define _gloffset_UseShaderProgramEXT 920 +#define _gloffset_TextureBarrierNV 921 +#define _gloffset_StencilFuncSeparateATI 922 +#define _gloffset_ProgramEnvParameters4fvEXT 923 +#define _gloffset_ProgramLocalParameters4fvEXT 924 +#define _gloffset_GetQueryObjecti64vEXT 925 +#define _gloffset_GetQueryObjectui64vEXT 926 +#define _gloffset_EGLImageTargetRenderbufferStorageOES 927 +#define _gloffset_EGLImageTargetTexture2DOES 928 #else /* !_GLAPI_USE_REMAP_TABLE */ -#define driDispatchRemapTable_size 520 +#define driDispatchRemapTable_size 521 extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define AttachShader_remap_index 0 @@ -1184,340 +1185,341 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define IsSync_remap_index 183 #define WaitSync_remap_index 184 #define DrawElementsBaseVertex_remap_index 185 -#define DrawRangeElementsBaseVertex_remap_index 186 -#define MultiDrawElementsBaseVertex_remap_index 187 -#define BlendEquationSeparateiARB_remap_index 188 -#define BlendEquationiARB_remap_index 189 -#define BlendFuncSeparateiARB_remap_index 190 -#define BlendFunciARB_remap_index 191 -#define BindSampler_remap_index 192 -#define DeleteSamplers_remap_index 193 -#define GenSamplers_remap_index 194 -#define GetSamplerParameterIiv_remap_index 195 -#define GetSamplerParameterIuiv_remap_index 196 -#define GetSamplerParameterfv_remap_index 197 -#define GetSamplerParameteriv_remap_index 198 -#define IsSampler_remap_index 199 -#define SamplerParameterIiv_remap_index 200 -#define SamplerParameterIuiv_remap_index 201 -#define SamplerParameterf_remap_index 202 -#define SamplerParameterfv_remap_index 203 -#define SamplerParameteri_remap_index 204 -#define SamplerParameteriv_remap_index 205 -#define BindTransformFeedback_remap_index 206 -#define DeleteTransformFeedbacks_remap_index 207 -#define DrawTransformFeedback_remap_index 208 -#define GenTransformFeedbacks_remap_index 209 -#define IsTransformFeedback_remap_index 210 -#define PauseTransformFeedback_remap_index 211 -#define ResumeTransformFeedback_remap_index 212 -#define ClearDepthf_remap_index 213 -#define DepthRangef_remap_index 214 -#define GetShaderPrecisionFormat_remap_index 215 -#define ReleaseShaderCompiler_remap_index 216 -#define ShaderBinary_remap_index 217 -#define GetGraphicsResetStatusARB_remap_index 218 -#define GetnColorTableARB_remap_index 219 -#define GetnCompressedTexImageARB_remap_index 220 -#define GetnConvolutionFilterARB_remap_index 221 -#define GetnHistogramARB_remap_index 222 -#define GetnMapdvARB_remap_index 223 -#define GetnMapfvARB_remap_index 224 -#define GetnMapivARB_remap_index 225 -#define GetnMinmaxARB_remap_index 226 -#define GetnPixelMapfvARB_remap_index 227 -#define GetnPixelMapuivARB_remap_index 228 -#define GetnPixelMapusvARB_remap_index 229 -#define GetnPolygonStippleARB_remap_index 230 -#define GetnSeparableFilterARB_remap_index 231 -#define GetnTexImageARB_remap_index 232 -#define GetnUniformdvARB_remap_index 233 -#define GetnUniformfvARB_remap_index 234 -#define GetnUniformivARB_remap_index 235 -#define GetnUniformuivARB_remap_index 236 -#define ReadnPixelsARB_remap_index 237 -#define PolygonOffsetEXT_remap_index 238 -#define GetPixelTexGenParameterfvSGIS_remap_index 239 -#define GetPixelTexGenParameterivSGIS_remap_index 240 -#define PixelTexGenParameterfSGIS_remap_index 241 -#define PixelTexGenParameterfvSGIS_remap_index 242 -#define PixelTexGenParameteriSGIS_remap_index 243 -#define PixelTexGenParameterivSGIS_remap_index 244 -#define SampleMaskSGIS_remap_index 245 -#define SamplePatternSGIS_remap_index 246 -#define ColorPointerEXT_remap_index 247 -#define EdgeFlagPointerEXT_remap_index 248 -#define IndexPointerEXT_remap_index 249 -#define NormalPointerEXT_remap_index 250 -#define TexCoordPointerEXT_remap_index 251 -#define VertexPointerEXT_remap_index 252 -#define PointParameterfEXT_remap_index 253 -#define PointParameterfvEXT_remap_index 254 -#define LockArraysEXT_remap_index 255 -#define UnlockArraysEXT_remap_index 256 -#define SecondaryColor3bEXT_remap_index 257 -#define SecondaryColor3bvEXT_remap_index 258 -#define SecondaryColor3dEXT_remap_index 259 -#define SecondaryColor3dvEXT_remap_index 260 -#define SecondaryColor3fEXT_remap_index 261 -#define SecondaryColor3fvEXT_remap_index 262 -#define SecondaryColor3iEXT_remap_index 263 -#define SecondaryColor3ivEXT_remap_index 264 -#define SecondaryColor3sEXT_remap_index 265 -#define SecondaryColor3svEXT_remap_index 266 -#define SecondaryColor3ubEXT_remap_index 267 -#define SecondaryColor3ubvEXT_remap_index 268 -#define SecondaryColor3uiEXT_remap_index 269 -#define SecondaryColor3uivEXT_remap_index 270 -#define SecondaryColor3usEXT_remap_index 271 -#define SecondaryColor3usvEXT_remap_index 272 -#define SecondaryColorPointerEXT_remap_index 273 -#define MultiDrawArraysEXT_remap_index 274 -#define MultiDrawElementsEXT_remap_index 275 -#define FogCoordPointerEXT_remap_index 276 -#define FogCoorddEXT_remap_index 277 -#define FogCoorddvEXT_remap_index 278 -#define FogCoordfEXT_remap_index 279 -#define FogCoordfvEXT_remap_index 280 -#define PixelTexGenSGIX_remap_index 281 -#define BlendFuncSeparateEXT_remap_index 282 -#define FlushVertexArrayRangeNV_remap_index 283 -#define VertexArrayRangeNV_remap_index 284 -#define CombinerInputNV_remap_index 285 -#define CombinerOutputNV_remap_index 286 -#define CombinerParameterfNV_remap_index 287 -#define CombinerParameterfvNV_remap_index 288 -#define CombinerParameteriNV_remap_index 289 -#define CombinerParameterivNV_remap_index 290 -#define FinalCombinerInputNV_remap_index 291 -#define GetCombinerInputParameterfvNV_remap_index 292 -#define GetCombinerInputParameterivNV_remap_index 293 -#define GetCombinerOutputParameterfvNV_remap_index 294 -#define GetCombinerOutputParameterivNV_remap_index 295 -#define GetFinalCombinerInputParameterfvNV_remap_index 296 -#define GetFinalCombinerInputParameterivNV_remap_index 297 -#define ResizeBuffersMESA_remap_index 298 -#define WindowPos2dMESA_remap_index 299 -#define WindowPos2dvMESA_remap_index 300 -#define WindowPos2fMESA_remap_index 301 -#define WindowPos2fvMESA_remap_index 302 -#define WindowPos2iMESA_remap_index 303 -#define WindowPos2ivMESA_remap_index 304 -#define WindowPos2sMESA_remap_index 305 -#define WindowPos2svMESA_remap_index 306 -#define WindowPos3dMESA_remap_index 307 -#define WindowPos3dvMESA_remap_index 308 -#define WindowPos3fMESA_remap_index 309 -#define WindowPos3fvMESA_remap_index 310 -#define WindowPos3iMESA_remap_index 311 -#define WindowPos3ivMESA_remap_index 312 -#define WindowPos3sMESA_remap_index 313 -#define WindowPos3svMESA_remap_index 314 -#define WindowPos4dMESA_remap_index 315 -#define WindowPos4dvMESA_remap_index 316 -#define WindowPos4fMESA_remap_index 317 -#define WindowPos4fvMESA_remap_index 318 -#define WindowPos4iMESA_remap_index 319 -#define WindowPos4ivMESA_remap_index 320 -#define WindowPos4sMESA_remap_index 321 -#define WindowPos4svMESA_remap_index 322 -#define MultiModeDrawArraysIBM_remap_index 323 -#define MultiModeDrawElementsIBM_remap_index 324 -#define DeleteFencesNV_remap_index 325 -#define FinishFenceNV_remap_index 326 -#define GenFencesNV_remap_index 327 -#define GetFenceivNV_remap_index 328 -#define IsFenceNV_remap_index 329 -#define SetFenceNV_remap_index 330 -#define TestFenceNV_remap_index 331 -#define AreProgramsResidentNV_remap_index 332 -#define BindProgramNV_remap_index 333 -#define DeleteProgramsNV_remap_index 334 -#define ExecuteProgramNV_remap_index 335 -#define GenProgramsNV_remap_index 336 -#define GetProgramParameterdvNV_remap_index 337 -#define GetProgramParameterfvNV_remap_index 338 -#define GetProgramStringNV_remap_index 339 -#define GetProgramivNV_remap_index 340 -#define GetTrackMatrixivNV_remap_index 341 -#define GetVertexAttribPointervNV_remap_index 342 -#define GetVertexAttribdvNV_remap_index 343 -#define GetVertexAttribfvNV_remap_index 344 -#define GetVertexAttribivNV_remap_index 345 -#define IsProgramNV_remap_index 346 -#define LoadProgramNV_remap_index 347 -#define ProgramParameters4dvNV_remap_index 348 -#define ProgramParameters4fvNV_remap_index 349 -#define RequestResidentProgramsNV_remap_index 350 -#define TrackMatrixNV_remap_index 351 -#define VertexAttrib1dNV_remap_index 352 -#define VertexAttrib1dvNV_remap_index 353 -#define VertexAttrib1fNV_remap_index 354 -#define VertexAttrib1fvNV_remap_index 355 -#define VertexAttrib1sNV_remap_index 356 -#define VertexAttrib1svNV_remap_index 357 -#define VertexAttrib2dNV_remap_index 358 -#define VertexAttrib2dvNV_remap_index 359 -#define VertexAttrib2fNV_remap_index 360 -#define VertexAttrib2fvNV_remap_index 361 -#define VertexAttrib2sNV_remap_index 362 -#define VertexAttrib2svNV_remap_index 363 -#define VertexAttrib3dNV_remap_index 364 -#define VertexAttrib3dvNV_remap_index 365 -#define VertexAttrib3fNV_remap_index 366 -#define VertexAttrib3fvNV_remap_index 367 -#define VertexAttrib3sNV_remap_index 368 -#define VertexAttrib3svNV_remap_index 369 -#define VertexAttrib4dNV_remap_index 370 -#define VertexAttrib4dvNV_remap_index 371 -#define VertexAttrib4fNV_remap_index 372 -#define VertexAttrib4fvNV_remap_index 373 -#define VertexAttrib4sNV_remap_index 374 -#define VertexAttrib4svNV_remap_index 375 -#define VertexAttrib4ubNV_remap_index 376 -#define VertexAttrib4ubvNV_remap_index 377 -#define VertexAttribPointerNV_remap_index 378 -#define VertexAttribs1dvNV_remap_index 379 -#define VertexAttribs1fvNV_remap_index 380 -#define VertexAttribs1svNV_remap_index 381 -#define VertexAttribs2dvNV_remap_index 382 -#define VertexAttribs2fvNV_remap_index 383 -#define VertexAttribs2svNV_remap_index 384 -#define VertexAttribs3dvNV_remap_index 385 -#define VertexAttribs3fvNV_remap_index 386 -#define VertexAttribs3svNV_remap_index 387 -#define VertexAttribs4dvNV_remap_index 388 -#define VertexAttribs4fvNV_remap_index 389 -#define VertexAttribs4svNV_remap_index 390 -#define VertexAttribs4ubvNV_remap_index 391 -#define GetTexBumpParameterfvATI_remap_index 392 -#define GetTexBumpParameterivATI_remap_index 393 -#define TexBumpParameterfvATI_remap_index 394 -#define TexBumpParameterivATI_remap_index 395 -#define AlphaFragmentOp1ATI_remap_index 396 -#define AlphaFragmentOp2ATI_remap_index 397 -#define AlphaFragmentOp3ATI_remap_index 398 -#define BeginFragmentShaderATI_remap_index 399 -#define BindFragmentShaderATI_remap_index 400 -#define ColorFragmentOp1ATI_remap_index 401 -#define ColorFragmentOp2ATI_remap_index 402 -#define ColorFragmentOp3ATI_remap_index 403 -#define DeleteFragmentShaderATI_remap_index 404 -#define EndFragmentShaderATI_remap_index 405 -#define GenFragmentShadersATI_remap_index 406 -#define PassTexCoordATI_remap_index 407 -#define SampleMapATI_remap_index 408 -#define SetFragmentShaderConstantATI_remap_index 409 -#define PointParameteriNV_remap_index 410 -#define PointParameterivNV_remap_index 411 -#define ActiveStencilFaceEXT_remap_index 412 -#define BindVertexArrayAPPLE_remap_index 413 -#define DeleteVertexArraysAPPLE_remap_index 414 -#define GenVertexArraysAPPLE_remap_index 415 -#define IsVertexArrayAPPLE_remap_index 416 -#define GetProgramNamedParameterdvNV_remap_index 417 -#define GetProgramNamedParameterfvNV_remap_index 418 -#define ProgramNamedParameter4dNV_remap_index 419 -#define ProgramNamedParameter4dvNV_remap_index 420 -#define ProgramNamedParameter4fNV_remap_index 421 -#define ProgramNamedParameter4fvNV_remap_index 422 -#define PrimitiveRestartIndexNV_remap_index 423 -#define PrimitiveRestartNV_remap_index 424 -#define DepthBoundsEXT_remap_index 425 -#define BlendEquationSeparateEXT_remap_index 426 -#define BindFramebufferEXT_remap_index 427 -#define BindRenderbufferEXT_remap_index 428 -#define CheckFramebufferStatusEXT_remap_index 429 -#define DeleteFramebuffersEXT_remap_index 430 -#define DeleteRenderbuffersEXT_remap_index 431 -#define FramebufferRenderbufferEXT_remap_index 432 -#define FramebufferTexture1DEXT_remap_index 433 -#define FramebufferTexture2DEXT_remap_index 434 -#define FramebufferTexture3DEXT_remap_index 435 -#define GenFramebuffersEXT_remap_index 436 -#define GenRenderbuffersEXT_remap_index 437 -#define GenerateMipmapEXT_remap_index 438 -#define GetFramebufferAttachmentParameterivEXT_remap_index 439 -#define GetRenderbufferParameterivEXT_remap_index 440 -#define IsFramebufferEXT_remap_index 441 -#define IsRenderbufferEXT_remap_index 442 -#define RenderbufferStorageEXT_remap_index 443 -#define BlitFramebufferEXT_remap_index 444 -#define BufferParameteriAPPLE_remap_index 445 -#define FlushMappedBufferRangeAPPLE_remap_index 446 -#define BindFragDataLocationEXT_remap_index 447 -#define GetFragDataLocationEXT_remap_index 448 -#define GetUniformuivEXT_remap_index 449 -#define GetVertexAttribIivEXT_remap_index 450 -#define GetVertexAttribIuivEXT_remap_index 451 -#define Uniform1uiEXT_remap_index 452 -#define Uniform1uivEXT_remap_index 453 -#define Uniform2uiEXT_remap_index 454 -#define Uniform2uivEXT_remap_index 455 -#define Uniform3uiEXT_remap_index 456 -#define Uniform3uivEXT_remap_index 457 -#define Uniform4uiEXT_remap_index 458 -#define Uniform4uivEXT_remap_index 459 -#define VertexAttribI1iEXT_remap_index 460 -#define VertexAttribI1ivEXT_remap_index 461 -#define VertexAttribI1uiEXT_remap_index 462 -#define VertexAttribI1uivEXT_remap_index 463 -#define VertexAttribI2iEXT_remap_index 464 -#define VertexAttribI2ivEXT_remap_index 465 -#define VertexAttribI2uiEXT_remap_index 466 -#define VertexAttribI2uivEXT_remap_index 467 -#define VertexAttribI3iEXT_remap_index 468 -#define VertexAttribI3ivEXT_remap_index 469 -#define VertexAttribI3uiEXT_remap_index 470 -#define VertexAttribI3uivEXT_remap_index 471 -#define VertexAttribI4bvEXT_remap_index 472 -#define VertexAttribI4iEXT_remap_index 473 -#define VertexAttribI4ivEXT_remap_index 474 -#define VertexAttribI4svEXT_remap_index 475 -#define VertexAttribI4ubvEXT_remap_index 476 -#define VertexAttribI4uiEXT_remap_index 477 -#define VertexAttribI4uivEXT_remap_index 478 -#define VertexAttribI4usvEXT_remap_index 479 -#define VertexAttribIPointerEXT_remap_index 480 -#define FramebufferTextureLayerEXT_remap_index 481 -#define ColorMaskIndexedEXT_remap_index 482 -#define DisableIndexedEXT_remap_index 483 -#define EnableIndexedEXT_remap_index 484 -#define GetBooleanIndexedvEXT_remap_index 485 -#define GetIntegerIndexedvEXT_remap_index 486 -#define IsEnabledIndexedEXT_remap_index 487 -#define ClearColorIiEXT_remap_index 488 -#define ClearColorIuiEXT_remap_index 489 -#define GetTexParameterIivEXT_remap_index 490 -#define GetTexParameterIuivEXT_remap_index 491 -#define TexParameterIivEXT_remap_index 492 -#define TexParameterIuivEXT_remap_index 493 -#define BeginConditionalRenderNV_remap_index 494 -#define EndConditionalRenderNV_remap_index 495 -#define BeginTransformFeedbackEXT_remap_index 496 -#define BindBufferBaseEXT_remap_index 497 -#define BindBufferOffsetEXT_remap_index 498 -#define BindBufferRangeEXT_remap_index 499 -#define EndTransformFeedbackEXT_remap_index 500 -#define GetTransformFeedbackVaryingEXT_remap_index 501 -#define TransformFeedbackVaryingsEXT_remap_index 502 -#define ProvokingVertexEXT_remap_index 503 -#define GetTexParameterPointervAPPLE_remap_index 504 -#define TextureRangeAPPLE_remap_index 505 -#define GetObjectParameterivAPPLE_remap_index 506 -#define ObjectPurgeableAPPLE_remap_index 507 -#define ObjectUnpurgeableAPPLE_remap_index 508 -#define ActiveProgramEXT_remap_index 509 -#define CreateShaderProgramEXT_remap_index 510 -#define UseShaderProgramEXT_remap_index 511 -#define TextureBarrierNV_remap_index 512 -#define StencilFuncSeparateATI_remap_index 513 -#define ProgramEnvParameters4fvEXT_remap_index 514 -#define ProgramLocalParameters4fvEXT_remap_index 515 -#define GetQueryObjecti64vEXT_remap_index 516 -#define GetQueryObjectui64vEXT_remap_index 517 -#define EGLImageTargetRenderbufferStorageOES_remap_index 518 -#define EGLImageTargetTexture2DOES_remap_index 519 +#define DrawElementsInstancedBaseVertex_remap_index 186 +#define DrawRangeElementsBaseVertex_remap_index 187 +#define MultiDrawElementsBaseVertex_remap_index 188 +#define BlendEquationSeparateiARB_remap_index 189 +#define BlendEquationiARB_remap_index 190 +#define BlendFuncSeparateiARB_remap_index 191 +#define BlendFunciARB_remap_index 192 +#define BindSampler_remap_index 193 +#define DeleteSamplers_remap_index 194 +#define GenSamplers_remap_index 195 +#define GetSamplerParameterIiv_remap_index 196 +#define GetSamplerParameterIuiv_remap_index 197 +#define GetSamplerParameterfv_remap_index 198 +#define GetSamplerParameteriv_remap_index 199 +#define IsSampler_remap_index 200 +#define SamplerParameterIiv_remap_index 201 +#define SamplerParameterIuiv_remap_index 202 +#define SamplerParameterf_remap_index 203 +#define SamplerParameterfv_remap_index 204 +#define SamplerParameteri_remap_index 205 +#define SamplerParameteriv_remap_index 206 +#define BindTransformFeedback_remap_index 207 +#define DeleteTransformFeedbacks_remap_index 208 +#define DrawTransformFeedback_remap_index 209 +#define GenTransformFeedbacks_remap_index 210 +#define IsTransformFeedback_remap_index 211 +#define PauseTransformFeedback_remap_index 212 +#define ResumeTransformFeedback_remap_index 213 +#define ClearDepthf_remap_index 214 +#define DepthRangef_remap_index 215 +#define GetShaderPrecisionFormat_remap_index 216 +#define ReleaseShaderCompiler_remap_index 217 +#define ShaderBinary_remap_index 218 +#define GetGraphicsResetStatusARB_remap_index 219 +#define GetnColorTableARB_remap_index 220 +#define GetnCompressedTexImageARB_remap_index 221 +#define GetnConvolutionFilterARB_remap_index 222 +#define GetnHistogramARB_remap_index 223 +#define GetnMapdvARB_remap_index 224 +#define GetnMapfvARB_remap_index 225 +#define GetnMapivARB_remap_index 226 +#define GetnMinmaxARB_remap_index 227 +#define GetnPixelMapfvARB_remap_index 228 +#define GetnPixelMapuivARB_remap_index 229 +#define GetnPixelMapusvARB_remap_index 230 +#define GetnPolygonStippleARB_remap_index 231 +#define GetnSeparableFilterARB_remap_index 232 +#define GetnTexImageARB_remap_index 233 +#define GetnUniformdvARB_remap_index 234 +#define GetnUniformfvARB_remap_index 235 +#define GetnUniformivARB_remap_index 236 +#define GetnUniformuivARB_remap_index 237 +#define ReadnPixelsARB_remap_index 238 +#define PolygonOffsetEXT_remap_index 239 +#define GetPixelTexGenParameterfvSGIS_remap_index 240 +#define GetPixelTexGenParameterivSGIS_remap_index 241 +#define PixelTexGenParameterfSGIS_remap_index 242 +#define PixelTexGenParameterfvSGIS_remap_index 243 +#define PixelTexGenParameteriSGIS_remap_index 244 +#define PixelTexGenParameterivSGIS_remap_index 245 +#define SampleMaskSGIS_remap_index 246 +#define SamplePatternSGIS_remap_index 247 +#define ColorPointerEXT_remap_index 248 +#define EdgeFlagPointerEXT_remap_index 249 +#define IndexPointerEXT_remap_index 250 +#define NormalPointerEXT_remap_index 251 +#define TexCoordPointerEXT_remap_index 252 +#define VertexPointerEXT_remap_index 253 +#define PointParameterfEXT_remap_index 254 +#define PointParameterfvEXT_remap_index 255 +#define LockArraysEXT_remap_index 256 +#define UnlockArraysEXT_remap_index 257 +#define SecondaryColor3bEXT_remap_index 258 +#define SecondaryColor3bvEXT_remap_index 259 +#define SecondaryColor3dEXT_remap_index 260 +#define SecondaryColor3dvEXT_remap_index 261 +#define SecondaryColor3fEXT_remap_index 262 +#define SecondaryColor3fvEXT_remap_index 263 +#define SecondaryColor3iEXT_remap_index 264 +#define SecondaryColor3ivEXT_remap_index 265 +#define SecondaryColor3sEXT_remap_index 266 +#define SecondaryColor3svEXT_remap_index 267 +#define SecondaryColor3ubEXT_remap_index 268 +#define SecondaryColor3ubvEXT_remap_index 269 +#define SecondaryColor3uiEXT_remap_index 270 +#define SecondaryColor3uivEXT_remap_index 271 +#define SecondaryColor3usEXT_remap_index 272 +#define SecondaryColor3usvEXT_remap_index 273 +#define SecondaryColorPointerEXT_remap_index 274 +#define MultiDrawArraysEXT_remap_index 275 +#define MultiDrawElementsEXT_remap_index 276 +#define FogCoordPointerEXT_remap_index 277 +#define FogCoorddEXT_remap_index 278 +#define FogCoorddvEXT_remap_index 279 +#define FogCoordfEXT_remap_index 280 +#define FogCoordfvEXT_remap_index 281 +#define PixelTexGenSGIX_remap_index 282 +#define BlendFuncSeparateEXT_remap_index 283 +#define FlushVertexArrayRangeNV_remap_index 284 +#define VertexArrayRangeNV_remap_index 285 +#define CombinerInputNV_remap_index 286 +#define CombinerOutputNV_remap_index 287 +#define CombinerParameterfNV_remap_index 288 +#define CombinerParameterfvNV_remap_index 289 +#define CombinerParameteriNV_remap_index 290 +#define CombinerParameterivNV_remap_index 291 +#define FinalCombinerInputNV_remap_index 292 +#define GetCombinerInputParameterfvNV_remap_index 293 +#define GetCombinerInputParameterivNV_remap_index 294 +#define GetCombinerOutputParameterfvNV_remap_index 295 +#define GetCombinerOutputParameterivNV_remap_index 296 +#define GetFinalCombinerInputParameterfvNV_remap_index 297 +#define GetFinalCombinerInputParameterivNV_remap_index 298 +#define ResizeBuffersMESA_remap_index 299 +#define WindowPos2dMESA_remap_index 300 +#define WindowPos2dvMESA_remap_index 301 +#define WindowPos2fMESA_remap_index 302 +#define WindowPos2fvMESA_remap_index 303 +#define WindowPos2iMESA_remap_index 304 +#define WindowPos2ivMESA_remap_index 305 +#define WindowPos2sMESA_remap_index 306 +#define WindowPos2svMESA_remap_index 307 +#define WindowPos3dMESA_remap_index 308 +#define WindowPos3dvMESA_remap_index 309 +#define WindowPos3fMESA_remap_index 310 +#define WindowPos3fvMESA_remap_index 311 +#define WindowPos3iMESA_remap_index 312 +#define WindowPos3ivMESA_remap_index 313 +#define WindowPos3sMESA_remap_index 314 +#define WindowPos3svMESA_remap_index 315 +#define WindowPos4dMESA_remap_index 316 +#define WindowPos4dvMESA_remap_index 317 +#define WindowPos4fMESA_remap_index 318 +#define WindowPos4fvMESA_remap_index 319 +#define WindowPos4iMESA_remap_index 320 +#define WindowPos4ivMESA_remap_index 321 +#define WindowPos4sMESA_remap_index 322 +#define WindowPos4svMESA_remap_index 323 +#define MultiModeDrawArraysIBM_remap_index 324 +#define MultiModeDrawElementsIBM_remap_index 325 +#define DeleteFencesNV_remap_index 326 +#define FinishFenceNV_remap_index 327 +#define GenFencesNV_remap_index 328 +#define GetFenceivNV_remap_index 329 +#define IsFenceNV_remap_index 330 +#define SetFenceNV_remap_index 331 +#define TestFenceNV_remap_index 332 +#define AreProgramsResidentNV_remap_index 333 +#define BindProgramNV_remap_index 334 +#define DeleteProgramsNV_remap_index 335 +#define ExecuteProgramNV_remap_index 336 +#define GenProgramsNV_remap_index 337 +#define GetProgramParameterdvNV_remap_index 338 +#define GetProgramParameterfvNV_remap_index 339 +#define GetProgramStringNV_remap_index 340 +#define GetProgramivNV_remap_index 341 +#define GetTrackMatrixivNV_remap_index 342 +#define GetVertexAttribPointervNV_remap_index 343 +#define GetVertexAttribdvNV_remap_index 344 +#define GetVertexAttribfvNV_remap_index 345 +#define GetVertexAttribivNV_remap_index 346 +#define IsProgramNV_remap_index 347 +#define LoadProgramNV_remap_index 348 +#define ProgramParameters4dvNV_remap_index 349 +#define ProgramParameters4fvNV_remap_index 350 +#define RequestResidentProgramsNV_remap_index 351 +#define TrackMatrixNV_remap_index 352 +#define VertexAttrib1dNV_remap_index 353 +#define VertexAttrib1dvNV_remap_index 354 +#define VertexAttrib1fNV_remap_index 355 +#define VertexAttrib1fvNV_remap_index 356 +#define VertexAttrib1sNV_remap_index 357 +#define VertexAttrib1svNV_remap_index 358 +#define VertexAttrib2dNV_remap_index 359 +#define VertexAttrib2dvNV_remap_index 360 +#define VertexAttrib2fNV_remap_index 361 +#define VertexAttrib2fvNV_remap_index 362 +#define VertexAttrib2sNV_remap_index 363 +#define VertexAttrib2svNV_remap_index 364 +#define VertexAttrib3dNV_remap_index 365 +#define VertexAttrib3dvNV_remap_index 366 +#define VertexAttrib3fNV_remap_index 367 +#define VertexAttrib3fvNV_remap_index 368 +#define VertexAttrib3sNV_remap_index 369 +#define VertexAttrib3svNV_remap_index 370 +#define VertexAttrib4dNV_remap_index 371 +#define VertexAttrib4dvNV_remap_index 372 +#define VertexAttrib4fNV_remap_index 373 +#define VertexAttrib4fvNV_remap_index 374 +#define VertexAttrib4sNV_remap_index 375 +#define VertexAttrib4svNV_remap_index 376 +#define VertexAttrib4ubNV_remap_index 377 +#define VertexAttrib4ubvNV_remap_index 378 +#define VertexAttribPointerNV_remap_index 379 +#define VertexAttribs1dvNV_remap_index 380 +#define VertexAttribs1fvNV_remap_index 381 +#define VertexAttribs1svNV_remap_index 382 +#define VertexAttribs2dvNV_remap_index 383 +#define VertexAttribs2fvNV_remap_index 384 +#define VertexAttribs2svNV_remap_index 385 +#define VertexAttribs3dvNV_remap_index 386 +#define VertexAttribs3fvNV_remap_index 387 +#define VertexAttribs3svNV_remap_index 388 +#define VertexAttribs4dvNV_remap_index 389 +#define VertexAttribs4fvNV_remap_index 390 +#define VertexAttribs4svNV_remap_index 391 +#define VertexAttribs4ubvNV_remap_index 392 +#define GetTexBumpParameterfvATI_remap_index 393 +#define GetTexBumpParameterivATI_remap_index 394 +#define TexBumpParameterfvATI_remap_index 395 +#define TexBumpParameterivATI_remap_index 396 +#define AlphaFragmentOp1ATI_remap_index 397 +#define AlphaFragmentOp2ATI_remap_index 398 +#define AlphaFragmentOp3ATI_remap_index 399 +#define BeginFragmentShaderATI_remap_index 400 +#define BindFragmentShaderATI_remap_index 401 +#define ColorFragmentOp1ATI_remap_index 402 +#define ColorFragmentOp2ATI_remap_index 403 +#define ColorFragmentOp3ATI_remap_index 404 +#define DeleteFragmentShaderATI_remap_index 405 +#define EndFragmentShaderATI_remap_index 406 +#define GenFragmentShadersATI_remap_index 407 +#define PassTexCoordATI_remap_index 408 +#define SampleMapATI_remap_index 409 +#define SetFragmentShaderConstantATI_remap_index 410 +#define PointParameteriNV_remap_index 411 +#define PointParameterivNV_remap_index 412 +#define ActiveStencilFaceEXT_remap_index 413 +#define BindVertexArrayAPPLE_remap_index 414 +#define DeleteVertexArraysAPPLE_remap_index 415 +#define GenVertexArraysAPPLE_remap_index 416 +#define IsVertexArrayAPPLE_remap_index 417 +#define GetProgramNamedParameterdvNV_remap_index 418 +#define GetProgramNamedParameterfvNV_remap_index 419 +#define ProgramNamedParameter4dNV_remap_index 420 +#define ProgramNamedParameter4dvNV_remap_index 421 +#define ProgramNamedParameter4fNV_remap_index 422 +#define ProgramNamedParameter4fvNV_remap_index 423 +#define PrimitiveRestartIndexNV_remap_index 424 +#define PrimitiveRestartNV_remap_index 425 +#define DepthBoundsEXT_remap_index 426 +#define BlendEquationSeparateEXT_remap_index 427 +#define BindFramebufferEXT_remap_index 428 +#define BindRenderbufferEXT_remap_index 429 +#define CheckFramebufferStatusEXT_remap_index 430 +#define DeleteFramebuffersEXT_remap_index 431 +#define DeleteRenderbuffersEXT_remap_index 432 +#define FramebufferRenderbufferEXT_remap_index 433 +#define FramebufferTexture1DEXT_remap_index 434 +#define FramebufferTexture2DEXT_remap_index 435 +#define FramebufferTexture3DEXT_remap_index 436 +#define GenFramebuffersEXT_remap_index 437 +#define GenRenderbuffersEXT_remap_index 438 +#define GenerateMipmapEXT_remap_index 439 +#define GetFramebufferAttachmentParameterivEXT_remap_index 440 +#define GetRenderbufferParameterivEXT_remap_index 441 +#define IsFramebufferEXT_remap_index 442 +#define IsRenderbufferEXT_remap_index 443 +#define RenderbufferStorageEXT_remap_index 444 +#define BlitFramebufferEXT_remap_index 445 +#define BufferParameteriAPPLE_remap_index 446 +#define FlushMappedBufferRangeAPPLE_remap_index 447 +#define BindFragDataLocationEXT_remap_index 448 +#define GetFragDataLocationEXT_remap_index 449 +#define GetUniformuivEXT_remap_index 450 +#define GetVertexAttribIivEXT_remap_index 451 +#define GetVertexAttribIuivEXT_remap_index 452 +#define Uniform1uiEXT_remap_index 453 +#define Uniform1uivEXT_remap_index 454 +#define Uniform2uiEXT_remap_index 455 +#define Uniform2uivEXT_remap_index 456 +#define Uniform3uiEXT_remap_index 457 +#define Uniform3uivEXT_remap_index 458 +#define Uniform4uiEXT_remap_index 459 +#define Uniform4uivEXT_remap_index 460 +#define VertexAttribI1iEXT_remap_index 461 +#define VertexAttribI1ivEXT_remap_index 462 +#define VertexAttribI1uiEXT_remap_index 463 +#define VertexAttribI1uivEXT_remap_index 464 +#define VertexAttribI2iEXT_remap_index 465 +#define VertexAttribI2ivEXT_remap_index 466 +#define VertexAttribI2uiEXT_remap_index 467 +#define VertexAttribI2uivEXT_remap_index 468 +#define VertexAttribI3iEXT_remap_index 469 +#define VertexAttribI3ivEXT_remap_index 470 +#define VertexAttribI3uiEXT_remap_index 471 +#define VertexAttribI3uivEXT_remap_index 472 +#define VertexAttribI4bvEXT_remap_index 473 +#define VertexAttribI4iEXT_remap_index 474 +#define VertexAttribI4ivEXT_remap_index 475 +#define VertexAttribI4svEXT_remap_index 476 +#define VertexAttribI4ubvEXT_remap_index 477 +#define VertexAttribI4uiEXT_remap_index 478 +#define VertexAttribI4uivEXT_remap_index 479 +#define VertexAttribI4usvEXT_remap_index 480 +#define VertexAttribIPointerEXT_remap_index 481 +#define FramebufferTextureLayerEXT_remap_index 482 +#define ColorMaskIndexedEXT_remap_index 483 +#define DisableIndexedEXT_remap_index 484 +#define EnableIndexedEXT_remap_index 485 +#define GetBooleanIndexedvEXT_remap_index 486 +#define GetIntegerIndexedvEXT_remap_index 487 +#define IsEnabledIndexedEXT_remap_index 488 +#define ClearColorIiEXT_remap_index 489 +#define ClearColorIuiEXT_remap_index 490 +#define GetTexParameterIivEXT_remap_index 491 +#define GetTexParameterIuivEXT_remap_index 492 +#define TexParameterIivEXT_remap_index 493 +#define TexParameterIuivEXT_remap_index 494 +#define BeginConditionalRenderNV_remap_index 495 +#define EndConditionalRenderNV_remap_index 496 +#define BeginTransformFeedbackEXT_remap_index 497 +#define BindBufferBaseEXT_remap_index 498 +#define BindBufferOffsetEXT_remap_index 499 +#define BindBufferRangeEXT_remap_index 500 +#define EndTransformFeedbackEXT_remap_index 501 +#define GetTransformFeedbackVaryingEXT_remap_index 502 +#define TransformFeedbackVaryingsEXT_remap_index 503 +#define ProvokingVertexEXT_remap_index 504 +#define GetTexParameterPointervAPPLE_remap_index 505 +#define TextureRangeAPPLE_remap_index 506 +#define GetObjectParameterivAPPLE_remap_index 507 +#define ObjectPurgeableAPPLE_remap_index 508 +#define ObjectUnpurgeableAPPLE_remap_index 509 +#define ActiveProgramEXT_remap_index 510 +#define CreateShaderProgramEXT_remap_index 511 +#define UseShaderProgramEXT_remap_index 512 +#define TextureBarrierNV_remap_index 513 +#define StencilFuncSeparateATI_remap_index 514 +#define ProgramEnvParameters4fvEXT_remap_index 515 +#define ProgramLocalParameters4fvEXT_remap_index 516 +#define GetQueryObjecti64vEXT_remap_index 517 +#define GetQueryObjectui64vEXT_remap_index 518 +#define EGLImageTargetRenderbufferStorageOES_remap_index 519 +#define EGLImageTargetTexture2DOES_remap_index 520 #define _gloffset_AttachShader driDispatchRemapTable[AttachShader_remap_index] #define _gloffset_CreateProgram driDispatchRemapTable[CreateProgram_remap_index] @@ -1705,6 +1707,7 @@ extern int driDispatchRemapTable[ driDispatchRemapTable_size ]; #define _gloffset_IsSync driDispatchRemapTable[IsSync_remap_index] #define _gloffset_WaitSync driDispatchRemapTable[WaitSync_remap_index] #define _gloffset_DrawElementsBaseVertex driDispatchRemapTable[DrawElementsBaseVertex_remap_index] +#define _gloffset_DrawElementsInstancedBaseVertex driDispatchRemapTable[DrawElementsInstancedBaseVertex_remap_index] #define _gloffset_DrawRangeElementsBaseVertex driDispatchRemapTable[DrawRangeElementsBaseVertex_remap_index] #define _gloffset_MultiDrawElementsBaseVertex driDispatchRemapTable[MultiDrawElementsBaseVertex_remap_index] #define _gloffset_BlendEquationSeparateiARB driDispatchRemapTable[BlendEquationSeparateiARB_remap_index] @@ -8576,6 +8579,17 @@ static INLINE void SET_DrawElementsBaseVertex(struct _glapi_table *disp, void (G SET_by_offset(disp, _gloffset_DrawElementsBaseVertex, fn); } +typedef void (GLAPIENTRYP _glptr_DrawElementsInstancedBaseVertex)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint); +#define CALL_DrawElementsInstancedBaseVertex(disp, parameters) \ + (* GET_DrawElementsInstancedBaseVertex(disp)) parameters +static INLINE _glptr_DrawElementsInstancedBaseVertex GET_DrawElementsInstancedBaseVertex(struct _glapi_table *disp) { + return (_glptr_DrawElementsInstancedBaseVertex) (GET_by_offset(disp, _gloffset_DrawElementsInstancedBaseVertex)); +} + +static INLINE void SET_DrawElementsInstancedBaseVertex(struct _glapi_table *disp, void (GLAPIENTRYP fn)(GLenum, GLsizei, GLenum, const GLvoid *, GLsizei, GLint)) { + SET_by_offset(disp, _gloffset_DrawElementsInstancedBaseVertex, fn); +} + typedef void (GLAPIENTRYP _glptr_DrawRangeElementsBaseVertex)(GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *, GLint); #define CALL_DrawRangeElementsBaseVertex(disp, parameters) \ (* GET_DrawRangeElementsBaseVertex(disp)) parameters diff --git a/src/mesa/main/queryobj.c b/src/mesa/main/queryobj.c index e9cf5f64d08..f0a9a7922b2 100644 --- a/src/mesa/main/queryobj.c +++ b/src/mesa/main/queryobj.c @@ -173,7 +173,7 @@ get_query_binding_point(struct gl_context *ctx, GLenum target) } -void GLAPIENTRY +static void GLAPIENTRY _mesa_GenQueriesARB(GLsizei n, GLuint *ids) { GLuint first; @@ -212,7 +212,7 @@ _mesa_GenQueriesARB(GLsizei n, GLuint *ids) } -void GLAPIENTRY +static void GLAPIENTRY _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids) { GLint i; @@ -248,7 +248,7 @@ _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids) } -GLboolean GLAPIENTRY +static GLboolean GLAPIENTRY _mesa_IsQueryARB(GLuint id) { GET_CURRENT_CONTEXT(ctx); @@ -352,7 +352,7 @@ _mesa_EndQueryARB(GLenum target) } -void GLAPIENTRY +static void GLAPIENTRY _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params) { struct gl_query_object *q, **bindpt; @@ -386,7 +386,7 @@ _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params) } -void GLAPIENTRY +static void GLAPIENTRY _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params) { struct gl_query_object *q = NULL; @@ -437,7 +437,7 @@ _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params) } -void GLAPIENTRY +static void GLAPIENTRY _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params) { struct gl_query_object *q = NULL; diff --git a/src/mesa/main/queryobj.h b/src/mesa/main/queryobj.h index e4ad96ba5a3..16962e55a1b 100644 --- a/src/mesa/main/queryobj.h +++ b/src/mesa/main/queryobj.h @@ -42,24 +42,6 @@ _mesa_lookup_query_object(struct gl_context *ctx, GLuint id) } -extern void GLAPIENTRY -_mesa_GenQueriesARB(GLsizei n, GLuint *ids); - -extern void GLAPIENTRY -_mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids); - -extern GLboolean GLAPIENTRY -_mesa_IsQueryARB(GLuint id); - -extern void GLAPIENTRY -_mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params); - -extern void GLAPIENTRY -_mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params); - -extern void GLAPIENTRY -_mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params); - extern void _mesa_init_query_object_functions(struct dd_function_table *driver); diff --git a/src/mesa/main/remap_helper.h b/src/mesa/main/remap_helper.h index fdb86d3e38a..dca6b498735 100644 --- a/src/mesa/main/remap_helper.h +++ b/src/mesa/main/remap_helper.h @@ -70,4858 +70,4862 @@ static const char _mesa_function_pool[] = "\0" "glLoadIdentity\0" "\0" - /* _mesa_function_pool[216]: GetCombinerOutputParameterfvNV (will be remapped) */ - "iiip\0" - "glGetCombinerOutputParameterfvNV\0" - "\0" - /* _mesa_function_pool[255]: SampleCoverageARB (will be remapped) */ + /* _mesa_function_pool[216]: SampleCoverageARB (will be remapped) */ "fi\0" "glSampleCoverage\0" "glSampleCoverageARB\0" "\0" - /* _mesa_function_pool[296]: ConvolutionFilter1D (offset 348) */ + /* _mesa_function_pool[257]: ConvolutionFilter1D (offset 348) */ "iiiiip\0" "glConvolutionFilter1D\0" "glConvolutionFilter1DEXT\0" "\0" - /* _mesa_function_pool[351]: BeginQueryARB (will be remapped) */ + /* _mesa_function_pool[312]: BeginQueryARB (will be remapped) */ "ii\0" "glBeginQuery\0" "glBeginQueryARB\0" "\0" - /* _mesa_function_pool[384]: RasterPos3dv (offset 71) */ + /* _mesa_function_pool[345]: RasterPos3dv (offset 71) */ "p\0" "glRasterPos3dv\0" "\0" - /* _mesa_function_pool[402]: PointParameteriNV (will be remapped) */ + /* _mesa_function_pool[363]: PointParameteriNV (will be remapped) */ "ii\0" "glPointParameteri\0" "glPointParameteriNV\0" "\0" - /* _mesa_function_pool[444]: GetProgramiv (will be remapped) */ + /* _mesa_function_pool[405]: GetProgramiv (will be remapped) */ "iip\0" "glGetProgramiv\0" "\0" - /* _mesa_function_pool[464]: MultiTexCoord3sARB (offset 398) */ + /* _mesa_function_pool[425]: MultiTexCoord3sARB (offset 398) */ "iiii\0" "glMultiTexCoord3s\0" "glMultiTexCoord3sARB\0" "\0" - /* _mesa_function_pool[509]: SecondaryColor3iEXT (will be remapped) */ + /* _mesa_function_pool[470]: SecondaryColor3iEXT (will be remapped) */ "iii\0" "glSecondaryColor3i\0" "glSecondaryColor3iEXT\0" "\0" - /* _mesa_function_pool[555]: WindowPos3fMESA (will be remapped) */ + /* _mesa_function_pool[516]: WindowPos3fMESA (will be remapped) */ "fff\0" "glWindowPos3f\0" "glWindowPos3fARB\0" "glWindowPos3fMESA\0" "\0" - /* _mesa_function_pool[609]: TexCoord1iv (offset 99) */ + /* _mesa_function_pool[570]: TexCoord1iv (offset 99) */ "p\0" "glTexCoord1iv\0" "\0" - /* _mesa_function_pool[626]: TexCoord4sv (offset 125) */ + /* _mesa_function_pool[587]: TexCoord4sv (offset 125) */ "p\0" "glTexCoord4sv\0" "\0" - /* _mesa_function_pool[643]: RasterPos4s (offset 84) */ + /* _mesa_function_pool[604]: RasterPos4s (offset 84) */ "iiii\0" "glRasterPos4s\0" "\0" - /* _mesa_function_pool[663]: PixelTexGenParameterfvSGIS (will be remapped) */ + /* _mesa_function_pool[624]: PixelTexGenParameterfvSGIS (will be remapped) */ "ip\0" "glPixelTexGenParameterfvSGIS\0" "\0" - /* _mesa_function_pool[696]: ActiveTextureARB (offset 374) */ + /* _mesa_function_pool[657]: ActiveTextureARB (offset 374) */ "i\0" "glActiveTexture\0" "glActiveTextureARB\0" "\0" - /* _mesa_function_pool[734]: BlitFramebufferEXT (will be remapped) */ + /* _mesa_function_pool[695]: BlitFramebufferEXT (will be remapped) */ "iiiiiiiiii\0" "glBlitFramebuffer\0" "glBlitFramebufferEXT\0" "\0" - /* _mesa_function_pool[785]: TexCoord1f (offset 96) */ + /* _mesa_function_pool[746]: TexCoord1f (offset 96) */ "f\0" "glTexCoord1f\0" "\0" - /* _mesa_function_pool[801]: TexCoord1d (offset 94) */ + /* _mesa_function_pool[762]: TexCoord1d (offset 94) */ "d\0" "glTexCoord1d\0" "\0" - /* _mesa_function_pool[817]: VertexAttrib4ubvNV (will be remapped) */ + /* _mesa_function_pool[778]: VertexAttrib4ubvNV (will be remapped) */ "ip\0" "glVertexAttrib4ubvNV\0" "\0" - /* _mesa_function_pool[842]: TexCoord1i (offset 98) */ + /* _mesa_function_pool[803]: TexCoord1i (offset 98) */ "i\0" "glTexCoord1i\0" "\0" - /* _mesa_function_pool[858]: GetProgramNamedParameterdvNV (will be remapped) */ + /* _mesa_function_pool[819]: GetProgramNamedParameterdvNV (will be remapped) */ "iipp\0" "glGetProgramNamedParameterdvNV\0" "\0" - /* _mesa_function_pool[895]: Histogram (offset 367) */ + /* _mesa_function_pool[856]: Histogram (offset 367) */ "iiii\0" "glHistogram\0" "glHistogramEXT\0" "\0" - /* _mesa_function_pool[928]: TexCoord1s (offset 100) */ + /* _mesa_function_pool[889]: TexCoord1s (offset 100) */ "i\0" "glTexCoord1s\0" "\0" - /* _mesa_function_pool[944]: GetMapfv (offset 267) */ + /* _mesa_function_pool[905]: GetMapfv (offset 267) */ "iip\0" "glGetMapfv\0" "\0" - /* _mesa_function_pool[960]: EvalCoord1f (offset 230) */ + /* _mesa_function_pool[921]: EvalCoord1f (offset 230) */ "f\0" "glEvalCoord1f\0" "\0" - /* _mesa_function_pool[977]: FramebufferTexture (will be remapped) */ + /* _mesa_function_pool[938]: FramebufferTexture (will be remapped) */ "iiii\0" "glFramebufferTexture\0" "\0" - /* _mesa_function_pool[1004]: GetGraphicsResetStatusARB (will be remapped) */ + /* _mesa_function_pool[965]: GetGraphicsResetStatusARB (will be remapped) */ "\0" "glGetGraphicsResetStatusARB\0" "\0" - /* _mesa_function_pool[1034]: TexImage4DSGIS (dynamic) */ + /* _mesa_function_pool[995]: TexImage4DSGIS (dynamic) */ "iiiiiiiiiip\0" "glTexImage4DSGIS\0" "\0" - /* _mesa_function_pool[1064]: PolygonStipple (offset 175) */ + /* _mesa_function_pool[1025]: PolygonStipple (offset 175) */ "p\0" "glPolygonStipple\0" "\0" - /* _mesa_function_pool[1084]: WindowPos2dvMESA (will be remapped) */ + /* _mesa_function_pool[1045]: WindowPos2dvMESA (will be remapped) */ "p\0" "glWindowPos2dv\0" "glWindowPos2dvARB\0" "glWindowPos2dvMESA\0" "\0" - /* _mesa_function_pool[1139]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1100]: ReplacementCodeuiColor3fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1183]: BlendEquationSeparateEXT (will be remapped) */ + /* _mesa_function_pool[1144]: BlendEquationSeparateEXT (will be remapped) */ "ii\0" "glBlendEquationSeparate\0" "glBlendEquationSeparateEXT\0" "glBlendEquationSeparateATI\0" "\0" - /* _mesa_function_pool[1265]: ListParameterfSGIX (dynamic) */ + /* _mesa_function_pool[1226]: ListParameterfSGIX (dynamic) */ "iif\0" "glListParameterfSGIX\0" "\0" - /* _mesa_function_pool[1291]: SecondaryColor3bEXT (will be remapped) */ + /* _mesa_function_pool[1252]: SecondaryColor3bEXT (will be remapped) */ "iii\0" "glSecondaryColor3b\0" "glSecondaryColor3bEXT\0" "\0" - /* _mesa_function_pool[1337]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */ + /* _mesa_function_pool[1298]: TexCoord4fColor4fNormal3fVertex4fvSUN (dynamic) */ "pppp\0" "glTexCoord4fColor4fNormal3fVertex4fvSUN\0" "\0" - /* _mesa_function_pool[1383]: GetnPolygonStippleARB (will be remapped) */ + /* _mesa_function_pool[1344]: GetnPolygonStippleARB (will be remapped) */ "ip\0" "glGetnPolygonStippleARB\0" "\0" - /* _mesa_function_pool[1411]: GetPixelMapfv (offset 271) */ + /* _mesa_function_pool[1372]: GetPixelMapfv (offset 271) */ "ip\0" "glGetPixelMapfv\0" "\0" - /* _mesa_function_pool[1431]: Color3uiv (offset 22) */ + /* _mesa_function_pool[1392]: Color3uiv (offset 22) */ "p\0" "glColor3uiv\0" "\0" - /* _mesa_function_pool[1446]: IsEnabled (offset 286) */ + /* _mesa_function_pool[1407]: IsEnabled (offset 286) */ "i\0" "glIsEnabled\0" "\0" - /* _mesa_function_pool[1461]: VertexAttrib4svNV (will be remapped) */ + /* _mesa_function_pool[1422]: VertexAttrib4svNV (will be remapped) */ "ip\0" "glVertexAttrib4svNV\0" "\0" - /* _mesa_function_pool[1485]: EvalCoord2fv (offset 235) */ + /* _mesa_function_pool[1446]: EvalCoord2fv (offset 235) */ "p\0" "glEvalCoord2fv\0" "\0" - /* _mesa_function_pool[1503]: GetBufferSubDataARB (will be remapped) */ + /* _mesa_function_pool[1464]: GetBufferSubDataARB (will be remapped) */ "iiip\0" "glGetBufferSubData\0" "glGetBufferSubDataARB\0" "\0" - /* _mesa_function_pool[1550]: BufferSubDataARB (will be remapped) */ + /* _mesa_function_pool[1511]: BufferSubDataARB (will be remapped) */ "iiip\0" "glBufferSubData\0" "glBufferSubDataARB\0" "\0" - /* _mesa_function_pool[1591]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1552]: TexCoord2fColor4ubVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1629]: AttachShader (will be remapped) */ + /* _mesa_function_pool[1590]: AttachShader (will be remapped) */ "ii\0" "glAttachShader\0" "\0" - /* _mesa_function_pool[1648]: GetCombinerInputParameterfvNV (will be remapped) */ + /* _mesa_function_pool[1609]: GetCombinerInputParameterfvNV (will be remapped) */ "iiiip\0" "glGetCombinerInputParameterfvNV\0" "\0" - /* _mesa_function_pool[1687]: VertexAttrib2fARB (will be remapped) */ + /* _mesa_function_pool[1648]: VertexAttrib2fARB (will be remapped) */ "iff\0" "glVertexAttrib2f\0" "glVertexAttrib2fARB\0" "\0" - /* _mesa_function_pool[1729]: GetDebugLogLengthMESA (dynamic) */ + /* _mesa_function_pool[1690]: GetDebugLogLengthMESA (dynamic) */ "iii\0" "glGetDebugLogLengthMESA\0" "\0" - /* _mesa_function_pool[1758]: GetMapiv (offset 268) */ + /* _mesa_function_pool[1719]: GetMapiv (offset 268) */ "iip\0" "glGetMapiv\0" "\0" - /* _mesa_function_pool[1774]: VertexAttrib3fARB (will be remapped) */ + /* _mesa_function_pool[1735]: VertexAttrib3fARB (will be remapped) */ "ifff\0" "glVertexAttrib3f\0" "glVertexAttrib3fARB\0" "\0" - /* _mesa_function_pool[1817]: Indexubv (offset 316) */ + /* _mesa_function_pool[1778]: Indexubv (offset 316) */ "p\0" "glIndexubv\0" "\0" - /* _mesa_function_pool[1831]: GetQueryivARB (will be remapped) */ + /* _mesa_function_pool[1792]: GetQueryivARB (will be remapped) */ "iip\0" "glGetQueryiv\0" "glGetQueryivARB\0" "\0" - /* _mesa_function_pool[1865]: TexImage3D (offset 371) */ + /* _mesa_function_pool[1826]: TexImage3D (offset 371) */ "iiiiiiiiip\0" "glTexImage3D\0" "glTexImage3DEXT\0" "\0" - /* _mesa_function_pool[1906]: BindFragDataLocationEXT (will be remapped) */ + /* _mesa_function_pool[1867]: BindFragDataLocationEXT (will be remapped) */ "iip\0" "glBindFragDataLocationEXT\0" "glBindFragDataLocation\0" "\0" - /* _mesa_function_pool[1960]: ReplacementCodeuiVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[1921]: ReplacementCodeuiVertex3fvSUN (dynamic) */ "pp\0" "glReplacementCodeuiVertex3fvSUN\0" "\0" - /* _mesa_function_pool[1996]: EdgeFlagPointer (offset 312) */ + /* _mesa_function_pool[1957]: EdgeFlagPointer (offset 312) */ "ip\0" "glEdgeFlagPointer\0" "\0" - /* _mesa_function_pool[2018]: Color3ubv (offset 20) */ + /* _mesa_function_pool[1979]: Color3ubv (offset 20) */ "p\0" "glColor3ubv\0" "\0" - /* _mesa_function_pool[2033]: GetQueryObjectivARB (will be remapped) */ + /* _mesa_function_pool[1994]: GetQueryObjectivARB (will be remapped) */ "iip\0" "glGetQueryObjectiv\0" "glGetQueryObjectivARB\0" "\0" - /* _mesa_function_pool[2079]: Vertex3dv (offset 135) */ + /* _mesa_function_pool[2040]: Vertex3dv (offset 135) */ "p\0" "glVertex3dv\0" "\0" - /* _mesa_function_pool[2094]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[2055]: ReplacementCodeuiTexCoord2fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiTexCoord2fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[2141]: CompressedTexSubImage2DARB (will be remapped) */ + /* _mesa_function_pool[2102]: CompressedTexSubImage2DARB (will be remapped) */ "iiiiiiiip\0" "glCompressedTexSubImage2D\0" "glCompressedTexSubImage2DARB\0" "\0" - /* _mesa_function_pool[2207]: CombinerOutputNV (will be remapped) */ + /* _mesa_function_pool[2168]: CombinerOutputNV (will be remapped) */ "iiiiiiiiii\0" "glCombinerOutputNV\0" "\0" - /* _mesa_function_pool[2238]: VertexAttribs3fvNV (will be remapped) */ + /* _mesa_function_pool[2199]: VertexAttribs3fvNV (will be remapped) */ "iip\0" "glVertexAttribs3fvNV\0" "\0" - /* _mesa_function_pool[2264]: GetnMapivARB (will be remapped) */ + /* _mesa_function_pool[2225]: GetnMapivARB (will be remapped) */ "iiip\0" "glGetnMapivARB\0" "\0" - /* _mesa_function_pool[2285]: Uniform2fARB (will be remapped) */ + /* _mesa_function_pool[2246]: Uniform2fARB (will be remapped) */ "iff\0" "glUniform2f\0" "glUniform2fARB\0" "\0" - /* _mesa_function_pool[2317]: LightModeliv (offset 166) */ + /* _mesa_function_pool[2278]: LightModeliv (offset 166) */ "ip\0" "glLightModeliv\0" "\0" - /* _mesa_function_pool[2336]: VertexAttrib1svARB (will be remapped) */ + /* _mesa_function_pool[2297]: VertexAttrib1svARB (will be remapped) */ "ip\0" "glVertexAttrib1sv\0" "glVertexAttrib1svARB\0" "\0" - /* _mesa_function_pool[2379]: VertexAttribs1dvNV (will be remapped) */ + /* _mesa_function_pool[2340]: VertexAttribs1dvNV (will be remapped) */ "iip\0" "glVertexAttribs1dvNV\0" "\0" - /* _mesa_function_pool[2405]: Uniform2ivARB (will be remapped) */ + /* _mesa_function_pool[2366]: Uniform2ivARB (will be remapped) */ "iip\0" "glUniform2iv\0" "glUniform2ivARB\0" "\0" - /* _mesa_function_pool[2439]: GetImageTransformParameterfvHP (dynamic) */ + /* _mesa_function_pool[2400]: GetImageTransformParameterfvHP (dynamic) */ "iip\0" "glGetImageTransformParameterfvHP\0" "\0" - /* _mesa_function_pool[2477]: Normal3bv (offset 53) */ + /* _mesa_function_pool[2438]: Normal3bv (offset 53) */ "p\0" "glNormal3bv\0" "\0" - /* _mesa_function_pool[2492]: TexGeniv (offset 193) */ + /* _mesa_function_pool[2453]: TexGeniv (offset 193) */ "iip\0" "glTexGeniv\0" "\0" - /* _mesa_function_pool[2508]: WeightubvARB (dynamic) */ + /* _mesa_function_pool[2469]: WeightubvARB (dynamic) */ "ip\0" "glWeightubvARB\0" "\0" - /* _mesa_function_pool[2527]: VertexAttrib1fvNV (will be remapped) */ + /* _mesa_function_pool[2488]: VertexAttrib1fvNV (will be remapped) */ "ip\0" "glVertexAttrib1fvNV\0" "\0" - /* _mesa_function_pool[2551]: Vertex3iv (offset 139) */ + /* _mesa_function_pool[2512]: Vertex3iv (offset 139) */ "p\0" "glVertex3iv\0" "\0" - /* _mesa_function_pool[2566]: CopyConvolutionFilter1D (offset 354) */ + /* _mesa_function_pool[2527]: CopyConvolutionFilter1D (offset 354) */ "iiiii\0" "glCopyConvolutionFilter1D\0" "glCopyConvolutionFilter1DEXT\0" "\0" - /* _mesa_function_pool[2628]: VertexAttribI1uiEXT (will be remapped) */ + /* _mesa_function_pool[2589]: VertexAttribI1uiEXT (will be remapped) */ "ii\0" "glVertexAttribI1uiEXT\0" "glVertexAttribI1ui\0" "\0" - /* _mesa_function_pool[2673]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[2634]: ReplacementCodeuiNormal3fVertex3fSUN (dynamic) */ "iffffff\0" "glReplacementCodeuiNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[2721]: DeleteSync (will be remapped) */ + /* _mesa_function_pool[2682]: DeleteSync (will be remapped) */ "i\0" "glDeleteSync\0" "\0" - /* _mesa_function_pool[2737]: FragmentMaterialfvSGIX (dynamic) */ + /* _mesa_function_pool[2698]: FragmentMaterialfvSGIX (dynamic) */ "iip\0" "glFragmentMaterialfvSGIX\0" "\0" - /* _mesa_function_pool[2767]: BlendColor (offset 336) */ + /* _mesa_function_pool[2728]: BlendColor (offset 336) */ "ffff\0" "glBlendColor\0" "glBlendColorEXT\0" "\0" - /* _mesa_function_pool[2802]: UniformMatrix4fvARB (will be remapped) */ + /* _mesa_function_pool[2763]: UniformMatrix4fvARB (will be remapped) */ "iiip\0" "glUniformMatrix4fv\0" "glUniformMatrix4fvARB\0" "\0" - /* _mesa_function_pool[2849]: DeleteVertexArraysAPPLE (will be remapped) */ + /* _mesa_function_pool[2810]: DeleteVertexArraysAPPLE (will be remapped) */ "ip\0" "glDeleteVertexArrays\0" "glDeleteVertexArraysAPPLE\0" "\0" - /* _mesa_function_pool[2900]: TexBuffer (will be remapped) */ + /* _mesa_function_pool[2861]: TexBuffer (will be remapped) */ "iii\0" "glTexBuffer\0" "\0" - /* _mesa_function_pool[2917]: ReadInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[2878]: ReadInstrumentsSGIX (dynamic) */ "i\0" "glReadInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[2942]: CallLists (offset 3) */ + /* _mesa_function_pool[2903]: CallLists (offset 3) */ "iip\0" "glCallLists\0" "\0" - /* _mesa_function_pool[2959]: DeformationMap3dSGIX (dynamic) */ - "iddiiddiiddiip\0" - "glDeformationMap3dSGIX\0" - "\0" - /* _mesa_function_pool[2998]: UniformMatrix2x4fv (will be remapped) */ + /* _mesa_function_pool[2920]: UniformMatrix2x4fv (will be remapped) */ "iiip\0" "glUniformMatrix2x4fv\0" "\0" - /* _mesa_function_pool[3025]: ReadnPixelsARB (will be remapped) */ + /* _mesa_function_pool[2947]: ReadnPixelsARB (will be remapped) */ "iiiiiiip\0" "glReadnPixelsARB\0" "\0" - /* _mesa_function_pool[3052]: Color4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[2974]: Color4ubVertex3fvSUN (dynamic) */ "pp\0" "glColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[3079]: Normal3iv (offset 59) */ + /* _mesa_function_pool[3001]: Normal3iv (offset 59) */ "p\0" "glNormal3iv\0" "\0" - /* _mesa_function_pool[3094]: PassThrough (offset 199) */ + /* _mesa_function_pool[3016]: PassThrough (offset 199) */ "f\0" "glPassThrough\0" "\0" - /* _mesa_function_pool[3111]: GetnPixelMapusvARB (will be remapped) */ + /* _mesa_function_pool[3033]: GetnPixelMapusvARB (will be remapped) */ "iip\0" "glGetnPixelMapusvARB\0" "\0" - /* _mesa_function_pool[3137]: TexParameterIivEXT (will be remapped) */ + /* _mesa_function_pool[3059]: TexParameterIivEXT (will be remapped) */ "iip\0" "glTexParameterIivEXT\0" "glTexParameterIiv\0" "\0" - /* _mesa_function_pool[3181]: FramebufferTextureLayerEXT (will be remapped) */ + /* _mesa_function_pool[3103]: FramebufferTextureLayerEXT (will be remapped) */ "iiiii\0" "glFramebufferTextureLayer\0" "glFramebufferTextureLayerEXT\0" "\0" - /* _mesa_function_pool[3243]: GetListParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[3165]: GetListParameterfvSGIX (dynamic) */ "iip\0" "glGetListParameterfvSGIX\0" "\0" - /* _mesa_function_pool[3273]: Viewport (offset 305) */ + /* _mesa_function_pool[3195]: Viewport (offset 305) */ "iiii\0" "glViewport\0" "\0" - /* _mesa_function_pool[3290]: VertexAttrib4NusvARB (will be remapped) */ + /* _mesa_function_pool[3212]: VertexAttrib4NusvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nusv\0" "glVertexAttrib4NusvARB\0" "\0" - /* _mesa_function_pool[3337]: WindowPos4svMESA (will be remapped) */ + /* _mesa_function_pool[3259]: WindowPos4svMESA (will be remapped) */ "p\0" "glWindowPos4svMESA\0" "\0" - /* _mesa_function_pool[3359]: CreateProgramObjectARB (will be remapped) */ + /* _mesa_function_pool[3281]: CreateProgramObjectARB (will be remapped) */ "\0" "glCreateProgramObjectARB\0" "\0" - /* _mesa_function_pool[3386]: DeleteTransformFeedbacks (will be remapped) */ + /* _mesa_function_pool[3308]: DeleteTransformFeedbacks (will be remapped) */ "ip\0" "glDeleteTransformFeedbacks\0" "\0" - /* _mesa_function_pool[3417]: UniformMatrix4x3fv (will be remapped) */ + /* _mesa_function_pool[3339]: UniformMatrix4x3fv (will be remapped) */ "iiip\0" "glUniformMatrix4x3fv\0" "\0" - /* _mesa_function_pool[3444]: PrioritizeTextures (offset 331) */ + /* _mesa_function_pool[3366]: PrioritizeTextures (offset 331) */ "ipp\0" "glPrioritizeTextures\0" "glPrioritizeTexturesEXT\0" "\0" - /* _mesa_function_pool[3494]: VertexAttribI3uiEXT (will be remapped) */ + /* _mesa_function_pool[3416]: VertexAttribI3uiEXT (will be remapped) */ "iiii\0" "glVertexAttribI3uiEXT\0" "glVertexAttribI3ui\0" "\0" - /* _mesa_function_pool[3541]: AsyncMarkerSGIX (dynamic) */ + /* _mesa_function_pool[3463]: AsyncMarkerSGIX (dynamic) */ "i\0" "glAsyncMarkerSGIX\0" "\0" - /* _mesa_function_pool[3562]: GlobalAlphaFactorubSUN (dynamic) */ + /* _mesa_function_pool[3484]: GlobalAlphaFactorubSUN (dynamic) */ "i\0" "glGlobalAlphaFactorubSUN\0" "\0" - /* _mesa_function_pool[3590]: ClearColorIuiEXT (will be remapped) */ + /* _mesa_function_pool[3512]: ClearColorIuiEXT (will be remapped) */ "iiii\0" "glClearColorIuiEXT\0" "\0" - /* _mesa_function_pool[3615]: ClearDebugLogMESA (dynamic) */ + /* _mesa_function_pool[3537]: ClearDebugLogMESA (dynamic) */ "iii\0" "glClearDebugLogMESA\0" "\0" - /* _mesa_function_pool[3640]: Uniform4uiEXT (will be remapped) */ + /* _mesa_function_pool[3562]: Uniform4uiEXT (will be remapped) */ "iiiii\0" "glUniform4uiEXT\0" "glUniform4ui\0" "\0" - /* _mesa_function_pool[3676]: ResetHistogram (offset 369) */ + /* _mesa_function_pool[3598]: ResetHistogram (offset 369) */ "i\0" "glResetHistogram\0" "glResetHistogramEXT\0" "\0" - /* _mesa_function_pool[3716]: GetProgramNamedParameterfvNV (will be remapped) */ + /* _mesa_function_pool[3638]: GetProgramNamedParameterfvNV (will be remapped) */ "iipp\0" "glGetProgramNamedParameterfvNV\0" "\0" - /* _mesa_function_pool[3753]: PointParameterfEXT (will be remapped) */ + /* _mesa_function_pool[3675]: PointParameterfEXT (will be remapped) */ "if\0" "glPointParameterf\0" "glPointParameterfARB\0" "glPointParameterfEXT\0" "glPointParameterfSGIS\0" "\0" - /* _mesa_function_pool[3839]: LoadIdentityDeformationMapSGIX (dynamic) */ + /* _mesa_function_pool[3761]: LoadIdentityDeformationMapSGIX (dynamic) */ "i\0" "glLoadIdentityDeformationMapSGIX\0" "\0" - /* _mesa_function_pool[3875]: GenFencesNV (will be remapped) */ + /* _mesa_function_pool[3797]: GenFencesNV (will be remapped) */ "ip\0" "glGenFencesNV\0" "\0" - /* _mesa_function_pool[3893]: ImageTransformParameterfHP (dynamic) */ + /* _mesa_function_pool[3815]: ImageTransformParameterfHP (dynamic) */ "iif\0" "glImageTransformParameterfHP\0" "\0" - /* _mesa_function_pool[3927]: MatrixIndexusvARB (dynamic) */ + /* _mesa_function_pool[3849]: MatrixIndexusvARB (dynamic) */ "ip\0" "glMatrixIndexusvARB\0" "\0" - /* _mesa_function_pool[3951]: DrawElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[3873]: DrawElementsBaseVertex (will be remapped) */ "iiipi\0" "glDrawElementsBaseVertex\0" "\0" - /* _mesa_function_pool[3983]: DisableVertexAttribArrayARB (will be remapped) */ + /* _mesa_function_pool[3905]: DisableVertexAttribArrayARB (will be remapped) */ "i\0" "glDisableVertexAttribArray\0" "glDisableVertexAttribArrayARB\0" "\0" - /* _mesa_function_pool[4043]: VertexAttribI4ubvEXT (will be remapped) */ - "ip\0" - "glVertexAttribI4ubvEXT\0" - "glVertexAttribI4ubv\0" - "\0" - /* _mesa_function_pool[4090]: GetnConvolutionFilterARB (will be remapped) */ + /* _mesa_function_pool[3965]: GetnConvolutionFilterARB (will be remapped) */ "iiiip\0" "glGetnConvolutionFilterARB\0" "\0" - /* _mesa_function_pool[4124]: TexCoord2sv (offset 109) */ + /* _mesa_function_pool[3999]: TexCoord2sv (offset 109) */ "p\0" "glTexCoord2sv\0" "\0" - /* _mesa_function_pool[4141]: Vertex4dv (offset 143) */ + /* _mesa_function_pool[4016]: Vertex4dv (offset 143) */ "p\0" "glVertex4dv\0" "\0" - /* _mesa_function_pool[4156]: StencilMaskSeparate (will be remapped) */ + /* _mesa_function_pool[4031]: StencilMaskSeparate (will be remapped) */ "ii\0" "glStencilMaskSeparate\0" "\0" - /* _mesa_function_pool[4182]: ProgramLocalParameter4dARB (will be remapped) */ + /* _mesa_function_pool[4057]: ProgramLocalParameter4dARB (will be remapped) */ "iidddd\0" "glProgramLocalParameter4dARB\0" "\0" - /* _mesa_function_pool[4219]: CompressedTexImage3DARB (will be remapped) */ + /* _mesa_function_pool[4094]: CompressedTexImage3DARB (will be remapped) */ "iiiiiiiip\0" "glCompressedTexImage3D\0" "glCompressedTexImage3DARB\0" "\0" - /* _mesa_function_pool[4279]: Color3sv (offset 18) */ + /* _mesa_function_pool[4154]: Color3sv (offset 18) */ "p\0" "glColor3sv\0" "\0" - /* _mesa_function_pool[4293]: GetConvolutionParameteriv (offset 358) */ + /* _mesa_function_pool[4168]: GetConvolutionParameteriv (offset 358) */ "iip\0" "glGetConvolutionParameteriv\0" "glGetConvolutionParameterivEXT\0" "\0" - /* _mesa_function_pool[4357]: DeleteSamplers (will be remapped) */ + /* _mesa_function_pool[4232]: DeleteSamplers (will be remapped) */ "ip\0" "glDeleteSamplers\0" "\0" - /* _mesa_function_pool[4378]: VertexAttrib1fARB (will be remapped) */ + /* _mesa_function_pool[4253]: VertexAttrib1fARB (will be remapped) */ "if\0" "glVertexAttrib1f\0" "glVertexAttrib1fARB\0" "\0" - /* _mesa_function_pool[4419]: Vertex2dv (offset 127) */ + /* _mesa_function_pool[4294]: Vertex2dv (offset 127) */ "p\0" "glVertex2dv\0" "\0" - /* _mesa_function_pool[4434]: TestFenceNV (will be remapped) */ + /* _mesa_function_pool[4309]: TestFenceNV (will be remapped) */ "i\0" "glTestFenceNV\0" "\0" - /* _mesa_function_pool[4451]: MultiTexCoord1fvARB (offset 379) */ + /* _mesa_function_pool[4326]: GetVertexAttribIuivEXT (will be remapped) */ + "iip\0" + "glGetVertexAttribIuivEXT\0" + "glGetVertexAttribIuiv\0" + "\0" + /* _mesa_function_pool[4378]: MultiTexCoord1fvARB (offset 379) */ "ip\0" "glMultiTexCoord1fv\0" "glMultiTexCoord1fvARB\0" "\0" - /* _mesa_function_pool[4496]: TexCoord3iv (offset 115) */ + /* _mesa_function_pool[4423]: TexCoord3iv (offset 115) */ "p\0" "glTexCoord3iv\0" "\0" - /* _mesa_function_pool[4513]: Uniform2uivEXT (will be remapped) */ + /* _mesa_function_pool[4440]: Uniform2uivEXT (will be remapped) */ "iip\0" "glUniform2uivEXT\0" "glUniform2uiv\0" "\0" - /* _mesa_function_pool[4549]: ColorFragmentOp2ATI (will be remapped) */ + /* _mesa_function_pool[4476]: ColorFragmentOp2ATI (will be remapped) */ "iiiiiiiiii\0" "glColorFragmentOp2ATI\0" "\0" - /* _mesa_function_pool[4583]: SecondaryColorPointerListIBM (dynamic) */ + /* _mesa_function_pool[4510]: SecondaryColorPointerListIBM (dynamic) */ "iiipi\0" "glSecondaryColorPointerListIBM\0" "\0" - /* _mesa_function_pool[4621]: GetPixelTexGenParameterivSGIS (will be remapped) */ + /* _mesa_function_pool[4548]: GetPixelTexGenParameterivSGIS (will be remapped) */ "ip\0" "glGetPixelTexGenParameterivSGIS\0" "\0" - /* _mesa_function_pool[4657]: Color3fv (offset 14) */ + /* _mesa_function_pool[4584]: Color3fv (offset 14) */ "p\0" "glColor3fv\0" "\0" - /* _mesa_function_pool[4671]: GetnPixelMapfvARB (will be remapped) */ + /* _mesa_function_pool[4598]: GetnPixelMapfvARB (will be remapped) */ "iip\0" "glGetnPixelMapfvARB\0" "\0" - /* _mesa_function_pool[4696]: ReplacementCodeubSUN (dynamic) */ + /* _mesa_function_pool[4623]: ReplacementCodeubSUN (dynamic) */ "i\0" "glReplacementCodeubSUN\0" "\0" - /* _mesa_function_pool[4722]: FinishAsyncSGIX (dynamic) */ + /* _mesa_function_pool[4649]: FinishAsyncSGIX (dynamic) */ "p\0" "glFinishAsyncSGIX\0" "\0" - /* _mesa_function_pool[4743]: GetnUniformfvARB (will be remapped) */ + /* _mesa_function_pool[4670]: GetnUniformfvARB (will be remapped) */ "iiip\0" "glGetnUniformfvARB\0" "\0" - /* _mesa_function_pool[4768]: GetDebugLogMESA (dynamic) */ + /* _mesa_function_pool[4695]: GetDebugLogMESA (dynamic) */ "iiiipp\0" "glGetDebugLogMESA\0" "\0" - /* _mesa_function_pool[4794]: FogCoorddEXT (will be remapped) */ + /* _mesa_function_pool[4721]: FogCoorddEXT (will be remapped) */ "d\0" "glFogCoordd\0" "glFogCoorddEXT\0" "\0" - /* _mesa_function_pool[4824]: BeginConditionalRenderNV (will be remapped) */ + /* _mesa_function_pool[4751]: BeginConditionalRenderNV (will be remapped) */ "ii\0" "glBeginConditionalRenderNV\0" "glBeginConditionalRender\0" "\0" - /* _mesa_function_pool[4880]: Color4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[4807]: Color4ubVertex3fSUN (dynamic) */ "iiiifff\0" "glColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[4911]: FogCoordfEXT (will be remapped) */ + /* _mesa_function_pool[4838]: FogCoordfEXT (will be remapped) */ "f\0" "glFogCoordf\0" "glFogCoordfEXT\0" "\0" - /* _mesa_function_pool[4941]: PointSize (offset 173) */ + /* _mesa_function_pool[4868]: PointSize (offset 173) */ "f\0" "glPointSize\0" "\0" - /* _mesa_function_pool[4956]: VertexAttribI2uivEXT (will be remapped) */ + /* _mesa_function_pool[4883]: VertexAttribI2uivEXT (will be remapped) */ "ip\0" "glVertexAttribI2uivEXT\0" "glVertexAttribI2uiv\0" "\0" - /* _mesa_function_pool[5003]: TexCoord2fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[4930]: TexCoord2fVertex3fSUN (dynamic) */ "fffff\0" "glTexCoord2fVertex3fSUN\0" "\0" - /* _mesa_function_pool[5034]: PopName (offset 200) */ + /* _mesa_function_pool[4961]: PopName (offset 200) */ "\0" "glPopName\0" "\0" - /* _mesa_function_pool[5046]: GetSamplerParameterfv (will be remapped) */ + /* _mesa_function_pool[4973]: GetSamplerParameterfv (will be remapped) */ "iip\0" "glGetSamplerParameterfv\0" "\0" - /* _mesa_function_pool[5075]: GlobalAlphaFactoriSUN (dynamic) */ + /* _mesa_function_pool[5002]: GlobalAlphaFactoriSUN (dynamic) */ "i\0" "glGlobalAlphaFactoriSUN\0" "\0" - /* _mesa_function_pool[5102]: VertexAttrib2dNV (will be remapped) */ + /* _mesa_function_pool[5029]: VertexAttrib2dNV (will be remapped) */ "idd\0" "glVertexAttrib2dNV\0" "\0" - /* _mesa_function_pool[5126]: GetProgramInfoLog (will be remapped) */ + /* _mesa_function_pool[5053]: GetProgramInfoLog (will be remapped) */ "iipp\0" "glGetProgramInfoLog\0" "\0" - /* _mesa_function_pool[5152]: VertexAttrib4NbvARB (will be remapped) */ + /* _mesa_function_pool[5079]: VertexAttrib4NbvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nbv\0" "glVertexAttrib4NbvARB\0" "\0" - /* _mesa_function_pool[5197]: GetActiveAttribARB (will be remapped) */ + /* _mesa_function_pool[5124]: GetActiveAttribARB (will be remapped) */ "iiipppp\0" "glGetActiveAttrib\0" "glGetActiveAttribARB\0" "\0" - /* _mesa_function_pool[5245]: Vertex4sv (offset 149) */ + /* _mesa_function_pool[5172]: Vertex4sv (offset 149) */ "p\0" "glVertex4sv\0" "\0" - /* _mesa_function_pool[5260]: VertexAttrib4ubNV (will be remapped) */ + /* _mesa_function_pool[5187]: VertexAttrib4ubNV (will be remapped) */ "iiiii\0" "glVertexAttrib4ubNV\0" "\0" - /* _mesa_function_pool[5287]: VertexAttribI1ivEXT (will be remapped) */ + /* _mesa_function_pool[5214]: VertexAttribI1ivEXT (will be remapped) */ "ip\0" "glVertexAttribI1ivEXT\0" "glVertexAttribI1iv\0" "\0" - /* _mesa_function_pool[5332]: ClampColor (will be remapped) */ + /* _mesa_function_pool[5259]: ClampColor (will be remapped) */ "ii\0" "glClampColor\0" "\0" - /* _mesa_function_pool[5349]: TextureRangeAPPLE (will be remapped) */ + /* _mesa_function_pool[5276]: TextureRangeAPPLE (will be remapped) */ "iip\0" "glTextureRangeAPPLE\0" "\0" - /* _mesa_function_pool[5374]: GetTexEnvfv (offset 276) */ + /* _mesa_function_pool[5301]: GetTexEnvfv (offset 276) */ "iip\0" "glGetTexEnvfv\0" "\0" - /* _mesa_function_pool[5393]: BindTransformFeedback (will be remapped) */ + /* _mesa_function_pool[5320]: BindTransformFeedback (will be remapped) */ "ii\0" "glBindTransformFeedback\0" "\0" - /* _mesa_function_pool[5421]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[5348]: TexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ "ffffffffffff\0" "glTexCoord2fColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[5474]: Indexub (offset 315) */ + /* _mesa_function_pool[5401]: Indexub (offset 315) */ "i\0" "glIndexub\0" "\0" - /* _mesa_function_pool[5487]: VertexAttrib4fNV (will be remapped) */ + /* _mesa_function_pool[5414]: VertexAttrib4fNV (will be remapped) */ "iffff\0" "glVertexAttrib4fNV\0" "\0" - /* _mesa_function_pool[5513]: TexEnvi (offset 186) */ + /* _mesa_function_pool[5440]: TexEnvi (offset 186) */ "iii\0" "glTexEnvi\0" "\0" - /* _mesa_function_pool[5528]: GetClipPlane (offset 259) */ + /* _mesa_function_pool[5455]: GetClipPlane (offset 259) */ "ip\0" "glGetClipPlane\0" "\0" - /* _mesa_function_pool[5547]: CombinerParameterfvNV (will be remapped) */ + /* _mesa_function_pool[5474]: CombinerParameterfvNV (will be remapped) */ "ip\0" "glCombinerParameterfvNV\0" "\0" - /* _mesa_function_pool[5575]: VertexAttribs3dvNV (will be remapped) */ + /* _mesa_function_pool[5502]: VertexAttribs3dvNV (will be remapped) */ "iip\0" "glVertexAttribs3dvNV\0" "\0" - /* _mesa_function_pool[5601]: VertexAttribI2uiEXT (will be remapped) */ + /* _mesa_function_pool[5528]: VertexAttribI2uiEXT (will be remapped) */ "iii\0" "glVertexAttribI2uiEXT\0" "glVertexAttribI2ui\0" "\0" - /* _mesa_function_pool[5647]: VertexAttribs4fvNV (will be remapped) */ + /* _mesa_function_pool[5574]: VertexAttribs4fvNV (will be remapped) */ "iip\0" "glVertexAttribs4fvNV\0" "\0" - /* _mesa_function_pool[5673]: VertexArrayRangeNV (will be remapped) */ + /* _mesa_function_pool[5600]: VertexArrayRangeNV (will be remapped) */ "ip\0" "glVertexArrayRangeNV\0" "\0" - /* _mesa_function_pool[5698]: FragmentLightiSGIX (dynamic) */ + /* _mesa_function_pool[5625]: FragmentLightiSGIX (dynamic) */ "iii\0" "glFragmentLightiSGIX\0" "\0" - /* _mesa_function_pool[5724]: PolygonOffsetEXT (will be remapped) */ + /* _mesa_function_pool[5651]: PolygonOffsetEXT (will be remapped) */ "ff\0" "glPolygonOffsetEXT\0" "\0" - /* _mesa_function_pool[5747]: VertexAttribI4uivEXT (will be remapped) */ + /* _mesa_function_pool[5674]: VertexAttribI4uivEXT (will be remapped) */ "ip\0" "glVertexAttribI4uivEXT\0" "glVertexAttribI4uiv\0" "\0" - /* _mesa_function_pool[5794]: PollAsyncSGIX (dynamic) */ + /* _mesa_function_pool[5721]: PollAsyncSGIX (dynamic) */ "p\0" "glPollAsyncSGIX\0" "\0" - /* _mesa_function_pool[5813]: DeleteFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[5740]: DeleteFragmentShaderATI (will be remapped) */ "i\0" "glDeleteFragmentShaderATI\0" "\0" - /* _mesa_function_pool[5842]: Scaled (offset 301) */ + /* _mesa_function_pool[5769]: Scaled (offset 301) */ "ddd\0" "glScaled\0" "\0" - /* _mesa_function_pool[5856]: ResumeTransformFeedback (will be remapped) */ + /* _mesa_function_pool[5783]: ResumeTransformFeedback (will be remapped) */ "\0" "glResumeTransformFeedback\0" "\0" - /* _mesa_function_pool[5884]: Scalef (offset 302) */ + /* _mesa_function_pool[5811]: Scalef (offset 302) */ "fff\0" "glScalef\0" "\0" - /* _mesa_function_pool[5898]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[5825]: TexCoord2fNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[5936]: ProgramEnvParameters4fvEXT (will be remapped) */ + /* _mesa_function_pool[5863]: ProgramEnvParameters4fvEXT (will be remapped) */ "iiip\0" "glProgramEnvParameters4fvEXT\0" "\0" - /* _mesa_function_pool[5971]: MultTransposeMatrixdARB (will be remapped) */ + /* _mesa_function_pool[5898]: MultTransposeMatrixdARB (will be remapped) */ "p\0" "glMultTransposeMatrixd\0" "glMultTransposeMatrixdARB\0" "\0" - /* _mesa_function_pool[6023]: ObjectUnpurgeableAPPLE (will be remapped) */ + /* _mesa_function_pool[5950]: ColorMaskIndexedEXT (will be remapped) */ + "iiiii\0" + "glColorMaskIndexedEXT\0" + "glColorMaski\0" + "\0" + /* _mesa_function_pool[5992]: ObjectUnpurgeableAPPLE (will be remapped) */ "iii\0" "glObjectUnpurgeableAPPLE\0" "\0" - /* _mesa_function_pool[6053]: AlphaFunc (offset 240) */ + /* _mesa_function_pool[6022]: AlphaFunc (offset 240) */ "if\0" "glAlphaFunc\0" "\0" - /* _mesa_function_pool[6069]: WindowPos2svMESA (will be remapped) */ + /* _mesa_function_pool[6038]: WindowPos2svMESA (will be remapped) */ "p\0" "glWindowPos2sv\0" "glWindowPos2svARB\0" "glWindowPos2svMESA\0" "\0" - /* _mesa_function_pool[6124]: EdgeFlag (offset 41) */ + /* _mesa_function_pool[6093]: EdgeFlag (offset 41) */ "i\0" "glEdgeFlag\0" "\0" - /* _mesa_function_pool[6138]: TexCoord2iv (offset 107) */ + /* _mesa_function_pool[6107]: TexCoord2iv (offset 107) */ "p\0" "glTexCoord2iv\0" "\0" - /* _mesa_function_pool[6155]: CompressedTexImage1DARB (will be remapped) */ + /* _mesa_function_pool[6124]: CompressedTexImage1DARB (will be remapped) */ "iiiiiip\0" "glCompressedTexImage1D\0" "glCompressedTexImage1DARB\0" "\0" - /* _mesa_function_pool[6213]: Rotated (offset 299) */ + /* _mesa_function_pool[6182]: Rotated (offset 299) */ "dddd\0" "glRotated\0" "\0" - /* _mesa_function_pool[6229]: GetTexParameterIuivEXT (will be remapped) */ + /* _mesa_function_pool[6198]: GetTexParameterIuivEXT (will be remapped) */ "iip\0" "glGetTexParameterIuivEXT\0" "glGetTexParameterIuiv\0" "\0" - /* _mesa_function_pool[6281]: VertexAttrib2sNV (will be remapped) */ + /* _mesa_function_pool[6250]: VertexAttrib2sNV (will be remapped) */ "iii\0" "glVertexAttrib2sNV\0" "\0" - /* _mesa_function_pool[6305]: ReadPixels (offset 256) */ + /* _mesa_function_pool[6274]: ReadPixels (offset 256) */ "iiiiiip\0" "glReadPixels\0" "\0" - /* _mesa_function_pool[6327]: VertexAttribDivisorARB (will be remapped) */ + /* _mesa_function_pool[6296]: VertexAttribDivisorARB (will be remapped) */ "ii\0" "glVertexAttribDivisorARB\0" "\0" - /* _mesa_function_pool[6356]: EdgeFlagv (offset 42) */ + /* _mesa_function_pool[6325]: EdgeFlagv (offset 42) */ "p\0" "glEdgeFlagv\0" "\0" - /* _mesa_function_pool[6371]: NormalPointerListIBM (dynamic) */ + /* _mesa_function_pool[6340]: NormalPointerListIBM (dynamic) */ "iipi\0" "glNormalPointerListIBM\0" "\0" - /* _mesa_function_pool[6400]: IndexPointerEXT (will be remapped) */ + /* _mesa_function_pool[6369]: IndexPointerEXT (will be remapped) */ "iiip\0" "glIndexPointerEXT\0" "\0" - /* _mesa_function_pool[6424]: Color4iv (offset 32) */ + /* _mesa_function_pool[6393]: Color4iv (offset 32) */ "p\0" "glColor4iv\0" "\0" - /* _mesa_function_pool[6438]: TexParameterf (offset 178) */ + /* _mesa_function_pool[6407]: TexParameterf (offset 178) */ "iif\0" "glTexParameterf\0" "\0" - /* _mesa_function_pool[6459]: TexParameteri (offset 180) */ + /* _mesa_function_pool[6428]: TexParameteri (offset 180) */ "iii\0" "glTexParameteri\0" "\0" - /* _mesa_function_pool[6480]: NormalPointerEXT (will be remapped) */ + /* _mesa_function_pool[6449]: NormalPointerEXT (will be remapped) */ "iiip\0" "glNormalPointerEXT\0" "\0" - /* _mesa_function_pool[6505]: MultiTexCoord3dARB (offset 392) */ + /* _mesa_function_pool[6474]: MultiTexCoord3dARB (offset 392) */ "iddd\0" "glMultiTexCoord3d\0" "glMultiTexCoord3dARB\0" "\0" - /* _mesa_function_pool[6550]: MultiTexCoord2iARB (offset 388) */ + /* _mesa_function_pool[6519]: MultiTexCoord2iARB (offset 388) */ "iii\0" "glMultiTexCoord2i\0" "glMultiTexCoord2iARB\0" "\0" - /* _mesa_function_pool[6594]: DrawPixels (offset 257) */ + /* _mesa_function_pool[6563]: DrawPixels (offset 257) */ "iiiip\0" "glDrawPixels\0" "\0" - /* _mesa_function_pool[6614]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[6583]: ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (dynamic) */ "iffffffff\0" "glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[6674]: MultiTexCoord2svARB (offset 391) */ + /* _mesa_function_pool[6643]: MultiTexCoord2svARB (offset 391) */ "ip\0" "glMultiTexCoord2sv\0" "glMultiTexCoord2svARB\0" "\0" - /* _mesa_function_pool[6719]: ReplacementCodeubvSUN (dynamic) */ + /* _mesa_function_pool[6688]: ReplacementCodeubvSUN (dynamic) */ "p\0" "glReplacementCodeubvSUN\0" "\0" - /* _mesa_function_pool[6746]: Uniform3iARB (will be remapped) */ + /* _mesa_function_pool[6715]: Uniform3iARB (will be remapped) */ "iiii\0" "glUniform3i\0" "glUniform3iARB\0" "\0" - /* _mesa_function_pool[6779]: DrawTransformFeedback (will be remapped) */ + /* _mesa_function_pool[6748]: DrawTransformFeedback (will be remapped) */ "ii\0" "glDrawTransformFeedback\0" "\0" - /* _mesa_function_pool[6807]: DrawElementsInstancedARB (will be remapped) */ + /* _mesa_function_pool[6776]: DrawElementsInstancedARB (will be remapped) */ "iiipi\0" "glDrawElementsInstancedARB\0" "glDrawElementsInstancedEXT\0" "glDrawElementsInstanced\0" "\0" - /* _mesa_function_pool[6892]: GetShaderInfoLog (will be remapped) */ + /* _mesa_function_pool[6861]: GetShaderInfoLog (will be remapped) */ "iipp\0" "glGetShaderInfoLog\0" "\0" - /* _mesa_function_pool[6917]: WeightivARB (dynamic) */ + /* _mesa_function_pool[6886]: WeightivARB (dynamic) */ "ip\0" "glWeightivARB\0" "\0" - /* _mesa_function_pool[6935]: PollInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[6904]: PollInstrumentsSGIX (dynamic) */ "p\0" "glPollInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[6960]: GlobalAlphaFactordSUN (dynamic) */ + /* _mesa_function_pool[6929]: GlobalAlphaFactordSUN (dynamic) */ "d\0" "glGlobalAlphaFactordSUN\0" "\0" - /* _mesa_function_pool[6987]: GetFinalCombinerInputParameterfvNV (will be remapped) */ + /* _mesa_function_pool[6956]: GetFinalCombinerInputParameterfvNV (will be remapped) */ "iip\0" "glGetFinalCombinerInputParameterfvNV\0" "\0" - /* _mesa_function_pool[7029]: GenerateMipmapEXT (will be remapped) */ + /* _mesa_function_pool[6998]: GenerateMipmapEXT (will be remapped) */ "i\0" "glGenerateMipmap\0" "glGenerateMipmapEXT\0" "\0" - /* _mesa_function_pool[7069]: GenLists (offset 5) */ + /* _mesa_function_pool[7038]: GenLists (offset 5) */ "i\0" "glGenLists\0" "\0" - /* _mesa_function_pool[7083]: DepthRangef (will be remapped) */ + /* _mesa_function_pool[7052]: DepthRangef (will be remapped) */ "ff\0" "glDepthRangef\0" "\0" - /* _mesa_function_pool[7101]: GetMapAttribParameterivNV (dynamic) */ + /* _mesa_function_pool[7070]: GetMapAttribParameterivNV (dynamic) */ "iiip\0" "glGetMapAttribParameterivNV\0" "\0" - /* _mesa_function_pool[7135]: CreateShaderObjectARB (will be remapped) */ + /* _mesa_function_pool[7104]: CreateShaderObjectARB (will be remapped) */ "i\0" "glCreateShaderObjectARB\0" "\0" - /* _mesa_function_pool[7162]: GetSharpenTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[7131]: GetSharpenTexFuncSGIS (dynamic) */ "ip\0" "glGetSharpenTexFuncSGIS\0" "\0" - /* _mesa_function_pool[7190]: BufferDataARB (will be remapped) */ + /* _mesa_function_pool[7159]: BufferDataARB (will be remapped) */ "iipi\0" "glBufferData\0" "glBufferDataARB\0" "\0" - /* _mesa_function_pool[7225]: FlushVertexArrayRangeNV (will be remapped) */ + /* _mesa_function_pool[7194]: FlushVertexArrayRangeNV (will be remapped) */ "\0" "glFlushVertexArrayRangeNV\0" "\0" - /* _mesa_function_pool[7253]: MapGrid2d (offset 226) */ + /* _mesa_function_pool[7222]: MapGrid2d (offset 226) */ "iddidd\0" "glMapGrid2d\0" "\0" - /* _mesa_function_pool[7273]: MapGrid2f (offset 227) */ + /* _mesa_function_pool[7242]: MapGrid2f (offset 227) */ "iffiff\0" "glMapGrid2f\0" "\0" - /* _mesa_function_pool[7293]: SampleMapATI (will be remapped) */ + /* _mesa_function_pool[7262]: SampleMapATI (will be remapped) */ "iii\0" "glSampleMapATI\0" "\0" - /* _mesa_function_pool[7313]: VertexPointerEXT (will be remapped) */ + /* _mesa_function_pool[7282]: VertexPointerEXT (will be remapped) */ "iiiip\0" "glVertexPointerEXT\0" "\0" - /* _mesa_function_pool[7339]: GetTexFilterFuncSGIS (dynamic) */ + /* _mesa_function_pool[7308]: GetTexFilterFuncSGIS (dynamic) */ "iip\0" "glGetTexFilterFuncSGIS\0" "\0" - /* _mesa_function_pool[7367]: Scissor (offset 176) */ + /* _mesa_function_pool[7336]: Scissor (offset 176) */ "iiii\0" "glScissor\0" "\0" - /* _mesa_function_pool[7383]: Fogf (offset 153) */ + /* _mesa_function_pool[7352]: Fogf (offset 153) */ "if\0" "glFogf\0" "\0" - /* _mesa_function_pool[7394]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[7363]: ReplacementCodeuiColor4ubVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiColor4ubVertex3fvSUN\0" "\0" - /* _mesa_function_pool[7439]: TexSubImage1D (offset 332) */ + /* _mesa_function_pool[7408]: TexSubImage1D (offset 332) */ "iiiiiip\0" "glTexSubImage1D\0" "glTexSubImage1DEXT\0" "\0" - /* _mesa_function_pool[7483]: VertexAttrib1sARB (will be remapped) */ + /* _mesa_function_pool[7452]: VertexAttrib1sARB (will be remapped) */ "ii\0" "glVertexAttrib1s\0" "glVertexAttrib1sARB\0" "\0" - /* _mesa_function_pool[7524]: FenceSync (will be remapped) */ + /* _mesa_function_pool[7493]: FenceSync (will be remapped) */ "ii\0" "glFenceSync\0" "\0" - /* _mesa_function_pool[7540]: Color4usv (offset 40) */ + /* _mesa_function_pool[7509]: Color4usv (offset 40) */ "p\0" "glColor4usv\0" "\0" - /* _mesa_function_pool[7555]: Fogi (offset 155) */ + /* _mesa_function_pool[7524]: Fogi (offset 155) */ "ii\0" "glFogi\0" "\0" - /* _mesa_function_pool[7566]: DepthRange (offset 288) */ + /* _mesa_function_pool[7535]: DepthRange (offset 288) */ "dd\0" "glDepthRange\0" "\0" - /* _mesa_function_pool[7583]: RasterPos3iv (offset 75) */ + /* _mesa_function_pool[7552]: RasterPos3iv (offset 75) */ "p\0" "glRasterPos3iv\0" "\0" - /* _mesa_function_pool[7601]: FinalCombinerInputNV (will be remapped) */ + /* _mesa_function_pool[7570]: FinalCombinerInputNV (will be remapped) */ "iiii\0" "glFinalCombinerInputNV\0" "\0" - /* _mesa_function_pool[7630]: TexCoord2i (offset 106) */ + /* _mesa_function_pool[7599]: TexCoord2i (offset 106) */ "ii\0" "glTexCoord2i\0" "\0" - /* _mesa_function_pool[7647]: PixelMapfv (offset 251) */ + /* _mesa_function_pool[7616]: PixelMapfv (offset 251) */ "iip\0" "glPixelMapfv\0" "\0" - /* _mesa_function_pool[7665]: Color4ui (offset 37) */ + /* _mesa_function_pool[7634]: Color4ui (offset 37) */ "iiii\0" "glColor4ui\0" "\0" - /* _mesa_function_pool[7682]: RasterPos3s (offset 76) */ + /* _mesa_function_pool[7651]: RasterPos3s (offset 76) */ "iii\0" "glRasterPos3s\0" "\0" - /* _mesa_function_pool[7701]: Color3usv (offset 24) */ + /* _mesa_function_pool[7670]: Color3usv (offset 24) */ "p\0" "glColor3usv\0" "\0" - /* _mesa_function_pool[7716]: FlushRasterSGIX (dynamic) */ + /* _mesa_function_pool[7685]: FlushRasterSGIX (dynamic) */ "\0" "glFlushRasterSGIX\0" "\0" - /* _mesa_function_pool[7736]: TexCoord2f (offset 104) */ + /* _mesa_function_pool[7705]: TexCoord2f (offset 104) */ "ff\0" "glTexCoord2f\0" "\0" - /* _mesa_function_pool[7753]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[7722]: ReplacementCodeuiTexCoord2fVertex3fSUN (dynamic) */ "ifffff\0" "glReplacementCodeuiTexCoord2fVertex3fSUN\0" "\0" - /* _mesa_function_pool[7802]: TexCoord2d (offset 102) */ + /* _mesa_function_pool[7771]: TexCoord2d (offset 102) */ "dd\0" "glTexCoord2d\0" "\0" - /* _mesa_function_pool[7819]: RasterPos3d (offset 70) */ + /* _mesa_function_pool[7788]: RasterPos3d (offset 70) */ "ddd\0" "glRasterPos3d\0" "\0" - /* _mesa_function_pool[7838]: RasterPos3f (offset 72) */ + /* _mesa_function_pool[7807]: RasterPos3f (offset 72) */ "fff\0" "glRasterPos3f\0" "\0" - /* _mesa_function_pool[7857]: Uniform1fARB (will be remapped) */ + /* _mesa_function_pool[7826]: Uniform1fARB (will be remapped) */ "if\0" "glUniform1f\0" "glUniform1fARB\0" "\0" - /* _mesa_function_pool[7888]: AreTexturesResident (offset 322) */ + /* _mesa_function_pool[7857]: AreTexturesResident (offset 322) */ "ipp\0" "glAreTexturesResident\0" "glAreTexturesResidentEXT\0" "\0" - /* _mesa_function_pool[7940]: TexCoord2s (offset 108) */ + /* _mesa_function_pool[7909]: TexCoord2s (offset 108) */ "ii\0" "glTexCoord2s\0" "\0" - /* _mesa_function_pool[7957]: StencilOpSeparate (will be remapped) */ + /* _mesa_function_pool[7926]: StencilOpSeparate (will be remapped) */ "iiii\0" "glStencilOpSeparate\0" "glStencilOpSeparateATI\0" "\0" - /* _mesa_function_pool[8006]: ColorTableParameteriv (offset 341) */ + /* _mesa_function_pool[7975]: ColorTableParameteriv (offset 341) */ "iip\0" "glColorTableParameteriv\0" "glColorTableParameterivSGI\0" "\0" - /* _mesa_function_pool[8062]: FogCoordPointerListIBM (dynamic) */ + /* _mesa_function_pool[8031]: FogCoordPointerListIBM (dynamic) */ "iipi\0" "glFogCoordPointerListIBM\0" "\0" - /* _mesa_function_pool[8093]: WindowPos3dMESA (will be remapped) */ + /* _mesa_function_pool[8062]: WindowPos3dMESA (will be remapped) */ "ddd\0" "glWindowPos3d\0" "glWindowPos3dARB\0" "glWindowPos3dMESA\0" "\0" - /* _mesa_function_pool[8147]: Color4us (offset 39) */ + /* _mesa_function_pool[8116]: Color4us (offset 39) */ "iiii\0" "glColor4us\0" "\0" - /* _mesa_function_pool[8164]: PointParameterfvEXT (will be remapped) */ + /* _mesa_function_pool[8133]: PointParameterfvEXT (will be remapped) */ "ip\0" "glPointParameterfv\0" "glPointParameterfvARB\0" "glPointParameterfvEXT\0" "glPointParameterfvSGIS\0" "\0" - /* _mesa_function_pool[8254]: Color3bv (offset 10) */ + /* _mesa_function_pool[8223]: Color3bv (offset 10) */ "p\0" "glColor3bv\0" "\0" - /* _mesa_function_pool[8268]: GetnCompressedTexImageARB (will be remapped) */ + /* _mesa_function_pool[8237]: GetnCompressedTexImageARB (will be remapped) */ "iiip\0" "glGetnCompressedTexImageARB\0" "\0" - /* _mesa_function_pool[8302]: WindowPos2fvMESA (will be remapped) */ + /* _mesa_function_pool[8271]: WindowPos2fvMESA (will be remapped) */ "p\0" "glWindowPos2fv\0" "glWindowPos2fvARB\0" "glWindowPos2fvMESA\0" "\0" - /* _mesa_function_pool[8357]: SecondaryColor3bvEXT (will be remapped) */ + /* _mesa_function_pool[8326]: SecondaryColor3bvEXT (will be remapped) */ "p\0" "glSecondaryColor3bv\0" "glSecondaryColor3bvEXT\0" "\0" - /* _mesa_function_pool[8403]: VertexPointerListIBM (dynamic) */ + /* _mesa_function_pool[8372]: VertexPointerListIBM (dynamic) */ "iiipi\0" "glVertexPointerListIBM\0" "\0" - /* _mesa_function_pool[8433]: GetProgramLocalParameterfvARB (will be remapped) */ + /* _mesa_function_pool[8402]: GetProgramLocalParameterfvARB (will be remapped) */ "iip\0" "glGetProgramLocalParameterfvARB\0" "\0" - /* _mesa_function_pool[8470]: FragmentMaterialfSGIX (dynamic) */ + /* _mesa_function_pool[8439]: FragmentMaterialfSGIX (dynamic) */ "iif\0" "glFragmentMaterialfSGIX\0" "\0" - /* _mesa_function_pool[8499]: BindSampler (will be remapped) */ + /* _mesa_function_pool[8468]: BindSampler (will be remapped) */ "ii\0" "glBindSampler\0" "\0" - /* _mesa_function_pool[8517]: RenderbufferStorageEXT (will be remapped) */ + /* _mesa_function_pool[8486]: RenderbufferStorageEXT (will be remapped) */ "iiii\0" "glRenderbufferStorage\0" "glRenderbufferStorageEXT\0" "\0" - /* _mesa_function_pool[8570]: IsFenceNV (will be remapped) */ + /* _mesa_function_pool[8539]: IsFenceNV (will be remapped) */ "i\0" "glIsFenceNV\0" "\0" - /* _mesa_function_pool[8585]: AttachObjectARB (will be remapped) */ + /* _mesa_function_pool[8554]: AttachObjectARB (will be remapped) */ "ii\0" "glAttachObjectARB\0" "\0" - /* _mesa_function_pool[8607]: GetFragmentLightivSGIX (dynamic) */ + /* _mesa_function_pool[8576]: GetFragmentLightivSGIX (dynamic) */ "iip\0" "glGetFragmentLightivSGIX\0" "\0" - /* _mesa_function_pool[8637]: UniformMatrix2fvARB (will be remapped) */ + /* _mesa_function_pool[8606]: UniformMatrix2fvARB (will be remapped) */ "iiip\0" "glUniformMatrix2fv\0" "glUniformMatrix2fvARB\0" "\0" - /* _mesa_function_pool[8684]: MultiTexCoord2fARB (offset 386) */ + /* _mesa_function_pool[8653]: MultiTexCoord2fARB (offset 386) */ "iff\0" "glMultiTexCoord2f\0" "glMultiTexCoord2fARB\0" "\0" - /* _mesa_function_pool[8728]: ColorTable (offset 339) */ + /* _mesa_function_pool[8697]: ColorTable (offset 339) */ "iiiiip\0" "glColorTable\0" "glColorTableSGI\0" "glColorTableEXT\0" "\0" - /* _mesa_function_pool[8781]: IndexPointer (offset 314) */ + /* _mesa_function_pool[8750]: IndexPointer (offset 314) */ "iip\0" "glIndexPointer\0" "\0" - /* _mesa_function_pool[8801]: Accum (offset 213) */ + /* _mesa_function_pool[8770]: Accum (offset 213) */ "if\0" "glAccum\0" "\0" - /* _mesa_function_pool[8813]: GetTexImage (offset 281) */ + /* _mesa_function_pool[8782]: GetTexImage (offset 281) */ "iiiip\0" "glGetTexImage\0" "\0" - /* _mesa_function_pool[8834]: MapControlPointsNV (dynamic) */ + /* _mesa_function_pool[8803]: MapControlPointsNV (dynamic) */ "iiiiiiiip\0" "glMapControlPointsNV\0" "\0" - /* _mesa_function_pool[8866]: ConvolutionFilter2D (offset 349) */ + /* _mesa_function_pool[8835]: ConvolutionFilter2D (offset 349) */ "iiiiiip\0" "glConvolutionFilter2D\0" "glConvolutionFilter2DEXT\0" "\0" - /* _mesa_function_pool[8922]: Finish (offset 216) */ + /* _mesa_function_pool[8891]: Finish (offset 216) */ "\0" "glFinish\0" "\0" - /* _mesa_function_pool[8933]: MapParameterfvNV (dynamic) */ + /* _mesa_function_pool[8902]: MapParameterfvNV (dynamic) */ "iip\0" "glMapParameterfvNV\0" "\0" - /* _mesa_function_pool[8957]: ClearStencil (offset 207) */ + /* _mesa_function_pool[8926]: ClearStencil (offset 207) */ "i\0" "glClearStencil\0" "\0" - /* _mesa_function_pool[8975]: VertexAttrib3dvARB (will be remapped) */ + /* _mesa_function_pool[8944]: VertexAttrib3dvARB (will be remapped) */ "ip\0" "glVertexAttrib3dv\0" "glVertexAttrib3dvARB\0" "\0" - /* _mesa_function_pool[9018]: Uniform4uivEXT (will be remapped) */ + /* _mesa_function_pool[8987]: Uniform4uivEXT (will be remapped) */ "iip\0" "glUniform4uivEXT\0" "glUniform4uiv\0" "\0" - /* _mesa_function_pool[9054]: HintPGI (dynamic) */ + /* _mesa_function_pool[9023]: HintPGI (dynamic) */ "ii\0" "glHintPGI\0" "\0" - /* _mesa_function_pool[9068]: ConvolutionParameteriv (offset 353) */ + /* _mesa_function_pool[9037]: ConvolutionParameteriv (offset 353) */ "iip\0" "glConvolutionParameteriv\0" "glConvolutionParameterivEXT\0" "\0" - /* _mesa_function_pool[9126]: Color4s (offset 33) */ + /* _mesa_function_pool[9095]: Color4s (offset 33) */ "iiii\0" "glColor4s\0" "\0" - /* _mesa_function_pool[9142]: InterleavedArrays (offset 317) */ + /* _mesa_function_pool[9111]: InterleavedArrays (offset 317) */ "iip\0" "glInterleavedArrays\0" "\0" - /* _mesa_function_pool[9167]: RasterPos2fv (offset 65) */ + /* _mesa_function_pool[9136]: RasterPos2fv (offset 65) */ "p\0" "glRasterPos2fv\0" "\0" - /* _mesa_function_pool[9185]: TexCoord1fv (offset 97) */ + /* _mesa_function_pool[9154]: TexCoord1fv (offset 97) */ "p\0" "glTexCoord1fv\0" "\0" - /* _mesa_function_pool[9202]: Vertex2d (offset 126) */ + /* _mesa_function_pool[9171]: Vertex2d (offset 126) */ "dd\0" "glVertex2d\0" "\0" - /* _mesa_function_pool[9217]: CullParameterdvEXT (dynamic) */ + /* _mesa_function_pool[9186]: CullParameterdvEXT (dynamic) */ "ip\0" "glCullParameterdvEXT\0" "\0" - /* _mesa_function_pool[9242]: ProgramNamedParameter4fNV (will be remapped) */ + /* _mesa_function_pool[9211]: ProgramNamedParameter4fNV (will be remapped) */ "iipffff\0" "glProgramNamedParameter4fNV\0" "\0" - /* _mesa_function_pool[9279]: Color3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[9248]: Color3fVertex3fSUN (dynamic) */ "ffffff\0" "glColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[9308]: ProgramEnvParameter4fvARB (will be remapped) */ + /* _mesa_function_pool[9277]: ProgramEnvParameter4fvARB (will be remapped) */ "iip\0" "glProgramEnvParameter4fvARB\0" "glProgramParameter4fvNV\0" "\0" - /* _mesa_function_pool[9365]: Color4i (offset 31) */ + /* _mesa_function_pool[9334]: Color4i (offset 31) */ "iiii\0" "glColor4i\0" "\0" - /* _mesa_function_pool[9381]: Color4f (offset 29) */ + /* _mesa_function_pool[9350]: Color4f (offset 29) */ "ffff\0" "glColor4f\0" "\0" - /* _mesa_function_pool[9397]: RasterPos4fv (offset 81) */ + /* _mesa_function_pool[9366]: RasterPos4fv (offset 81) */ "p\0" "glRasterPos4fv\0" "\0" - /* _mesa_function_pool[9415]: Color4d (offset 27) */ + /* _mesa_function_pool[9384]: Color4d (offset 27) */ "dddd\0" "glColor4d\0" "\0" - /* _mesa_function_pool[9431]: ClearIndex (offset 205) */ + /* _mesa_function_pool[9400]: ClearIndex (offset 205) */ "f\0" "glClearIndex\0" "\0" - /* _mesa_function_pool[9447]: Color4b (offset 25) */ + /* _mesa_function_pool[9416]: Color4b (offset 25) */ "iiii\0" "glColor4b\0" "\0" - /* _mesa_function_pool[9463]: LoadMatrixd (offset 292) */ + /* _mesa_function_pool[9432]: LoadMatrixd (offset 292) */ "p\0" "glLoadMatrixd\0" "\0" - /* _mesa_function_pool[9480]: FragmentLightModeliSGIX (dynamic) */ + /* _mesa_function_pool[9449]: FragmentLightModeliSGIX (dynamic) */ "ii\0" "glFragmentLightModeliSGIX\0" "\0" - /* _mesa_function_pool[9510]: RasterPos2dv (offset 63) */ + /* _mesa_function_pool[9479]: RasterPos2dv (offset 63) */ "p\0" "glRasterPos2dv\0" "\0" - /* _mesa_function_pool[9528]: ConvolutionParameterfv (offset 351) */ + /* _mesa_function_pool[9497]: ConvolutionParameterfv (offset 351) */ "iip\0" "glConvolutionParameterfv\0" "glConvolutionParameterfvEXT\0" "\0" - /* _mesa_function_pool[9586]: TbufferMask3DFX (dynamic) */ + /* _mesa_function_pool[9555]: TbufferMask3DFX (dynamic) */ "i\0" "glTbufferMask3DFX\0" "\0" - /* _mesa_function_pool[9607]: GetTexGendv (offset 278) */ + /* _mesa_function_pool[9576]: GetTexGendv (offset 278) */ "iip\0" "glGetTexGendv\0" "\0" - /* _mesa_function_pool[9626]: GetVertexAttribfvNV (will be remapped) */ + /* _mesa_function_pool[9595]: GetVertexAttribfvNV (will be remapped) */ "iip\0" "glGetVertexAttribfvNV\0" "\0" - /* _mesa_function_pool[9653]: BeginTransformFeedbackEXT (will be remapped) */ + /* _mesa_function_pool[9622]: BeginTransformFeedbackEXT (will be remapped) */ "i\0" "glBeginTransformFeedbackEXT\0" "glBeginTransformFeedback\0" "\0" - /* _mesa_function_pool[9709]: LoadProgramNV (will be remapped) */ + /* _mesa_function_pool[9678]: LoadProgramNV (will be remapped) */ "iiip\0" "glLoadProgramNV\0" "\0" - /* _mesa_function_pool[9731]: WaitSync (will be remapped) */ + /* _mesa_function_pool[9700]: WaitSync (will be remapped) */ "iii\0" "glWaitSync\0" "\0" - /* _mesa_function_pool[9747]: EndList (offset 1) */ + /* _mesa_function_pool[9716]: EndList (offset 1) */ "\0" "glEndList\0" "\0" - /* _mesa_function_pool[9759]: VertexAttrib4fvNV (will be remapped) */ + /* _mesa_function_pool[9728]: VertexAttrib4fvNV (will be remapped) */ "ip\0" "glVertexAttrib4fvNV\0" "\0" - /* _mesa_function_pool[9783]: GetAttachedObjectsARB (will be remapped) */ + /* _mesa_function_pool[9752]: GetAttachedObjectsARB (will be remapped) */ "iipp\0" "glGetAttachedObjectsARB\0" "\0" - /* _mesa_function_pool[9813]: Uniform3fvARB (will be remapped) */ + /* _mesa_function_pool[9782]: Uniform3fvARB (will be remapped) */ "iip\0" "glUniform3fv\0" "glUniform3fvARB\0" "\0" - /* _mesa_function_pool[9847]: EvalCoord1fv (offset 231) */ + /* _mesa_function_pool[9816]: EvalCoord1fv (offset 231) */ "p\0" "glEvalCoord1fv\0" "\0" - /* _mesa_function_pool[9865]: DrawRangeElements (offset 338) */ + /* _mesa_function_pool[9834]: DrawRangeElements (offset 338) */ "iiiiip\0" "glDrawRangeElements\0" "glDrawRangeElementsEXT\0" "\0" - /* _mesa_function_pool[9916]: EvalMesh2 (offset 238) */ + /* _mesa_function_pool[9885]: EvalMesh2 (offset 238) */ "iiiii\0" "glEvalMesh2\0" "\0" - /* _mesa_function_pool[9935]: Vertex4fv (offset 145) */ + /* _mesa_function_pool[9904]: Vertex4fv (offset 145) */ "p\0" "glVertex4fv\0" "\0" - /* _mesa_function_pool[9950]: GenTransformFeedbacks (will be remapped) */ + /* _mesa_function_pool[9919]: GenTransformFeedbacks (will be remapped) */ "ip\0" "glGenTransformFeedbacks\0" "\0" - /* _mesa_function_pool[9978]: SpriteParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[9947]: SpriteParameterfvSGIX (dynamic) */ "ip\0" "glSpriteParameterfvSGIX\0" "\0" - /* _mesa_function_pool[10006]: CheckFramebufferStatusEXT (will be remapped) */ + /* _mesa_function_pool[9975]: CheckFramebufferStatusEXT (will be remapped) */ "i\0" "glCheckFramebufferStatus\0" "glCheckFramebufferStatusEXT\0" "\0" - /* _mesa_function_pool[10062]: GlobalAlphaFactoruiSUN (dynamic) */ + /* _mesa_function_pool[10031]: GlobalAlphaFactoruiSUN (dynamic) */ "i\0" "glGlobalAlphaFactoruiSUN\0" "\0" - /* _mesa_function_pool[10090]: GetHandleARB (will be remapped) */ + /* _mesa_function_pool[10059]: GetHandleARB (will be remapped) */ "i\0" "glGetHandleARB\0" "\0" - /* _mesa_function_pool[10108]: GetVertexAttribivARB (will be remapped) */ + /* _mesa_function_pool[10077]: GetVertexAttribivARB (will be remapped) */ "iip\0" "glGetVertexAttribiv\0" "glGetVertexAttribivARB\0" "\0" - /* _mesa_function_pool[10156]: BlendFunciARB (will be remapped) */ + /* _mesa_function_pool[10125]: BlendFunciARB (will be remapped) */ "iii\0" "glBlendFunciARB\0" "glBlendFuncIndexedAMD\0" "\0" - /* _mesa_function_pool[10199]: GetnUniformivARB (will be remapped) */ + /* _mesa_function_pool[10168]: GetnUniformivARB (will be remapped) */ "iiip\0" "glGetnUniformivARB\0" "\0" - /* _mesa_function_pool[10224]: GetTexParameterIivEXT (will be remapped) */ + /* _mesa_function_pool[10193]: GetTexParameterIivEXT (will be remapped) */ "iip\0" "glGetTexParameterIivEXT\0" "glGetTexParameterIiv\0" "\0" - /* _mesa_function_pool[10274]: CreateProgram (will be remapped) */ + /* _mesa_function_pool[10243]: CreateProgram (will be remapped) */ "\0" "glCreateProgram\0" "\0" - /* _mesa_function_pool[10292]: LoadTransposeMatrixdARB (will be remapped) */ + /* _mesa_function_pool[10261]: LoadTransposeMatrixdARB (will be remapped) */ "p\0" "glLoadTransposeMatrixd\0" "glLoadTransposeMatrixdARB\0" "\0" - /* _mesa_function_pool[10344]: ReleaseShaderCompiler (will be remapped) */ + /* _mesa_function_pool[10313]: ReleaseShaderCompiler (will be remapped) */ "\0" "glReleaseShaderCompiler\0" "\0" - /* _mesa_function_pool[10370]: GetMinmax (offset 364) */ + /* _mesa_function_pool[10339]: GetMinmax (offset 364) */ "iiiip\0" "glGetMinmax\0" "glGetMinmaxEXT\0" "\0" - /* _mesa_function_pool[10404]: StencilFuncSeparate (will be remapped) */ + /* _mesa_function_pool[10373]: StencilFuncSeparate (will be remapped) */ "iiii\0" "glStencilFuncSeparate\0" "\0" - /* _mesa_function_pool[10432]: SecondaryColor3sEXT (will be remapped) */ + /* _mesa_function_pool[10401]: SecondaryColor3sEXT (will be remapped) */ "iii\0" "glSecondaryColor3s\0" "glSecondaryColor3sEXT\0" "\0" - /* _mesa_function_pool[10478]: Color3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[10447]: Color3fVertex3fvSUN (dynamic) */ "pp\0" "glColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[10504]: GetInteger64i_v (will be remapped) */ + /* _mesa_function_pool[10473]: GetInteger64i_v (will be remapped) */ "iip\0" "glGetInteger64i_v\0" "\0" - /* _mesa_function_pool[10527]: GetVertexAttribdvNV (will be remapped) */ + /* _mesa_function_pool[10496]: GetVertexAttribdvNV (will be remapped) */ "iip\0" "glGetVertexAttribdvNV\0" "\0" - /* _mesa_function_pool[10554]: Normal3fv (offset 57) */ + /* _mesa_function_pool[10523]: Normal3fv (offset 57) */ "p\0" "glNormal3fv\0" "\0" - /* _mesa_function_pool[10569]: GlobalAlphaFactorbSUN (dynamic) */ + /* _mesa_function_pool[10538]: GlobalAlphaFactorbSUN (dynamic) */ "i\0" "glGlobalAlphaFactorbSUN\0" "\0" - /* _mesa_function_pool[10596]: Color3us (offset 23) */ + /* _mesa_function_pool[10565]: Color3us (offset 23) */ "iii\0" "glColor3us\0" "\0" - /* _mesa_function_pool[10612]: ImageTransformParameterfvHP (dynamic) */ + /* _mesa_function_pool[10581]: ImageTransformParameterfvHP (dynamic) */ "iip\0" "glImageTransformParameterfvHP\0" "\0" - /* _mesa_function_pool[10647]: VertexAttrib4ivARB (will be remapped) */ + /* _mesa_function_pool[10616]: VertexAttrib4ivARB (will be remapped) */ "ip\0" "glVertexAttrib4iv\0" "glVertexAttrib4ivARB\0" "\0" - /* _mesa_function_pool[10690]: End (offset 43) */ + /* _mesa_function_pool[10659]: End (offset 43) */ "\0" "glEnd\0" "\0" - /* _mesa_function_pool[10698]: VertexAttrib3fNV (will be remapped) */ + /* _mesa_function_pool[10667]: VertexAttrib3fNV (will be remapped) */ "ifff\0" "glVertexAttrib3fNV\0" "\0" - /* _mesa_function_pool[10723]: VertexAttribs2dvNV (will be remapped) */ + /* _mesa_function_pool[10692]: VertexAttribs2dvNV (will be remapped) */ "iip\0" "glVertexAttribs2dvNV\0" "\0" - /* _mesa_function_pool[10749]: GetQueryObjectui64vEXT (will be remapped) */ + /* _mesa_function_pool[10718]: GetQueryObjectui64vEXT (will be remapped) */ "iip\0" "glGetQueryObjectui64vEXT\0" "\0" - /* _mesa_function_pool[10779]: MultiTexCoord3fvARB (offset 395) */ + /* _mesa_function_pool[10748]: MultiTexCoord3fvARB (offset 395) */ "ip\0" "glMultiTexCoord3fv\0" "glMultiTexCoord3fvARB\0" "\0" - /* _mesa_function_pool[10824]: SecondaryColor3dEXT (will be remapped) */ + /* _mesa_function_pool[10793]: SecondaryColor3dEXT (will be remapped) */ "ddd\0" "glSecondaryColor3d\0" "glSecondaryColor3dEXT\0" "\0" - /* _mesa_function_pool[10870]: Color3ub (offset 19) */ + /* _mesa_function_pool[10839]: Color3ub (offset 19) */ "iii\0" "glColor3ub\0" "\0" - /* _mesa_function_pool[10886]: GetProgramParameterfvNV (will be remapped) */ + /* _mesa_function_pool[10855]: GetProgramParameterfvNV (will be remapped) */ "iiip\0" "glGetProgramParameterfvNV\0" "\0" - /* _mesa_function_pool[10918]: TangentPointerEXT (dynamic) */ + /* _mesa_function_pool[10887]: TangentPointerEXT (dynamic) */ "iip\0" "glTangentPointerEXT\0" "\0" - /* _mesa_function_pool[10943]: Color4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[10912]: Color4fNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[10978]: GetInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[10947]: GetInstrumentsSGIX (dynamic) */ "\0" "glGetInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[11001]: GetUniformuivEXT (will be remapped) */ + /* _mesa_function_pool[10970]: GetUniformuivEXT (will be remapped) */ "iip\0" "glGetUniformuivEXT\0" "glGetUniformuiv\0" "\0" - /* _mesa_function_pool[11041]: Color3ui (offset 21) */ + /* _mesa_function_pool[11010]: Color3ui (offset 21) */ "iii\0" "glColor3ui\0" "\0" - /* _mesa_function_pool[11057]: EvalMapsNV (dynamic) */ + /* _mesa_function_pool[11026]: EvalMapsNV (dynamic) */ "ii\0" "glEvalMapsNV\0" "\0" - /* _mesa_function_pool[11074]: TexSubImage2D (offset 333) */ + /* _mesa_function_pool[11043]: TexSubImage2D (offset 333) */ "iiiiiiiip\0" "glTexSubImage2D\0" "glTexSubImage2DEXT\0" "\0" - /* _mesa_function_pool[11120]: FragmentLightivSGIX (dynamic) */ + /* _mesa_function_pool[11089]: FragmentLightivSGIX (dynamic) */ "iip\0" "glFragmentLightivSGIX\0" "\0" - /* _mesa_function_pool[11147]: GetTexParameterPointervAPPLE (will be remapped) */ + /* _mesa_function_pool[11116]: GetTexParameterPointervAPPLE (will be remapped) */ "iip\0" "glGetTexParameterPointervAPPLE\0" "\0" - /* _mesa_function_pool[11183]: TexGenfv (offset 191) */ + /* _mesa_function_pool[11152]: TexGenfv (offset 191) */ "iip\0" "glTexGenfv\0" "\0" - /* _mesa_function_pool[11199]: GetTransformFeedbackVaryingEXT (will be remapped) */ + /* _mesa_function_pool[11168]: GetTransformFeedbackVaryingEXT (will be remapped) */ "iiipppp\0" "glGetTransformFeedbackVaryingEXT\0" "glGetTransformFeedbackVarying\0" "\0" - /* _mesa_function_pool[11271]: VertexAttrib4bvARB (will be remapped) */ + /* _mesa_function_pool[11240]: VertexAttrib4bvARB (will be remapped) */ "ip\0" "glVertexAttrib4bv\0" "glVertexAttrib4bvARB\0" "\0" - /* _mesa_function_pool[11314]: ShaderBinary (will be remapped) */ + /* _mesa_function_pool[11283]: ShaderBinary (will be remapped) */ "ipipi\0" "glShaderBinary\0" "\0" - /* _mesa_function_pool[11336]: GetIntegerIndexedvEXT (will be remapped) */ + /* _mesa_function_pool[11305]: GetIntegerIndexedvEXT (will be remapped) */ "iip\0" "glGetIntegerIndexedvEXT\0" "glGetIntegeri_v\0" "\0" - /* _mesa_function_pool[11381]: MultiTexCoord4sARB (offset 406) */ + /* _mesa_function_pool[11350]: MultiTexCoord4sARB (offset 406) */ "iiiii\0" "glMultiTexCoord4s\0" "glMultiTexCoord4sARB\0" "\0" - /* _mesa_function_pool[11427]: GetFragmentMaterialivSGIX (dynamic) */ + /* _mesa_function_pool[11396]: GetFragmentMaterialivSGIX (dynamic) */ "iip\0" "glGetFragmentMaterialivSGIX\0" "\0" - /* _mesa_function_pool[11460]: WindowPos4dMESA (will be remapped) */ + /* _mesa_function_pool[11429]: WindowPos4dMESA (will be remapped) */ "dddd\0" "glWindowPos4dMESA\0" "\0" - /* _mesa_function_pool[11484]: WeightPointerARB (dynamic) */ + /* _mesa_function_pool[11453]: WeightPointerARB (dynamic) */ "iiip\0" "glWeightPointerARB\0" "\0" - /* _mesa_function_pool[11509]: WindowPos2dMESA (will be remapped) */ + /* _mesa_function_pool[11478]: WindowPos2dMESA (will be remapped) */ "dd\0" "glWindowPos2d\0" "glWindowPos2dARB\0" "glWindowPos2dMESA\0" "\0" - /* _mesa_function_pool[11562]: FramebufferTexture3DEXT (will be remapped) */ + /* _mesa_function_pool[11531]: FramebufferTexture3DEXT (will be remapped) */ "iiiiii\0" "glFramebufferTexture3D\0" "glFramebufferTexture3DEXT\0" "\0" - /* _mesa_function_pool[11619]: BlendEquation (offset 337) */ + /* _mesa_function_pool[11588]: BlendEquation (offset 337) */ "i\0" "glBlendEquation\0" "glBlendEquationEXT\0" "\0" - /* _mesa_function_pool[11657]: VertexAttrib3dNV (will be remapped) */ + /* _mesa_function_pool[11626]: VertexAttrib3dNV (will be remapped) */ "iddd\0" "glVertexAttrib3dNV\0" "\0" - /* _mesa_function_pool[11682]: VertexAttrib3dARB (will be remapped) */ + /* _mesa_function_pool[11651]: VertexAttrib3dARB (will be remapped) */ "iddd\0" "glVertexAttrib3d\0" "glVertexAttrib3dARB\0" "\0" - /* _mesa_function_pool[11725]: VertexAttribI4usvEXT (will be remapped) */ + /* _mesa_function_pool[11694]: VertexAttribI4usvEXT (will be remapped) */ "ip\0" "glVertexAttribI4usvEXT\0" "glVertexAttribI4usv\0" "\0" - /* _mesa_function_pool[11772]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[11741]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ "ppppp\0" "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[11836]: VertexAttrib4fARB (will be remapped) */ + /* _mesa_function_pool[11805]: VertexAttrib4fARB (will be remapped) */ "iffff\0" "glVertexAttrib4f\0" "glVertexAttrib4fARB\0" "\0" - /* _mesa_function_pool[11880]: GetError (offset 261) */ + /* _mesa_function_pool[11849]: GetError (offset 261) */ "\0" "glGetError\0" "\0" - /* _mesa_function_pool[11893]: IndexFuncEXT (dynamic) */ + /* _mesa_function_pool[11862]: IndexFuncEXT (dynamic) */ "if\0" "glIndexFuncEXT\0" "\0" - /* _mesa_function_pool[11912]: TexCoord3dv (offset 111) */ + /* _mesa_function_pool[11881]: TexCoord3dv (offset 111) */ "p\0" "glTexCoord3dv\0" "\0" - /* _mesa_function_pool[11929]: Indexdv (offset 45) */ + /* _mesa_function_pool[11898]: Indexdv (offset 45) */ "p\0" "glIndexdv\0" "\0" - /* _mesa_function_pool[11942]: FramebufferTexture2DEXT (will be remapped) */ + /* _mesa_function_pool[11911]: FramebufferTexture2DEXT (will be remapped) */ "iiiii\0" "glFramebufferTexture2D\0" "glFramebufferTexture2DEXT\0" "\0" - /* _mesa_function_pool[11998]: Normal3s (offset 60) */ + /* _mesa_function_pool[11967]: Normal3s (offset 60) */ "iii\0" "glNormal3s\0" "\0" - /* _mesa_function_pool[12014]: GetObjectParameterivAPPLE (will be remapped) */ + /* _mesa_function_pool[11983]: GetObjectParameterivAPPLE (will be remapped) */ "iiip\0" "glGetObjectParameterivAPPLE\0" "\0" - /* _mesa_function_pool[12048]: PushName (offset 201) */ + /* _mesa_function_pool[12017]: PushName (offset 201) */ "i\0" "glPushName\0" "\0" - /* _mesa_function_pool[12062]: MultiTexCoord2dvARB (offset 385) */ + /* _mesa_function_pool[12031]: MultiTexCoord2dvARB (offset 385) */ "ip\0" "glMultiTexCoord2dv\0" "glMultiTexCoord2dvARB\0" "\0" - /* _mesa_function_pool[12107]: CullParameterfvEXT (dynamic) */ + /* _mesa_function_pool[12076]: CullParameterfvEXT (dynamic) */ "ip\0" "glCullParameterfvEXT\0" "\0" - /* _mesa_function_pool[12132]: Normal3i (offset 58) */ + /* _mesa_function_pool[12101]: Normal3i (offset 58) */ "iii\0" "glNormal3i\0" "\0" - /* _mesa_function_pool[12148]: ProgramNamedParameter4fvNV (will be remapped) */ + /* _mesa_function_pool[12117]: ProgramNamedParameter4fvNV (will be remapped) */ "iipp\0" "glProgramNamedParameter4fvNV\0" "\0" - /* _mesa_function_pool[12183]: SecondaryColorPointerEXT (will be remapped) */ + /* _mesa_function_pool[12152]: SecondaryColorPointerEXT (will be remapped) */ "iiip\0" "glSecondaryColorPointer\0" "glSecondaryColorPointerEXT\0" "\0" - /* _mesa_function_pool[12240]: VertexAttrib4fvARB (will be remapped) */ + /* _mesa_function_pool[12209]: VertexAttrib4fvARB (will be remapped) */ "ip\0" "glVertexAttrib4fv\0" "glVertexAttrib4fvARB\0" "\0" - /* _mesa_function_pool[12283]: PixelTexGenSGIX (will be remapped) */ + /* _mesa_function_pool[12252]: PixelTexGenSGIX (will be remapped) */ "i\0" "glPixelTexGenSGIX\0" "\0" - /* _mesa_function_pool[12304]: GetActiveUniformARB (will be remapped) */ + /* _mesa_function_pool[12273]: GetActiveUniformARB (will be remapped) */ "iiipppp\0" "glGetActiveUniform\0" "glGetActiveUniformARB\0" "\0" - /* _mesa_function_pool[12354]: ImageTransformParameteriHP (dynamic) */ + /* _mesa_function_pool[12323]: ImageTransformParameteriHP (dynamic) */ "iii\0" "glImageTransformParameteriHP\0" "\0" - /* _mesa_function_pool[12388]: Normal3b (offset 52) */ + /* _mesa_function_pool[12357]: Normal3b (offset 52) */ "iii\0" "glNormal3b\0" "\0" - /* _mesa_function_pool[12404]: Normal3d (offset 54) */ + /* _mesa_function_pool[12373]: Normal3d (offset 54) */ "ddd\0" "glNormal3d\0" "\0" - /* _mesa_function_pool[12420]: Uniform1uiEXT (will be remapped) */ + /* _mesa_function_pool[12389]: Uniform1uiEXT (will be remapped) */ "ii\0" "glUniform1uiEXT\0" "glUniform1ui\0" "\0" - /* _mesa_function_pool[12453]: Normal3f (offset 56) */ + /* _mesa_function_pool[12422]: Normal3f (offset 56) */ "fff\0" "glNormal3f\0" "\0" - /* _mesa_function_pool[12469]: MultiTexCoord1svARB (offset 383) */ + /* _mesa_function_pool[12438]: MultiTexCoord1svARB (offset 383) */ "ip\0" "glMultiTexCoord1sv\0" "glMultiTexCoord1svARB\0" "\0" - /* _mesa_function_pool[12514]: Indexi (offset 48) */ + /* _mesa_function_pool[12483]: Indexi (offset 48) */ "i\0" "glIndexi\0" "\0" - /* _mesa_function_pool[12526]: EGLImageTargetTexture2DOES (will be remapped) */ + /* _mesa_function_pool[12495]: EGLImageTargetTexture2DOES (will be remapped) */ "ip\0" "glEGLImageTargetTexture2DOES\0" "\0" - /* _mesa_function_pool[12559]: EndQueryARB (will be remapped) */ + /* _mesa_function_pool[12528]: EndQueryARB (will be remapped) */ "i\0" "glEndQuery\0" "glEndQueryARB\0" "\0" - /* _mesa_function_pool[12587]: DeleteFencesNV (will be remapped) */ + /* _mesa_function_pool[12556]: DeleteFencesNV (will be remapped) */ "ip\0" "glDeleteFencesNV\0" "\0" - /* _mesa_function_pool[12608]: ColorPointerListIBM (dynamic) */ + /* _mesa_function_pool[12577]: ColorPointerListIBM (dynamic) */ "iiipi\0" "glColorPointerListIBM\0" "\0" - /* _mesa_function_pool[12637]: BindBufferRangeEXT (will be remapped) */ + /* _mesa_function_pool[12606]: BindBufferRangeEXT (will be remapped) */ "iiiii\0" "glBindBufferRangeEXT\0" "glBindBufferRange\0" "\0" - /* _mesa_function_pool[12683]: DepthMask (offset 211) */ + /* _mesa_function_pool[12652]: DepthMask (offset 211) */ "i\0" "glDepthMask\0" "\0" - /* _mesa_function_pool[12698]: IsShader (will be remapped) */ + /* _mesa_function_pool[12667]: IsShader (will be remapped) */ "i\0" "glIsShader\0" "\0" - /* _mesa_function_pool[12712]: Indexf (offset 46) */ + /* _mesa_function_pool[12681]: Indexf (offset 46) */ "f\0" "glIndexf\0" "\0" - /* _mesa_function_pool[12724]: GetImageTransformParameterivHP (dynamic) */ + /* _mesa_function_pool[12693]: GetImageTransformParameterivHP (dynamic) */ "iip\0" "glGetImageTransformParameterivHP\0" "\0" - /* _mesa_function_pool[12762]: Indexd (offset 44) */ + /* _mesa_function_pool[12731]: Indexd (offset 44) */ "d\0" "glIndexd\0" "\0" - /* _mesa_function_pool[12774]: GetMaterialiv (offset 270) */ + /* _mesa_function_pool[12743]: GetMaterialiv (offset 270) */ "iip\0" "glGetMaterialiv\0" "\0" - /* _mesa_function_pool[12795]: StencilOp (offset 244) */ + /* _mesa_function_pool[12764]: StencilOp (offset 244) */ "iii\0" "glStencilOp\0" "\0" - /* _mesa_function_pool[12812]: WindowPos4ivMESA (will be remapped) */ + /* _mesa_function_pool[12781]: WindowPos4ivMESA (will be remapped) */ "p\0" "glWindowPos4ivMESA\0" "\0" - /* _mesa_function_pool[12834]: FramebufferTextureLayer (dynamic) */ + /* _mesa_function_pool[12803]: FramebufferTextureLayer (dynamic) */ "iiiii\0" "glFramebufferTextureLayerARB\0" "\0" - /* _mesa_function_pool[12870]: MultiTexCoord3svARB (offset 399) */ + /* _mesa_function_pool[12839]: MultiTexCoord3svARB (offset 399) */ "ip\0" "glMultiTexCoord3sv\0" "glMultiTexCoord3svARB\0" "\0" - /* _mesa_function_pool[12915]: TexEnvfv (offset 185) */ + /* _mesa_function_pool[12884]: TexEnvfv (offset 185) */ "iip\0" "glTexEnvfv\0" "\0" - /* _mesa_function_pool[12931]: MultiTexCoord4iARB (offset 404) */ + /* _mesa_function_pool[12900]: MultiTexCoord4iARB (offset 404) */ "iiiii\0" "glMultiTexCoord4i\0" "glMultiTexCoord4iARB\0" "\0" - /* _mesa_function_pool[12977]: Indexs (offset 50) */ + /* _mesa_function_pool[12946]: Indexs (offset 50) */ "i\0" "glIndexs\0" "\0" - /* _mesa_function_pool[12989]: Binormal3ivEXT (dynamic) */ + /* _mesa_function_pool[12958]: Binormal3ivEXT (dynamic) */ "p\0" "glBinormal3ivEXT\0" "\0" - /* _mesa_function_pool[13009]: ResizeBuffersMESA (will be remapped) */ + /* _mesa_function_pool[12978]: ResizeBuffersMESA (will be remapped) */ "\0" "glResizeBuffersMESA\0" "\0" - /* _mesa_function_pool[13031]: BlendFuncSeparateiARB (will be remapped) */ + /* _mesa_function_pool[13000]: BlendFuncSeparateiARB (will be remapped) */ "iiiii\0" "glBlendFuncSeparateiARB\0" "glBlendFuncSeparateIndexedAMD\0" "\0" - /* _mesa_function_pool[13092]: GetUniformivARB (will be remapped) */ + /* _mesa_function_pool[13061]: GetUniformivARB (will be remapped) */ "iip\0" "glGetUniformiv\0" "glGetUniformivARB\0" "\0" - /* _mesa_function_pool[13130]: PixelTexGenParameteriSGIS (will be remapped) */ + /* _mesa_function_pool[13099]: PixelTexGenParameteriSGIS (will be remapped) */ "ii\0" "glPixelTexGenParameteriSGIS\0" "\0" - /* _mesa_function_pool[13162]: VertexPointervINTEL (dynamic) */ + /* _mesa_function_pool[13131]: VertexPointervINTEL (dynamic) */ "iip\0" "glVertexPointervINTEL\0" "\0" - /* _mesa_function_pool[13189]: Vertex2i (offset 130) */ + /* _mesa_function_pool[13158]: Vertex2i (offset 130) */ "ii\0" "glVertex2i\0" "\0" - /* _mesa_function_pool[13204]: LoadMatrixf (offset 291) */ + /* _mesa_function_pool[13173]: LoadMatrixf (offset 291) */ "p\0" "glLoadMatrixf\0" "\0" - /* _mesa_function_pool[13221]: VertexAttribI1uivEXT (will be remapped) */ + /* _mesa_function_pool[13190]: VertexAttribI1uivEXT (will be remapped) */ "ip\0" "glVertexAttribI1uivEXT\0" "glVertexAttribI1uiv\0" "\0" - /* _mesa_function_pool[13268]: Vertex2f (offset 128) */ + /* _mesa_function_pool[13237]: Vertex2f (offset 128) */ "ff\0" "glVertex2f\0" "\0" - /* _mesa_function_pool[13283]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[13252]: ReplacementCodeuiColor4fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glReplacementCodeuiColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[13336]: Color4bv (offset 26) */ + /* _mesa_function_pool[13305]: Color4bv (offset 26) */ "p\0" "glColor4bv\0" "\0" - /* _mesa_function_pool[13350]: VertexPointer (offset 321) */ + /* _mesa_function_pool[13319]: VertexPointer (offset 321) */ "iiip\0" "glVertexPointer\0" "\0" - /* _mesa_function_pool[13372]: SecondaryColor3uiEXT (will be remapped) */ + /* _mesa_function_pool[13341]: SecondaryColor3uiEXT (will be remapped) */ "iii\0" "glSecondaryColor3ui\0" "glSecondaryColor3uiEXT\0" "\0" - /* _mesa_function_pool[13420]: StartInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[13389]: StartInstrumentsSGIX (dynamic) */ "\0" "glStartInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[13445]: SecondaryColor3usvEXT (will be remapped) */ + /* _mesa_function_pool[13414]: SecondaryColor3usvEXT (will be remapped) */ "p\0" "glSecondaryColor3usv\0" "glSecondaryColor3usvEXT\0" "\0" - /* _mesa_function_pool[13493]: VertexAttrib2fvNV (will be remapped) */ + /* _mesa_function_pool[13462]: VertexAttrib2fvNV (will be remapped) */ "ip\0" "glVertexAttrib2fvNV\0" "\0" - /* _mesa_function_pool[13517]: ProgramLocalParameter4dvARB (will be remapped) */ + /* _mesa_function_pool[13486]: ProgramLocalParameter4dvARB (will be remapped) */ "iip\0" "glProgramLocalParameter4dvARB\0" "\0" - /* _mesa_function_pool[13552]: DeleteLists (offset 4) */ + /* _mesa_function_pool[13521]: DeleteLists (offset 4) */ "ii\0" "glDeleteLists\0" "\0" - /* _mesa_function_pool[13570]: LogicOp (offset 242) */ + /* _mesa_function_pool[13539]: LogicOp (offset 242) */ "i\0" "glLogicOp\0" "\0" - /* _mesa_function_pool[13583]: MatrixIndexuivARB (dynamic) */ + /* _mesa_function_pool[13552]: MatrixIndexuivARB (dynamic) */ "ip\0" "glMatrixIndexuivARB\0" "\0" - /* _mesa_function_pool[13607]: Vertex2s (offset 132) */ + /* _mesa_function_pool[13576]: Vertex2s (offset 132) */ "ii\0" "glVertex2s\0" "\0" - /* _mesa_function_pool[13622]: RenderbufferStorageMultisample (will be remapped) */ + /* _mesa_function_pool[13591]: RenderbufferStorageMultisample (will be remapped) */ "iiiii\0" "glRenderbufferStorageMultisample\0" "glRenderbufferStorageMultisampleEXT\0" "\0" - /* _mesa_function_pool[13698]: TexCoord4fv (offset 121) */ + /* _mesa_function_pool[13667]: TexCoord4fv (offset 121) */ "p\0" "glTexCoord4fv\0" "\0" - /* _mesa_function_pool[13715]: Tangent3sEXT (dynamic) */ + /* _mesa_function_pool[13684]: Tangent3sEXT (dynamic) */ "iii\0" "glTangent3sEXT\0" "\0" - /* _mesa_function_pool[13735]: GlobalAlphaFactorfSUN (dynamic) */ + /* _mesa_function_pool[13704]: GlobalAlphaFactorfSUN (dynamic) */ "f\0" "glGlobalAlphaFactorfSUN\0" "\0" - /* _mesa_function_pool[13762]: MultiTexCoord3iARB (offset 396) */ + /* _mesa_function_pool[13731]: MultiTexCoord3iARB (offset 396) */ "iiii\0" "glMultiTexCoord3i\0" "glMultiTexCoord3iARB\0" "\0" - /* _mesa_function_pool[13807]: IsProgram (will be remapped) */ + /* _mesa_function_pool[13776]: IsProgram (will be remapped) */ "i\0" "glIsProgram\0" "\0" - /* _mesa_function_pool[13822]: TexCoordPointerListIBM (dynamic) */ + /* _mesa_function_pool[13791]: TexCoordPointerListIBM (dynamic) */ "iiipi\0" "glTexCoordPointerListIBM\0" "\0" - /* _mesa_function_pool[13854]: VertexAttribI4svEXT (will be remapped) */ + /* _mesa_function_pool[13823]: VertexAttribI4svEXT (will be remapped) */ "ip\0" "glVertexAttribI4svEXT\0" "glVertexAttribI4sv\0" "\0" - /* _mesa_function_pool[13899]: GlobalAlphaFactorusSUN (dynamic) */ + /* _mesa_function_pool[13868]: GlobalAlphaFactorusSUN (dynamic) */ "i\0" "glGlobalAlphaFactorusSUN\0" "\0" - /* _mesa_function_pool[13927]: VertexAttrib2dvNV (will be remapped) */ + /* _mesa_function_pool[13896]: VertexAttrib2dvNV (will be remapped) */ "ip\0" "glVertexAttrib2dvNV\0" "\0" - /* _mesa_function_pool[13951]: FramebufferRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[13920]: FramebufferRenderbufferEXT (will be remapped) */ "iiii\0" "glFramebufferRenderbuffer\0" "glFramebufferRenderbufferEXT\0" "\0" - /* _mesa_function_pool[14012]: ClearBufferuiv (will be remapped) */ + /* _mesa_function_pool[13981]: ClearBufferuiv (will be remapped) */ "iip\0" "glClearBufferuiv\0" "\0" - /* _mesa_function_pool[14034]: VertexAttrib1dvNV (will be remapped) */ + /* _mesa_function_pool[14003]: VertexAttrib1dvNV (will be remapped) */ "ip\0" "glVertexAttrib1dvNV\0" "\0" - /* _mesa_function_pool[14058]: GenTextures (offset 328) */ + /* _mesa_function_pool[14027]: GenTextures (offset 328) */ "ip\0" "glGenTextures\0" "glGenTexturesEXT\0" "\0" - /* _mesa_function_pool[14093]: FramebufferTextureARB (will be remapped) */ + /* _mesa_function_pool[14062]: FramebufferTextureARB (will be remapped) */ "iiii\0" "glFramebufferTextureARB\0" "\0" - /* _mesa_function_pool[14123]: SetFenceNV (will be remapped) */ + /* _mesa_function_pool[14092]: SetFenceNV (will be remapped) */ "ii\0" "glSetFenceNV\0" "\0" - /* _mesa_function_pool[14140]: FramebufferTexture1DEXT (will be remapped) */ + /* _mesa_function_pool[14109]: FramebufferTexture1DEXT (will be remapped) */ "iiiii\0" "glFramebufferTexture1D\0" "glFramebufferTexture1DEXT\0" "\0" - /* _mesa_function_pool[14196]: GetCombinerOutputParameterivNV (will be remapped) */ + /* _mesa_function_pool[14165]: GetCombinerOutputParameterivNV (will be remapped) */ "iiip\0" "glGetCombinerOutputParameterivNV\0" "\0" - /* _mesa_function_pool[14235]: PixelTexGenParameterivSGIS (will be remapped) */ + /* _mesa_function_pool[14204]: MultiModeDrawArraysIBM (will be remapped) */ + "pppii\0" + "glMultiModeDrawArraysIBM\0" + "\0" + /* _mesa_function_pool[14236]: PixelTexGenParameterivSGIS (will be remapped) */ "ip\0" "glPixelTexGenParameterivSGIS\0" "\0" - /* _mesa_function_pool[14268]: TextureNormalEXT (dynamic) */ + /* _mesa_function_pool[14269]: TextureNormalEXT (dynamic) */ "i\0" "glTextureNormalEXT\0" "\0" - /* _mesa_function_pool[14290]: IndexPointerListIBM (dynamic) */ + /* _mesa_function_pool[14291]: IndexPointerListIBM (dynamic) */ "iipi\0" "glIndexPointerListIBM\0" "\0" - /* _mesa_function_pool[14318]: WeightfvARB (dynamic) */ + /* _mesa_function_pool[14319]: WeightfvARB (dynamic) */ "ip\0" "glWeightfvARB\0" "\0" - /* _mesa_function_pool[14336]: RasterPos2sv (offset 69) */ + /* _mesa_function_pool[14337]: GetCombinerOutputParameterfvNV (will be remapped) */ + "iiip\0" + "glGetCombinerOutputParameterfvNV\0" + "\0" + /* _mesa_function_pool[14376]: RasterPos2sv (offset 69) */ "p\0" "glRasterPos2sv\0" "\0" - /* _mesa_function_pool[14354]: Color4ubv (offset 36) */ + /* _mesa_function_pool[14394]: Color4ubv (offset 36) */ "p\0" "glColor4ubv\0" "\0" - /* _mesa_function_pool[14369]: DrawBuffer (offset 202) */ + /* _mesa_function_pool[14409]: DrawBuffer (offset 202) */ "i\0" "glDrawBuffer\0" "\0" - /* _mesa_function_pool[14385]: TexCoord2fv (offset 105) */ + /* _mesa_function_pool[14425]: TexCoord2fv (offset 105) */ "p\0" "glTexCoord2fv\0" "\0" - /* _mesa_function_pool[14402]: WindowPos4fMESA (will be remapped) */ + /* _mesa_function_pool[14442]: WindowPos4fMESA (will be remapped) */ "ffff\0" "glWindowPos4fMESA\0" "\0" - /* _mesa_function_pool[14426]: TexCoord1sv (offset 101) */ + /* _mesa_function_pool[14466]: TexCoord1sv (offset 101) */ "p\0" "glTexCoord1sv\0" "\0" - /* _mesa_function_pool[14443]: WindowPos3dvMESA (will be remapped) */ + /* _mesa_function_pool[14483]: WindowPos3dvMESA (will be remapped) */ "p\0" "glWindowPos3dv\0" "glWindowPos3dvARB\0" "glWindowPos3dvMESA\0" "\0" - /* _mesa_function_pool[14498]: DepthFunc (offset 245) */ + /* _mesa_function_pool[14538]: DepthFunc (offset 245) */ "i\0" "glDepthFunc\0" "\0" - /* _mesa_function_pool[14513]: PixelMapusv (offset 253) */ + /* _mesa_function_pool[14553]: PixelMapusv (offset 253) */ "iip\0" "glPixelMapusv\0" "\0" - /* _mesa_function_pool[14532]: GetQueryObjecti64vEXT (will be remapped) */ + /* _mesa_function_pool[14572]: GetQueryObjecti64vEXT (will be remapped) */ "iip\0" "glGetQueryObjecti64vEXT\0" "\0" - /* _mesa_function_pool[14561]: MultiTexCoord1dARB (offset 376) */ + /* _mesa_function_pool[14601]: MultiTexCoord1dARB (offset 376) */ "id\0" "glMultiTexCoord1d\0" "glMultiTexCoord1dARB\0" "\0" - /* _mesa_function_pool[14604]: PointParameterivNV (will be remapped) */ + /* _mesa_function_pool[14644]: PointParameterivNV (will be remapped) */ "ip\0" "glPointParameteriv\0" "glPointParameterivNV\0" "\0" - /* _mesa_function_pool[14648]: IsSampler (will be remapped) */ + /* _mesa_function_pool[14688]: IsSampler (will be remapped) */ "i\0" "glIsSampler\0" "\0" - /* _mesa_function_pool[14663]: BlendFunc (offset 241) */ + /* _mesa_function_pool[14703]: BlendFunc (offset 241) */ "ii\0" "glBlendFunc\0" "\0" - /* _mesa_function_pool[14679]: EndTransformFeedbackEXT (will be remapped) */ + /* _mesa_function_pool[14719]: EndTransformFeedbackEXT (will be remapped) */ "\0" "glEndTransformFeedbackEXT\0" "glEndTransformFeedback\0" "\0" - /* _mesa_function_pool[14730]: Uniform2fvARB (will be remapped) */ + /* _mesa_function_pool[14770]: Uniform2fvARB (will be remapped) */ "iip\0" "glUniform2fv\0" "glUniform2fvARB\0" "\0" - /* _mesa_function_pool[14764]: BufferParameteriAPPLE (will be remapped) */ + /* _mesa_function_pool[14804]: BufferParameteriAPPLE (will be remapped) */ "iii\0" "glBufferParameteriAPPLE\0" "\0" - /* _mesa_function_pool[14793]: MultiTexCoord3dvARB (offset 393) */ + /* _mesa_function_pool[14833]: MultiTexCoord3dvARB (offset 393) */ "ip\0" "glMultiTexCoord3dv\0" "glMultiTexCoord3dvARB\0" "\0" - /* _mesa_function_pool[14838]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[14878]: ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[14894]: DeleteObjectARB (will be remapped) */ + /* _mesa_function_pool[14934]: DeleteObjectARB (will be remapped) */ "i\0" "glDeleteObjectARB\0" "\0" - /* _mesa_function_pool[14915]: GetShaderPrecisionFormat (will be remapped) */ + /* _mesa_function_pool[14955]: GetShaderPrecisionFormat (will be remapped) */ "iipp\0" "glGetShaderPrecisionFormat\0" "\0" - /* _mesa_function_pool[14948]: MatrixIndexPointerARB (dynamic) */ + /* _mesa_function_pool[14988]: MatrixIndexPointerARB (dynamic) */ "iiip\0" "glMatrixIndexPointerARB\0" "\0" - /* _mesa_function_pool[14978]: ProgramNamedParameter4dvNV (will be remapped) */ + /* _mesa_function_pool[15018]: ProgramNamedParameter4dvNV (will be remapped) */ "iipp\0" "glProgramNamedParameter4dvNV\0" "\0" - /* _mesa_function_pool[15013]: Tangent3fvEXT (dynamic) */ + /* _mesa_function_pool[15053]: Tangent3fvEXT (dynamic) */ "p\0" "glTangent3fvEXT\0" "\0" - /* _mesa_function_pool[15032]: Flush (offset 217) */ + /* _mesa_function_pool[15072]: Flush (offset 217) */ "\0" "glFlush\0" "\0" - /* _mesa_function_pool[15042]: Color4uiv (offset 38) */ + /* _mesa_function_pool[15082]: Color4uiv (offset 38) */ "p\0" "glColor4uiv\0" "\0" - /* _mesa_function_pool[15057]: VertexAttribI4iEXT (will be remapped) */ + /* _mesa_function_pool[15097]: VertexAttribI4iEXT (will be remapped) */ "iiiii\0" "glVertexAttribI4iEXT\0" "glVertexAttribI4i\0" "\0" - /* _mesa_function_pool[15103]: GenVertexArrays (will be remapped) */ + /* _mesa_function_pool[15143]: GenVertexArrays (will be remapped) */ "ip\0" "glGenVertexArrays\0" "\0" - /* _mesa_function_pool[15125]: Uniform3uivEXT (will be remapped) */ + /* _mesa_function_pool[15165]: Uniform3uivEXT (will be remapped) */ "iip\0" "glUniform3uivEXT\0" "glUniform3uiv\0" "\0" - /* _mesa_function_pool[15161]: RasterPos3sv (offset 77) */ + /* _mesa_function_pool[15201]: RasterPos3sv (offset 77) */ "p\0" "glRasterPos3sv\0" "\0" - /* _mesa_function_pool[15179]: BindFramebufferEXT (will be remapped) */ + /* _mesa_function_pool[15219]: BindFramebufferEXT (will be remapped) */ "ii\0" "glBindFramebuffer\0" "glBindFramebufferEXT\0" "\0" - /* _mesa_function_pool[15222]: ReferencePlaneSGIX (dynamic) */ + /* _mesa_function_pool[15262]: ReferencePlaneSGIX (dynamic) */ "p\0" "glReferencePlaneSGIX\0" "\0" - /* _mesa_function_pool[15246]: PushAttrib (offset 219) */ + /* _mesa_function_pool[15286]: PushAttrib (offset 219) */ "i\0" "glPushAttrib\0" "\0" - /* _mesa_function_pool[15262]: RasterPos2i (offset 66) */ + /* _mesa_function_pool[15302]: RasterPos2i (offset 66) */ "ii\0" "glRasterPos2i\0" "\0" - /* _mesa_function_pool[15280]: ValidateProgramARB (will be remapped) */ + /* _mesa_function_pool[15320]: ValidateProgramARB (will be remapped) */ "i\0" "glValidateProgram\0" "glValidateProgramARB\0" "\0" - /* _mesa_function_pool[15322]: TexParameteriv (offset 181) */ + /* _mesa_function_pool[15362]: TexParameteriv (offset 181) */ "iip\0" "glTexParameteriv\0" "\0" - /* _mesa_function_pool[15344]: UnlockArraysEXT (will be remapped) */ + /* _mesa_function_pool[15384]: UnlockArraysEXT (will be remapped) */ "\0" "glUnlockArraysEXT\0" "\0" - /* _mesa_function_pool[15364]: TexCoord2fColor3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[15404]: TexCoord2fColor3fVertex3fSUN (dynamic) */ "ffffffff\0" "glTexCoord2fColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[15405]: WindowPos3fvMESA (will be remapped) */ + /* _mesa_function_pool[15445]: WindowPos3fvMESA (will be remapped) */ "p\0" "glWindowPos3fv\0" "glWindowPos3fvARB\0" "glWindowPos3fvMESA\0" "\0" - /* _mesa_function_pool[15460]: RasterPos2f (offset 64) */ + /* _mesa_function_pool[15500]: RasterPos2f (offset 64) */ "ff\0" "glRasterPos2f\0" "\0" - /* _mesa_function_pool[15478]: VertexAttrib1svNV (will be remapped) */ + /* _mesa_function_pool[15518]: VertexAttrib1svNV (will be remapped) */ "ip\0" "glVertexAttrib1svNV\0" "\0" - /* _mesa_function_pool[15502]: RasterPos2d (offset 62) */ + /* _mesa_function_pool[15542]: RasterPos2d (offset 62) */ "dd\0" "glRasterPos2d\0" "\0" - /* _mesa_function_pool[15520]: RasterPos3fv (offset 73) */ + /* _mesa_function_pool[15560]: RasterPos3fv (offset 73) */ "p\0" "glRasterPos3fv\0" "\0" - /* _mesa_function_pool[15538]: CopyTexSubImage3D (offset 373) */ + /* _mesa_function_pool[15578]: CopyTexSubImage3D (offset 373) */ "iiiiiiiii\0" "glCopyTexSubImage3D\0" "glCopyTexSubImage3DEXT\0" "\0" - /* _mesa_function_pool[15592]: VertexAttrib2dARB (will be remapped) */ + /* _mesa_function_pool[15632]: VertexAttrib2dARB (will be remapped) */ "idd\0" "glVertexAttrib2d\0" "glVertexAttrib2dARB\0" "\0" - /* _mesa_function_pool[15634]: Color4ub (offset 35) */ + /* _mesa_function_pool[15674]: Color4ub (offset 35) */ "iiii\0" "glColor4ub\0" "\0" - /* _mesa_function_pool[15651]: GetInteger64v (will be remapped) */ + /* _mesa_function_pool[15691]: GetInteger64v (will be remapped) */ "ip\0" "glGetInteger64v\0" "\0" - /* _mesa_function_pool[15671]: TextureColorMaskSGIS (dynamic) */ + /* _mesa_function_pool[15711]: TextureColorMaskSGIS (dynamic) */ "iiii\0" "glTextureColorMaskSGIS\0" "\0" - /* _mesa_function_pool[15700]: RasterPos2s (offset 68) */ + /* _mesa_function_pool[15740]: RasterPos2s (offset 68) */ "ii\0" "glRasterPos2s\0" "\0" - /* _mesa_function_pool[15718]: GetColorTable (offset 343) */ + /* _mesa_function_pool[15758]: GetColorTable (offset 343) */ "iiip\0" "glGetColorTable\0" "glGetColorTableSGI\0" "glGetColorTableEXT\0" "\0" - /* _mesa_function_pool[15778]: SelectBuffer (offset 195) */ + /* _mesa_function_pool[15818]: SelectBuffer (offset 195) */ "ip\0" "glSelectBuffer\0" "\0" - /* _mesa_function_pool[15797]: Indexiv (offset 49) */ + /* _mesa_function_pool[15837]: Indexiv (offset 49) */ "p\0" "glIndexiv\0" "\0" - /* _mesa_function_pool[15810]: TexCoord3i (offset 114) */ + /* _mesa_function_pool[15850]: TexCoord3i (offset 114) */ "iii\0" "glTexCoord3i\0" "\0" - /* _mesa_function_pool[15828]: CopyColorTable (offset 342) */ + /* _mesa_function_pool[15868]: CopyColorTable (offset 342) */ "iiiii\0" "glCopyColorTable\0" "glCopyColorTableSGI\0" "\0" - /* _mesa_function_pool[15872]: GetHistogramParameterfv (offset 362) */ + /* _mesa_function_pool[15912]: GetHistogramParameterfv (offset 362) */ "iip\0" "glGetHistogramParameterfv\0" "glGetHistogramParameterfvEXT\0" "\0" - /* _mesa_function_pool[15932]: Frustum (offset 289) */ + /* _mesa_function_pool[15972]: Frustum (offset 289) */ "dddddd\0" "glFrustum\0" "\0" - /* _mesa_function_pool[15950]: GetString (offset 275) */ + /* _mesa_function_pool[15990]: GetString (offset 275) */ "i\0" "glGetString\0" "\0" - /* _mesa_function_pool[15965]: ColorPointervINTEL (dynamic) */ + /* _mesa_function_pool[16005]: ColorPointervINTEL (dynamic) */ "iip\0" "glColorPointervINTEL\0" "\0" - /* _mesa_function_pool[15991]: TexEnvf (offset 184) */ + /* _mesa_function_pool[16031]: TexEnvf (offset 184) */ "iif\0" "glTexEnvf\0" "\0" - /* _mesa_function_pool[16006]: TexCoord3d (offset 110) */ + /* _mesa_function_pool[16046]: TexCoord3d (offset 110) */ "ddd\0" "glTexCoord3d\0" "\0" - /* _mesa_function_pool[16024]: AlphaFragmentOp1ATI (will be remapped) */ + /* _mesa_function_pool[16064]: AlphaFragmentOp1ATI (will be remapped) */ "iiiiii\0" "glAlphaFragmentOp1ATI\0" "\0" - /* _mesa_function_pool[16054]: TexCoord3f (offset 112) */ + /* _mesa_function_pool[16094]: TexCoord3f (offset 112) */ "fff\0" "glTexCoord3f\0" "\0" - /* _mesa_function_pool[16072]: MultiTexCoord3ivARB (offset 397) */ + /* _mesa_function_pool[16112]: MultiTexCoord3ivARB (offset 397) */ "ip\0" "glMultiTexCoord3iv\0" "glMultiTexCoord3ivARB\0" "\0" - /* _mesa_function_pool[16117]: MultiTexCoord2sARB (offset 390) */ + /* _mesa_function_pool[16157]: MultiTexCoord2sARB (offset 390) */ "iii\0" "glMultiTexCoord2s\0" "glMultiTexCoord2sARB\0" "\0" - /* _mesa_function_pool[16161]: VertexAttrib1dvARB (will be remapped) */ + /* _mesa_function_pool[16201]: VertexAttrib1dvARB (will be remapped) */ "ip\0" "glVertexAttrib1dv\0" "glVertexAttrib1dvARB\0" "\0" - /* _mesa_function_pool[16204]: GetnHistogramARB (will be remapped) */ + /* _mesa_function_pool[16244]: GetnHistogramARB (will be remapped) */ "iiiiip\0" "glGetnHistogramARB\0" "\0" - /* _mesa_function_pool[16231]: DeleteTextures (offset 327) */ + /* _mesa_function_pool[16271]: DeleteTextures (offset 327) */ "ip\0" "glDeleteTextures\0" "glDeleteTexturesEXT\0" "\0" - /* _mesa_function_pool[16272]: TexCoordPointerEXT (will be remapped) */ + /* _mesa_function_pool[16312]: TexCoordPointerEXT (will be remapped) */ "iiiip\0" "glTexCoordPointerEXT\0" "\0" - /* _mesa_function_pool[16300]: TexSubImage4DSGIS (dynamic) */ + /* _mesa_function_pool[16340]: TexSubImage4DSGIS (dynamic) */ "iiiiiiiiiiiip\0" "glTexSubImage4DSGIS\0" "\0" - /* _mesa_function_pool[16335]: TexCoord3s (offset 116) */ + /* _mesa_function_pool[16375]: TexCoord3s (offset 116) */ "iii\0" "glTexCoord3s\0" "\0" - /* _mesa_function_pool[16353]: GetTexLevelParameteriv (offset 285) */ + /* _mesa_function_pool[16393]: GetTexLevelParameteriv (offset 285) */ "iiip\0" "glGetTexLevelParameteriv\0" "\0" - /* _mesa_function_pool[16384]: CombinerStageParameterfvNV (dynamic) */ + /* _mesa_function_pool[16424]: CombinerStageParameterfvNV (dynamic) */ "iip\0" "glCombinerStageParameterfvNV\0" "\0" - /* _mesa_function_pool[16418]: StopInstrumentsSGIX (dynamic) */ + /* _mesa_function_pool[16458]: StopInstrumentsSGIX (dynamic) */ "i\0" "glStopInstrumentsSGIX\0" "\0" - /* _mesa_function_pool[16443]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */ + /* _mesa_function_pool[16483]: TexCoord4fColor4fNormal3fVertex4fSUN (dynamic) */ "fffffffffffffff\0" "glTexCoord4fColor4fNormal3fVertex4fSUN\0" "\0" - /* _mesa_function_pool[16499]: ClearAccum (offset 204) */ + /* _mesa_function_pool[16539]: ClearAccum (offset 204) */ "ffff\0" "glClearAccum\0" "\0" - /* _mesa_function_pool[16518]: DeformSGIX (dynamic) */ + /* _mesa_function_pool[16558]: DeformSGIX (dynamic) */ "i\0" "glDeformSGIX\0" "\0" - /* _mesa_function_pool[16534]: GetVertexAttribfvARB (will be remapped) */ + /* _mesa_function_pool[16574]: GetVertexAttribfvARB (will be remapped) */ "iip\0" "glGetVertexAttribfv\0" "glGetVertexAttribfvARB\0" "\0" - /* _mesa_function_pool[16582]: SecondaryColor3ivEXT (will be remapped) */ + /* _mesa_function_pool[16622]: SecondaryColor3ivEXT (will be remapped) */ "p\0" "glSecondaryColor3iv\0" "glSecondaryColor3ivEXT\0" "\0" - /* _mesa_function_pool[16628]: TexCoord4iv (offset 123) */ + /* _mesa_function_pool[16668]: TexCoord4iv (offset 123) */ "p\0" "glTexCoord4iv\0" "\0" - /* _mesa_function_pool[16645]: VertexAttribI4uiEXT (will be remapped) */ + /* _mesa_function_pool[16685]: VertexAttribI4uiEXT (will be remapped) */ "iiiii\0" "glVertexAttribI4uiEXT\0" "glVertexAttribI4ui\0" "\0" - /* _mesa_function_pool[16693]: GetFragmentMaterialfvSGIX (dynamic) */ + /* _mesa_function_pool[16733]: GetFragmentMaterialfvSGIX (dynamic) */ "iip\0" "glGetFragmentMaterialfvSGIX\0" "\0" - /* _mesa_function_pool[16726]: UniformMatrix4x2fv (will be remapped) */ + /* _mesa_function_pool[16766]: UniformMatrix4x2fv (will be remapped) */ "iiip\0" "glUniformMatrix4x2fv\0" "\0" - /* _mesa_function_pool[16753]: GetDetailTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[16793]: GetDetailTexFuncSGIS (dynamic) */ "ip\0" "glGetDetailTexFuncSGIS\0" "\0" - /* _mesa_function_pool[16780]: GetCombinerStageParameterfvNV (dynamic) */ + /* _mesa_function_pool[16820]: GetCombinerStageParameterfvNV (dynamic) */ "iip\0" "glGetCombinerStageParameterfvNV\0" "\0" - /* _mesa_function_pool[16817]: SamplerParameterIiv (will be remapped) */ + /* _mesa_function_pool[16857]: SamplerParameterIiv (will be remapped) */ "iip\0" "glSamplerParameterIiv\0" "\0" - /* _mesa_function_pool[16844]: PolygonOffset (offset 319) */ + /* _mesa_function_pool[16884]: PolygonOffset (offset 319) */ "ff\0" "glPolygonOffset\0" "\0" - /* _mesa_function_pool[16864]: BindVertexArray (will be remapped) */ + /* _mesa_function_pool[16904]: BindVertexArray (will be remapped) */ "i\0" "glBindVertexArray\0" "\0" - /* _mesa_function_pool[16885]: Color4ubVertex2fvSUN (dynamic) */ + /* _mesa_function_pool[16925]: Color4ubVertex2fvSUN (dynamic) */ "pp\0" "glColor4ubVertex2fvSUN\0" "\0" - /* _mesa_function_pool[16912]: Rectd (offset 86) */ + /* _mesa_function_pool[16952]: Rectd (offset 86) */ "dddd\0" "glRectd\0" "\0" - /* _mesa_function_pool[16926]: TexFilterFuncSGIS (dynamic) */ + /* _mesa_function_pool[16966]: TexFilterFuncSGIS (dynamic) */ "iiip\0" "glTexFilterFuncSGIS\0" "\0" - /* _mesa_function_pool[16952]: TextureBarrierNV (will be remapped) */ + /* _mesa_function_pool[16992]: TextureBarrierNV (will be remapped) */ "\0" "glTextureBarrierNV\0" "\0" - /* _mesa_function_pool[16973]: SamplerParameterfv (will be remapped) */ + /* _mesa_function_pool[17013]: SamplerParameterfv (will be remapped) */ "iip\0" "glSamplerParameterfv\0" "\0" - /* _mesa_function_pool[16999]: ColorMaskIndexedEXT (will be remapped) */ - "iiiii\0" - "glColorMaskIndexedEXT\0" - "glColorMaski\0" + /* _mesa_function_pool[17039]: VertexAttribI4ubvEXT (will be remapped) */ + "ip\0" + "glVertexAttribI4ubvEXT\0" + "glVertexAttribI4ubv\0" "\0" - /* _mesa_function_pool[17041]: GetAttribLocationARB (will be remapped) */ + /* _mesa_function_pool[17086]: GetAttribLocationARB (will be remapped) */ "ip\0" "glGetAttribLocation\0" "glGetAttribLocationARB\0" "\0" - /* _mesa_function_pool[17088]: RasterPos3i (offset 74) */ + /* _mesa_function_pool[17133]: RasterPos3i (offset 74) */ "iii\0" "glRasterPos3i\0" "\0" - /* _mesa_function_pool[17107]: VertexAttrib4ubvARB (will be remapped) */ + /* _mesa_function_pool[17152]: BlendEquationSeparateiARB (will be remapped) */ + "iii\0" + "glBlendEquationSeparateiARB\0" + "glBlendEquationSeparateIndexedAMD\0" + "\0" + /* _mesa_function_pool[17219]: VertexAttrib4ubvARB (will be remapped) */ "ip\0" "glVertexAttrib4ubv\0" "glVertexAttrib4ubvARB\0" "\0" - /* _mesa_function_pool[17152]: DetailTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[17264]: DetailTexFuncSGIS (dynamic) */ "iip\0" "glDetailTexFuncSGIS\0" "\0" - /* _mesa_function_pool[17177]: Normal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[17289]: Normal3fVertex3fSUN (dynamic) */ "ffffff\0" "glNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[17207]: CopyTexImage2D (offset 324) */ + /* _mesa_function_pool[17319]: CopyTexImage2D (offset 324) */ "iiiiiiii\0" "glCopyTexImage2D\0" "glCopyTexImage2DEXT\0" "\0" - /* _mesa_function_pool[17254]: GetBufferPointervARB (will be remapped) */ + /* _mesa_function_pool[17366]: GetBufferPointervARB (will be remapped) */ "iip\0" "glGetBufferPointerv\0" "glGetBufferPointervARB\0" "\0" - /* _mesa_function_pool[17302]: ProgramEnvParameter4fARB (will be remapped) */ + /* _mesa_function_pool[17414]: ProgramEnvParameter4fARB (will be remapped) */ "iiffff\0" "glProgramEnvParameter4fARB\0" "glProgramParameter4fNV\0" "\0" - /* _mesa_function_pool[17360]: Uniform3ivARB (will be remapped) */ + /* _mesa_function_pool[17472]: Uniform3ivARB (will be remapped) */ "iip\0" "glUniform3iv\0" "glUniform3ivARB\0" "\0" - /* _mesa_function_pool[17394]: Lightfv (offset 160) */ + /* _mesa_function_pool[17506]: Lightfv (offset 160) */ "iip\0" "glLightfv\0" "\0" - /* _mesa_function_pool[17409]: PrimitiveRestartIndexNV (will be remapped) */ + /* _mesa_function_pool[17521]: PrimitiveRestartIndexNV (will be remapped) */ "i\0" "glPrimitiveRestartIndexNV\0" "glPrimitiveRestartIndex\0" "\0" - /* _mesa_function_pool[17462]: ClearDepth (offset 208) */ + /* _mesa_function_pool[17574]: ClearDepth (offset 208) */ "d\0" "glClearDepth\0" "\0" - /* _mesa_function_pool[17478]: GetFenceivNV (will be remapped) */ + /* _mesa_function_pool[17590]: GetFenceivNV (will be remapped) */ "iip\0" "glGetFenceivNV\0" "\0" - /* _mesa_function_pool[17498]: WindowPos4dvMESA (will be remapped) */ + /* _mesa_function_pool[17610]: WindowPos4dvMESA (will be remapped) */ "p\0" "glWindowPos4dvMESA\0" "\0" - /* _mesa_function_pool[17520]: ColorSubTable (offset 346) */ + /* _mesa_function_pool[17632]: ColorSubTable (offset 346) */ "iiiiip\0" "glColorSubTable\0" "glColorSubTableEXT\0" "\0" - /* _mesa_function_pool[17563]: Color4fv (offset 30) */ + /* _mesa_function_pool[17675]: Color4fv (offset 30) */ "p\0" "glColor4fv\0" "\0" - /* _mesa_function_pool[17577]: MultiTexCoord4ivARB (offset 405) */ + /* _mesa_function_pool[17689]: MultiTexCoord4ivARB (offset 405) */ "ip\0" "glMultiTexCoord4iv\0" "glMultiTexCoord4ivARB\0" "\0" - /* _mesa_function_pool[17622]: GetnMinmaxARB (will be remapped) */ + /* _mesa_function_pool[17734]: GetnMinmaxARB (will be remapped) */ "iiiiip\0" "glGetnMinmaxARB\0" "\0" - /* _mesa_function_pool[17646]: ProgramLocalParameters4fvEXT (will be remapped) */ + /* _mesa_function_pool[17758]: ProgramLocalParameters4fvEXT (will be remapped) */ "iiip\0" "glProgramLocalParameters4fvEXT\0" "\0" - /* _mesa_function_pool[17683]: ColorPointer (offset 308) */ + /* _mesa_function_pool[17795]: ColorPointer (offset 308) */ "iiip\0" "glColorPointer\0" "\0" - /* _mesa_function_pool[17704]: Rects (offset 92) */ + /* _mesa_function_pool[17816]: Rects (offset 92) */ "iiii\0" "glRects\0" "\0" - /* _mesa_function_pool[17718]: GetMapAttribParameterfvNV (dynamic) */ + /* _mesa_function_pool[17830]: GetMapAttribParameterfvNV (dynamic) */ "iiip\0" "glGetMapAttribParameterfvNV\0" "\0" - /* _mesa_function_pool[17752]: CreateShaderProgramEXT (will be remapped) */ + /* _mesa_function_pool[17864]: CreateShaderProgramEXT (will be remapped) */ "ip\0" "glCreateShaderProgramEXT\0" "\0" - /* _mesa_function_pool[17781]: ActiveProgramEXT (will be remapped) */ + /* _mesa_function_pool[17893]: ActiveProgramEXT (will be remapped) */ "i\0" "glActiveProgramEXT\0" "\0" - /* _mesa_function_pool[17803]: Lightiv (offset 162) */ + /* _mesa_function_pool[17915]: Lightiv (offset 162) */ "iip\0" "glLightiv\0" "\0" - /* _mesa_function_pool[17818]: VertexAttrib4sARB (will be remapped) */ + /* _mesa_function_pool[17930]: VertexAttrib4sARB (will be remapped) */ "iiiii\0" "glVertexAttrib4s\0" "glVertexAttrib4sARB\0" "\0" - /* _mesa_function_pool[17862]: GetQueryObjectuivARB (will be remapped) */ + /* _mesa_function_pool[17974]: GetQueryObjectuivARB (will be remapped) */ "iip\0" "glGetQueryObjectuiv\0" "glGetQueryObjectuivARB\0" "\0" - /* _mesa_function_pool[17910]: GetTexParameteriv (offset 283) */ + /* _mesa_function_pool[18022]: GetTexParameteriv (offset 283) */ "iip\0" "glGetTexParameteriv\0" "\0" - /* _mesa_function_pool[17935]: MapParameterivNV (dynamic) */ + /* _mesa_function_pool[18047]: MapParameterivNV (dynamic) */ "iip\0" "glMapParameterivNV\0" "\0" - /* _mesa_function_pool[17959]: GenRenderbuffersEXT (will be remapped) */ + /* _mesa_function_pool[18071]: GenRenderbuffersEXT (will be remapped) */ "ip\0" "glGenRenderbuffers\0" "glGenRenderbuffersEXT\0" "\0" - /* _mesa_function_pool[18004]: ClearBufferfv (will be remapped) */ + /* _mesa_function_pool[18116]: ClearBufferfv (will be remapped) */ "iip\0" "glClearBufferfv\0" "\0" - /* _mesa_function_pool[18025]: VertexAttrib2dvARB (will be remapped) */ + /* _mesa_function_pool[18137]: VertexAttrib2dvARB (will be remapped) */ "ip\0" "glVertexAttrib2dv\0" "glVertexAttrib2dvARB\0" "\0" - /* _mesa_function_pool[18068]: EdgeFlagPointerEXT (will be remapped) */ + /* _mesa_function_pool[18180]: EdgeFlagPointerEXT (will be remapped) */ "iip\0" "glEdgeFlagPointerEXT\0" "\0" - /* _mesa_function_pool[18094]: VertexAttribs2svNV (will be remapped) */ + /* _mesa_function_pool[18206]: VertexAttribs2svNV (will be remapped) */ "iip\0" "glVertexAttribs2svNV\0" "\0" - /* _mesa_function_pool[18120]: WeightbvARB (dynamic) */ + /* _mesa_function_pool[18232]: WeightbvARB (dynamic) */ "ip\0" "glWeightbvARB\0" "\0" - /* _mesa_function_pool[18138]: VertexAttrib2fvARB (will be remapped) */ + /* _mesa_function_pool[18250]: VertexAttrib2fvARB (will be remapped) */ "ip\0" "glVertexAttrib2fv\0" "glVertexAttrib2fvARB\0" "\0" - /* _mesa_function_pool[18181]: GetBufferParameterivARB (will be remapped) */ + /* _mesa_function_pool[18293]: GetBufferParameterivARB (will be remapped) */ "iip\0" "glGetBufferParameteriv\0" "glGetBufferParameterivARB\0" "\0" - /* _mesa_function_pool[18235]: Rectdv (offset 87) */ + /* _mesa_function_pool[18347]: Rectdv (offset 87) */ "pp\0" "glRectdv\0" "\0" - /* _mesa_function_pool[18248]: ListParameteriSGIX (dynamic) */ + /* _mesa_function_pool[18360]: ListParameteriSGIX (dynamic) */ "iii\0" "glListParameteriSGIX\0" "\0" - /* _mesa_function_pool[18274]: BlendEquationiARB (will be remapped) */ + /* _mesa_function_pool[18386]: BlendEquationiARB (will be remapped) */ "ii\0" "glBlendEquationiARB\0" "glBlendEquationIndexedAMD\0" "\0" - /* _mesa_function_pool[18324]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[18436]: ReplacementCodeuiColor4fNormal3fVertex3fSUN (dynamic) */ "iffffffffff\0" "glReplacementCodeuiColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[18383]: InstrumentsBufferSGIX (dynamic) */ + /* _mesa_function_pool[18495]: InstrumentsBufferSGIX (dynamic) */ "ip\0" "glInstrumentsBufferSGIX\0" "\0" - /* _mesa_function_pool[18411]: VertexAttrib4NivARB (will be remapped) */ + /* _mesa_function_pool[18523]: VertexAttrib4NivARB (will be remapped) */ "ip\0" "glVertexAttrib4Niv\0" "glVertexAttrib4NivARB\0" "\0" - /* _mesa_function_pool[18456]: DrawArraysInstancedARB (will be remapped) */ + /* _mesa_function_pool[18568]: DrawArraysInstancedARB (will be remapped) */ "iiii\0" "glDrawArraysInstancedARB\0" "glDrawArraysInstancedEXT\0" "glDrawArraysInstanced\0" "\0" - /* _mesa_function_pool[18534]: GetAttachedShaders (will be remapped) */ + /* _mesa_function_pool[18646]: GetAttachedShaders (will be remapped) */ "iipp\0" "glGetAttachedShaders\0" "\0" - /* _mesa_function_pool[18561]: GenVertexArraysAPPLE (will be remapped) */ + /* _mesa_function_pool[18673]: GenVertexArraysAPPLE (will be remapped) */ "ip\0" "glGenVertexArraysAPPLE\0" "\0" - /* _mesa_function_pool[18588]: ClearBufferfi (will be remapped) */ + /* _mesa_function_pool[18700]: ClearBufferfi (will be remapped) */ "iifi\0" "glClearBufferfi\0" "\0" - /* _mesa_function_pool[18610]: Materialiv (offset 172) */ + /* _mesa_function_pool[18722]: Materialiv (offset 172) */ "iip\0" "glMaterialiv\0" "\0" - /* _mesa_function_pool[18628]: PushClientAttrib (offset 335) */ + /* _mesa_function_pool[18740]: PushClientAttrib (offset 335) */ "i\0" "glPushClientAttrib\0" "\0" - /* _mesa_function_pool[18650]: SamplerParameteriv (will be remapped) */ + /* _mesa_function_pool[18762]: SamplerParameteriv (will be remapped) */ "iip\0" "glSamplerParameteriv\0" "\0" - /* _mesa_function_pool[18676]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[18788]: TexCoord2fColor4fNormal3fVertex3fvSUN (dynamic) */ "pppp\0" "glTexCoord2fColor4fNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[18722]: WindowPos2iMESA (will be remapped) */ + /* _mesa_function_pool[18834]: WindowPos2iMESA (will be remapped) */ "ii\0" "glWindowPos2i\0" "glWindowPos2iARB\0" "glWindowPos2iMESA\0" "\0" - /* _mesa_function_pool[18775]: SampleMaskSGIS (will be remapped) */ + /* _mesa_function_pool[18887]: SampleMaskSGIS (will be remapped) */ "fi\0" "glSampleMaskSGIS\0" "glSampleMaskEXT\0" "\0" - /* _mesa_function_pool[18812]: SecondaryColor3fvEXT (will be remapped) */ + /* _mesa_function_pool[18924]: SecondaryColor3fvEXT (will be remapped) */ "p\0" "glSecondaryColor3fv\0" "glSecondaryColor3fvEXT\0" "\0" - /* _mesa_function_pool[18858]: PolygonMode (offset 174) */ + /* _mesa_function_pool[18970]: PolygonMode (offset 174) */ "ii\0" "glPolygonMode\0" "\0" - /* _mesa_function_pool[18876]: CompressedTexSubImage1DARB (will be remapped) */ + /* _mesa_function_pool[18988]: CompressedTexSubImage1DARB (will be remapped) */ "iiiiiip\0" "glCompressedTexSubImage1D\0" "glCompressedTexSubImage1DARB\0" "\0" - /* _mesa_function_pool[18940]: VertexAttribI1iEXT (will be remapped) */ + /* _mesa_function_pool[19052]: VertexAttribI1iEXT (will be remapped) */ "ii\0" "glVertexAttribI1iEXT\0" "glVertexAttribI1i\0" "\0" - /* _mesa_function_pool[18983]: TexCoord2fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[19095]: TexCoord2fNormal3fVertex3fSUN (dynamic) */ "ffffffff\0" "glTexCoord2fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[19025]: GetVertexAttribivNV (will be remapped) */ + /* _mesa_function_pool[19137]: GetVertexAttribivNV (will be remapped) */ "iip\0" "glGetVertexAttribivNV\0" "\0" - /* _mesa_function_pool[19052]: GetProgramStringARB (will be remapped) */ + /* _mesa_function_pool[19164]: GetProgramStringARB (will be remapped) */ "iip\0" "glGetProgramStringARB\0" "\0" - /* _mesa_function_pool[19079]: GetnUniformdvARB (will be remapped) */ + /* _mesa_function_pool[19191]: GetnUniformdvARB (will be remapped) */ "iiip\0" "glGetnUniformdvARB\0" "\0" - /* _mesa_function_pool[19104]: VertexAttribIPointerEXT (will be remapped) */ + /* _mesa_function_pool[19216]: DrawElementsInstancedBaseVertex (will be remapped) */ + "iiipii\0" + "glDrawElementsInstancedBaseVertex\0" + "\0" + /* _mesa_function_pool[19258]: VertexAttribIPointerEXT (will be remapped) */ "iiiip\0" "glVertexAttribIPointerEXT\0" "glVertexAttribIPointer\0" "\0" - /* _mesa_function_pool[19160]: TexBumpParameterfvATI (will be remapped) */ + /* _mesa_function_pool[19314]: TexBumpParameterfvATI (will be remapped) */ "ip\0" "glTexBumpParameterfvATI\0" "\0" - /* _mesa_function_pool[19188]: Tangent3ivEXT (dynamic) */ + /* _mesa_function_pool[19342]: Tangent3ivEXT (dynamic) */ "p\0" "glTangent3ivEXT\0" "\0" - /* _mesa_function_pool[19207]: CompileShaderARB (will be remapped) */ + /* _mesa_function_pool[19361]: CompileShaderARB (will be remapped) */ "i\0" "glCompileShader\0" "glCompileShaderARB\0" "\0" - /* _mesa_function_pool[19245]: DeleteShader (will be remapped) */ + /* _mesa_function_pool[19399]: DeleteShader (will be remapped) */ "i\0" "glDeleteShader\0" "\0" - /* _mesa_function_pool[19263]: DisableClientState (offset 309) */ + /* _mesa_function_pool[19417]: DisableClientState (offset 309) */ "i\0" "glDisableClientState\0" "\0" - /* _mesa_function_pool[19287]: TexGeni (offset 192) */ + /* _mesa_function_pool[19441]: TexGeni (offset 192) */ "iii\0" "glTexGeni\0" "\0" - /* _mesa_function_pool[19302]: TexGenf (offset 190) */ + /* _mesa_function_pool[19456]: TexGenf (offset 190) */ "iif\0" "glTexGenf\0" "\0" - /* _mesa_function_pool[19317]: Uniform3fARB (will be remapped) */ + /* _mesa_function_pool[19471]: Uniform3fARB (will be remapped) */ "ifff\0" "glUniform3f\0" "glUniform3fARB\0" "\0" - /* _mesa_function_pool[19350]: TexGend (offset 188) */ + /* _mesa_function_pool[19504]: TexGend (offset 188) */ "iid\0" "glTexGend\0" "\0" - /* _mesa_function_pool[19365]: ListParameterfvSGIX (dynamic) */ + /* _mesa_function_pool[19519]: ListParameterfvSGIX (dynamic) */ "iip\0" "glListParameterfvSGIX\0" "\0" - /* _mesa_function_pool[19392]: GetPolygonStipple (offset 274) */ + /* _mesa_function_pool[19546]: GetPolygonStipple (offset 274) */ "p\0" "glGetPolygonStipple\0" "\0" - /* _mesa_function_pool[19415]: Tangent3dvEXT (dynamic) */ + /* _mesa_function_pool[19569]: Tangent3dvEXT (dynamic) */ "p\0" "glTangent3dvEXT\0" "\0" - /* _mesa_function_pool[19434]: BindBufferOffsetEXT (will be remapped) */ + /* _mesa_function_pool[19588]: BindBufferOffsetEXT (will be remapped) */ "iiii\0" "glBindBufferOffsetEXT\0" "\0" - /* _mesa_function_pool[19462]: WindowPos3sMESA (will be remapped) */ + /* _mesa_function_pool[19616]: WindowPos3sMESA (will be remapped) */ "iii\0" "glWindowPos3s\0" "glWindowPos3sARB\0" "glWindowPos3sMESA\0" "\0" - /* _mesa_function_pool[19516]: VertexAttrib2svNV (will be remapped) */ + /* _mesa_function_pool[19670]: VertexAttrib2svNV (will be remapped) */ "ip\0" "glVertexAttrib2svNV\0" "\0" - /* _mesa_function_pool[19540]: DisableIndexedEXT (will be remapped) */ + /* _mesa_function_pool[19694]: DisableIndexedEXT (will be remapped) */ "ii\0" "glDisableIndexedEXT\0" "glDisablei\0" "\0" - /* _mesa_function_pool[19575]: BindBufferBaseEXT (will be remapped) */ + /* _mesa_function_pool[19729]: BindBufferBaseEXT (will be remapped) */ "iii\0" "glBindBufferBaseEXT\0" "glBindBufferBase\0" "\0" - /* _mesa_function_pool[19617]: TexCoord2fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[19771]: TexCoord2fVertex3fvSUN (dynamic) */ "pp\0" "glTexCoord2fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[19646]: WindowPos4sMESA (will be remapped) */ + /* _mesa_function_pool[19800]: WindowPos4sMESA (will be remapped) */ "iiii\0" "glWindowPos4sMESA\0" "\0" - /* _mesa_function_pool[19670]: GetnPixelMapuivARB (will be remapped) */ + /* _mesa_function_pool[19824]: GetnPixelMapuivARB (will be remapped) */ "iip\0" "glGetnPixelMapuivARB\0" "\0" - /* _mesa_function_pool[19696]: VertexAttrib4NuivARB (will be remapped) */ + /* _mesa_function_pool[19850]: VertexAttrib4NuivARB (will be remapped) */ "ip\0" "glVertexAttrib4Nuiv\0" "glVertexAttrib4NuivARB\0" "\0" - /* _mesa_function_pool[19743]: ClientActiveTextureARB (offset 375) */ + /* _mesa_function_pool[19897]: ClientActiveTextureARB (offset 375) */ "i\0" "glClientActiveTexture\0" "glClientActiveTextureARB\0" "\0" - /* _mesa_function_pool[19793]: GetSamplerParameterIuiv (will be remapped) */ + /* _mesa_function_pool[19947]: GetSamplerParameterIuiv (will be remapped) */ "iip\0" "glGetSamplerParameterIuiv\0" "\0" - /* _mesa_function_pool[19824]: ReplacementCodeusvSUN (dynamic) */ + /* _mesa_function_pool[19978]: ReplacementCodeusvSUN (dynamic) */ "p\0" "glReplacementCodeusvSUN\0" "\0" - /* _mesa_function_pool[19851]: Uniform4fARB (will be remapped) */ + /* _mesa_function_pool[20005]: Uniform4fARB (will be remapped) */ "iffff\0" "glUniform4f\0" "glUniform4fARB\0" "\0" - /* _mesa_function_pool[19885]: Color4sv (offset 34) */ + /* _mesa_function_pool[20039]: Color4sv (offset 34) */ "p\0" "glColor4sv\0" "\0" - /* _mesa_function_pool[19899]: FlushMappedBufferRange (will be remapped) */ + /* _mesa_function_pool[20053]: FlushMappedBufferRange (will be remapped) */ "iii\0" "glFlushMappedBufferRange\0" "\0" - /* _mesa_function_pool[19929]: IsProgramNV (will be remapped) */ + /* _mesa_function_pool[20083]: IsProgramNV (will be remapped) */ "i\0" "glIsProgramARB\0" "glIsProgramNV\0" "\0" - /* _mesa_function_pool[19961]: FlushMappedBufferRangeAPPLE (will be remapped) */ + /* _mesa_function_pool[20115]: FlushMappedBufferRangeAPPLE (will be remapped) */ "iii\0" "glFlushMappedBufferRangeAPPLE\0" "\0" - /* _mesa_function_pool[19996]: PixelZoom (offset 246) */ + /* _mesa_function_pool[20150]: PixelZoom (offset 246) */ "ff\0" "glPixelZoom\0" "\0" - /* _mesa_function_pool[20012]: ReplacementCodePointerSUN (dynamic) */ + /* _mesa_function_pool[20166]: ReplacementCodePointerSUN (dynamic) */ "iip\0" "glReplacementCodePointerSUN\0" "\0" - /* _mesa_function_pool[20045]: ProgramEnvParameter4dARB (will be remapped) */ + /* _mesa_function_pool[20199]: ProgramEnvParameter4dARB (will be remapped) */ "iidddd\0" "glProgramEnvParameter4dARB\0" "glProgramParameter4dNV\0" "\0" - /* _mesa_function_pool[20103]: ColorTableParameterfv (offset 340) */ + /* _mesa_function_pool[20257]: ColorTableParameterfv (offset 340) */ "iip\0" "glColorTableParameterfv\0" "glColorTableParameterfvSGI\0" "\0" - /* _mesa_function_pool[20159]: FragmentLightModelfSGIX (dynamic) */ + /* _mesa_function_pool[20313]: FragmentLightModelfSGIX (dynamic) */ "if\0" "glFragmentLightModelfSGIX\0" "\0" - /* _mesa_function_pool[20189]: Binormal3bvEXT (dynamic) */ + /* _mesa_function_pool[20343]: Binormal3bvEXT (dynamic) */ "p\0" "glBinormal3bvEXT\0" "\0" - /* _mesa_function_pool[20209]: PixelMapuiv (offset 252) */ + /* _mesa_function_pool[20363]: PixelMapuiv (offset 252) */ "iip\0" "glPixelMapuiv\0" "\0" - /* _mesa_function_pool[20228]: Color3dv (offset 12) */ + /* _mesa_function_pool[20382]: Color3dv (offset 12) */ "p\0" "glColor3dv\0" "\0" - /* _mesa_function_pool[20242]: IsTexture (offset 330) */ + /* _mesa_function_pool[20396]: IsTexture (offset 330) */ "i\0" "glIsTexture\0" "glIsTextureEXT\0" "\0" - /* _mesa_function_pool[20272]: GenSamplers (will be remapped) */ + /* _mesa_function_pool[20426]: GenSamplers (will be remapped) */ "ip\0" "glGenSamplers\0" "\0" - /* _mesa_function_pool[20290]: VertexWeightfvEXT (dynamic) */ + /* _mesa_function_pool[20444]: VertexWeightfvEXT (dynamic) */ "p\0" "glVertexWeightfvEXT\0" "\0" - /* _mesa_function_pool[20313]: VertexAttrib1dARB (will be remapped) */ + /* _mesa_function_pool[20467]: VertexAttrib1dARB (will be remapped) */ "id\0" "glVertexAttrib1d\0" "glVertexAttrib1dARB\0" "\0" - /* _mesa_function_pool[20354]: ImageTransformParameterivHP (dynamic) */ + /* _mesa_function_pool[20508]: ImageTransformParameterivHP (dynamic) */ "iip\0" "glImageTransformParameterivHP\0" "\0" - /* _mesa_function_pool[20389]: TexCoord4i (offset 122) */ + /* _mesa_function_pool[20543]: TexCoord4i (offset 122) */ "iiii\0" "glTexCoord4i\0" "\0" - /* _mesa_function_pool[20408]: DeleteQueriesARB (will be remapped) */ + /* _mesa_function_pool[20562]: DeleteQueriesARB (will be remapped) */ "ip\0" "glDeleteQueries\0" "glDeleteQueriesARB\0" "\0" - /* _mesa_function_pool[20447]: Color4ubVertex2fSUN (dynamic) */ + /* _mesa_function_pool[20601]: Color4ubVertex2fSUN (dynamic) */ "iiiiff\0" "glColor4ubVertex2fSUN\0" "\0" - /* _mesa_function_pool[20477]: FragmentColorMaterialSGIX (dynamic) */ + /* _mesa_function_pool[20631]: FragmentColorMaterialSGIX (dynamic) */ "ii\0" "glFragmentColorMaterialSGIX\0" "\0" - /* _mesa_function_pool[20509]: CurrentPaletteMatrixARB (dynamic) */ + /* _mesa_function_pool[20663]: CurrentPaletteMatrixARB (dynamic) */ "i\0" "glCurrentPaletteMatrixARB\0" "\0" - /* _mesa_function_pool[20538]: GetMapdv (offset 266) */ + /* _mesa_function_pool[20692]: GetMapdv (offset 266) */ "iip\0" "glGetMapdv\0" "\0" - /* _mesa_function_pool[20554]: ObjectPurgeableAPPLE (will be remapped) */ + /* _mesa_function_pool[20708]: ObjectPurgeableAPPLE (will be remapped) */ "iii\0" "glObjectPurgeableAPPLE\0" "\0" - /* _mesa_function_pool[20582]: GetStringi (will be remapped) */ + /* _mesa_function_pool[20736]: GetStringi (will be remapped) */ "ii\0" "glGetStringi\0" "\0" - /* _mesa_function_pool[20599]: SamplePatternSGIS (will be remapped) */ + /* _mesa_function_pool[20753]: SamplePatternSGIS (will be remapped) */ "i\0" "glSamplePatternSGIS\0" "glSamplePatternEXT\0" "\0" - /* _mesa_function_pool[20641]: PixelStoref (offset 249) */ + /* _mesa_function_pool[20795]: PixelStoref (offset 249) */ "if\0" "glPixelStoref\0" "\0" - /* _mesa_function_pool[20659]: IsQueryARB (will be remapped) */ + /* _mesa_function_pool[20813]: IsQueryARB (will be remapped) */ "i\0" "glIsQuery\0" "glIsQueryARB\0" "\0" - /* _mesa_function_pool[20685]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[20839]: ReplacementCodeuiColor4ubVertex3fSUN (dynamic) */ "iiiiifff\0" "glReplacementCodeuiColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[20734]: PixelStorei (offset 250) */ + /* _mesa_function_pool[20888]: PixelStorei (offset 250) */ "ii\0" "glPixelStorei\0" "\0" - /* _mesa_function_pool[20752]: VertexAttrib4usvARB (will be remapped) */ + /* _mesa_function_pool[20906]: VertexAttrib4usvARB (will be remapped) */ "ip\0" "glVertexAttrib4usv\0" "glVertexAttrib4usvARB\0" "\0" - /* _mesa_function_pool[20797]: LinkProgramARB (will be remapped) */ + /* _mesa_function_pool[20951]: LinkProgramARB (will be remapped) */ "i\0" "glLinkProgram\0" "glLinkProgramARB\0" "\0" - /* _mesa_function_pool[20831]: VertexAttrib2fNV (will be remapped) */ + /* _mesa_function_pool[20985]: VertexAttrib2fNV (will be remapped) */ "iff\0" "glVertexAttrib2fNV\0" "\0" - /* _mesa_function_pool[20855]: ShaderSourceARB (will be remapped) */ + /* _mesa_function_pool[21009]: ShaderSourceARB (will be remapped) */ "iipp\0" "glShaderSource\0" "glShaderSourceARB\0" "\0" - /* _mesa_function_pool[20894]: FragmentMaterialiSGIX (dynamic) */ + /* _mesa_function_pool[21048]: FragmentMaterialiSGIX (dynamic) */ "iii\0" "glFragmentMaterialiSGIX\0" "\0" - /* _mesa_function_pool[20923]: EvalCoord2dv (offset 233) */ + /* _mesa_function_pool[21077]: EvalCoord2dv (offset 233) */ "p\0" "glEvalCoord2dv\0" "\0" - /* _mesa_function_pool[20941]: VertexAttrib3svARB (will be remapped) */ + /* _mesa_function_pool[21095]: VertexAttrib3svARB (will be remapped) */ "ip\0" "glVertexAttrib3sv\0" "glVertexAttrib3svARB\0" "\0" - /* _mesa_function_pool[20984]: ColorMaterial (offset 151) */ + /* _mesa_function_pool[21138]: ColorMaterial (offset 151) */ "ii\0" "glColorMaterial\0" "\0" - /* _mesa_function_pool[21004]: CompressedTexSubImage3DARB (will be remapped) */ + /* _mesa_function_pool[21158]: CompressedTexSubImage3DARB (will be remapped) */ "iiiiiiiiiip\0" "glCompressedTexSubImage3D\0" "glCompressedTexSubImage3DARB\0" "\0" - /* _mesa_function_pool[21072]: WindowPos2ivMESA (will be remapped) */ + /* _mesa_function_pool[21226]: WindowPos2ivMESA (will be remapped) */ "p\0" "glWindowPos2iv\0" "glWindowPos2ivARB\0" "glWindowPos2ivMESA\0" "\0" - /* _mesa_function_pool[21127]: IsFramebufferEXT (will be remapped) */ + /* _mesa_function_pool[21281]: IsFramebufferEXT (will be remapped) */ "i\0" "glIsFramebuffer\0" "glIsFramebufferEXT\0" "\0" - /* _mesa_function_pool[21165]: Uniform4ivARB (will be remapped) */ + /* _mesa_function_pool[21319]: Uniform4ivARB (will be remapped) */ "iip\0" "glUniform4iv\0" "glUniform4ivARB\0" "\0" - /* _mesa_function_pool[21199]: GetVertexAttribdvARB (will be remapped) */ + /* _mesa_function_pool[21353]: GetVertexAttribdvARB (will be remapped) */ "iip\0" "glGetVertexAttribdv\0" "glGetVertexAttribdvARB\0" "\0" - /* _mesa_function_pool[21247]: TexBumpParameterivATI (will be remapped) */ + /* _mesa_function_pool[21401]: TexBumpParameterivATI (will be remapped) */ "ip\0" "glTexBumpParameterivATI\0" "\0" - /* _mesa_function_pool[21275]: GetSeparableFilter (offset 359) */ + /* _mesa_function_pool[21429]: GetSeparableFilter (offset 359) */ "iiippp\0" "glGetSeparableFilter\0" "glGetSeparableFilterEXT\0" "\0" - /* _mesa_function_pool[21328]: Binormal3dEXT (dynamic) */ + /* _mesa_function_pool[21482]: Binormal3dEXT (dynamic) */ "ddd\0" "glBinormal3dEXT\0" "\0" - /* _mesa_function_pool[21349]: SpriteParameteriSGIX (dynamic) */ + /* _mesa_function_pool[21503]: SpriteParameteriSGIX (dynamic) */ "ii\0" "glSpriteParameteriSGIX\0" "\0" - /* _mesa_function_pool[21376]: RequestResidentProgramsNV (will be remapped) */ + /* _mesa_function_pool[21530]: RequestResidentProgramsNV (will be remapped) */ "ip\0" "glRequestResidentProgramsNV\0" "\0" - /* _mesa_function_pool[21408]: TagSampleBufferSGIX (dynamic) */ + /* _mesa_function_pool[21562]: TagSampleBufferSGIX (dynamic) */ "\0" "glTagSampleBufferSGIX\0" "\0" - /* _mesa_function_pool[21432]: TransformFeedbackVaryingsEXT (will be remapped) */ + /* _mesa_function_pool[21586]: TransformFeedbackVaryingsEXT (will be remapped) */ "iipi\0" "glTransformFeedbackVaryingsEXT\0" "glTransformFeedbackVaryings\0" "\0" - /* _mesa_function_pool[21497]: FeedbackBuffer (offset 194) */ + /* _mesa_function_pool[21651]: FeedbackBuffer (offset 194) */ "iip\0" "glFeedbackBuffer\0" "\0" - /* _mesa_function_pool[21519]: RasterPos2iv (offset 67) */ + /* _mesa_function_pool[21673]: RasterPos2iv (offset 67) */ "p\0" "glRasterPos2iv\0" "\0" - /* _mesa_function_pool[21537]: TexImage1D (offset 182) */ + /* _mesa_function_pool[21691]: TexImage1D (offset 182) */ "iiiiiiip\0" "glTexImage1D\0" "\0" - /* _mesa_function_pool[21560]: ListParameterivSGIX (dynamic) */ + /* _mesa_function_pool[21714]: ListParameterivSGIX (dynamic) */ "iip\0" "glListParameterivSGIX\0" "\0" - /* _mesa_function_pool[21587]: MultiDrawElementsEXT (will be remapped) */ + /* _mesa_function_pool[21741]: MultiDrawElementsEXT (will be remapped) */ "ipipi\0" "glMultiDrawElements\0" "glMultiDrawElementsEXT\0" "\0" - /* _mesa_function_pool[21637]: Color3s (offset 17) */ + /* _mesa_function_pool[21791]: Color3s (offset 17) */ "iii\0" "glColor3s\0" "\0" - /* _mesa_function_pool[21652]: Uniform1ivARB (will be remapped) */ + /* _mesa_function_pool[21806]: Uniform1ivARB (will be remapped) */ "iip\0" "glUniform1iv\0" "glUniform1ivARB\0" "\0" - /* _mesa_function_pool[21686]: WindowPos2sMESA (will be remapped) */ + /* _mesa_function_pool[21840]: WindowPos2sMESA (will be remapped) */ "ii\0" "glWindowPos2s\0" "glWindowPos2sARB\0" "glWindowPos2sMESA\0" "\0" - /* _mesa_function_pool[21739]: WeightusvARB (dynamic) */ + /* _mesa_function_pool[21893]: WeightusvARB (dynamic) */ "ip\0" "glWeightusvARB\0" "\0" - /* _mesa_function_pool[21758]: TexCoordPointer (offset 320) */ + /* _mesa_function_pool[21912]: TexCoordPointer (offset 320) */ "iiip\0" "glTexCoordPointer\0" "\0" - /* _mesa_function_pool[21782]: FogCoordPointerEXT (will be remapped) */ + /* _mesa_function_pool[21936]: FogCoordPointerEXT (will be remapped) */ "iip\0" "glFogCoordPointer\0" "glFogCoordPointerEXT\0" "\0" - /* _mesa_function_pool[21826]: GetnSeparableFilterARB (will be remapped) */ + /* _mesa_function_pool[21980]: GetnSeparableFilterARB (will be remapped) */ "iiiipipp\0" "glGetnSeparableFilterARB\0" "\0" - /* _mesa_function_pool[21861]: IndexMaterialEXT (dynamic) */ + /* _mesa_function_pool[22015]: IndexMaterialEXT (dynamic) */ "ii\0" "glIndexMaterialEXT\0" "\0" - /* _mesa_function_pool[21884]: Color3i (offset 15) */ + /* _mesa_function_pool[22038]: Color3i (offset 15) */ "iii\0" "glColor3i\0" "\0" - /* _mesa_function_pool[21899]: FrontFace (offset 157) */ + /* _mesa_function_pool[22053]: FrontFace (offset 157) */ "i\0" "glFrontFace\0" "\0" - /* _mesa_function_pool[21914]: EvalCoord2d (offset 232) */ + /* _mesa_function_pool[22068]: EvalCoord2d (offset 232) */ "dd\0" "glEvalCoord2d\0" "\0" - /* _mesa_function_pool[21932]: SecondaryColor3ubvEXT (will be remapped) */ + /* _mesa_function_pool[22086]: SecondaryColor3ubvEXT (will be remapped) */ "p\0" "glSecondaryColor3ubv\0" "glSecondaryColor3ubvEXT\0" "\0" - /* _mesa_function_pool[21980]: EvalCoord2f (offset 234) */ + /* _mesa_function_pool[22134]: EvalCoord2f (offset 234) */ "ff\0" "glEvalCoord2f\0" "\0" - /* _mesa_function_pool[21998]: VertexAttrib4dvARB (will be remapped) */ + /* _mesa_function_pool[22152]: VertexAttrib4dvARB (will be remapped) */ "ip\0" "glVertexAttrib4dv\0" "glVertexAttrib4dvARB\0" "\0" - /* _mesa_function_pool[22041]: BindAttribLocationARB (will be remapped) */ + /* _mesa_function_pool[22195]: BindAttribLocationARB (will be remapped) */ "iip\0" "glBindAttribLocation\0" "glBindAttribLocationARB\0" "\0" - /* _mesa_function_pool[22091]: Color3b (offset 9) */ + /* _mesa_function_pool[22245]: Color3b (offset 9) */ "iii\0" "glColor3b\0" "\0" - /* _mesa_function_pool[22106]: MultiTexCoord2dARB (offset 384) */ + /* _mesa_function_pool[22260]: MultiTexCoord2dARB (offset 384) */ "idd\0" "glMultiTexCoord2d\0" "glMultiTexCoord2dARB\0" "\0" - /* _mesa_function_pool[22150]: ExecuteProgramNV (will be remapped) */ + /* _mesa_function_pool[22304]: ExecuteProgramNV (will be remapped) */ "iip\0" "glExecuteProgramNV\0" "\0" - /* _mesa_function_pool[22174]: Color3f (offset 13) */ + /* _mesa_function_pool[22328]: Color3f (offset 13) */ "fff\0" "glColor3f\0" "\0" - /* _mesa_function_pool[22189]: LightEnviSGIX (dynamic) */ + /* _mesa_function_pool[22343]: LightEnviSGIX (dynamic) */ "ii\0" "glLightEnviSGIX\0" "\0" - /* _mesa_function_pool[22209]: Color3d (offset 11) */ + /* _mesa_function_pool[22363]: Color3d (offset 11) */ "ddd\0" "glColor3d\0" "\0" - /* _mesa_function_pool[22224]: Normal3dv (offset 55) */ + /* _mesa_function_pool[22378]: Normal3dv (offset 55) */ "p\0" "glNormal3dv\0" "\0" - /* _mesa_function_pool[22239]: Lightf (offset 159) */ + /* _mesa_function_pool[22393]: Lightf (offset 159) */ "iif\0" "glLightf\0" "\0" - /* _mesa_function_pool[22253]: ReplacementCodeuiSUN (dynamic) */ + /* _mesa_function_pool[22407]: ReplacementCodeuiSUN (dynamic) */ "i\0" "glReplacementCodeuiSUN\0" "\0" - /* _mesa_function_pool[22279]: MatrixMode (offset 293) */ + /* _mesa_function_pool[22433]: MatrixMode (offset 293) */ "i\0" "glMatrixMode\0" "\0" - /* _mesa_function_pool[22295]: GetPixelMapusv (offset 273) */ + /* _mesa_function_pool[22449]: GetPixelMapusv (offset 273) */ "ip\0" "glGetPixelMapusv\0" "\0" - /* _mesa_function_pool[22316]: Lighti (offset 161) */ + /* _mesa_function_pool[22470]: Lighti (offset 161) */ "iii\0" "glLighti\0" "\0" - /* _mesa_function_pool[22330]: VertexAttribPointerNV (will be remapped) */ + /* _mesa_function_pool[22484]: VertexAttribPointerNV (will be remapped) */ "iiiip\0" "glVertexAttribPointerNV\0" "\0" - /* _mesa_function_pool[22361]: ClearDepthf (will be remapped) */ + /* _mesa_function_pool[22515]: ClearDepthf (will be remapped) */ "f\0" "glClearDepthf\0" "\0" - /* _mesa_function_pool[22378]: GetBooleanIndexedvEXT (will be remapped) */ + /* _mesa_function_pool[22532]: GetBooleanIndexedvEXT (will be remapped) */ "iip\0" "glGetBooleanIndexedvEXT\0" "glGetBooleani_v\0" "\0" - /* _mesa_function_pool[22423]: GetFramebufferAttachmentParameterivEXT (will be remapped) */ + /* _mesa_function_pool[22577]: GetFramebufferAttachmentParameterivEXT (will be remapped) */ "iiip\0" "glGetFramebufferAttachmentParameteriv\0" "glGetFramebufferAttachmentParameterivEXT\0" "\0" - /* _mesa_function_pool[22508]: PixelTransformParameterfEXT (dynamic) */ + /* _mesa_function_pool[22662]: PixelTransformParameterfEXT (dynamic) */ "iif\0" "glPixelTransformParameterfEXT\0" "\0" - /* _mesa_function_pool[22543]: MultiTexCoord4dvARB (offset 401) */ + /* _mesa_function_pool[22697]: MultiTexCoord4dvARB (offset 401) */ "ip\0" "glMultiTexCoord4dv\0" "glMultiTexCoord4dvARB\0" "\0" - /* _mesa_function_pool[22588]: PixelTransformParameteriEXT (dynamic) */ + /* _mesa_function_pool[22742]: PixelTransformParameteriEXT (dynamic) */ "iii\0" "glPixelTransformParameteriEXT\0" "\0" - /* _mesa_function_pool[22623]: GetDoublev (offset 260) */ + /* _mesa_function_pool[22777]: GetDoublev (offset 260) */ "ip\0" "glGetDoublev\0" "\0" - /* _mesa_function_pool[22640]: MultMatrixd (offset 295) */ + /* _mesa_function_pool[22794]: MultMatrixd (offset 295) */ "p\0" "glMultMatrixd\0" "\0" - /* _mesa_function_pool[22657]: MultMatrixf (offset 294) */ + /* _mesa_function_pool[22811]: MultMatrixf (offset 294) */ "p\0" "glMultMatrixf\0" "\0" - /* _mesa_function_pool[22674]: VertexAttribI4bvEXT (will be remapped) */ + /* _mesa_function_pool[22828]: VertexAttribI4bvEXT (will be remapped) */ "ip\0" "glVertexAttribI4bvEXT\0" "glVertexAttribI4bv\0" "\0" - /* _mesa_function_pool[22719]: TexCoord2fColor4ubVertex3fSUN (dynamic) */ + /* _mesa_function_pool[22873]: TexCoord2fColor4ubVertex3fSUN (dynamic) */ "ffiiiifff\0" "glTexCoord2fColor4ubVertex3fSUN\0" "\0" - /* _mesa_function_pool[22762]: Uniform1iARB (will be remapped) */ + /* _mesa_function_pool[22916]: Uniform1iARB (will be remapped) */ "ii\0" "glUniform1i\0" "glUniform1iARB\0" "\0" - /* _mesa_function_pool[22793]: GetnMapfvARB (will be remapped) */ + /* _mesa_function_pool[22947]: GetnMapfvARB (will be remapped) */ "iiip\0" "glGetnMapfvARB\0" "\0" - /* _mesa_function_pool[22814]: VertexAttribPointerARB (will be remapped) */ + /* _mesa_function_pool[22968]: VertexAttribPointerARB (will be remapped) */ "iiiiip\0" "glVertexAttribPointer\0" "glVertexAttribPointerARB\0" "\0" - /* _mesa_function_pool[22869]: VertexAttrib3sNV (will be remapped) */ + /* _mesa_function_pool[23023]: VertexAttrib3sNV (will be remapped) */ "iiii\0" "glVertexAttrib3sNV\0" "\0" - /* _mesa_function_pool[22894]: SharpenTexFuncSGIS (dynamic) */ + /* _mesa_function_pool[23048]: SharpenTexFuncSGIS (dynamic) */ "iip\0" "glSharpenTexFuncSGIS\0" "\0" - /* _mesa_function_pool[22920]: MultiTexCoord4fvARB (offset 403) */ + /* _mesa_function_pool[23074]: MultiTexCoord4fvARB (offset 403) */ "ip\0" "glMultiTexCoord4fv\0" "glMultiTexCoord4fvARB\0" "\0" - /* _mesa_function_pool[22965]: Uniform2uiEXT (will be remapped) */ + /* _mesa_function_pool[23119]: Uniform2uiEXT (will be remapped) */ "iii\0" "glUniform2uiEXT\0" "glUniform2ui\0" "\0" - /* _mesa_function_pool[22999]: UniformMatrix2x3fv (will be remapped) */ + /* _mesa_function_pool[23153]: UniformMatrix2x3fv (will be remapped) */ "iiip\0" "glUniformMatrix2x3fv\0" "\0" - /* _mesa_function_pool[23026]: SamplerParameteri (will be remapped) */ + /* _mesa_function_pool[23180]: SamplerParameteri (will be remapped) */ "iii\0" "glSamplerParameteri\0" "\0" - /* _mesa_function_pool[23051]: SamplerParameterf (will be remapped) */ + /* _mesa_function_pool[23205]: SamplerParameterf (will be remapped) */ "iif\0" "glSamplerParameterf\0" "\0" - /* _mesa_function_pool[23076]: CombinerParameteriNV (will be remapped) */ + /* _mesa_function_pool[23230]: CombinerParameteriNV (will be remapped) */ "ii\0" "glCombinerParameteriNV\0" "\0" - /* _mesa_function_pool[23103]: DeleteAsyncMarkersSGIX (dynamic) */ + /* _mesa_function_pool[23257]: DeleteAsyncMarkersSGIX (dynamic) */ "ii\0" "glDeleteAsyncMarkersSGIX\0" "\0" - /* _mesa_function_pool[23132]: ReplacementCodeusSUN (dynamic) */ + /* _mesa_function_pool[23286]: ReplacementCodeusSUN (dynamic) */ "i\0" "glReplacementCodeusSUN\0" "\0" - /* _mesa_function_pool[23158]: IsAsyncMarkerSGIX (dynamic) */ + /* _mesa_function_pool[23312]: IsAsyncMarkerSGIX (dynamic) */ "i\0" "glIsAsyncMarkerSGIX\0" "\0" - /* _mesa_function_pool[23181]: FrameZoomSGIX (dynamic) */ + /* _mesa_function_pool[23335]: FrameZoomSGIX (dynamic) */ "i\0" "glFrameZoomSGIX\0" "\0" - /* _mesa_function_pool[23200]: Normal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[23354]: Normal3fVertex3fvSUN (dynamic) */ "pp\0" "glNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[23227]: GetnUniformuivARB (will be remapped) */ + /* _mesa_function_pool[23381]: GetnUniformuivARB (will be remapped) */ "iiip\0" "glGetnUniformuivARB\0" "\0" - /* _mesa_function_pool[23253]: RasterPos4sv (offset 85) */ + /* _mesa_function_pool[23407]: RasterPos4sv (offset 85) */ "p\0" "glRasterPos4sv\0" "\0" - /* _mesa_function_pool[23271]: VertexAttrib4NsvARB (will be remapped) */ + /* _mesa_function_pool[23425]: VertexAttrib4NsvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nsv\0" "glVertexAttrib4NsvARB\0" "\0" - /* _mesa_function_pool[23316]: VertexAttrib3fvARB (will be remapped) */ + /* _mesa_function_pool[23470]: VertexAttrib3fvARB (will be remapped) */ "ip\0" "glVertexAttrib3fv\0" "glVertexAttrib3fvARB\0" "\0" - /* _mesa_function_pool[23359]: ClearColor (offset 206) */ + /* _mesa_function_pool[23513]: ClearColor (offset 206) */ "ffff\0" "glClearColor\0" "\0" - /* _mesa_function_pool[23378]: GetSynciv (will be remapped) */ + /* _mesa_function_pool[23532]: GetSynciv (will be remapped) */ "iiipp\0" "glGetSynciv\0" "\0" - /* _mesa_function_pool[23397]: ClearColorIiEXT (will be remapped) */ + /* _mesa_function_pool[23551]: ClearColorIiEXT (will be remapped) */ "iiii\0" "glClearColorIiEXT\0" "\0" - /* _mesa_function_pool[23421]: DeleteFramebuffersEXT (will be remapped) */ + /* _mesa_function_pool[23575]: DeleteFramebuffersEXT (will be remapped) */ "ip\0" "glDeleteFramebuffers\0" "glDeleteFramebuffersEXT\0" "\0" - /* _mesa_function_pool[23470]: GlobalAlphaFactorsSUN (dynamic) */ + /* _mesa_function_pool[23624]: GlobalAlphaFactorsSUN (dynamic) */ "i\0" "glGlobalAlphaFactorsSUN\0" "\0" - /* _mesa_function_pool[23497]: IsEnabledIndexedEXT (will be remapped) */ + /* _mesa_function_pool[23651]: IsEnabledIndexedEXT (will be remapped) */ "ii\0" "glIsEnabledIndexedEXT\0" "glIsEnabledi\0" "\0" - /* _mesa_function_pool[23536]: TexEnviv (offset 187) */ + /* _mesa_function_pool[23690]: TexEnviv (offset 187) */ "iip\0" "glTexEnviv\0" "\0" - /* _mesa_function_pool[23552]: TexSubImage3D (offset 372) */ + /* _mesa_function_pool[23706]: TexSubImage3D (offset 372) */ "iiiiiiiiiip\0" "glTexSubImage3D\0" "glTexSubImage3DEXT\0" "\0" - /* _mesa_function_pool[23600]: Tangent3fEXT (dynamic) */ + /* _mesa_function_pool[23754]: Tangent3fEXT (dynamic) */ "fff\0" "glTangent3fEXT\0" "\0" - /* _mesa_function_pool[23620]: SecondaryColor3uivEXT (will be remapped) */ + /* _mesa_function_pool[23774]: SecondaryColor3uivEXT (will be remapped) */ "p\0" "glSecondaryColor3uiv\0" "glSecondaryColor3uivEXT\0" "\0" - /* _mesa_function_pool[23668]: MatrixIndexubvARB (dynamic) */ + /* _mesa_function_pool[23822]: MatrixIndexubvARB (dynamic) */ "ip\0" "glMatrixIndexubvARB\0" "\0" - /* _mesa_function_pool[23692]: Color4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[23846]: Color4fNormal3fVertex3fSUN (dynamic) */ "ffffffffff\0" "glColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[23733]: PixelTexGenParameterfSGIS (will be remapped) */ + /* _mesa_function_pool[23887]: PixelTexGenParameterfSGIS (will be remapped) */ "if\0" "glPixelTexGenParameterfSGIS\0" "\0" - /* _mesa_function_pool[23765]: CreateShader (will be remapped) */ + /* _mesa_function_pool[23919]: CreateShader (will be remapped) */ "i\0" "glCreateShader\0" "\0" - /* _mesa_function_pool[23783]: GetColorTableParameterfv (offset 344) */ + /* _mesa_function_pool[23937]: GetColorTableParameterfv (offset 344) */ "iip\0" "glGetColorTableParameterfv\0" "glGetColorTableParameterfvSGI\0" "glGetColorTableParameterfvEXT\0" "\0" - /* _mesa_function_pool[23875]: FragmentLightModelfvSGIX (dynamic) */ + /* _mesa_function_pool[24029]: FragmentLightModelfvSGIX (dynamic) */ "ip\0" "glFragmentLightModelfvSGIX\0" "\0" - /* _mesa_function_pool[23906]: Bitmap (offset 8) */ + /* _mesa_function_pool[24060]: Bitmap (offset 8) */ "iiffffp\0" "glBitmap\0" "\0" - /* _mesa_function_pool[23924]: MultiTexCoord3fARB (offset 394) */ + /* _mesa_function_pool[24078]: MultiTexCoord3fARB (offset 394) */ "ifff\0" "glMultiTexCoord3f\0" "glMultiTexCoord3fARB\0" "\0" - /* _mesa_function_pool[23969]: GetTexLevelParameterfv (offset 284) */ + /* _mesa_function_pool[24123]: GetTexLevelParameterfv (offset 284) */ "iiip\0" "glGetTexLevelParameterfv\0" "\0" - /* _mesa_function_pool[24000]: GetPixelTexGenParameterfvSGIS (will be remapped) */ + /* _mesa_function_pool[24154]: GetPixelTexGenParameterfvSGIS (will be remapped) */ "ip\0" "glGetPixelTexGenParameterfvSGIS\0" "\0" - /* _mesa_function_pool[24036]: GenFramebuffersEXT (will be remapped) */ + /* _mesa_function_pool[24190]: GenFramebuffersEXT (will be remapped) */ "ip\0" "glGenFramebuffers\0" "glGenFramebuffersEXT\0" "\0" - /* _mesa_function_pool[24079]: VertexAttribDivisor (will be remapped) */ + /* _mesa_function_pool[24233]: VertexAttribDivisor (will be remapped) */ "ii\0" "glVertexAttribDivisor\0" "\0" - /* _mesa_function_pool[24105]: GetProgramParameterdvNV (will be remapped) */ + /* _mesa_function_pool[24259]: GetProgramParameterdvNV (will be remapped) */ "iiip\0" "glGetProgramParameterdvNV\0" "\0" - /* _mesa_function_pool[24137]: Vertex2sv (offset 133) */ + /* _mesa_function_pool[24291]: Vertex2sv (offset 133) */ "p\0" "glVertex2sv\0" "\0" - /* _mesa_function_pool[24152]: GetIntegerv (offset 263) */ + /* _mesa_function_pool[24306]: GetIntegerv (offset 263) */ "ip\0" "glGetIntegerv\0" "\0" - /* _mesa_function_pool[24170]: IsVertexArrayAPPLE (will be remapped) */ + /* _mesa_function_pool[24324]: IsVertexArrayAPPLE (will be remapped) */ "i\0" "glIsVertexArray\0" "glIsVertexArrayAPPLE\0" "\0" - /* _mesa_function_pool[24210]: FragmentLightfvSGIX (dynamic) */ + /* _mesa_function_pool[24364]: FragmentLightfvSGIX (dynamic) */ "iip\0" "glFragmentLightfvSGIX\0" "\0" - /* _mesa_function_pool[24237]: GetnMapdvARB (will be remapped) */ + /* _mesa_function_pool[24391]: GetnMapdvARB (will be remapped) */ "iiip\0" "glGetnMapdvARB\0" "\0" - /* _mesa_function_pool[24258]: DetachShader (will be remapped) */ + /* _mesa_function_pool[24412]: DetachShader (will be remapped) */ "ii\0" "glDetachShader\0" "\0" - /* _mesa_function_pool[24277]: VertexAttrib4NubARB (will be remapped) */ + /* _mesa_function_pool[24431]: VertexAttrib4NubARB (will be remapped) */ "iiiii\0" "glVertexAttrib4Nub\0" "glVertexAttrib4NubARB\0" "\0" - /* _mesa_function_pool[24325]: GetProgramEnvParameterfvARB (will be remapped) */ + /* _mesa_function_pool[24479]: GetProgramEnvParameterfvARB (will be remapped) */ "iip\0" "glGetProgramEnvParameterfvARB\0" "\0" - /* _mesa_function_pool[24360]: GetTrackMatrixivNV (will be remapped) */ + /* _mesa_function_pool[24514]: GetTrackMatrixivNV (will be remapped) */ "iiip\0" "glGetTrackMatrixivNV\0" "\0" - /* _mesa_function_pool[24387]: VertexAttrib3svNV (will be remapped) */ + /* _mesa_function_pool[24541]: VertexAttrib3svNV (will be remapped) */ "ip\0" "glVertexAttrib3svNV\0" "\0" - /* _mesa_function_pool[24411]: Uniform4fvARB (will be remapped) */ + /* _mesa_function_pool[24565]: Uniform4fvARB (will be remapped) */ "iip\0" "glUniform4fv\0" "glUniform4fvARB\0" "\0" - /* _mesa_function_pool[24445]: MultTransposeMatrixfARB (will be remapped) */ + /* _mesa_function_pool[24599]: MultTransposeMatrixfARB (will be remapped) */ "p\0" "glMultTransposeMatrixf\0" "glMultTransposeMatrixfARB\0" "\0" - /* _mesa_function_pool[24497]: GetTexEnviv (offset 277) */ + /* _mesa_function_pool[24651]: GetTexEnviv (offset 277) */ "iip\0" "glGetTexEnviv\0" "\0" - /* _mesa_function_pool[24516]: ColorFragmentOp1ATI (will be remapped) */ + /* _mesa_function_pool[24670]: ColorFragmentOp1ATI (will be remapped) */ "iiiiiii\0" "glColorFragmentOp1ATI\0" "\0" - /* _mesa_function_pool[24547]: GetUniformfvARB (will be remapped) */ + /* _mesa_function_pool[24701]: GetUniformfvARB (will be remapped) */ "iip\0" "glGetUniformfv\0" "glGetUniformfvARB\0" "\0" - /* _mesa_function_pool[24585]: EGLImageTargetRenderbufferStorageOES (will be remapped) */ + /* _mesa_function_pool[24739]: EGLImageTargetRenderbufferStorageOES (will be remapped) */ "ip\0" "glEGLImageTargetRenderbufferStorageOES\0" "\0" - /* _mesa_function_pool[24628]: VertexAttribI2ivEXT (will be remapped) */ + /* _mesa_function_pool[24782]: VertexAttribI2ivEXT (will be remapped) */ "ip\0" "glVertexAttribI2ivEXT\0" "glVertexAttribI2iv\0" "\0" - /* _mesa_function_pool[24673]: PopClientAttrib (offset 334) */ + /* _mesa_function_pool[24827]: PopClientAttrib (offset 334) */ "\0" "glPopClientAttrib\0" "\0" - /* _mesa_function_pool[24693]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[24847]: ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (dynamic) */ "iffffffffffff\0" "glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[24764]: DetachObjectARB (will be remapped) */ + /* _mesa_function_pool[24918]: DetachObjectARB (will be remapped) */ "ii\0" "glDetachObjectARB\0" "\0" - /* _mesa_function_pool[24786]: VertexBlendARB (dynamic) */ + /* _mesa_function_pool[24940]: VertexBlendARB (dynamic) */ "i\0" "glVertexBlendARB\0" "\0" - /* _mesa_function_pool[24806]: WindowPos3iMESA (will be remapped) */ + /* _mesa_function_pool[24960]: WindowPos3iMESA (will be remapped) */ "iii\0" "glWindowPos3i\0" "glWindowPos3iARB\0" "glWindowPos3iMESA\0" "\0" - /* _mesa_function_pool[24860]: SeparableFilter2D (offset 360) */ + /* _mesa_function_pool[25014]: SeparableFilter2D (offset 360) */ "iiiiiipp\0" "glSeparableFilter2D\0" "glSeparableFilter2DEXT\0" "\0" - /* _mesa_function_pool[24913]: ProgramParameteriARB (will be remapped) */ + /* _mesa_function_pool[25067]: ProgramParameteriARB (will be remapped) */ "iii\0" "glProgramParameteriARB\0" "\0" - /* _mesa_function_pool[24941]: Map1d (offset 220) */ + /* _mesa_function_pool[25095]: Map1d (offset 220) */ "iddiip\0" "glMap1d\0" "\0" - /* _mesa_function_pool[24957]: Map1f (offset 221) */ + /* _mesa_function_pool[25111]: Map1f (offset 221) */ "iffiip\0" "glMap1f\0" "\0" - /* _mesa_function_pool[24973]: CompressedTexImage2DARB (will be remapped) */ + /* _mesa_function_pool[25127]: CompressedTexImage2DARB (will be remapped) */ "iiiiiiip\0" "glCompressedTexImage2D\0" "glCompressedTexImage2DARB\0" "\0" - /* _mesa_function_pool[25032]: ArrayElement (offset 306) */ + /* _mesa_function_pool[25186]: ArrayElement (offset 306) */ "i\0" "glArrayElement\0" "glArrayElementEXT\0" "\0" - /* _mesa_function_pool[25068]: TexImage2D (offset 183) */ + /* _mesa_function_pool[25222]: TexImage2D (offset 183) */ "iiiiiiiip\0" "glTexImage2D\0" "\0" - /* _mesa_function_pool[25092]: DepthBoundsEXT (will be remapped) */ + /* _mesa_function_pool[25246]: DepthBoundsEXT (will be remapped) */ "dd\0" "glDepthBoundsEXT\0" "\0" - /* _mesa_function_pool[25113]: ProgramParameters4fvNV (will be remapped) */ + /* _mesa_function_pool[25267]: ProgramParameters4fvNV (will be remapped) */ "iiip\0" "glProgramParameters4fvNV\0" "\0" - /* _mesa_function_pool[25144]: DeformationMap3fSGIX (dynamic) */ + /* _mesa_function_pool[25298]: DeformationMap3fSGIX (dynamic) */ "iffiiffiiffiip\0" "glDeformationMap3fSGIX\0" "\0" - /* _mesa_function_pool[25183]: GetProgramivNV (will be remapped) */ + /* _mesa_function_pool[25337]: GetProgramivNV (will be remapped) */ "iip\0" "glGetProgramivNV\0" "\0" - /* _mesa_function_pool[25205]: GetFragDataLocationEXT (will be remapped) */ + /* _mesa_function_pool[25359]: GetFragDataLocationEXT (will be remapped) */ "ip\0" "glGetFragDataLocationEXT\0" "glGetFragDataLocation\0" "\0" - /* _mesa_function_pool[25256]: GetMinmaxParameteriv (offset 366) */ + /* _mesa_function_pool[25410]: GetMinmaxParameteriv (offset 366) */ "iip\0" "glGetMinmaxParameteriv\0" "glGetMinmaxParameterivEXT\0" "\0" - /* _mesa_function_pool[25310]: PixelTransferf (offset 247) */ + /* _mesa_function_pool[25464]: PixelTransferf (offset 247) */ "if\0" "glPixelTransferf\0" "\0" - /* _mesa_function_pool[25331]: CopyTexImage1D (offset 323) */ + /* _mesa_function_pool[25485]: CopyTexImage1D (offset 323) */ "iiiiiii\0" "glCopyTexImage1D\0" "glCopyTexImage1DEXT\0" "\0" - /* _mesa_function_pool[25377]: PushMatrix (offset 298) */ + /* _mesa_function_pool[25531]: PushMatrix (offset 298) */ "\0" "glPushMatrix\0" "\0" - /* _mesa_function_pool[25392]: Fogiv (offset 156) */ + /* _mesa_function_pool[25546]: Fogiv (offset 156) */ "ip\0" "glFogiv\0" "\0" - /* _mesa_function_pool[25404]: TexCoord1dv (offset 95) */ + /* _mesa_function_pool[25558]: TexCoord1dv (offset 95) */ "p\0" "glTexCoord1dv\0" "\0" - /* _mesa_function_pool[25421]: AlphaFragmentOp3ATI (will be remapped) */ + /* _mesa_function_pool[25575]: AlphaFragmentOp3ATI (will be remapped) */ "iiiiiiiiiiii\0" "glAlphaFragmentOp3ATI\0" "\0" - /* _mesa_function_pool[25457]: PixelTransferi (offset 248) */ + /* _mesa_function_pool[25611]: PixelTransferi (offset 248) */ "ii\0" "glPixelTransferi\0" "\0" - /* _mesa_function_pool[25478]: GetnColorTableARB (will be remapped) */ + /* _mesa_function_pool[25632]: GetnColorTableARB (will be remapped) */ "iiiip\0" "glGetnColorTableARB\0" "\0" - /* _mesa_function_pool[25505]: VertexAttrib3fvNV (will be remapped) */ + /* _mesa_function_pool[25659]: VertexAttrib3fvNV (will be remapped) */ "ip\0" "glVertexAttrib3fvNV\0" "\0" - /* _mesa_function_pool[25529]: Rotatef (offset 300) */ + /* _mesa_function_pool[25683]: Rotatef (offset 300) */ "ffff\0" "glRotatef\0" "\0" - /* _mesa_function_pool[25545]: GetFinalCombinerInputParameterivNV (will be remapped) */ + /* _mesa_function_pool[25699]: GetFinalCombinerInputParameterivNV (will be remapped) */ "iip\0" "glGetFinalCombinerInputParameterivNV\0" "\0" - /* _mesa_function_pool[25587]: Vertex3i (offset 138) */ + /* _mesa_function_pool[25741]: Vertex3i (offset 138) */ "iii\0" "glVertex3i\0" "\0" - /* _mesa_function_pool[25603]: Vertex3f (offset 136) */ + /* _mesa_function_pool[25757]: Vertex3f (offset 136) */ "fff\0" "glVertex3f\0" "\0" - /* _mesa_function_pool[25619]: Clear (offset 203) */ + /* _mesa_function_pool[25773]: Clear (offset 203) */ "i\0" "glClear\0" "\0" - /* _mesa_function_pool[25630]: Vertex3d (offset 134) */ + /* _mesa_function_pool[25784]: Vertex3d (offset 134) */ "ddd\0" "glVertex3d\0" "\0" - /* _mesa_function_pool[25646]: GetMapParameterivNV (dynamic) */ + /* _mesa_function_pool[25800]: GetMapParameterivNV (dynamic) */ "iip\0" "glGetMapParameterivNV\0" "\0" - /* _mesa_function_pool[25673]: Uniform4iARB (will be remapped) */ + /* _mesa_function_pool[25827]: Uniform4iARB (will be remapped) */ "iiiii\0" "glUniform4i\0" "glUniform4iARB\0" "\0" - /* _mesa_function_pool[25707]: ReadBuffer (offset 254) */ + /* _mesa_function_pool[25861]: ReadBuffer (offset 254) */ "i\0" "glReadBuffer\0" "\0" - /* _mesa_function_pool[25723]: ConvolutionParameteri (offset 352) */ + /* _mesa_function_pool[25877]: ConvolutionParameteri (offset 352) */ "iii\0" "glConvolutionParameteri\0" "glConvolutionParameteriEXT\0" "\0" - /* _mesa_function_pool[25779]: Ortho (offset 296) */ + /* _mesa_function_pool[25933]: Ortho (offset 296) */ "dddddd\0" "glOrtho\0" "\0" - /* _mesa_function_pool[25795]: Binormal3sEXT (dynamic) */ + /* _mesa_function_pool[25949]: Binormal3sEXT (dynamic) */ "iii\0" "glBinormal3sEXT\0" "\0" - /* _mesa_function_pool[25816]: ListBase (offset 6) */ + /* _mesa_function_pool[25970]: ListBase (offset 6) */ "i\0" "glListBase\0" "\0" - /* _mesa_function_pool[25830]: VertexAttribI3ivEXT (will be remapped) */ + /* _mesa_function_pool[25984]: VertexAttribI3ivEXT (will be remapped) */ "ip\0" "glVertexAttribI3ivEXT\0" "glVertexAttribI3iv\0" "\0" - /* _mesa_function_pool[25875]: Vertex3s (offset 140) */ + /* _mesa_function_pool[26029]: Vertex3s (offset 140) */ "iii\0" "glVertex3s\0" "\0" - /* _mesa_function_pool[25891]: ConvolutionParameterf (offset 350) */ + /* _mesa_function_pool[26045]: ConvolutionParameterf (offset 350) */ "iif\0" "glConvolutionParameterf\0" "glConvolutionParameterfEXT\0" "\0" - /* _mesa_function_pool[25947]: GetColorTableParameteriv (offset 345) */ + /* _mesa_function_pool[26101]: GetColorTableParameteriv (offset 345) */ "iip\0" "glGetColorTableParameteriv\0" "glGetColorTableParameterivSGI\0" "glGetColorTableParameterivEXT\0" "\0" - /* _mesa_function_pool[26039]: ProgramEnvParameter4dvARB (will be remapped) */ + /* _mesa_function_pool[26193]: ProgramEnvParameter4dvARB (will be remapped) */ "iip\0" "glProgramEnvParameter4dvARB\0" "glProgramParameter4dvNV\0" "\0" - /* _mesa_function_pool[26096]: ShadeModel (offset 177) */ + /* _mesa_function_pool[26250]: ShadeModel (offset 177) */ "i\0" "glShadeModel\0" "\0" - /* _mesa_function_pool[26112]: VertexAttribs2fvNV (will be remapped) */ + /* _mesa_function_pool[26266]: VertexAttribs2fvNV (will be remapped) */ "iip\0" "glVertexAttribs2fvNV\0" "\0" - /* _mesa_function_pool[26138]: Rectiv (offset 91) */ + /* _mesa_function_pool[26292]: Rectiv (offset 91) */ "pp\0" "glRectiv\0" "\0" - /* _mesa_function_pool[26151]: UseProgramObjectARB (will be remapped) */ + /* _mesa_function_pool[26305]: UseProgramObjectARB (will be remapped) */ "i\0" "glUseProgram\0" "glUseProgramObjectARB\0" "\0" - /* _mesa_function_pool[26189]: GetMapParameterfvNV (dynamic) */ + /* _mesa_function_pool[26343]: GetMapParameterfvNV (dynamic) */ "iip\0" "glGetMapParameterfvNV\0" "\0" - /* _mesa_function_pool[26216]: EndConditionalRenderNV (will be remapped) */ + /* _mesa_function_pool[26370]: EndConditionalRenderNV (will be remapped) */ "\0" "glEndConditionalRenderNV\0" "glEndConditionalRender\0" "\0" - /* _mesa_function_pool[26266]: PassTexCoordATI (will be remapped) */ + /* _mesa_function_pool[26420]: PassTexCoordATI (will be remapped) */ "iii\0" "glPassTexCoordATI\0" "\0" - /* _mesa_function_pool[26289]: DeleteProgram (will be remapped) */ + /* _mesa_function_pool[26443]: DeleteProgram (will be remapped) */ "i\0" "glDeleteProgram\0" "\0" - /* _mesa_function_pool[26308]: GetSamplerParameteriv (will be remapped) */ + /* _mesa_function_pool[26462]: GetSamplerParameteriv (will be remapped) */ "iip\0" "glGetSamplerParameteriv\0" "\0" - /* _mesa_function_pool[26337]: Tangent3dEXT (dynamic) */ + /* _mesa_function_pool[26491]: Tangent3dEXT (dynamic) */ "ddd\0" "glTangent3dEXT\0" "\0" - /* _mesa_function_pool[26357]: SecondaryColor3dvEXT (will be remapped) */ + /* _mesa_function_pool[26511]: SecondaryColor3dvEXT (will be remapped) */ "p\0" "glSecondaryColor3dv\0" "glSecondaryColor3dvEXT\0" "\0" - /* _mesa_function_pool[26403]: AlphaFragmentOp2ATI (will be remapped) */ + /* _mesa_function_pool[26557]: AlphaFragmentOp2ATI (will be remapped) */ "iiiiiiiii\0" "glAlphaFragmentOp2ATI\0" "\0" - /* _mesa_function_pool[26436]: Vertex2fv (offset 129) */ + /* _mesa_function_pool[26590]: Vertex2fv (offset 129) */ "p\0" "glVertex2fv\0" "\0" - /* _mesa_function_pool[26451]: MultiDrawArraysEXT (will be remapped) */ + /* _mesa_function_pool[26605]: MultiDrawArraysEXT (will be remapped) */ "ippi\0" "glMultiDrawArrays\0" "glMultiDrawArraysEXT\0" "\0" - /* _mesa_function_pool[26496]: BindRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[26650]: BindRenderbufferEXT (will be remapped) */ "ii\0" "glBindRenderbuffer\0" "glBindRenderbufferEXT\0" "\0" - /* _mesa_function_pool[26541]: MultiTexCoord4dARB (offset 400) */ + /* _mesa_function_pool[26695]: MultiTexCoord4dARB (offset 400) */ "idddd\0" "glMultiTexCoord4d\0" "glMultiTexCoord4dARB\0" "\0" - /* _mesa_function_pool[26587]: FramebufferTextureFaceARB (will be remapped) */ + /* _mesa_function_pool[26741]: FramebufferTextureFaceARB (will be remapped) */ "iiiii\0" "glFramebufferTextureFaceARB\0" "\0" - /* _mesa_function_pool[26622]: Vertex3sv (offset 141) */ + /* _mesa_function_pool[26776]: Vertex3sv (offset 141) */ "p\0" "glVertex3sv\0" "\0" - /* _mesa_function_pool[26637]: SecondaryColor3usEXT (will be remapped) */ + /* _mesa_function_pool[26791]: SecondaryColor3usEXT (will be remapped) */ "iii\0" "glSecondaryColor3us\0" "glSecondaryColor3usEXT\0" "\0" - /* _mesa_function_pool[26685]: ProgramLocalParameter4fvARB (will be remapped) */ + /* _mesa_function_pool[26839]: ProgramLocalParameter4fvARB (will be remapped) */ "iip\0" "glProgramLocalParameter4fvARB\0" "\0" - /* _mesa_function_pool[26720]: DeleteProgramsNV (will be remapped) */ + /* _mesa_function_pool[26874]: DeleteProgramsNV (will be remapped) */ "ip\0" "glDeleteProgramsARB\0" "glDeleteProgramsNV\0" "\0" - /* _mesa_function_pool[26763]: EvalMesh1 (offset 236) */ + /* _mesa_function_pool[26917]: EvalMesh1 (offset 236) */ "iii\0" "glEvalMesh1\0" "\0" - /* _mesa_function_pool[26780]: PauseTransformFeedback (will be remapped) */ + /* _mesa_function_pool[26934]: PauseTransformFeedback (will be remapped) */ "\0" "glPauseTransformFeedback\0" "\0" - /* _mesa_function_pool[26807]: MultiTexCoord1sARB (offset 382) */ + /* _mesa_function_pool[26961]: MultiTexCoord1sARB (offset 382) */ "ii\0" "glMultiTexCoord1s\0" "glMultiTexCoord1sARB\0" "\0" - /* _mesa_function_pool[26850]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */ + /* _mesa_function_pool[27004]: ReplacementCodeuiColor3fVertex3fSUN (dynamic) */ "iffffff\0" "glReplacementCodeuiColor3fVertex3fSUN\0" "\0" - /* _mesa_function_pool[26897]: GetVertexAttribPointervNV (will be remapped) */ + /* _mesa_function_pool[27051]: GetVertexAttribPointervNV (will be remapped) */ "iip\0" "glGetVertexAttribPointerv\0" "glGetVertexAttribPointervARB\0" "glGetVertexAttribPointervNV\0" "\0" - /* _mesa_function_pool[26985]: VertexAttribs1fvNV (will be remapped) */ + /* _mesa_function_pool[27139]: VertexAttribs1fvNV (will be remapped) */ "iip\0" "glVertexAttribs1fvNV\0" "\0" - /* _mesa_function_pool[27011]: MultiTexCoord1dvARB (offset 377) */ + /* _mesa_function_pool[27165]: MultiTexCoord1dvARB (offset 377) */ "ip\0" "glMultiTexCoord1dv\0" "glMultiTexCoord1dvARB\0" "\0" - /* _mesa_function_pool[27056]: Uniform2iARB (will be remapped) */ + /* _mesa_function_pool[27210]: Uniform2iARB (will be remapped) */ "iii\0" "glUniform2i\0" "glUniform2iARB\0" "\0" - /* _mesa_function_pool[27088]: Vertex2iv (offset 131) */ + /* _mesa_function_pool[27242]: Vertex2iv (offset 131) */ "p\0" "glVertex2iv\0" "\0" - /* _mesa_function_pool[27103]: GetProgramStringNV (will be remapped) */ + /* _mesa_function_pool[27257]: GetProgramStringNV (will be remapped) */ "iip\0" "glGetProgramStringNV\0" "\0" - /* _mesa_function_pool[27129]: ColorPointerEXT (will be remapped) */ + /* _mesa_function_pool[27283]: ColorPointerEXT (will be remapped) */ "iiiip\0" "glColorPointerEXT\0" "\0" - /* _mesa_function_pool[27154]: LineWidth (offset 168) */ + /* _mesa_function_pool[27308]: LineWidth (offset 168) */ "f\0" "glLineWidth\0" "\0" - /* _mesa_function_pool[27169]: MapBufferARB (will be remapped) */ + /* _mesa_function_pool[27323]: MapBufferARB (will be remapped) */ "ii\0" "glMapBuffer\0" "glMapBufferARB\0" "\0" - /* _mesa_function_pool[27200]: MultiDrawElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[27354]: MultiDrawElementsBaseVertex (will be remapped) */ "ipipip\0" "glMultiDrawElementsBaseVertex\0" "\0" - /* _mesa_function_pool[27238]: TexParameterIuivEXT (will be remapped) */ + /* _mesa_function_pool[27392]: TexParameterIuivEXT (will be remapped) */ "iip\0" "glTexParameterIuivEXT\0" "glTexParameterIuiv\0" "\0" - /* _mesa_function_pool[27284]: Binormal3svEXT (dynamic) */ + /* _mesa_function_pool[27438]: Binormal3svEXT (dynamic) */ "p\0" "glBinormal3svEXT\0" "\0" - /* _mesa_function_pool[27304]: ApplyTextureEXT (dynamic) */ + /* _mesa_function_pool[27458]: ApplyTextureEXT (dynamic) */ "i\0" "glApplyTextureEXT\0" "\0" - /* _mesa_function_pool[27325]: GetBufferParameteri64v (will be remapped) */ + /* _mesa_function_pool[27479]: GetBufferParameteri64v (will be remapped) */ "iip\0" "glGetBufferParameteri64v\0" "\0" - /* _mesa_function_pool[27355]: TexGendv (offset 189) */ + /* _mesa_function_pool[27509]: TexGendv (offset 189) */ "iip\0" "glTexGendv\0" "\0" - /* _mesa_function_pool[27371]: VertexAttribI3iEXT (will be remapped) */ + /* _mesa_function_pool[27525]: VertexAttribI3iEXT (will be remapped) */ "iiii\0" "glVertexAttribI3iEXT\0" "glVertexAttribI3i\0" "\0" - /* _mesa_function_pool[27416]: EnableIndexedEXT (will be remapped) */ + /* _mesa_function_pool[27570]: EnableIndexedEXT (will be remapped) */ "ii\0" "glEnableIndexedEXT\0" "glEnablei\0" "\0" - /* _mesa_function_pool[27449]: TextureMaterialEXT (dynamic) */ + /* _mesa_function_pool[27603]: TextureMaterialEXT (dynamic) */ "ii\0" "glTextureMaterialEXT\0" "\0" - /* _mesa_function_pool[27474]: TextureLightEXT (dynamic) */ + /* _mesa_function_pool[27628]: TextureLightEXT (dynamic) */ "i\0" "glTextureLightEXT\0" "\0" - /* _mesa_function_pool[27495]: ResetMinmax (offset 370) */ + /* _mesa_function_pool[27649]: ResetMinmax (offset 370) */ "i\0" "glResetMinmax\0" "glResetMinmaxEXT\0" "\0" - /* _mesa_function_pool[27529]: SpriteParameterfSGIX (dynamic) */ + /* _mesa_function_pool[27683]: SpriteParameterfSGIX (dynamic) */ "if\0" "glSpriteParameterfSGIX\0" "\0" - /* _mesa_function_pool[27556]: EnableClientState (offset 313) */ + /* _mesa_function_pool[27710]: EnableClientState (offset 313) */ "i\0" "glEnableClientState\0" "\0" - /* _mesa_function_pool[27579]: VertexAttrib4sNV (will be remapped) */ + /* _mesa_function_pool[27733]: VertexAttrib4sNV (will be remapped) */ "iiiii\0" "glVertexAttrib4sNV\0" "\0" - /* _mesa_function_pool[27605]: GetConvolutionParameterfv (offset 357) */ + /* _mesa_function_pool[27759]: GetConvolutionParameterfv (offset 357) */ "iip\0" "glGetConvolutionParameterfv\0" "glGetConvolutionParameterfvEXT\0" "\0" - /* _mesa_function_pool[27669]: VertexAttribs4dvNV (will be remapped) */ + /* _mesa_function_pool[27823]: VertexAttribs4dvNV (will be remapped) */ "iip\0" "glVertexAttribs4dvNV\0" "\0" - /* _mesa_function_pool[27695]: MultiModeDrawArraysIBM (will be remapped) */ - "pppii\0" - "glMultiModeDrawArraysIBM\0" - "\0" - /* _mesa_function_pool[27727]: VertexAttrib4dARB (will be remapped) */ + /* _mesa_function_pool[27849]: VertexAttrib4dARB (will be remapped) */ "idddd\0" "glVertexAttrib4d\0" "glVertexAttrib4dARB\0" "\0" - /* _mesa_function_pool[27771]: GetTexBumpParameterfvATI (will be remapped) */ + /* _mesa_function_pool[27893]: GetTexBumpParameterfvATI (will be remapped) */ "ip\0" "glGetTexBumpParameterfvATI\0" "\0" - /* _mesa_function_pool[27802]: ProgramNamedParameter4dNV (will be remapped) */ + /* _mesa_function_pool[27924]: ProgramNamedParameter4dNV (will be remapped) */ "iipdddd\0" "glProgramNamedParameter4dNV\0" "\0" - /* _mesa_function_pool[27839]: GetMaterialfv (offset 269) */ + /* _mesa_function_pool[27961]: GetMaterialfv (offset 269) */ "iip\0" "glGetMaterialfv\0" "\0" - /* _mesa_function_pool[27860]: VertexWeightfEXT (dynamic) */ + /* _mesa_function_pool[27982]: VertexWeightfEXT (dynamic) */ "f\0" "glVertexWeightfEXT\0" "\0" - /* _mesa_function_pool[27882]: SetFragmentShaderConstantATI (will be remapped) */ + /* _mesa_function_pool[28004]: SetFragmentShaderConstantATI (will be remapped) */ "ip\0" "glSetFragmentShaderConstantATI\0" "\0" - /* _mesa_function_pool[27917]: Binormal3fEXT (dynamic) */ + /* _mesa_function_pool[28039]: Binormal3fEXT (dynamic) */ "fff\0" "glBinormal3fEXT\0" "\0" - /* _mesa_function_pool[27938]: CallList (offset 2) */ + /* _mesa_function_pool[28060]: CallList (offset 2) */ "i\0" "glCallList\0" "\0" - /* _mesa_function_pool[27952]: Materialfv (offset 170) */ + /* _mesa_function_pool[28074]: Materialfv (offset 170) */ "iip\0" "glMaterialfv\0" "\0" - /* _mesa_function_pool[27970]: TexCoord3fv (offset 113) */ + /* _mesa_function_pool[28092]: TexCoord3fv (offset 113) */ "p\0" "glTexCoord3fv\0" "\0" - /* _mesa_function_pool[27987]: FogCoordfvEXT (will be remapped) */ + /* _mesa_function_pool[28109]: FogCoordfvEXT (will be remapped) */ "p\0" "glFogCoordfv\0" "glFogCoordfvEXT\0" "\0" - /* _mesa_function_pool[28019]: MultiTexCoord1ivARB (offset 381) */ + /* _mesa_function_pool[28141]: MultiTexCoord1ivARB (offset 381) */ "ip\0" "glMultiTexCoord1iv\0" "glMultiTexCoord1ivARB\0" "\0" - /* _mesa_function_pool[28064]: SecondaryColor3ubEXT (will be remapped) */ + /* _mesa_function_pool[28186]: SecondaryColor3ubEXT (will be remapped) */ "iii\0" "glSecondaryColor3ub\0" "glSecondaryColor3ubEXT\0" "\0" - /* _mesa_function_pool[28112]: MultiTexCoord2ivARB (offset 389) */ + /* _mesa_function_pool[28234]: MultiTexCoord2ivARB (offset 389) */ "ip\0" "glMultiTexCoord2iv\0" "glMultiTexCoord2ivARB\0" "\0" - /* _mesa_function_pool[28157]: FogFuncSGIS (dynamic) */ + /* _mesa_function_pool[28279]: FogFuncSGIS (dynamic) */ "ip\0" "glFogFuncSGIS\0" "\0" - /* _mesa_function_pool[28175]: CopyTexSubImage2D (offset 326) */ + /* _mesa_function_pool[28297]: CopyTexSubImage2D (offset 326) */ "iiiiiiii\0" "glCopyTexSubImage2D\0" "glCopyTexSubImage2DEXT\0" "\0" - /* _mesa_function_pool[28228]: GetObjectParameterivARB (will be remapped) */ + /* _mesa_function_pool[28350]: GetObjectParameterivARB (will be remapped) */ "iip\0" "glGetObjectParameterivARB\0" "\0" - /* _mesa_function_pool[28259]: Color3iv (offset 16) */ + /* _mesa_function_pool[28381]: Color3iv (offset 16) */ "p\0" "glColor3iv\0" "\0" - /* _mesa_function_pool[28273]: TexCoord4fVertex4fSUN (dynamic) */ + /* _mesa_function_pool[28395]: TexCoord4fVertex4fSUN (dynamic) */ "ffffffff\0" "glTexCoord4fVertex4fSUN\0" "\0" - /* _mesa_function_pool[28307]: DrawElements (offset 311) */ + /* _mesa_function_pool[28429]: DrawElements (offset 311) */ "iiip\0" "glDrawElements\0" "\0" - /* _mesa_function_pool[28328]: BindVertexArrayAPPLE (will be remapped) */ + /* _mesa_function_pool[28450]: BindVertexArrayAPPLE (will be remapped) */ "i\0" "glBindVertexArrayAPPLE\0" "\0" - /* _mesa_function_pool[28354]: GetProgramLocalParameterdvARB (will be remapped) */ + /* _mesa_function_pool[28476]: GetProgramLocalParameterdvARB (will be remapped) */ "iip\0" "glGetProgramLocalParameterdvARB\0" "\0" - /* _mesa_function_pool[28391]: GetHistogramParameteriv (offset 363) */ + /* _mesa_function_pool[28513]: GetHistogramParameteriv (offset 363) */ "iip\0" "glGetHistogramParameteriv\0" "glGetHistogramParameterivEXT\0" "\0" - /* _mesa_function_pool[28451]: MultiTexCoord1iARB (offset 380) */ + /* _mesa_function_pool[28573]: MultiTexCoord1iARB (offset 380) */ "ii\0" "glMultiTexCoord1i\0" "glMultiTexCoord1iARB\0" "\0" - /* _mesa_function_pool[28494]: GetConvolutionFilter (offset 356) */ + /* _mesa_function_pool[28616]: GetConvolutionFilter (offset 356) */ "iiip\0" "glGetConvolutionFilter\0" "glGetConvolutionFilterEXT\0" "\0" - /* _mesa_function_pool[28549]: GetProgramivARB (will be remapped) */ + /* _mesa_function_pool[28671]: GetProgramivARB (will be remapped) */ "iip\0" "glGetProgramivARB\0" "\0" - /* _mesa_function_pool[28572]: TexBufferARB (will be remapped) */ + /* _mesa_function_pool[28694]: TexBufferARB (will be remapped) */ "iii\0" "glTexBufferARB\0" "\0" - /* _mesa_function_pool[28592]: BlendFuncSeparateEXT (will be remapped) */ + /* _mesa_function_pool[28714]: BlendFuncSeparateEXT (will be remapped) */ "iiii\0" "glBlendFuncSeparate\0" "glBlendFuncSeparateEXT\0" "glBlendFuncSeparateINGR\0" "\0" - /* _mesa_function_pool[28665]: MapBufferRange (will be remapped) */ + /* _mesa_function_pool[28787]: MapBufferRange (will be remapped) */ "iiii\0" "glMapBufferRange\0" "\0" - /* _mesa_function_pool[28688]: ProgramParameters4dvNV (will be remapped) */ + /* _mesa_function_pool[28810]: ProgramParameters4dvNV (will be remapped) */ "iiip\0" "glProgramParameters4dvNV\0" "\0" - /* _mesa_function_pool[28719]: TexCoord2fColor3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[28841]: TexCoord2fColor3fVertex3fvSUN (dynamic) */ "ppp\0" "glTexCoord2fColor3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[28756]: EvalPoint2 (offset 239) */ + /* _mesa_function_pool[28878]: EvalPoint2 (offset 239) */ "ii\0" "glEvalPoint2\0" "\0" - /* _mesa_function_pool[28773]: Uniform1uivEXT (will be remapped) */ + /* _mesa_function_pool[28895]: Uniform1uivEXT (will be remapped) */ "iip\0" "glUniform1uivEXT\0" "glUniform1uiv\0" "\0" - /* _mesa_function_pool[28809]: EvalPoint1 (offset 237) */ + /* _mesa_function_pool[28931]: EvalPoint1 (offset 237) */ "i\0" "glEvalPoint1\0" "\0" - /* _mesa_function_pool[28825]: Binormal3dvEXT (dynamic) */ + /* _mesa_function_pool[28947]: Binormal3dvEXT (dynamic) */ "p\0" "glBinormal3dvEXT\0" "\0" - /* _mesa_function_pool[28845]: PopMatrix (offset 297) */ + /* _mesa_function_pool[28967]: PopMatrix (offset 297) */ "\0" "glPopMatrix\0" "\0" - /* _mesa_function_pool[28859]: GetVertexAttribIuivEXT (will be remapped) */ - "iip\0" - "glGetVertexAttribIuivEXT\0" - "glGetVertexAttribIuiv\0" - "\0" - /* _mesa_function_pool[28911]: FinishFenceNV (will be remapped) */ + /* _mesa_function_pool[28981]: FinishFenceNV (will be remapped) */ "i\0" "glFinishFenceNV\0" "\0" - /* _mesa_function_pool[28930]: GetFogFuncSGIS (dynamic) */ + /* _mesa_function_pool[29000]: GetFogFuncSGIS (dynamic) */ "p\0" "glGetFogFuncSGIS\0" "\0" - /* _mesa_function_pool[28950]: GetUniformLocationARB (will be remapped) */ + /* _mesa_function_pool[29020]: GetUniformLocationARB (will be remapped) */ "ip\0" "glGetUniformLocation\0" "glGetUniformLocationARB\0" "\0" - /* _mesa_function_pool[28999]: SecondaryColor3fEXT (will be remapped) */ + /* _mesa_function_pool[29069]: SecondaryColor3fEXT (will be remapped) */ "fff\0" "glSecondaryColor3f\0" "glSecondaryColor3fEXT\0" "\0" - /* _mesa_function_pool[29045]: GetTexGeniv (offset 280) */ + /* _mesa_function_pool[29115]: GetTexGeniv (offset 280) */ "iip\0" "glGetTexGeniv\0" "\0" - /* _mesa_function_pool[29064]: CombinerInputNV (will be remapped) */ + /* _mesa_function_pool[29134]: CombinerInputNV (will be remapped) */ "iiiiii\0" "glCombinerInputNV\0" "\0" - /* _mesa_function_pool[29090]: VertexAttrib3sARB (will be remapped) */ + /* _mesa_function_pool[29160]: VertexAttrib3sARB (will be remapped) */ "iiii\0" "glVertexAttrib3s\0" "glVertexAttrib3sARB\0" "\0" - /* _mesa_function_pool[29133]: IsTransformFeedback (will be remapped) */ + /* _mesa_function_pool[29203]: IsTransformFeedback (will be remapped) */ "i\0" "glIsTransformFeedback\0" "\0" - /* _mesa_function_pool[29158]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */ + /* _mesa_function_pool[29228]: ReplacementCodeuiNormal3fVertex3fvSUN (dynamic) */ "ppp\0" "glReplacementCodeuiNormal3fVertex3fvSUN\0" "\0" - /* _mesa_function_pool[29203]: Map2d (offset 222) */ + /* _mesa_function_pool[29273]: Map2d (offset 222) */ "iddiiddiip\0" "glMap2d\0" "\0" - /* _mesa_function_pool[29223]: Map2f (offset 223) */ + /* _mesa_function_pool[29293]: Map2f (offset 223) */ "iffiiffiip\0" "glMap2f\0" "\0" - /* _mesa_function_pool[29243]: ProgramStringARB (will be remapped) */ + /* _mesa_function_pool[29313]: ProgramStringARB (will be remapped) */ "iiip\0" "glProgramStringARB\0" "\0" - /* _mesa_function_pool[29268]: Vertex4s (offset 148) */ + /* _mesa_function_pool[29338]: Vertex4s (offset 148) */ "iiii\0" "glVertex4s\0" "\0" - /* _mesa_function_pool[29285]: TexCoord4fVertex4fvSUN (dynamic) */ + /* _mesa_function_pool[29355]: TexCoord4fVertex4fvSUN (dynamic) */ "pp\0" "glTexCoord4fVertex4fvSUN\0" "\0" - /* _mesa_function_pool[29314]: FragmentLightModelivSGIX (dynamic) */ + /* _mesa_function_pool[29384]: FragmentLightModelivSGIX (dynamic) */ "ip\0" "glFragmentLightModelivSGIX\0" "\0" - /* _mesa_function_pool[29345]: VertexAttrib1fNV (will be remapped) */ + /* _mesa_function_pool[29415]: VertexAttrib1fNV (will be remapped) */ "if\0" "glVertexAttrib1fNV\0" "\0" - /* _mesa_function_pool[29368]: Vertex4f (offset 144) */ + /* _mesa_function_pool[29438]: Vertex4f (offset 144) */ "ffff\0" "glVertex4f\0" "\0" - /* _mesa_function_pool[29385]: EvalCoord1d (offset 228) */ + /* _mesa_function_pool[29455]: EvalCoord1d (offset 228) */ "d\0" "glEvalCoord1d\0" "\0" - /* _mesa_function_pool[29402]: Vertex4d (offset 142) */ + /* _mesa_function_pool[29472]: Vertex4d (offset 142) */ "dddd\0" "glVertex4d\0" "\0" - /* _mesa_function_pool[29419]: RasterPos4dv (offset 79) */ + /* _mesa_function_pool[29489]: RasterPos4dv (offset 79) */ "p\0" "glRasterPos4dv\0" "\0" - /* _mesa_function_pool[29437]: UseShaderProgramEXT (will be remapped) */ + /* _mesa_function_pool[29507]: UseShaderProgramEXT (will be remapped) */ "ii\0" "glUseShaderProgramEXT\0" "\0" - /* _mesa_function_pool[29463]: FragmentLightfSGIX (dynamic) */ + /* _mesa_function_pool[29533]: FragmentLightfSGIX (dynamic) */ "iif\0" "glFragmentLightfSGIX\0" "\0" - /* _mesa_function_pool[29489]: GetCompressedTexImageARB (will be remapped) */ + /* _mesa_function_pool[29559]: GetCompressedTexImageARB (will be remapped) */ "iip\0" "glGetCompressedTexImage\0" "glGetCompressedTexImageARB\0" "\0" - /* _mesa_function_pool[29545]: GetTexGenfv (offset 279) */ + /* _mesa_function_pool[29615]: GetTexGenfv (offset 279) */ "iip\0" "glGetTexGenfv\0" "\0" - /* _mesa_function_pool[29564]: Vertex4i (offset 146) */ + /* _mesa_function_pool[29634]: Vertex4i (offset 146) */ "iiii\0" "glVertex4i\0" "\0" - /* _mesa_function_pool[29581]: VertexWeightPointerEXT (dynamic) */ + /* _mesa_function_pool[29651]: VertexWeightPointerEXT (dynamic) */ "iiip\0" "glVertexWeightPointerEXT\0" "\0" - /* _mesa_function_pool[29612]: GetHistogram (offset 361) */ + /* _mesa_function_pool[29682]: GetHistogram (offset 361) */ "iiiip\0" "glGetHistogram\0" "glGetHistogramEXT\0" "\0" - /* _mesa_function_pool[29652]: ActiveStencilFaceEXT (will be remapped) */ + /* _mesa_function_pool[29722]: ActiveStencilFaceEXT (will be remapped) */ "i\0" "glActiveStencilFaceEXT\0" "\0" - /* _mesa_function_pool[29678]: StencilFuncSeparateATI (will be remapped) */ + /* _mesa_function_pool[29748]: StencilFuncSeparateATI (will be remapped) */ "iiii\0" "glStencilFuncSeparateATI\0" "\0" - /* _mesa_function_pool[29709]: Materialf (offset 169) */ + /* _mesa_function_pool[29779]: Materialf (offset 169) */ "iif\0" "glMaterialf\0" "\0" - /* _mesa_function_pool[29726]: GetShaderSourceARB (will be remapped) */ + /* _mesa_function_pool[29796]: GetShaderSourceARB (will be remapped) */ "iipp\0" "glGetShaderSource\0" "glGetShaderSourceARB\0" "\0" - /* _mesa_function_pool[29771]: IglooInterfaceSGIX (dynamic) */ + /* _mesa_function_pool[29841]: IglooInterfaceSGIX (dynamic) */ "ip\0" "glIglooInterfaceSGIX\0" "\0" - /* _mesa_function_pool[29796]: Materiali (offset 171) */ + /* _mesa_function_pool[29866]: Materiali (offset 171) */ "iii\0" "glMateriali\0" "\0" - /* _mesa_function_pool[29813]: VertexAttrib4dNV (will be remapped) */ + /* _mesa_function_pool[29883]: VertexAttrib4dNV (will be remapped) */ "idddd\0" "glVertexAttrib4dNV\0" "\0" - /* _mesa_function_pool[29839]: MultiModeDrawElementsIBM (will be remapped) */ + /* _mesa_function_pool[29909]: MultiModeDrawElementsIBM (will be remapped) */ "ppipii\0" "glMultiModeDrawElementsIBM\0" "\0" - /* _mesa_function_pool[29874]: Indexsv (offset 51) */ + /* _mesa_function_pool[29944]: Indexsv (offset 51) */ "p\0" "glIndexsv\0" "\0" - /* _mesa_function_pool[29887]: MultiTexCoord4svARB (offset 407) */ + /* _mesa_function_pool[29957]: MultiTexCoord4svARB (offset 407) */ "ip\0" "glMultiTexCoord4sv\0" "glMultiTexCoord4svARB\0" "\0" - /* _mesa_function_pool[29932]: LightModelfv (offset 164) */ + /* _mesa_function_pool[30002]: LightModelfv (offset 164) */ "ip\0" "glLightModelfv\0" "\0" - /* _mesa_function_pool[29951]: TexCoord2dv (offset 103) */ + /* _mesa_function_pool[30021]: TexCoord2dv (offset 103) */ "p\0" "glTexCoord2dv\0" "\0" - /* _mesa_function_pool[29968]: GenQueriesARB (will be remapped) */ + /* _mesa_function_pool[30038]: GenQueriesARB (will be remapped) */ "ip\0" "glGenQueries\0" "glGenQueriesARB\0" "\0" - /* _mesa_function_pool[30001]: EvalCoord1dv (offset 229) */ + /* _mesa_function_pool[30071]: EvalCoord1dv (offset 229) */ "p\0" "glEvalCoord1dv\0" "\0" - /* _mesa_function_pool[30019]: ReplacementCodeuiVertex3fSUN (dynamic) */ + /* _mesa_function_pool[30089]: ReplacementCodeuiVertex3fSUN (dynamic) */ "ifff\0" "glReplacementCodeuiVertex3fSUN\0" "\0" - /* _mesa_function_pool[30056]: Translated (offset 303) */ + /* _mesa_function_pool[30126]: Translated (offset 303) */ "ddd\0" "glTranslated\0" "\0" - /* _mesa_function_pool[30074]: Translatef (offset 304) */ + /* _mesa_function_pool[30144]: Translatef (offset 304) */ "fff\0" "glTranslatef\0" "\0" - /* _mesa_function_pool[30092]: Uniform3uiEXT (will be remapped) */ + /* _mesa_function_pool[30162]: Uniform3uiEXT (will be remapped) */ "iiii\0" "glUniform3uiEXT\0" "glUniform3ui\0" "\0" - /* _mesa_function_pool[30127]: StencilMask (offset 209) */ + /* _mesa_function_pool[30197]: StencilMask (offset 209) */ "i\0" "glStencilMask\0" "\0" - /* _mesa_function_pool[30144]: Tangent3iEXT (dynamic) */ + /* _mesa_function_pool[30214]: Tangent3iEXT (dynamic) */ "iii\0" "glTangent3iEXT\0" "\0" - /* _mesa_function_pool[30164]: ClampColorARB (will be remapped) */ + /* _mesa_function_pool[30234]: ClampColorARB (will be remapped) */ "ii\0" "glClampColorARB\0" "\0" - /* _mesa_function_pool[30184]: GetLightiv (offset 265) */ + /* _mesa_function_pool[30254]: GetLightiv (offset 265) */ "iip\0" "glGetLightiv\0" "\0" - /* _mesa_function_pool[30202]: GetSamplerParameterIiv (will be remapped) */ + /* _mesa_function_pool[30272]: GetSamplerParameterIiv (will be remapped) */ "iip\0" "glGetSamplerParameterIiv\0" "\0" - /* _mesa_function_pool[30232]: DrawMeshArraysSUN (dynamic) */ + /* _mesa_function_pool[30302]: DrawMeshArraysSUN (dynamic) */ "iiii\0" "glDrawMeshArraysSUN\0" "\0" - /* _mesa_function_pool[30258]: IsList (offset 287) */ + /* _mesa_function_pool[30328]: IsList (offset 287) */ "i\0" "glIsList\0" "\0" - /* _mesa_function_pool[30270]: IsSync (will be remapped) */ + /* _mesa_function_pool[30340]: IsSync (will be remapped) */ "i\0" "glIsSync\0" "\0" - /* _mesa_function_pool[30282]: RenderMode (offset 196) */ + /* _mesa_function_pool[30352]: RenderMode (offset 196) */ "i\0" "glRenderMode\0" "\0" - /* _mesa_function_pool[30298]: GetMapControlPointsNV (dynamic) */ + /* _mesa_function_pool[30368]: GetMapControlPointsNV (dynamic) */ "iiiiiip\0" "glGetMapControlPointsNV\0" "\0" - /* _mesa_function_pool[30331]: DrawBuffersARB (will be remapped) */ + /* _mesa_function_pool[30401]: DrawBuffersARB (will be remapped) */ "ip\0" "glDrawBuffers\0" "glDrawBuffersARB\0" "glDrawBuffersATI\0" "\0" - /* _mesa_function_pool[30383]: ClearBufferiv (will be remapped) */ + /* _mesa_function_pool[30453]: ClearBufferiv (will be remapped) */ "iip\0" "glClearBufferiv\0" "\0" - /* _mesa_function_pool[30404]: ProgramLocalParameter4fARB (will be remapped) */ + /* _mesa_function_pool[30474]: ProgramLocalParameter4fARB (will be remapped) */ "iiffff\0" "glProgramLocalParameter4fARB\0" "\0" - /* _mesa_function_pool[30441]: SpriteParameterivSGIX (dynamic) */ + /* _mesa_function_pool[30511]: SpriteParameterivSGIX (dynamic) */ "ip\0" "glSpriteParameterivSGIX\0" "\0" - /* _mesa_function_pool[30469]: ProvokingVertexEXT (will be remapped) */ + /* _mesa_function_pool[30539]: ProvokingVertexEXT (will be remapped) */ "i\0" "glProvokingVertexEXT\0" "glProvokingVertex\0" "\0" - /* _mesa_function_pool[30511]: MultiTexCoord1fARB (offset 378) */ + /* _mesa_function_pool[30581]: MultiTexCoord1fARB (offset 378) */ "if\0" "glMultiTexCoord1f\0" "glMultiTexCoord1fARB\0" "\0" - /* _mesa_function_pool[30554]: LoadName (offset 198) */ + /* _mesa_function_pool[30624]: LoadName (offset 198) */ "i\0" "glLoadName\0" "\0" - /* _mesa_function_pool[30568]: VertexAttribs4ubvNV (will be remapped) */ + /* _mesa_function_pool[30638]: VertexAttribs4ubvNV (will be remapped) */ "iip\0" "glVertexAttribs4ubvNV\0" "\0" - /* _mesa_function_pool[30595]: WeightsvARB (dynamic) */ + /* _mesa_function_pool[30665]: WeightsvARB (dynamic) */ "ip\0" "glWeightsvARB\0" "\0" - /* _mesa_function_pool[30613]: Uniform1fvARB (will be remapped) */ + /* _mesa_function_pool[30683]: Uniform1fvARB (will be remapped) */ "iip\0" "glUniform1fv\0" "glUniform1fvARB\0" "\0" - /* _mesa_function_pool[30647]: CopyTexSubImage1D (offset 325) */ + /* _mesa_function_pool[30717]: CopyTexSubImage1D (offset 325) */ "iiiiii\0" "glCopyTexSubImage1D\0" "glCopyTexSubImage1DEXT\0" "\0" - /* _mesa_function_pool[30698]: CullFace (offset 152) */ + /* _mesa_function_pool[30768]: CullFace (offset 152) */ "i\0" "glCullFace\0" "\0" - /* _mesa_function_pool[30712]: BindTexture (offset 307) */ + /* _mesa_function_pool[30782]: BindTexture (offset 307) */ "ii\0" "glBindTexture\0" "glBindTextureEXT\0" "\0" - /* _mesa_function_pool[30747]: BeginFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[30817]: BeginFragmentShaderATI (will be remapped) */ "\0" "glBeginFragmentShaderATI\0" "\0" - /* _mesa_function_pool[30774]: MultiTexCoord4fARB (offset 402) */ + /* _mesa_function_pool[30844]: MultiTexCoord4fARB (offset 402) */ "iffff\0" "glMultiTexCoord4f\0" "glMultiTexCoord4fARB\0" "\0" - /* _mesa_function_pool[30820]: VertexAttribs3svNV (will be remapped) */ + /* _mesa_function_pool[30890]: VertexAttribs3svNV (will be remapped) */ "iip\0" "glVertexAttribs3svNV\0" "\0" - /* _mesa_function_pool[30846]: StencilFunc (offset 243) */ + /* _mesa_function_pool[30916]: StencilFunc (offset 243) */ "iii\0" "glStencilFunc\0" "\0" - /* _mesa_function_pool[30865]: CopyPixels (offset 255) */ + /* _mesa_function_pool[30935]: CopyPixels (offset 255) */ "iiiii\0" "glCopyPixels\0" "\0" - /* _mesa_function_pool[30885]: Rectsv (offset 93) */ + /* _mesa_function_pool[30955]: Rectsv (offset 93) */ "pp\0" "glRectsv\0" "\0" - /* _mesa_function_pool[30898]: ReplacementCodeuivSUN (dynamic) */ + /* _mesa_function_pool[30968]: ReplacementCodeuivSUN (dynamic) */ "p\0" "glReplacementCodeuivSUN\0" "\0" - /* _mesa_function_pool[30925]: EnableVertexAttribArrayARB (will be remapped) */ + /* _mesa_function_pool[30995]: EnableVertexAttribArrayARB (will be remapped) */ "i\0" "glEnableVertexAttribArray\0" "glEnableVertexAttribArrayARB\0" "\0" - /* _mesa_function_pool[30983]: NormalPointervINTEL (dynamic) */ + /* _mesa_function_pool[31053]: NormalPointervINTEL (dynamic) */ "ip\0" "glNormalPointervINTEL\0" "\0" - /* _mesa_function_pool[31009]: CopyConvolutionFilter2D (offset 355) */ + /* _mesa_function_pool[31079]: CopyConvolutionFilter2D (offset 355) */ "iiiiii\0" "glCopyConvolutionFilter2D\0" "glCopyConvolutionFilter2DEXT\0" "\0" - /* _mesa_function_pool[31072]: WindowPos3ivMESA (will be remapped) */ + /* _mesa_function_pool[31142]: WindowPos3ivMESA (will be remapped) */ "p\0" "glWindowPos3iv\0" "glWindowPos3ivARB\0" "glWindowPos3ivMESA\0" "\0" - /* _mesa_function_pool[31127]: CopyBufferSubData (will be remapped) */ + /* _mesa_function_pool[31197]: CopyBufferSubData (will be remapped) */ "iiiii\0" "glCopyBufferSubData\0" "\0" - /* _mesa_function_pool[31154]: NormalPointer (offset 318) */ + /* _mesa_function_pool[31224]: NormalPointer (offset 318) */ "iip\0" "glNormalPointer\0" "\0" - /* _mesa_function_pool[31175]: TexParameterfv (offset 179) */ + /* _mesa_function_pool[31245]: TexParameterfv (offset 179) */ "iip\0" "glTexParameterfv\0" "\0" - /* _mesa_function_pool[31197]: IsBufferARB (will be remapped) */ + /* _mesa_function_pool[31267]: IsBufferARB (will be remapped) */ "i\0" "glIsBuffer\0" "glIsBufferARB\0" "\0" - /* _mesa_function_pool[31225]: WindowPos4iMESA (will be remapped) */ + /* _mesa_function_pool[31295]: WindowPos4iMESA (will be remapped) */ "iiii\0" "glWindowPos4iMESA\0" "\0" - /* _mesa_function_pool[31249]: VertexAttrib4uivARB (will be remapped) */ + /* _mesa_function_pool[31319]: VertexAttrib4uivARB (will be remapped) */ "ip\0" "glVertexAttrib4uiv\0" "glVertexAttrib4uivARB\0" "\0" - /* _mesa_function_pool[31294]: Tangent3bvEXT (dynamic) */ + /* _mesa_function_pool[31364]: Tangent3bvEXT (dynamic) */ "p\0" "glTangent3bvEXT\0" "\0" - /* _mesa_function_pool[31313]: VertexAttribI3uivEXT (will be remapped) */ + /* _mesa_function_pool[31383]: VertexAttribI3uivEXT (will be remapped) */ "ip\0" "glVertexAttribI3uivEXT\0" "glVertexAttribI3uiv\0" "\0" - /* _mesa_function_pool[31360]: UniformMatrix3x4fv (will be remapped) */ + /* _mesa_function_pool[31430]: UniformMatrix3x4fv (will be remapped) */ "iiip\0" "glUniformMatrix3x4fv\0" "\0" - /* _mesa_function_pool[31387]: ClipPlane (offset 150) */ + /* _mesa_function_pool[31457]: ClipPlane (offset 150) */ "ip\0" "glClipPlane\0" "\0" - /* _mesa_function_pool[31403]: Recti (offset 90) */ + /* _mesa_function_pool[31473]: Recti (offset 90) */ "iiii\0" "glRecti\0" "\0" - /* _mesa_function_pool[31417]: TrackMatrixNV (will be remapped) */ + /* _mesa_function_pool[31487]: TrackMatrixNV (will be remapped) */ "iiii\0" "glTrackMatrixNV\0" "\0" - /* _mesa_function_pool[31439]: DrawRangeElementsBaseVertex (will be remapped) */ + /* _mesa_function_pool[31509]: DrawRangeElementsBaseVertex (will be remapped) */ "iiiiipi\0" "glDrawRangeElementsBaseVertex\0" "\0" - /* _mesa_function_pool[31478]: SamplerParameterIuiv (will be remapped) */ + /* _mesa_function_pool[31548]: SamplerParameterIuiv (will be remapped) */ "iip\0" "glSamplerParameterIuiv\0" "\0" - /* _mesa_function_pool[31506]: TexCoordPointervINTEL (dynamic) */ + /* _mesa_function_pool[31576]: TexCoordPointervINTEL (dynamic) */ "iip\0" "glTexCoordPointervINTEL\0" "\0" - /* _mesa_function_pool[31535]: DeleteBuffersARB (will be remapped) */ + /* _mesa_function_pool[31605]: DeleteBuffersARB (will be remapped) */ "ip\0" "glDeleteBuffers\0" "glDeleteBuffersARB\0" "\0" - /* _mesa_function_pool[31574]: PixelTransformParameterfvEXT (dynamic) */ + /* _mesa_function_pool[31644]: PixelTransformParameterfvEXT (dynamic) */ "iip\0" "glPixelTransformParameterfvEXT\0" "\0" - /* _mesa_function_pool[31610]: PrimitiveRestartNV (will be remapped) */ + /* _mesa_function_pool[31680]: PrimitiveRestartNV (will be remapped) */ "\0" "glPrimitiveRestartNV\0" "\0" - /* _mesa_function_pool[31633]: WindowPos4fvMESA (will be remapped) */ + /* _mesa_function_pool[31703]: WindowPos4fvMESA (will be remapped) */ "p\0" "glWindowPos4fvMESA\0" "\0" - /* _mesa_function_pool[31655]: GetPixelMapuiv (offset 272) */ + /* _mesa_function_pool[31725]: GetPixelMapuiv (offset 272) */ "ip\0" "glGetPixelMapuiv\0" "\0" - /* _mesa_function_pool[31676]: Rectf (offset 88) */ + /* _mesa_function_pool[31746]: Rectf (offset 88) */ "ffff\0" "glRectf\0" "\0" - /* _mesa_function_pool[31690]: VertexAttrib1sNV (will be remapped) */ + /* _mesa_function_pool[31760]: VertexAttrib1sNV (will be remapped) */ "ii\0" "glVertexAttrib1sNV\0" "\0" - /* _mesa_function_pool[31713]: Indexfv (offset 47) */ + /* _mesa_function_pool[31783]: Indexfv (offset 47) */ "p\0" "glIndexfv\0" "\0" - /* _mesa_function_pool[31726]: SecondaryColor3svEXT (will be remapped) */ + /* _mesa_function_pool[31796]: SecondaryColor3svEXT (will be remapped) */ "p\0" "glSecondaryColor3sv\0" "glSecondaryColor3svEXT\0" "\0" - /* _mesa_function_pool[31772]: LoadTransposeMatrixfARB (will be remapped) */ + /* _mesa_function_pool[31842]: LoadTransposeMatrixfARB (will be remapped) */ "p\0" "glLoadTransposeMatrixf\0" "glLoadTransposeMatrixfARB\0" "\0" - /* _mesa_function_pool[31824]: GetPointerv (offset 329) */ + /* _mesa_function_pool[31894]: GetPointerv (offset 329) */ "ip\0" "glGetPointerv\0" "glGetPointervEXT\0" "\0" - /* _mesa_function_pool[31859]: Tangent3bEXT (dynamic) */ + /* _mesa_function_pool[31929]: Tangent3bEXT (dynamic) */ "iii\0" "glTangent3bEXT\0" "\0" - /* _mesa_function_pool[31879]: CombinerParameterfNV (will be remapped) */ + /* _mesa_function_pool[31949]: CombinerParameterfNV (will be remapped) */ "if\0" "glCombinerParameterfNV\0" "\0" - /* _mesa_function_pool[31906]: IndexMask (offset 212) */ + /* _mesa_function_pool[31976]: IndexMask (offset 212) */ "i\0" "glIndexMask\0" "\0" - /* _mesa_function_pool[31921]: BindProgramNV (will be remapped) */ + /* _mesa_function_pool[31991]: BindProgramNV (will be remapped) */ "ii\0" "glBindProgramARB\0" "glBindProgramNV\0" "\0" - /* _mesa_function_pool[31958]: VertexAttrib4svARB (will be remapped) */ + /* _mesa_function_pool[32028]: VertexAttrib4svARB (will be remapped) */ "ip\0" "glVertexAttrib4sv\0" "glVertexAttrib4svARB\0" "\0" - /* _mesa_function_pool[32001]: GetFloatv (offset 262) */ + /* _mesa_function_pool[32071]: GetFloatv (offset 262) */ "ip\0" "glGetFloatv\0" "\0" - /* _mesa_function_pool[32017]: CreateDebugObjectMESA (dynamic) */ + /* _mesa_function_pool[32087]: CreateDebugObjectMESA (dynamic) */ "\0" "glCreateDebugObjectMESA\0" "\0" - /* _mesa_function_pool[32043]: GetShaderiv (will be remapped) */ + /* _mesa_function_pool[32113]: GetShaderiv (will be remapped) */ "iip\0" "glGetShaderiv\0" "\0" - /* _mesa_function_pool[32062]: ClientWaitSync (will be remapped) */ + /* _mesa_function_pool[32132]: ClientWaitSync (will be remapped) */ "iii\0" "glClientWaitSync\0" "\0" - /* _mesa_function_pool[32084]: TexCoord4s (offset 124) */ + /* _mesa_function_pool[32154]: TexCoord4s (offset 124) */ "iiii\0" "glTexCoord4s\0" "\0" - /* _mesa_function_pool[32103]: TexCoord3sv (offset 117) */ + /* _mesa_function_pool[32173]: TexCoord3sv (offset 117) */ "p\0" "glTexCoord3sv\0" "\0" - /* _mesa_function_pool[32120]: BindFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[32190]: BindFragmentShaderATI (will be remapped) */ "i\0" "glBindFragmentShaderATI\0" "\0" - /* _mesa_function_pool[32147]: PopAttrib (offset 218) */ + /* _mesa_function_pool[32217]: PopAttrib (offset 218) */ "\0" "glPopAttrib\0" "\0" - /* _mesa_function_pool[32161]: Fogfv (offset 154) */ + /* _mesa_function_pool[32231]: Fogfv (offset 154) */ "ip\0" "glFogfv\0" "\0" - /* _mesa_function_pool[32173]: UnmapBufferARB (will be remapped) */ + /* _mesa_function_pool[32243]: UnmapBufferARB (will be remapped) */ "i\0" "glUnmapBuffer\0" "glUnmapBufferARB\0" "\0" - /* _mesa_function_pool[32207]: InitNames (offset 197) */ + /* _mesa_function_pool[32277]: InitNames (offset 197) */ "\0" "glInitNames\0" "\0" - /* _mesa_function_pool[32221]: Normal3sv (offset 61) */ + /* _mesa_function_pool[32291]: Normal3sv (offset 61) */ "p\0" "glNormal3sv\0" "\0" - /* _mesa_function_pool[32236]: Minmax (offset 368) */ + /* _mesa_function_pool[32306]: Minmax (offset 368) */ "iii\0" "glMinmax\0" "glMinmaxEXT\0" "\0" - /* _mesa_function_pool[32262]: TexCoord4d (offset 118) */ + /* _mesa_function_pool[32332]: TexCoord4d (offset 118) */ "dddd\0" "glTexCoord4d\0" "\0" - /* _mesa_function_pool[32281]: TexCoord4f (offset 120) */ + /* _mesa_function_pool[32351]: DeformationMap3dSGIX (dynamic) */ + "iddiiddiiddiip\0" + "glDeformationMap3dSGIX\0" + "\0" + /* _mesa_function_pool[32390]: TexCoord4f (offset 120) */ "ffff\0" "glTexCoord4f\0" "\0" - /* _mesa_function_pool[32300]: FogCoorddvEXT (will be remapped) */ + /* _mesa_function_pool[32409]: FogCoorddvEXT (will be remapped) */ "p\0" "glFogCoorddv\0" "glFogCoorddvEXT\0" "\0" - /* _mesa_function_pool[32332]: FinishTextureSUNX (dynamic) */ + /* _mesa_function_pool[32441]: FinishTextureSUNX (dynamic) */ "\0" "glFinishTextureSUNX\0" "\0" - /* _mesa_function_pool[32354]: GetFragmentLightfvSGIX (dynamic) */ + /* _mesa_function_pool[32463]: GetFragmentLightfvSGIX (dynamic) */ "iip\0" "glGetFragmentLightfvSGIX\0" "\0" - /* _mesa_function_pool[32384]: Binormal3fvEXT (dynamic) */ + /* _mesa_function_pool[32493]: Binormal3fvEXT (dynamic) */ "p\0" "glBinormal3fvEXT\0" "\0" - /* _mesa_function_pool[32404]: GetBooleanv (offset 258) */ + /* _mesa_function_pool[32513]: GetBooleanv (offset 258) */ "ip\0" "glGetBooleanv\0" "\0" - /* _mesa_function_pool[32422]: ColorFragmentOp3ATI (will be remapped) */ + /* _mesa_function_pool[32531]: ColorFragmentOp3ATI (will be remapped) */ "iiiiiiiiiiiii\0" "glColorFragmentOp3ATI\0" "\0" - /* _mesa_function_pool[32459]: Hint (offset 158) */ + /* _mesa_function_pool[32568]: Hint (offset 158) */ "ii\0" "glHint\0" "\0" - /* _mesa_function_pool[32470]: Color4dv (offset 28) */ + /* _mesa_function_pool[32579]: Color4dv (offset 28) */ "p\0" "glColor4dv\0" "\0" - /* _mesa_function_pool[32484]: VertexAttrib2svARB (will be remapped) */ + /* _mesa_function_pool[32593]: VertexAttrib2svARB (will be remapped) */ "ip\0" "glVertexAttrib2sv\0" "glVertexAttrib2svARB\0" "\0" - /* _mesa_function_pool[32527]: AreProgramsResidentNV (will be remapped) */ + /* _mesa_function_pool[32636]: AreProgramsResidentNV (will be remapped) */ "ipp\0" "glAreProgramsResidentNV\0" "\0" - /* _mesa_function_pool[32556]: WindowPos3svMESA (will be remapped) */ + /* _mesa_function_pool[32665]: WindowPos3svMESA (will be remapped) */ "p\0" "glWindowPos3sv\0" "glWindowPos3svARB\0" "glWindowPos3svMESA\0" "\0" - /* _mesa_function_pool[32611]: CopyColorSubTable (offset 347) */ + /* _mesa_function_pool[32720]: CopyColorSubTable (offset 347) */ "iiiii\0" "glCopyColorSubTable\0" "glCopyColorSubTableEXT\0" "\0" - /* _mesa_function_pool[32661]: WeightdvARB (dynamic) */ + /* _mesa_function_pool[32770]: WeightdvARB (dynamic) */ "ip\0" "glWeightdvARB\0" "\0" - /* _mesa_function_pool[32679]: DeleteRenderbuffersEXT (will be remapped) */ + /* _mesa_function_pool[32788]: DeleteRenderbuffersEXT (will be remapped) */ "ip\0" "glDeleteRenderbuffers\0" "glDeleteRenderbuffersEXT\0" "\0" - /* _mesa_function_pool[32730]: VertexAttrib4NubvARB (will be remapped) */ + /* _mesa_function_pool[32839]: VertexAttrib4NubvARB (will be remapped) */ "ip\0" "glVertexAttrib4Nubv\0" "glVertexAttrib4NubvARB\0" "\0" - /* _mesa_function_pool[32777]: VertexAttrib3dvNV (will be remapped) */ + /* _mesa_function_pool[32886]: VertexAttrib3dvNV (will be remapped) */ "ip\0" "glVertexAttrib3dvNV\0" "\0" - /* _mesa_function_pool[32801]: GetObjectParameterfvARB (will be remapped) */ + /* _mesa_function_pool[32910]: GetObjectParameterfvARB (will be remapped) */ "iip\0" "glGetObjectParameterfvARB\0" "\0" - /* _mesa_function_pool[32832]: Vertex4iv (offset 147) */ + /* _mesa_function_pool[32941]: Vertex4iv (offset 147) */ "p\0" "glVertex4iv\0" "\0" - /* _mesa_function_pool[32847]: GetProgramEnvParameterdvARB (will be remapped) */ + /* _mesa_function_pool[32956]: GetProgramEnvParameterdvARB (will be remapped) */ "iip\0" "glGetProgramEnvParameterdvARB\0" "\0" - /* _mesa_function_pool[32882]: TexCoord4dv (offset 119) */ + /* _mesa_function_pool[32991]: TexCoord4dv (offset 119) */ "p\0" "glTexCoord4dv\0" "\0" - /* _mesa_function_pool[32899]: LockArraysEXT (will be remapped) */ + /* _mesa_function_pool[33008]: LockArraysEXT (will be remapped) */ "ii\0" "glLockArraysEXT\0" "\0" - /* _mesa_function_pool[32919]: Begin (offset 7) */ + /* _mesa_function_pool[33028]: Begin (offset 7) */ "i\0" "glBegin\0" "\0" - /* _mesa_function_pool[32930]: LightModeli (offset 165) */ + /* _mesa_function_pool[33039]: LightModeli (offset 165) */ "ii\0" "glLightModeli\0" "\0" - /* _mesa_function_pool[32948]: VertexAttribI4ivEXT (will be remapped) */ + /* _mesa_function_pool[33057]: VertexAttribI4ivEXT (will be remapped) */ "ip\0" "glVertexAttribI4ivEXT\0" "glVertexAttribI4iv\0" "\0" - /* _mesa_function_pool[32993]: Rectfv (offset 89) */ + /* _mesa_function_pool[33102]: Rectfv (offset 89) */ "pp\0" "glRectfv\0" "\0" - /* _mesa_function_pool[33006]: BlendEquationSeparateiARB (will be remapped) */ - "iii\0" - "glBlendEquationSeparateiARB\0" - "glBlendEquationSeparateIndexedAMD\0" - "\0" - /* _mesa_function_pool[33073]: LightModelf (offset 163) */ + /* _mesa_function_pool[33115]: LightModelf (offset 163) */ "if\0" "glLightModelf\0" "\0" - /* _mesa_function_pool[33091]: GetTexParameterfv (offset 282) */ + /* _mesa_function_pool[33133]: GetTexParameterfv (offset 282) */ "iip\0" "glGetTexParameterfv\0" "\0" - /* _mesa_function_pool[33116]: GetLightfv (offset 264) */ + /* _mesa_function_pool[33158]: GetLightfv (offset 264) */ "iip\0" "glGetLightfv\0" "\0" - /* _mesa_function_pool[33134]: PixelTransformParameterivEXT (dynamic) */ + /* _mesa_function_pool[33176]: PixelTransformParameterivEXT (dynamic) */ "iip\0" "glPixelTransformParameterivEXT\0" "\0" - /* _mesa_function_pool[33170]: BinormalPointerEXT (dynamic) */ + /* _mesa_function_pool[33212]: BinormalPointerEXT (dynamic) */ "iip\0" "glBinormalPointerEXT\0" "\0" - /* _mesa_function_pool[33196]: VertexAttrib1dNV (will be remapped) */ + /* _mesa_function_pool[33238]: VertexAttrib1dNV (will be remapped) */ "id\0" "glVertexAttrib1dNV\0" "\0" - /* _mesa_function_pool[33219]: GetCombinerInputParameterivNV (will be remapped) */ + /* _mesa_function_pool[33261]: GetCombinerInputParameterivNV (will be remapped) */ "iiiip\0" "glGetCombinerInputParameterivNV\0" "\0" - /* _mesa_function_pool[33258]: Disable (offset 214) */ + /* _mesa_function_pool[33300]: Disable (offset 214) */ "i\0" "glDisable\0" "\0" - /* _mesa_function_pool[33271]: MultiTexCoord2fvARB (offset 387) */ + /* _mesa_function_pool[33313]: MultiTexCoord2fvARB (offset 387) */ "ip\0" "glMultiTexCoord2fv\0" "glMultiTexCoord2fvARB\0" "\0" - /* _mesa_function_pool[33316]: GetRenderbufferParameterivEXT (will be remapped) */ + /* _mesa_function_pool[33358]: GetRenderbufferParameterivEXT (will be remapped) */ "iip\0" "glGetRenderbufferParameteriv\0" "glGetRenderbufferParameterivEXT\0" "\0" - /* _mesa_function_pool[33382]: CombinerParameterivNV (will be remapped) */ + /* _mesa_function_pool[33424]: CombinerParameterivNV (will be remapped) */ "ip\0" "glCombinerParameterivNV\0" "\0" - /* _mesa_function_pool[33410]: GenFragmentShadersATI (will be remapped) */ + /* _mesa_function_pool[33452]: GenFragmentShadersATI (will be remapped) */ "i\0" "glGenFragmentShadersATI\0" "\0" - /* _mesa_function_pool[33437]: DrawArrays (offset 310) */ + /* _mesa_function_pool[33479]: DrawArrays (offset 310) */ "iii\0" "glDrawArrays\0" "glDrawArraysEXT\0" "\0" - /* _mesa_function_pool[33471]: WeightuivARB (dynamic) */ + /* _mesa_function_pool[33513]: WeightuivARB (dynamic) */ "ip\0" "glWeightuivARB\0" "\0" - /* _mesa_function_pool[33490]: GetVertexAttribIivEXT (will be remapped) */ + /* _mesa_function_pool[33532]: GetVertexAttribIivEXT (will be remapped) */ "iip\0" "glGetVertexAttribIivEXT\0" "glGetVertexAttribIiv\0" "\0" - /* _mesa_function_pool[33540]: VertexAttrib2sARB (will be remapped) */ + /* _mesa_function_pool[33582]: VertexAttrib2sARB (will be remapped) */ "iii\0" "glVertexAttrib2s\0" "glVertexAttrib2sARB\0" "\0" - /* _mesa_function_pool[33582]: GetnTexImageARB (will be remapped) */ + /* _mesa_function_pool[33624]: GetnTexImageARB (will be remapped) */ "iiiiip\0" "glGetnTexImageARB\0" "\0" - /* _mesa_function_pool[33608]: ColorMask (offset 210) */ + /* _mesa_function_pool[33650]: ColorMask (offset 210) */ "iiii\0" "glColorMask\0" "\0" - /* _mesa_function_pool[33626]: GenAsyncMarkersSGIX (dynamic) */ + /* _mesa_function_pool[33668]: GenAsyncMarkersSGIX (dynamic) */ "i\0" "glGenAsyncMarkersSGIX\0" "\0" - /* _mesa_function_pool[33651]: Tangent3svEXT (dynamic) */ + /* _mesa_function_pool[33693]: Tangent3svEXT (dynamic) */ "p\0" "glTangent3svEXT\0" "\0" - /* _mesa_function_pool[33670]: GetListParameterivSGIX (dynamic) */ + /* _mesa_function_pool[33712]: GetListParameterivSGIX (dynamic) */ "iip\0" "glGetListParameterivSGIX\0" "\0" - /* _mesa_function_pool[33700]: BindBufferARB (will be remapped) */ + /* _mesa_function_pool[33742]: BindBufferARB (will be remapped) */ "ii\0" "glBindBuffer\0" "glBindBufferARB\0" "\0" - /* _mesa_function_pool[33733]: GetInfoLogARB (will be remapped) */ + /* _mesa_function_pool[33775]: GetInfoLogARB (will be remapped) */ "iipp\0" "glGetInfoLogARB\0" "\0" - /* _mesa_function_pool[33755]: RasterPos4iv (offset 83) */ + /* _mesa_function_pool[33797]: RasterPos4iv (offset 83) */ "p\0" "glRasterPos4iv\0" "\0" - /* _mesa_function_pool[33773]: Enable (offset 215) */ + /* _mesa_function_pool[33815]: Enable (offset 215) */ "i\0" "glEnable\0" "\0" - /* _mesa_function_pool[33785]: LineStipple (offset 167) */ + /* _mesa_function_pool[33827]: LineStipple (offset 167) */ "ii\0" "glLineStipple\0" "\0" - /* _mesa_function_pool[33803]: VertexAttribs4svNV (will be remapped) */ + /* _mesa_function_pool[33845]: VertexAttribs4svNV (will be remapped) */ "iip\0" "glVertexAttribs4svNV\0" "\0" - /* _mesa_function_pool[33829]: EdgeFlagPointerListIBM (dynamic) */ + /* _mesa_function_pool[33871]: EdgeFlagPointerListIBM (dynamic) */ "ipi\0" "glEdgeFlagPointerListIBM\0" "\0" - /* _mesa_function_pool[33859]: UniformMatrix3x2fv (will be remapped) */ + /* _mesa_function_pool[33901]: UniformMatrix3x2fv (will be remapped) */ "iiip\0" "glUniformMatrix3x2fv\0" "\0" - /* _mesa_function_pool[33886]: GetMinmaxParameterfv (offset 365) */ + /* _mesa_function_pool[33928]: GetMinmaxParameterfv (offset 365) */ "iip\0" "glGetMinmaxParameterfv\0" "glGetMinmaxParameterfvEXT\0" "\0" - /* _mesa_function_pool[33940]: VertexAttrib1fvARB (will be remapped) */ + /* _mesa_function_pool[33982]: VertexAttrib1fvARB (will be remapped) */ "ip\0" "glVertexAttrib1fv\0" "glVertexAttrib1fvARB\0" "\0" - /* _mesa_function_pool[33983]: GenBuffersARB (will be remapped) */ + /* _mesa_function_pool[34025]: GenBuffersARB (will be remapped) */ "ip\0" "glGenBuffers\0" "glGenBuffersARB\0" "\0" - /* _mesa_function_pool[34016]: VertexAttribs1svNV (will be remapped) */ + /* _mesa_function_pool[34058]: VertexAttribs1svNV (will be remapped) */ "iip\0" "glVertexAttribs1svNV\0" "\0" - /* _mesa_function_pool[34042]: Vertex3fv (offset 137) */ + /* _mesa_function_pool[34084]: Vertex3fv (offset 137) */ "p\0" "glVertex3fv\0" "\0" - /* _mesa_function_pool[34057]: GetTexBumpParameterivATI (will be remapped) */ + /* _mesa_function_pool[34099]: GetTexBumpParameterivATI (will be remapped) */ "ip\0" "glGetTexBumpParameterivATI\0" "\0" - /* _mesa_function_pool[34088]: Binormal3bEXT (dynamic) */ + /* _mesa_function_pool[34130]: Binormal3bEXT (dynamic) */ "iii\0" "glBinormal3bEXT\0" "\0" - /* _mesa_function_pool[34109]: FragmentMaterialivSGIX (dynamic) */ + /* _mesa_function_pool[34151]: FragmentMaterialivSGIX (dynamic) */ "iip\0" "glFragmentMaterialivSGIX\0" "\0" - /* _mesa_function_pool[34139]: IsRenderbufferEXT (will be remapped) */ + /* _mesa_function_pool[34181]: IsRenderbufferEXT (will be remapped) */ "i\0" "glIsRenderbuffer\0" "glIsRenderbufferEXT\0" "\0" - /* _mesa_function_pool[34179]: GenProgramsNV (will be remapped) */ + /* _mesa_function_pool[34221]: GenProgramsNV (will be remapped) */ "ip\0" "glGenProgramsARB\0" "glGenProgramsNV\0" "\0" - /* _mesa_function_pool[34216]: VertexAttrib4dvNV (will be remapped) */ + /* _mesa_function_pool[34258]: VertexAttrib4dvNV (will be remapped) */ "ip\0" "glVertexAttrib4dvNV\0" "\0" - /* _mesa_function_pool[34240]: EndFragmentShaderATI (will be remapped) */ + /* _mesa_function_pool[34282]: EndFragmentShaderATI (will be remapped) */ "\0" "glEndFragmentShaderATI\0" "\0" - /* _mesa_function_pool[34265]: Binormal3iEXT (dynamic) */ + /* _mesa_function_pool[34307]: Binormal3iEXT (dynamic) */ "iii\0" "glBinormal3iEXT\0" "\0" - /* _mesa_function_pool[34286]: WindowPos2fMESA (will be remapped) */ + /* _mesa_function_pool[34328]: WindowPos2fMESA (will be remapped) */ "ff\0" "glWindowPos2f\0" "glWindowPos2fARB\0" @@ -4931,636 +4935,637 @@ static const char _mesa_function_pool[] = /* these functions need to be remapped */ static const struct gl_function_pool_remap MESA_remap_table_functions[] = { - { 1629, AttachShader_remap_index }, - { 10274, CreateProgram_remap_index }, - { 23765, CreateShader_remap_index }, - { 26289, DeleteProgram_remap_index }, - { 19245, DeleteShader_remap_index }, - { 24258, DetachShader_remap_index }, - { 18534, GetAttachedShaders_remap_index }, - { 5126, GetProgramInfoLog_remap_index }, - { 444, GetProgramiv_remap_index }, - { 6892, GetShaderInfoLog_remap_index }, - { 32043, GetShaderiv_remap_index }, - { 13807, IsProgram_remap_index }, - { 12698, IsShader_remap_index }, - { 10404, StencilFuncSeparate_remap_index }, - { 4156, StencilMaskSeparate_remap_index }, - { 7957, StencilOpSeparate_remap_index }, - { 22999, UniformMatrix2x3fv_remap_index }, - { 2998, UniformMatrix2x4fv_remap_index }, - { 33859, UniformMatrix3x2fv_remap_index }, - { 31360, UniformMatrix3x4fv_remap_index }, - { 16726, UniformMatrix4x2fv_remap_index }, - { 3417, UniformMatrix4x3fv_remap_index }, - { 5332, ClampColor_remap_index }, - { 18588, ClearBufferfi_remap_index }, - { 18004, ClearBufferfv_remap_index }, - { 30383, ClearBufferiv_remap_index }, - { 14012, ClearBufferuiv_remap_index }, - { 20582, GetStringi_remap_index }, - { 2900, TexBuffer_remap_index }, - { 977, FramebufferTexture_remap_index }, - { 27325, GetBufferParameteri64v_remap_index }, - { 10504, GetInteger64i_v_remap_index }, - { 24079, VertexAttribDivisor_remap_index }, - { 10292, LoadTransposeMatrixdARB_remap_index }, - { 31772, LoadTransposeMatrixfARB_remap_index }, - { 5971, MultTransposeMatrixdARB_remap_index }, - { 24445, MultTransposeMatrixfARB_remap_index }, - { 255, SampleCoverageARB_remap_index }, - { 6155, CompressedTexImage1DARB_remap_index }, - { 24973, CompressedTexImage2DARB_remap_index }, - { 4219, CompressedTexImage3DARB_remap_index }, - { 18876, CompressedTexSubImage1DARB_remap_index }, - { 2141, CompressedTexSubImage2DARB_remap_index }, - { 21004, CompressedTexSubImage3DARB_remap_index }, - { 29489, GetCompressedTexImageARB_remap_index }, - { 3983, DisableVertexAttribArrayARB_remap_index }, - { 30925, EnableVertexAttribArrayARB_remap_index }, - { 32847, GetProgramEnvParameterdvARB_remap_index }, - { 24325, GetProgramEnvParameterfvARB_remap_index }, - { 28354, GetProgramLocalParameterdvARB_remap_index }, - { 8433, GetProgramLocalParameterfvARB_remap_index }, - { 19052, GetProgramStringARB_remap_index }, - { 28549, GetProgramivARB_remap_index }, - { 21199, GetVertexAttribdvARB_remap_index }, - { 16534, GetVertexAttribfvARB_remap_index }, - { 10108, GetVertexAttribivARB_remap_index }, - { 20045, ProgramEnvParameter4dARB_remap_index }, - { 26039, ProgramEnvParameter4dvARB_remap_index }, - { 17302, ProgramEnvParameter4fARB_remap_index }, - { 9308, ProgramEnvParameter4fvARB_remap_index }, - { 4182, ProgramLocalParameter4dARB_remap_index }, - { 13517, ProgramLocalParameter4dvARB_remap_index }, - { 30404, ProgramLocalParameter4fARB_remap_index }, - { 26685, ProgramLocalParameter4fvARB_remap_index }, - { 29243, ProgramStringARB_remap_index }, - { 20313, VertexAttrib1dARB_remap_index }, - { 16161, VertexAttrib1dvARB_remap_index }, - { 4378, VertexAttrib1fARB_remap_index }, - { 33940, VertexAttrib1fvARB_remap_index }, - { 7483, VertexAttrib1sARB_remap_index }, - { 2336, VertexAttrib1svARB_remap_index }, - { 15592, VertexAttrib2dARB_remap_index }, - { 18025, VertexAttrib2dvARB_remap_index }, - { 1687, VertexAttrib2fARB_remap_index }, - { 18138, VertexAttrib2fvARB_remap_index }, - { 33540, VertexAttrib2sARB_remap_index }, - { 32484, VertexAttrib2svARB_remap_index }, - { 11682, VertexAttrib3dARB_remap_index }, - { 8975, VertexAttrib3dvARB_remap_index }, - { 1774, VertexAttrib3fARB_remap_index }, - { 23316, VertexAttrib3fvARB_remap_index }, - { 29090, VertexAttrib3sARB_remap_index }, - { 20941, VertexAttrib3svARB_remap_index }, - { 5152, VertexAttrib4NbvARB_remap_index }, - { 18411, VertexAttrib4NivARB_remap_index }, - { 23271, VertexAttrib4NsvARB_remap_index }, - { 24277, VertexAttrib4NubARB_remap_index }, - { 32730, VertexAttrib4NubvARB_remap_index }, - { 19696, VertexAttrib4NuivARB_remap_index }, - { 3290, VertexAttrib4NusvARB_remap_index }, - { 11271, VertexAttrib4bvARB_remap_index }, - { 27727, VertexAttrib4dARB_remap_index }, - { 21998, VertexAttrib4dvARB_remap_index }, - { 11836, VertexAttrib4fARB_remap_index }, - { 12240, VertexAttrib4fvARB_remap_index }, - { 10647, VertexAttrib4ivARB_remap_index }, - { 17818, VertexAttrib4sARB_remap_index }, - { 31958, VertexAttrib4svARB_remap_index }, - { 17107, VertexAttrib4ubvARB_remap_index }, - { 31249, VertexAttrib4uivARB_remap_index }, - { 20752, VertexAttrib4usvARB_remap_index }, - { 22814, VertexAttribPointerARB_remap_index }, - { 33700, BindBufferARB_remap_index }, - { 7190, BufferDataARB_remap_index }, - { 1550, BufferSubDataARB_remap_index }, - { 31535, DeleteBuffersARB_remap_index }, - { 33983, GenBuffersARB_remap_index }, - { 18181, GetBufferParameterivARB_remap_index }, - { 17254, GetBufferPointervARB_remap_index }, - { 1503, GetBufferSubDataARB_remap_index }, - { 31197, IsBufferARB_remap_index }, - { 27169, MapBufferARB_remap_index }, - { 32173, UnmapBufferARB_remap_index }, - { 351, BeginQueryARB_remap_index }, - { 20408, DeleteQueriesARB_remap_index }, - { 12559, EndQueryARB_remap_index }, - { 29968, GenQueriesARB_remap_index }, - { 2033, GetQueryObjectivARB_remap_index }, - { 17862, GetQueryObjectuivARB_remap_index }, - { 1831, GetQueryivARB_remap_index }, - { 20659, IsQueryARB_remap_index }, - { 8585, AttachObjectARB_remap_index }, - { 19207, CompileShaderARB_remap_index }, - { 3359, CreateProgramObjectARB_remap_index }, - { 7135, CreateShaderObjectARB_remap_index }, - { 14894, DeleteObjectARB_remap_index }, - { 24764, DetachObjectARB_remap_index }, - { 12304, GetActiveUniformARB_remap_index }, - { 9783, GetAttachedObjectsARB_remap_index }, - { 10090, GetHandleARB_remap_index }, - { 33733, GetInfoLogARB_remap_index }, - { 32801, GetObjectParameterfvARB_remap_index }, - { 28228, GetObjectParameterivARB_remap_index }, - { 29726, GetShaderSourceARB_remap_index }, - { 28950, GetUniformLocationARB_remap_index }, - { 24547, GetUniformfvARB_remap_index }, - { 13092, GetUniformivARB_remap_index }, - { 20797, LinkProgramARB_remap_index }, - { 20855, ShaderSourceARB_remap_index }, - { 7857, Uniform1fARB_remap_index }, - { 30613, Uniform1fvARB_remap_index }, - { 22762, Uniform1iARB_remap_index }, - { 21652, Uniform1ivARB_remap_index }, - { 2285, Uniform2fARB_remap_index }, - { 14730, Uniform2fvARB_remap_index }, - { 27056, Uniform2iARB_remap_index }, - { 2405, Uniform2ivARB_remap_index }, - { 19317, Uniform3fARB_remap_index }, - { 9813, Uniform3fvARB_remap_index }, - { 6746, Uniform3iARB_remap_index }, - { 17360, Uniform3ivARB_remap_index }, - { 19851, Uniform4fARB_remap_index }, - { 24411, Uniform4fvARB_remap_index }, - { 25673, Uniform4iARB_remap_index }, - { 21165, Uniform4ivARB_remap_index }, - { 8637, UniformMatrix2fvARB_remap_index }, + { 1590, AttachShader_remap_index }, + { 10243, CreateProgram_remap_index }, + { 23919, CreateShader_remap_index }, + { 26443, DeleteProgram_remap_index }, + { 19399, DeleteShader_remap_index }, + { 24412, DetachShader_remap_index }, + { 18646, GetAttachedShaders_remap_index }, + { 5053, GetProgramInfoLog_remap_index }, + { 405, GetProgramiv_remap_index }, + { 6861, GetShaderInfoLog_remap_index }, + { 32113, GetShaderiv_remap_index }, + { 13776, IsProgram_remap_index }, + { 12667, IsShader_remap_index }, + { 10373, StencilFuncSeparate_remap_index }, + { 4031, StencilMaskSeparate_remap_index }, + { 7926, StencilOpSeparate_remap_index }, + { 23153, UniformMatrix2x3fv_remap_index }, + { 2920, UniformMatrix2x4fv_remap_index }, + { 33901, UniformMatrix3x2fv_remap_index }, + { 31430, UniformMatrix3x4fv_remap_index }, + { 16766, UniformMatrix4x2fv_remap_index }, + { 3339, UniformMatrix4x3fv_remap_index }, + { 5259, ClampColor_remap_index }, + { 18700, ClearBufferfi_remap_index }, + { 18116, ClearBufferfv_remap_index }, + { 30453, ClearBufferiv_remap_index }, + { 13981, ClearBufferuiv_remap_index }, + { 20736, GetStringi_remap_index }, + { 2861, TexBuffer_remap_index }, + { 938, FramebufferTexture_remap_index }, + { 27479, GetBufferParameteri64v_remap_index }, + { 10473, GetInteger64i_v_remap_index }, + { 24233, VertexAttribDivisor_remap_index }, + { 10261, LoadTransposeMatrixdARB_remap_index }, + { 31842, LoadTransposeMatrixfARB_remap_index }, + { 5898, MultTransposeMatrixdARB_remap_index }, + { 24599, MultTransposeMatrixfARB_remap_index }, + { 216, SampleCoverageARB_remap_index }, + { 6124, CompressedTexImage1DARB_remap_index }, + { 25127, CompressedTexImage2DARB_remap_index }, + { 4094, CompressedTexImage3DARB_remap_index }, + { 18988, CompressedTexSubImage1DARB_remap_index }, + { 2102, CompressedTexSubImage2DARB_remap_index }, + { 21158, CompressedTexSubImage3DARB_remap_index }, + { 29559, GetCompressedTexImageARB_remap_index }, + { 3905, DisableVertexAttribArrayARB_remap_index }, + { 30995, EnableVertexAttribArrayARB_remap_index }, + { 32956, GetProgramEnvParameterdvARB_remap_index }, + { 24479, GetProgramEnvParameterfvARB_remap_index }, + { 28476, GetProgramLocalParameterdvARB_remap_index }, + { 8402, GetProgramLocalParameterfvARB_remap_index }, + { 19164, GetProgramStringARB_remap_index }, + { 28671, GetProgramivARB_remap_index }, + { 21353, GetVertexAttribdvARB_remap_index }, + { 16574, GetVertexAttribfvARB_remap_index }, + { 10077, GetVertexAttribivARB_remap_index }, + { 20199, ProgramEnvParameter4dARB_remap_index }, + { 26193, ProgramEnvParameter4dvARB_remap_index }, + { 17414, ProgramEnvParameter4fARB_remap_index }, + { 9277, ProgramEnvParameter4fvARB_remap_index }, + { 4057, ProgramLocalParameter4dARB_remap_index }, + { 13486, ProgramLocalParameter4dvARB_remap_index }, + { 30474, ProgramLocalParameter4fARB_remap_index }, + { 26839, ProgramLocalParameter4fvARB_remap_index }, + { 29313, ProgramStringARB_remap_index }, + { 20467, VertexAttrib1dARB_remap_index }, + { 16201, VertexAttrib1dvARB_remap_index }, + { 4253, VertexAttrib1fARB_remap_index }, + { 33982, VertexAttrib1fvARB_remap_index }, + { 7452, VertexAttrib1sARB_remap_index }, + { 2297, VertexAttrib1svARB_remap_index }, + { 15632, VertexAttrib2dARB_remap_index }, + { 18137, VertexAttrib2dvARB_remap_index }, + { 1648, VertexAttrib2fARB_remap_index }, + { 18250, VertexAttrib2fvARB_remap_index }, + { 33582, VertexAttrib2sARB_remap_index }, + { 32593, VertexAttrib2svARB_remap_index }, + { 11651, VertexAttrib3dARB_remap_index }, + { 8944, VertexAttrib3dvARB_remap_index }, + { 1735, VertexAttrib3fARB_remap_index }, + { 23470, VertexAttrib3fvARB_remap_index }, + { 29160, VertexAttrib3sARB_remap_index }, + { 21095, VertexAttrib3svARB_remap_index }, + { 5079, VertexAttrib4NbvARB_remap_index }, + { 18523, VertexAttrib4NivARB_remap_index }, + { 23425, VertexAttrib4NsvARB_remap_index }, + { 24431, VertexAttrib4NubARB_remap_index }, + { 32839, VertexAttrib4NubvARB_remap_index }, + { 19850, VertexAttrib4NuivARB_remap_index }, + { 3212, VertexAttrib4NusvARB_remap_index }, + { 11240, VertexAttrib4bvARB_remap_index }, + { 27849, VertexAttrib4dARB_remap_index }, + { 22152, VertexAttrib4dvARB_remap_index }, + { 11805, VertexAttrib4fARB_remap_index }, + { 12209, VertexAttrib4fvARB_remap_index }, + { 10616, VertexAttrib4ivARB_remap_index }, + { 17930, VertexAttrib4sARB_remap_index }, + { 32028, VertexAttrib4svARB_remap_index }, + { 17219, VertexAttrib4ubvARB_remap_index }, + { 31319, VertexAttrib4uivARB_remap_index }, + { 20906, VertexAttrib4usvARB_remap_index }, + { 22968, VertexAttribPointerARB_remap_index }, + { 33742, BindBufferARB_remap_index }, + { 7159, BufferDataARB_remap_index }, + { 1511, BufferSubDataARB_remap_index }, + { 31605, DeleteBuffersARB_remap_index }, + { 34025, GenBuffersARB_remap_index }, + { 18293, GetBufferParameterivARB_remap_index }, + { 17366, GetBufferPointervARB_remap_index }, + { 1464, GetBufferSubDataARB_remap_index }, + { 31267, IsBufferARB_remap_index }, + { 27323, MapBufferARB_remap_index }, + { 32243, UnmapBufferARB_remap_index }, + { 312, BeginQueryARB_remap_index }, + { 20562, DeleteQueriesARB_remap_index }, + { 12528, EndQueryARB_remap_index }, + { 30038, GenQueriesARB_remap_index }, + { 1994, GetQueryObjectivARB_remap_index }, + { 17974, GetQueryObjectuivARB_remap_index }, + { 1792, GetQueryivARB_remap_index }, + { 20813, IsQueryARB_remap_index }, + { 8554, AttachObjectARB_remap_index }, + { 19361, CompileShaderARB_remap_index }, + { 3281, CreateProgramObjectARB_remap_index }, + { 7104, CreateShaderObjectARB_remap_index }, + { 14934, DeleteObjectARB_remap_index }, + { 24918, DetachObjectARB_remap_index }, + { 12273, GetActiveUniformARB_remap_index }, + { 9752, GetAttachedObjectsARB_remap_index }, + { 10059, GetHandleARB_remap_index }, + { 33775, GetInfoLogARB_remap_index }, + { 32910, GetObjectParameterfvARB_remap_index }, + { 28350, GetObjectParameterivARB_remap_index }, + { 29796, GetShaderSourceARB_remap_index }, + { 29020, GetUniformLocationARB_remap_index }, + { 24701, GetUniformfvARB_remap_index }, + { 13061, GetUniformivARB_remap_index }, + { 20951, LinkProgramARB_remap_index }, + { 21009, ShaderSourceARB_remap_index }, + { 7826, Uniform1fARB_remap_index }, + { 30683, Uniform1fvARB_remap_index }, + { 22916, Uniform1iARB_remap_index }, + { 21806, Uniform1ivARB_remap_index }, + { 2246, Uniform2fARB_remap_index }, + { 14770, Uniform2fvARB_remap_index }, + { 27210, Uniform2iARB_remap_index }, + { 2366, Uniform2ivARB_remap_index }, + { 19471, Uniform3fARB_remap_index }, + { 9782, Uniform3fvARB_remap_index }, + { 6715, Uniform3iARB_remap_index }, + { 17472, Uniform3ivARB_remap_index }, + { 20005, Uniform4fARB_remap_index }, + { 24565, Uniform4fvARB_remap_index }, + { 25827, Uniform4iARB_remap_index }, + { 21319, Uniform4ivARB_remap_index }, + { 8606, UniformMatrix2fvARB_remap_index }, { 17, UniformMatrix3fvARB_remap_index }, - { 2802, UniformMatrix4fvARB_remap_index }, - { 26151, UseProgramObjectARB_remap_index }, - { 15280, ValidateProgramARB_remap_index }, - { 22041, BindAttribLocationARB_remap_index }, - { 5197, GetActiveAttribARB_remap_index }, - { 17041, GetAttribLocationARB_remap_index }, - { 30331, DrawBuffersARB_remap_index }, - { 30164, ClampColorARB_remap_index }, - { 18456, DrawArraysInstancedARB_remap_index }, - { 6807, DrawElementsInstancedARB_remap_index }, - { 13622, RenderbufferStorageMultisample_remap_index }, - { 14093, FramebufferTextureARB_remap_index }, - { 26587, FramebufferTextureFaceARB_remap_index }, - { 24913, ProgramParameteriARB_remap_index }, - { 6327, VertexAttribDivisorARB_remap_index }, - { 19899, FlushMappedBufferRange_remap_index }, - { 28665, MapBufferRange_remap_index }, - { 28572, TexBufferARB_remap_index }, - { 16864, BindVertexArray_remap_index }, - { 15103, GenVertexArrays_remap_index }, - { 31127, CopyBufferSubData_remap_index }, - { 32062, ClientWaitSync_remap_index }, - { 2721, DeleteSync_remap_index }, - { 7524, FenceSync_remap_index }, - { 15651, GetInteger64v_remap_index }, - { 23378, GetSynciv_remap_index }, - { 30270, IsSync_remap_index }, - { 9731, WaitSync_remap_index }, - { 3951, DrawElementsBaseVertex_remap_index }, - { 31439, DrawRangeElementsBaseVertex_remap_index }, - { 27200, MultiDrawElementsBaseVertex_remap_index }, - { 33006, BlendEquationSeparateiARB_remap_index }, - { 18274, BlendEquationiARB_remap_index }, - { 13031, BlendFuncSeparateiARB_remap_index }, - { 10156, BlendFunciARB_remap_index }, - { 8499, BindSampler_remap_index }, - { 4357, DeleteSamplers_remap_index }, - { 20272, GenSamplers_remap_index }, - { 30202, GetSamplerParameterIiv_remap_index }, - { 19793, GetSamplerParameterIuiv_remap_index }, - { 5046, GetSamplerParameterfv_remap_index }, - { 26308, GetSamplerParameteriv_remap_index }, - { 14648, IsSampler_remap_index }, - { 16817, SamplerParameterIiv_remap_index }, - { 31478, SamplerParameterIuiv_remap_index }, - { 23051, SamplerParameterf_remap_index }, - { 16973, SamplerParameterfv_remap_index }, - { 23026, SamplerParameteri_remap_index }, - { 18650, SamplerParameteriv_remap_index }, - { 5393, BindTransformFeedback_remap_index }, - { 3386, DeleteTransformFeedbacks_remap_index }, - { 6779, DrawTransformFeedback_remap_index }, - { 9950, GenTransformFeedbacks_remap_index }, - { 29133, IsTransformFeedback_remap_index }, - { 26780, PauseTransformFeedback_remap_index }, - { 5856, ResumeTransformFeedback_remap_index }, - { 22361, ClearDepthf_remap_index }, - { 7083, DepthRangef_remap_index }, - { 14915, GetShaderPrecisionFormat_remap_index }, - { 10344, ReleaseShaderCompiler_remap_index }, - { 11314, ShaderBinary_remap_index }, - { 1004, GetGraphicsResetStatusARB_remap_index }, - { 25478, GetnColorTableARB_remap_index }, - { 8268, GetnCompressedTexImageARB_remap_index }, - { 4090, GetnConvolutionFilterARB_remap_index }, - { 16204, GetnHistogramARB_remap_index }, - { 24237, GetnMapdvARB_remap_index }, - { 22793, GetnMapfvARB_remap_index }, - { 2264, GetnMapivARB_remap_index }, - { 17622, GetnMinmaxARB_remap_index }, - { 4671, GetnPixelMapfvARB_remap_index }, - { 19670, GetnPixelMapuivARB_remap_index }, - { 3111, GetnPixelMapusvARB_remap_index }, - { 1383, GetnPolygonStippleARB_remap_index }, - { 21826, GetnSeparableFilterARB_remap_index }, - { 33582, GetnTexImageARB_remap_index }, - { 19079, GetnUniformdvARB_remap_index }, - { 4743, GetnUniformfvARB_remap_index }, - { 10199, GetnUniformivARB_remap_index }, - { 23227, GetnUniformuivARB_remap_index }, - { 3025, ReadnPixelsARB_remap_index }, - { 5724, PolygonOffsetEXT_remap_index }, - { 24000, GetPixelTexGenParameterfvSGIS_remap_index }, - { 4621, GetPixelTexGenParameterivSGIS_remap_index }, - { 23733, PixelTexGenParameterfSGIS_remap_index }, - { 663, PixelTexGenParameterfvSGIS_remap_index }, - { 13130, PixelTexGenParameteriSGIS_remap_index }, - { 14235, PixelTexGenParameterivSGIS_remap_index }, - { 18775, SampleMaskSGIS_remap_index }, - { 20599, SamplePatternSGIS_remap_index }, - { 27129, ColorPointerEXT_remap_index }, - { 18068, EdgeFlagPointerEXT_remap_index }, - { 6400, IndexPointerEXT_remap_index }, - { 6480, NormalPointerEXT_remap_index }, - { 16272, TexCoordPointerEXT_remap_index }, - { 7313, VertexPointerEXT_remap_index }, - { 3753, PointParameterfEXT_remap_index }, - { 8164, PointParameterfvEXT_remap_index }, - { 32899, LockArraysEXT_remap_index }, - { 15344, UnlockArraysEXT_remap_index }, - { 1291, SecondaryColor3bEXT_remap_index }, - { 8357, SecondaryColor3bvEXT_remap_index }, - { 10824, SecondaryColor3dEXT_remap_index }, - { 26357, SecondaryColor3dvEXT_remap_index }, - { 28999, SecondaryColor3fEXT_remap_index }, - { 18812, SecondaryColor3fvEXT_remap_index }, - { 509, SecondaryColor3iEXT_remap_index }, - { 16582, SecondaryColor3ivEXT_remap_index }, - { 10432, SecondaryColor3sEXT_remap_index }, - { 31726, SecondaryColor3svEXT_remap_index }, - { 28064, SecondaryColor3ubEXT_remap_index }, - { 21932, SecondaryColor3ubvEXT_remap_index }, - { 13372, SecondaryColor3uiEXT_remap_index }, - { 23620, SecondaryColor3uivEXT_remap_index }, - { 26637, SecondaryColor3usEXT_remap_index }, - { 13445, SecondaryColor3usvEXT_remap_index }, - { 12183, SecondaryColorPointerEXT_remap_index }, - { 26451, MultiDrawArraysEXT_remap_index }, - { 21587, MultiDrawElementsEXT_remap_index }, - { 21782, FogCoordPointerEXT_remap_index }, - { 4794, FogCoorddEXT_remap_index }, - { 32300, FogCoorddvEXT_remap_index }, - { 4911, FogCoordfEXT_remap_index }, - { 27987, FogCoordfvEXT_remap_index }, - { 12283, PixelTexGenSGIX_remap_index }, - { 28592, BlendFuncSeparateEXT_remap_index }, - { 7225, FlushVertexArrayRangeNV_remap_index }, - { 5673, VertexArrayRangeNV_remap_index }, - { 29064, CombinerInputNV_remap_index }, - { 2207, CombinerOutputNV_remap_index }, - { 31879, CombinerParameterfNV_remap_index }, - { 5547, CombinerParameterfvNV_remap_index }, - { 23076, CombinerParameteriNV_remap_index }, - { 33382, CombinerParameterivNV_remap_index }, - { 7601, FinalCombinerInputNV_remap_index }, - { 1648, GetCombinerInputParameterfvNV_remap_index }, - { 33219, GetCombinerInputParameterivNV_remap_index }, - { 216, GetCombinerOutputParameterfvNV_remap_index }, - { 14196, GetCombinerOutputParameterivNV_remap_index }, - { 6987, GetFinalCombinerInputParameterfvNV_remap_index }, - { 25545, GetFinalCombinerInputParameterivNV_remap_index }, - { 13009, ResizeBuffersMESA_remap_index }, - { 11509, WindowPos2dMESA_remap_index }, - { 1084, WindowPos2dvMESA_remap_index }, - { 34286, WindowPos2fMESA_remap_index }, - { 8302, WindowPos2fvMESA_remap_index }, - { 18722, WindowPos2iMESA_remap_index }, - { 21072, WindowPos2ivMESA_remap_index }, - { 21686, WindowPos2sMESA_remap_index }, - { 6069, WindowPos2svMESA_remap_index }, - { 8093, WindowPos3dMESA_remap_index }, - { 14443, WindowPos3dvMESA_remap_index }, - { 555, WindowPos3fMESA_remap_index }, - { 15405, WindowPos3fvMESA_remap_index }, - { 24806, WindowPos3iMESA_remap_index }, - { 31072, WindowPos3ivMESA_remap_index }, - { 19462, WindowPos3sMESA_remap_index }, - { 32556, WindowPos3svMESA_remap_index }, - { 11460, WindowPos4dMESA_remap_index }, - { 17498, WindowPos4dvMESA_remap_index }, - { 14402, WindowPos4fMESA_remap_index }, - { 31633, WindowPos4fvMESA_remap_index }, - { 31225, WindowPos4iMESA_remap_index }, - { 12812, WindowPos4ivMESA_remap_index }, - { 19646, WindowPos4sMESA_remap_index }, - { 3337, WindowPos4svMESA_remap_index }, - { 27695, MultiModeDrawArraysIBM_remap_index }, - { 29839, MultiModeDrawElementsIBM_remap_index }, - { 12587, DeleteFencesNV_remap_index }, - { 28911, FinishFenceNV_remap_index }, - { 3875, GenFencesNV_remap_index }, - { 17478, GetFenceivNV_remap_index }, - { 8570, IsFenceNV_remap_index }, - { 14123, SetFenceNV_remap_index }, - { 4434, TestFenceNV_remap_index }, - { 32527, AreProgramsResidentNV_remap_index }, - { 31921, BindProgramNV_remap_index }, - { 26720, DeleteProgramsNV_remap_index }, - { 22150, ExecuteProgramNV_remap_index }, - { 34179, GenProgramsNV_remap_index }, - { 24105, GetProgramParameterdvNV_remap_index }, - { 10886, GetProgramParameterfvNV_remap_index }, - { 27103, GetProgramStringNV_remap_index }, - { 25183, GetProgramivNV_remap_index }, - { 24360, GetTrackMatrixivNV_remap_index }, - { 26897, GetVertexAttribPointervNV_remap_index }, - { 10527, GetVertexAttribdvNV_remap_index }, - { 9626, GetVertexAttribfvNV_remap_index }, - { 19025, GetVertexAttribivNV_remap_index }, - { 19929, IsProgramNV_remap_index }, - { 9709, LoadProgramNV_remap_index }, - { 28688, ProgramParameters4dvNV_remap_index }, - { 25113, ProgramParameters4fvNV_remap_index }, - { 21376, RequestResidentProgramsNV_remap_index }, - { 31417, TrackMatrixNV_remap_index }, - { 33196, VertexAttrib1dNV_remap_index }, - { 14034, VertexAttrib1dvNV_remap_index }, - { 29345, VertexAttrib1fNV_remap_index }, - { 2527, VertexAttrib1fvNV_remap_index }, - { 31690, VertexAttrib1sNV_remap_index }, - { 15478, VertexAttrib1svNV_remap_index }, - { 5102, VertexAttrib2dNV_remap_index }, - { 13927, VertexAttrib2dvNV_remap_index }, - { 20831, VertexAttrib2fNV_remap_index }, - { 13493, VertexAttrib2fvNV_remap_index }, - { 6281, VertexAttrib2sNV_remap_index }, - { 19516, VertexAttrib2svNV_remap_index }, - { 11657, VertexAttrib3dNV_remap_index }, - { 32777, VertexAttrib3dvNV_remap_index }, - { 10698, VertexAttrib3fNV_remap_index }, - { 25505, VertexAttrib3fvNV_remap_index }, - { 22869, VertexAttrib3sNV_remap_index }, - { 24387, VertexAttrib3svNV_remap_index }, - { 29813, VertexAttrib4dNV_remap_index }, - { 34216, VertexAttrib4dvNV_remap_index }, - { 5487, VertexAttrib4fNV_remap_index }, - { 9759, VertexAttrib4fvNV_remap_index }, - { 27579, VertexAttrib4sNV_remap_index }, - { 1461, VertexAttrib4svNV_remap_index }, - { 5260, VertexAttrib4ubNV_remap_index }, - { 817, VertexAttrib4ubvNV_remap_index }, - { 22330, VertexAttribPointerNV_remap_index }, - { 2379, VertexAttribs1dvNV_remap_index }, - { 26985, VertexAttribs1fvNV_remap_index }, - { 34016, VertexAttribs1svNV_remap_index }, - { 10723, VertexAttribs2dvNV_remap_index }, - { 26112, VertexAttribs2fvNV_remap_index }, - { 18094, VertexAttribs2svNV_remap_index }, - { 5575, VertexAttribs3dvNV_remap_index }, - { 2238, VertexAttribs3fvNV_remap_index }, - { 30820, VertexAttribs3svNV_remap_index }, - { 27669, VertexAttribs4dvNV_remap_index }, - { 5647, VertexAttribs4fvNV_remap_index }, - { 33803, VertexAttribs4svNV_remap_index }, - { 30568, VertexAttribs4ubvNV_remap_index }, - { 27771, GetTexBumpParameterfvATI_remap_index }, - { 34057, GetTexBumpParameterivATI_remap_index }, - { 19160, TexBumpParameterfvATI_remap_index }, - { 21247, TexBumpParameterivATI_remap_index }, - { 16024, AlphaFragmentOp1ATI_remap_index }, - { 26403, AlphaFragmentOp2ATI_remap_index }, - { 25421, AlphaFragmentOp3ATI_remap_index }, - { 30747, BeginFragmentShaderATI_remap_index }, - { 32120, BindFragmentShaderATI_remap_index }, - { 24516, ColorFragmentOp1ATI_remap_index }, - { 4549, ColorFragmentOp2ATI_remap_index }, - { 32422, ColorFragmentOp3ATI_remap_index }, - { 5813, DeleteFragmentShaderATI_remap_index }, - { 34240, EndFragmentShaderATI_remap_index }, - { 33410, GenFragmentShadersATI_remap_index }, - { 26266, PassTexCoordATI_remap_index }, - { 7293, SampleMapATI_remap_index }, - { 27882, SetFragmentShaderConstantATI_remap_index }, - { 402, PointParameteriNV_remap_index }, - { 14604, PointParameterivNV_remap_index }, - { 29652, ActiveStencilFaceEXT_remap_index }, - { 28328, BindVertexArrayAPPLE_remap_index }, - { 2849, DeleteVertexArraysAPPLE_remap_index }, - { 18561, GenVertexArraysAPPLE_remap_index }, - { 24170, IsVertexArrayAPPLE_remap_index }, - { 858, GetProgramNamedParameterdvNV_remap_index }, - { 3716, GetProgramNamedParameterfvNV_remap_index }, - { 27802, ProgramNamedParameter4dNV_remap_index }, - { 14978, ProgramNamedParameter4dvNV_remap_index }, - { 9242, ProgramNamedParameter4fNV_remap_index }, - { 12148, ProgramNamedParameter4fvNV_remap_index }, - { 17409, PrimitiveRestartIndexNV_remap_index }, - { 31610, PrimitiveRestartNV_remap_index }, - { 25092, DepthBoundsEXT_remap_index }, - { 1183, BlendEquationSeparateEXT_remap_index }, - { 15179, BindFramebufferEXT_remap_index }, - { 26496, BindRenderbufferEXT_remap_index }, - { 10006, CheckFramebufferStatusEXT_remap_index }, - { 23421, DeleteFramebuffersEXT_remap_index }, - { 32679, DeleteRenderbuffersEXT_remap_index }, - { 13951, FramebufferRenderbufferEXT_remap_index }, - { 14140, FramebufferTexture1DEXT_remap_index }, - { 11942, FramebufferTexture2DEXT_remap_index }, - { 11562, FramebufferTexture3DEXT_remap_index }, - { 24036, GenFramebuffersEXT_remap_index }, - { 17959, GenRenderbuffersEXT_remap_index }, - { 7029, GenerateMipmapEXT_remap_index }, - { 22423, GetFramebufferAttachmentParameterivEXT_remap_index }, - { 33316, GetRenderbufferParameterivEXT_remap_index }, - { 21127, IsFramebufferEXT_remap_index }, - { 34139, IsRenderbufferEXT_remap_index }, - { 8517, RenderbufferStorageEXT_remap_index }, - { 734, BlitFramebufferEXT_remap_index }, - { 14764, BufferParameteriAPPLE_remap_index }, - { 19961, FlushMappedBufferRangeAPPLE_remap_index }, - { 1906, BindFragDataLocationEXT_remap_index }, - { 25205, GetFragDataLocationEXT_remap_index }, - { 11001, GetUniformuivEXT_remap_index }, - { 33490, GetVertexAttribIivEXT_remap_index }, - { 28859, GetVertexAttribIuivEXT_remap_index }, - { 12420, Uniform1uiEXT_remap_index }, - { 28773, Uniform1uivEXT_remap_index }, - { 22965, Uniform2uiEXT_remap_index }, - { 4513, Uniform2uivEXT_remap_index }, - { 30092, Uniform3uiEXT_remap_index }, - { 15125, Uniform3uivEXT_remap_index }, - { 3640, Uniform4uiEXT_remap_index }, - { 9018, Uniform4uivEXT_remap_index }, - { 18940, VertexAttribI1iEXT_remap_index }, - { 5287, VertexAttribI1ivEXT_remap_index }, - { 2628, VertexAttribI1uiEXT_remap_index }, - { 13221, VertexAttribI1uivEXT_remap_index }, + { 2763, UniformMatrix4fvARB_remap_index }, + { 26305, UseProgramObjectARB_remap_index }, + { 15320, ValidateProgramARB_remap_index }, + { 22195, BindAttribLocationARB_remap_index }, + { 5124, GetActiveAttribARB_remap_index }, + { 17086, GetAttribLocationARB_remap_index }, + { 30401, DrawBuffersARB_remap_index }, + { 30234, ClampColorARB_remap_index }, + { 18568, DrawArraysInstancedARB_remap_index }, + { 6776, DrawElementsInstancedARB_remap_index }, + { 13591, RenderbufferStorageMultisample_remap_index }, + { 14062, FramebufferTextureARB_remap_index }, + { 26741, FramebufferTextureFaceARB_remap_index }, + { 25067, ProgramParameteriARB_remap_index }, + { 6296, VertexAttribDivisorARB_remap_index }, + { 20053, FlushMappedBufferRange_remap_index }, + { 28787, MapBufferRange_remap_index }, + { 28694, TexBufferARB_remap_index }, + { 16904, BindVertexArray_remap_index }, + { 15143, GenVertexArrays_remap_index }, + { 31197, CopyBufferSubData_remap_index }, + { 32132, ClientWaitSync_remap_index }, + { 2682, DeleteSync_remap_index }, + { 7493, FenceSync_remap_index }, + { 15691, GetInteger64v_remap_index }, + { 23532, GetSynciv_remap_index }, + { 30340, IsSync_remap_index }, + { 9700, WaitSync_remap_index }, + { 3873, DrawElementsBaseVertex_remap_index }, + { 19216, DrawElementsInstancedBaseVertex_remap_index }, + { 31509, DrawRangeElementsBaseVertex_remap_index }, + { 27354, MultiDrawElementsBaseVertex_remap_index }, + { 17152, BlendEquationSeparateiARB_remap_index }, + { 18386, BlendEquationiARB_remap_index }, + { 13000, BlendFuncSeparateiARB_remap_index }, + { 10125, BlendFunciARB_remap_index }, + { 8468, BindSampler_remap_index }, + { 4232, DeleteSamplers_remap_index }, + { 20426, GenSamplers_remap_index }, + { 30272, GetSamplerParameterIiv_remap_index }, + { 19947, GetSamplerParameterIuiv_remap_index }, + { 4973, GetSamplerParameterfv_remap_index }, + { 26462, GetSamplerParameteriv_remap_index }, + { 14688, IsSampler_remap_index }, + { 16857, SamplerParameterIiv_remap_index }, + { 31548, SamplerParameterIuiv_remap_index }, + { 23205, SamplerParameterf_remap_index }, + { 17013, SamplerParameterfv_remap_index }, + { 23180, SamplerParameteri_remap_index }, + { 18762, SamplerParameteriv_remap_index }, + { 5320, BindTransformFeedback_remap_index }, + { 3308, DeleteTransformFeedbacks_remap_index }, + { 6748, DrawTransformFeedback_remap_index }, + { 9919, GenTransformFeedbacks_remap_index }, + { 29203, IsTransformFeedback_remap_index }, + { 26934, PauseTransformFeedback_remap_index }, + { 5783, ResumeTransformFeedback_remap_index }, + { 22515, ClearDepthf_remap_index }, + { 7052, DepthRangef_remap_index }, + { 14955, GetShaderPrecisionFormat_remap_index }, + { 10313, ReleaseShaderCompiler_remap_index }, + { 11283, ShaderBinary_remap_index }, + { 965, GetGraphicsResetStatusARB_remap_index }, + { 25632, GetnColorTableARB_remap_index }, + { 8237, GetnCompressedTexImageARB_remap_index }, + { 3965, GetnConvolutionFilterARB_remap_index }, + { 16244, GetnHistogramARB_remap_index }, + { 24391, GetnMapdvARB_remap_index }, + { 22947, GetnMapfvARB_remap_index }, + { 2225, GetnMapivARB_remap_index }, + { 17734, GetnMinmaxARB_remap_index }, + { 4598, GetnPixelMapfvARB_remap_index }, + { 19824, GetnPixelMapuivARB_remap_index }, + { 3033, GetnPixelMapusvARB_remap_index }, + { 1344, GetnPolygonStippleARB_remap_index }, + { 21980, GetnSeparableFilterARB_remap_index }, + { 33624, GetnTexImageARB_remap_index }, + { 19191, GetnUniformdvARB_remap_index }, + { 4670, GetnUniformfvARB_remap_index }, + { 10168, GetnUniformivARB_remap_index }, + { 23381, GetnUniformuivARB_remap_index }, + { 2947, ReadnPixelsARB_remap_index }, + { 5651, PolygonOffsetEXT_remap_index }, + { 24154, GetPixelTexGenParameterfvSGIS_remap_index }, + { 4548, GetPixelTexGenParameterivSGIS_remap_index }, + { 23887, PixelTexGenParameterfSGIS_remap_index }, + { 624, PixelTexGenParameterfvSGIS_remap_index }, + { 13099, PixelTexGenParameteriSGIS_remap_index }, + { 14236, PixelTexGenParameterivSGIS_remap_index }, + { 18887, SampleMaskSGIS_remap_index }, + { 20753, SamplePatternSGIS_remap_index }, + { 27283, ColorPointerEXT_remap_index }, + { 18180, EdgeFlagPointerEXT_remap_index }, + { 6369, IndexPointerEXT_remap_index }, + { 6449, NormalPointerEXT_remap_index }, + { 16312, TexCoordPointerEXT_remap_index }, + { 7282, VertexPointerEXT_remap_index }, + { 3675, PointParameterfEXT_remap_index }, + { 8133, PointParameterfvEXT_remap_index }, + { 33008, LockArraysEXT_remap_index }, + { 15384, UnlockArraysEXT_remap_index }, + { 1252, SecondaryColor3bEXT_remap_index }, + { 8326, SecondaryColor3bvEXT_remap_index }, + { 10793, SecondaryColor3dEXT_remap_index }, + { 26511, SecondaryColor3dvEXT_remap_index }, + { 29069, SecondaryColor3fEXT_remap_index }, + { 18924, SecondaryColor3fvEXT_remap_index }, + { 470, SecondaryColor3iEXT_remap_index }, + { 16622, SecondaryColor3ivEXT_remap_index }, + { 10401, SecondaryColor3sEXT_remap_index }, + { 31796, SecondaryColor3svEXT_remap_index }, + { 28186, SecondaryColor3ubEXT_remap_index }, + { 22086, SecondaryColor3ubvEXT_remap_index }, + { 13341, SecondaryColor3uiEXT_remap_index }, + { 23774, SecondaryColor3uivEXT_remap_index }, + { 26791, SecondaryColor3usEXT_remap_index }, + { 13414, SecondaryColor3usvEXT_remap_index }, + { 12152, SecondaryColorPointerEXT_remap_index }, + { 26605, MultiDrawArraysEXT_remap_index }, + { 21741, MultiDrawElementsEXT_remap_index }, + { 21936, FogCoordPointerEXT_remap_index }, + { 4721, FogCoorddEXT_remap_index }, + { 32409, FogCoorddvEXT_remap_index }, + { 4838, FogCoordfEXT_remap_index }, + { 28109, FogCoordfvEXT_remap_index }, + { 12252, PixelTexGenSGIX_remap_index }, + { 28714, BlendFuncSeparateEXT_remap_index }, + { 7194, FlushVertexArrayRangeNV_remap_index }, + { 5600, VertexArrayRangeNV_remap_index }, + { 29134, CombinerInputNV_remap_index }, + { 2168, CombinerOutputNV_remap_index }, + { 31949, CombinerParameterfNV_remap_index }, + { 5474, CombinerParameterfvNV_remap_index }, + { 23230, CombinerParameteriNV_remap_index }, + { 33424, CombinerParameterivNV_remap_index }, + { 7570, FinalCombinerInputNV_remap_index }, + { 1609, GetCombinerInputParameterfvNV_remap_index }, + { 33261, GetCombinerInputParameterivNV_remap_index }, + { 14337, GetCombinerOutputParameterfvNV_remap_index }, + { 14165, GetCombinerOutputParameterivNV_remap_index }, + { 6956, GetFinalCombinerInputParameterfvNV_remap_index }, + { 25699, GetFinalCombinerInputParameterivNV_remap_index }, + { 12978, ResizeBuffersMESA_remap_index }, + { 11478, WindowPos2dMESA_remap_index }, + { 1045, WindowPos2dvMESA_remap_index }, + { 34328, WindowPos2fMESA_remap_index }, + { 8271, WindowPos2fvMESA_remap_index }, + { 18834, WindowPos2iMESA_remap_index }, + { 21226, WindowPos2ivMESA_remap_index }, + { 21840, WindowPos2sMESA_remap_index }, + { 6038, WindowPos2svMESA_remap_index }, + { 8062, WindowPos3dMESA_remap_index }, + { 14483, WindowPos3dvMESA_remap_index }, + { 516, WindowPos3fMESA_remap_index }, + { 15445, WindowPos3fvMESA_remap_index }, + { 24960, WindowPos3iMESA_remap_index }, + { 31142, WindowPos3ivMESA_remap_index }, + { 19616, WindowPos3sMESA_remap_index }, + { 32665, WindowPos3svMESA_remap_index }, + { 11429, WindowPos4dMESA_remap_index }, + { 17610, WindowPos4dvMESA_remap_index }, + { 14442, WindowPos4fMESA_remap_index }, + { 31703, WindowPos4fvMESA_remap_index }, + { 31295, WindowPos4iMESA_remap_index }, + { 12781, WindowPos4ivMESA_remap_index }, + { 19800, WindowPos4sMESA_remap_index }, + { 3259, WindowPos4svMESA_remap_index }, + { 14204, MultiModeDrawArraysIBM_remap_index }, + { 29909, MultiModeDrawElementsIBM_remap_index }, + { 12556, DeleteFencesNV_remap_index }, + { 28981, FinishFenceNV_remap_index }, + { 3797, GenFencesNV_remap_index }, + { 17590, GetFenceivNV_remap_index }, + { 8539, IsFenceNV_remap_index }, + { 14092, SetFenceNV_remap_index }, + { 4309, TestFenceNV_remap_index }, + { 32636, AreProgramsResidentNV_remap_index }, + { 31991, BindProgramNV_remap_index }, + { 26874, DeleteProgramsNV_remap_index }, + { 22304, ExecuteProgramNV_remap_index }, + { 34221, GenProgramsNV_remap_index }, + { 24259, GetProgramParameterdvNV_remap_index }, + { 10855, GetProgramParameterfvNV_remap_index }, + { 27257, GetProgramStringNV_remap_index }, + { 25337, GetProgramivNV_remap_index }, + { 24514, GetTrackMatrixivNV_remap_index }, + { 27051, GetVertexAttribPointervNV_remap_index }, + { 10496, GetVertexAttribdvNV_remap_index }, + { 9595, GetVertexAttribfvNV_remap_index }, + { 19137, GetVertexAttribivNV_remap_index }, + { 20083, IsProgramNV_remap_index }, + { 9678, LoadProgramNV_remap_index }, + { 28810, ProgramParameters4dvNV_remap_index }, + { 25267, ProgramParameters4fvNV_remap_index }, + { 21530, RequestResidentProgramsNV_remap_index }, + { 31487, TrackMatrixNV_remap_index }, + { 33238, VertexAttrib1dNV_remap_index }, + { 14003, VertexAttrib1dvNV_remap_index }, + { 29415, VertexAttrib1fNV_remap_index }, + { 2488, VertexAttrib1fvNV_remap_index }, + { 31760, VertexAttrib1sNV_remap_index }, + { 15518, VertexAttrib1svNV_remap_index }, + { 5029, VertexAttrib2dNV_remap_index }, + { 13896, VertexAttrib2dvNV_remap_index }, + { 20985, VertexAttrib2fNV_remap_index }, + { 13462, VertexAttrib2fvNV_remap_index }, + { 6250, VertexAttrib2sNV_remap_index }, + { 19670, VertexAttrib2svNV_remap_index }, + { 11626, VertexAttrib3dNV_remap_index }, + { 32886, VertexAttrib3dvNV_remap_index }, + { 10667, VertexAttrib3fNV_remap_index }, + { 25659, VertexAttrib3fvNV_remap_index }, + { 23023, VertexAttrib3sNV_remap_index }, + { 24541, VertexAttrib3svNV_remap_index }, + { 29883, VertexAttrib4dNV_remap_index }, + { 34258, VertexAttrib4dvNV_remap_index }, + { 5414, VertexAttrib4fNV_remap_index }, + { 9728, VertexAttrib4fvNV_remap_index }, + { 27733, VertexAttrib4sNV_remap_index }, + { 1422, VertexAttrib4svNV_remap_index }, + { 5187, VertexAttrib4ubNV_remap_index }, + { 778, VertexAttrib4ubvNV_remap_index }, + { 22484, VertexAttribPointerNV_remap_index }, + { 2340, VertexAttribs1dvNV_remap_index }, + { 27139, VertexAttribs1fvNV_remap_index }, + { 34058, VertexAttribs1svNV_remap_index }, + { 10692, VertexAttribs2dvNV_remap_index }, + { 26266, VertexAttribs2fvNV_remap_index }, + { 18206, VertexAttribs2svNV_remap_index }, + { 5502, VertexAttribs3dvNV_remap_index }, + { 2199, VertexAttribs3fvNV_remap_index }, + { 30890, VertexAttribs3svNV_remap_index }, + { 27823, VertexAttribs4dvNV_remap_index }, + { 5574, VertexAttribs4fvNV_remap_index }, + { 33845, VertexAttribs4svNV_remap_index }, + { 30638, VertexAttribs4ubvNV_remap_index }, + { 27893, GetTexBumpParameterfvATI_remap_index }, + { 34099, GetTexBumpParameterivATI_remap_index }, + { 19314, TexBumpParameterfvATI_remap_index }, + { 21401, TexBumpParameterivATI_remap_index }, + { 16064, AlphaFragmentOp1ATI_remap_index }, + { 26557, AlphaFragmentOp2ATI_remap_index }, + { 25575, AlphaFragmentOp3ATI_remap_index }, + { 30817, BeginFragmentShaderATI_remap_index }, + { 32190, BindFragmentShaderATI_remap_index }, + { 24670, ColorFragmentOp1ATI_remap_index }, + { 4476, ColorFragmentOp2ATI_remap_index }, + { 32531, ColorFragmentOp3ATI_remap_index }, + { 5740, DeleteFragmentShaderATI_remap_index }, + { 34282, EndFragmentShaderATI_remap_index }, + { 33452, GenFragmentShadersATI_remap_index }, + { 26420, PassTexCoordATI_remap_index }, + { 7262, SampleMapATI_remap_index }, + { 28004, SetFragmentShaderConstantATI_remap_index }, + { 363, PointParameteriNV_remap_index }, + { 14644, PointParameterivNV_remap_index }, + { 29722, ActiveStencilFaceEXT_remap_index }, + { 28450, BindVertexArrayAPPLE_remap_index }, + { 2810, DeleteVertexArraysAPPLE_remap_index }, + { 18673, GenVertexArraysAPPLE_remap_index }, + { 24324, IsVertexArrayAPPLE_remap_index }, + { 819, GetProgramNamedParameterdvNV_remap_index }, + { 3638, GetProgramNamedParameterfvNV_remap_index }, + { 27924, ProgramNamedParameter4dNV_remap_index }, + { 15018, ProgramNamedParameter4dvNV_remap_index }, + { 9211, ProgramNamedParameter4fNV_remap_index }, + { 12117, ProgramNamedParameter4fvNV_remap_index }, + { 17521, PrimitiveRestartIndexNV_remap_index }, + { 31680, PrimitiveRestartNV_remap_index }, + { 25246, DepthBoundsEXT_remap_index }, + { 1144, BlendEquationSeparateEXT_remap_index }, + { 15219, BindFramebufferEXT_remap_index }, + { 26650, BindRenderbufferEXT_remap_index }, + { 9975, CheckFramebufferStatusEXT_remap_index }, + { 23575, DeleteFramebuffersEXT_remap_index }, + { 32788, DeleteRenderbuffersEXT_remap_index }, + { 13920, FramebufferRenderbufferEXT_remap_index }, + { 14109, FramebufferTexture1DEXT_remap_index }, + { 11911, FramebufferTexture2DEXT_remap_index }, + { 11531, FramebufferTexture3DEXT_remap_index }, + { 24190, GenFramebuffersEXT_remap_index }, + { 18071, GenRenderbuffersEXT_remap_index }, + { 6998, GenerateMipmapEXT_remap_index }, + { 22577, GetFramebufferAttachmentParameterivEXT_remap_index }, + { 33358, GetRenderbufferParameterivEXT_remap_index }, + { 21281, IsFramebufferEXT_remap_index }, + { 34181, IsRenderbufferEXT_remap_index }, + { 8486, RenderbufferStorageEXT_remap_index }, + { 695, BlitFramebufferEXT_remap_index }, + { 14804, BufferParameteriAPPLE_remap_index }, + { 20115, FlushMappedBufferRangeAPPLE_remap_index }, + { 1867, BindFragDataLocationEXT_remap_index }, + { 25359, GetFragDataLocationEXT_remap_index }, + { 10970, GetUniformuivEXT_remap_index }, + { 33532, GetVertexAttribIivEXT_remap_index }, + { 4326, GetVertexAttribIuivEXT_remap_index }, + { 12389, Uniform1uiEXT_remap_index }, + { 28895, Uniform1uivEXT_remap_index }, + { 23119, Uniform2uiEXT_remap_index }, + { 4440, Uniform2uivEXT_remap_index }, + { 30162, Uniform3uiEXT_remap_index }, + { 15165, Uniform3uivEXT_remap_index }, + { 3562, Uniform4uiEXT_remap_index }, + { 8987, Uniform4uivEXT_remap_index }, + { 19052, VertexAttribI1iEXT_remap_index }, + { 5214, VertexAttribI1ivEXT_remap_index }, + { 2589, VertexAttribI1uiEXT_remap_index }, + { 13190, VertexAttribI1uivEXT_remap_index }, { 81, VertexAttribI2iEXT_remap_index }, - { 24628, VertexAttribI2ivEXT_remap_index }, - { 5601, VertexAttribI2uiEXT_remap_index }, - { 4956, VertexAttribI2uivEXT_remap_index }, - { 27371, VertexAttribI3iEXT_remap_index }, - { 25830, VertexAttribI3ivEXT_remap_index }, - { 3494, VertexAttribI3uiEXT_remap_index }, - { 31313, VertexAttribI3uivEXT_remap_index }, - { 22674, VertexAttribI4bvEXT_remap_index }, - { 15057, VertexAttribI4iEXT_remap_index }, - { 32948, VertexAttribI4ivEXT_remap_index }, - { 13854, VertexAttribI4svEXT_remap_index }, - { 4043, VertexAttribI4ubvEXT_remap_index }, - { 16645, VertexAttribI4uiEXT_remap_index }, - { 5747, VertexAttribI4uivEXT_remap_index }, - { 11725, VertexAttribI4usvEXT_remap_index }, - { 19104, VertexAttribIPointerEXT_remap_index }, - { 3181, FramebufferTextureLayerEXT_remap_index }, - { 16999, ColorMaskIndexedEXT_remap_index }, - { 19540, DisableIndexedEXT_remap_index }, - { 27416, EnableIndexedEXT_remap_index }, - { 22378, GetBooleanIndexedvEXT_remap_index }, - { 11336, GetIntegerIndexedvEXT_remap_index }, - { 23497, IsEnabledIndexedEXT_remap_index }, - { 23397, ClearColorIiEXT_remap_index }, - { 3590, ClearColorIuiEXT_remap_index }, - { 10224, GetTexParameterIivEXT_remap_index }, - { 6229, GetTexParameterIuivEXT_remap_index }, - { 3137, TexParameterIivEXT_remap_index }, - { 27238, TexParameterIuivEXT_remap_index }, - { 4824, BeginConditionalRenderNV_remap_index }, - { 26216, EndConditionalRenderNV_remap_index }, - { 9653, BeginTransformFeedbackEXT_remap_index }, - { 19575, BindBufferBaseEXT_remap_index }, - { 19434, BindBufferOffsetEXT_remap_index }, - { 12637, BindBufferRangeEXT_remap_index }, - { 14679, EndTransformFeedbackEXT_remap_index }, - { 11199, GetTransformFeedbackVaryingEXT_remap_index }, - { 21432, TransformFeedbackVaryingsEXT_remap_index }, - { 30469, ProvokingVertexEXT_remap_index }, - { 11147, GetTexParameterPointervAPPLE_remap_index }, - { 5349, TextureRangeAPPLE_remap_index }, - { 12014, GetObjectParameterivAPPLE_remap_index }, - { 20554, ObjectPurgeableAPPLE_remap_index }, - { 6023, ObjectUnpurgeableAPPLE_remap_index }, - { 17781, ActiveProgramEXT_remap_index }, - { 17752, CreateShaderProgramEXT_remap_index }, - { 29437, UseShaderProgramEXT_remap_index }, - { 16952, TextureBarrierNV_remap_index }, - { 29678, StencilFuncSeparateATI_remap_index }, - { 5936, ProgramEnvParameters4fvEXT_remap_index }, - { 17646, ProgramLocalParameters4fvEXT_remap_index }, - { 14532, GetQueryObjecti64vEXT_remap_index }, - { 10749, GetQueryObjectui64vEXT_remap_index }, - { 24585, EGLImageTargetRenderbufferStorageOES_remap_index }, - { 12526, EGLImageTargetTexture2DOES_remap_index }, + { 24782, VertexAttribI2ivEXT_remap_index }, + { 5528, VertexAttribI2uiEXT_remap_index }, + { 4883, VertexAttribI2uivEXT_remap_index }, + { 27525, VertexAttribI3iEXT_remap_index }, + { 25984, VertexAttribI3ivEXT_remap_index }, + { 3416, VertexAttribI3uiEXT_remap_index }, + { 31383, VertexAttribI3uivEXT_remap_index }, + { 22828, VertexAttribI4bvEXT_remap_index }, + { 15097, VertexAttribI4iEXT_remap_index }, + { 33057, VertexAttribI4ivEXT_remap_index }, + { 13823, VertexAttribI4svEXT_remap_index }, + { 17039, VertexAttribI4ubvEXT_remap_index }, + { 16685, VertexAttribI4uiEXT_remap_index }, + { 5674, VertexAttribI4uivEXT_remap_index }, + { 11694, VertexAttribI4usvEXT_remap_index }, + { 19258, VertexAttribIPointerEXT_remap_index }, + { 3103, FramebufferTextureLayerEXT_remap_index }, + { 5950, ColorMaskIndexedEXT_remap_index }, + { 19694, DisableIndexedEXT_remap_index }, + { 27570, EnableIndexedEXT_remap_index }, + { 22532, GetBooleanIndexedvEXT_remap_index }, + { 11305, GetIntegerIndexedvEXT_remap_index }, + { 23651, IsEnabledIndexedEXT_remap_index }, + { 23551, ClearColorIiEXT_remap_index }, + { 3512, ClearColorIuiEXT_remap_index }, + { 10193, GetTexParameterIivEXT_remap_index }, + { 6198, GetTexParameterIuivEXT_remap_index }, + { 3059, TexParameterIivEXT_remap_index }, + { 27392, TexParameterIuivEXT_remap_index }, + { 4751, BeginConditionalRenderNV_remap_index }, + { 26370, EndConditionalRenderNV_remap_index }, + { 9622, BeginTransformFeedbackEXT_remap_index }, + { 19729, BindBufferBaseEXT_remap_index }, + { 19588, BindBufferOffsetEXT_remap_index }, + { 12606, BindBufferRangeEXT_remap_index }, + { 14719, EndTransformFeedbackEXT_remap_index }, + { 11168, GetTransformFeedbackVaryingEXT_remap_index }, + { 21586, TransformFeedbackVaryingsEXT_remap_index }, + { 30539, ProvokingVertexEXT_remap_index }, + { 11116, GetTexParameterPointervAPPLE_remap_index }, + { 5276, TextureRangeAPPLE_remap_index }, + { 11983, GetObjectParameterivAPPLE_remap_index }, + { 20708, ObjectPurgeableAPPLE_remap_index }, + { 5992, ObjectUnpurgeableAPPLE_remap_index }, + { 17893, ActiveProgramEXT_remap_index }, + { 17864, CreateShaderProgramEXT_remap_index }, + { 29507, UseShaderProgramEXT_remap_index }, + { 16992, TextureBarrierNV_remap_index }, + { 29748, StencilFuncSeparateATI_remap_index }, + { 5863, ProgramEnvParameters4fvEXT_remap_index }, + { 17758, ProgramLocalParameters4fvEXT_remap_index }, + { 14572, GetQueryObjecti64vEXT_remap_index }, + { 10718, GetQueryObjectui64vEXT_remap_index }, + { 24739, EGLImageTargetRenderbufferStorageOES_remap_index }, + { 12495, EGLImageTargetTexture2DOES_remap_index }, { -1, -1 } }; /* these functions are in the ABI, but have alternative names */ static const struct gl_function_remap MESA_alt_functions[] = { /* from GL_EXT_blend_color */ - { 2767, _gloffset_BlendColor }, + { 2728, _gloffset_BlendColor }, /* from GL_EXT_blend_minmax */ - { 11619, _gloffset_BlendEquation }, + { 11588, _gloffset_BlendEquation }, /* from GL_EXT_color_subtable */ - { 17520, _gloffset_ColorSubTable }, - { 32611, _gloffset_CopyColorSubTable }, + { 17632, _gloffset_ColorSubTable }, + { 32720, _gloffset_CopyColorSubTable }, /* from GL_EXT_convolution */ - { 296, _gloffset_ConvolutionFilter1D }, - { 2566, _gloffset_CopyConvolutionFilter1D }, - { 4293, _gloffset_GetConvolutionParameteriv }, - { 8866, _gloffset_ConvolutionFilter2D }, - { 9068, _gloffset_ConvolutionParameteriv }, - { 9528, _gloffset_ConvolutionParameterfv }, - { 21275, _gloffset_GetSeparableFilter }, - { 24860, _gloffset_SeparableFilter2D }, - { 25723, _gloffset_ConvolutionParameteri }, - { 25891, _gloffset_ConvolutionParameterf }, - { 27605, _gloffset_GetConvolutionParameterfv }, - { 28494, _gloffset_GetConvolutionFilter }, - { 31009, _gloffset_CopyConvolutionFilter2D }, + { 257, _gloffset_ConvolutionFilter1D }, + { 2527, _gloffset_CopyConvolutionFilter1D }, + { 4168, _gloffset_GetConvolutionParameteriv }, + { 8835, _gloffset_ConvolutionFilter2D }, + { 9037, _gloffset_ConvolutionParameteriv }, + { 9497, _gloffset_ConvolutionParameterfv }, + { 21429, _gloffset_GetSeparableFilter }, + { 25014, _gloffset_SeparableFilter2D }, + { 25877, _gloffset_ConvolutionParameteri }, + { 26045, _gloffset_ConvolutionParameterf }, + { 27759, _gloffset_GetConvolutionParameterfv }, + { 28616, _gloffset_GetConvolutionFilter }, + { 31079, _gloffset_CopyConvolutionFilter2D }, /* from GL_EXT_copy_texture */ - { 15538, _gloffset_CopyTexSubImage3D }, - { 17207, _gloffset_CopyTexImage2D }, - { 25331, _gloffset_CopyTexImage1D }, - { 28175, _gloffset_CopyTexSubImage2D }, - { 30647, _gloffset_CopyTexSubImage1D }, + { 15578, _gloffset_CopyTexSubImage3D }, + { 17319, _gloffset_CopyTexImage2D }, + { 25485, _gloffset_CopyTexImage1D }, + { 28297, _gloffset_CopyTexSubImage2D }, + { 30717, _gloffset_CopyTexSubImage1D }, /* from GL_EXT_draw_range_elements */ - { 9865, _gloffset_DrawRangeElements }, + { 9834, _gloffset_DrawRangeElements }, /* from GL_EXT_histogram */ - { 895, _gloffset_Histogram }, - { 3676, _gloffset_ResetHistogram }, - { 10370, _gloffset_GetMinmax }, - { 15872, _gloffset_GetHistogramParameterfv }, - { 25256, _gloffset_GetMinmaxParameteriv }, - { 27495, _gloffset_ResetMinmax }, - { 28391, _gloffset_GetHistogramParameteriv }, - { 29612, _gloffset_GetHistogram }, - { 32236, _gloffset_Minmax }, - { 33886, _gloffset_GetMinmaxParameterfv }, + { 856, _gloffset_Histogram }, + { 3598, _gloffset_ResetHistogram }, + { 10339, _gloffset_GetMinmax }, + { 15912, _gloffset_GetHistogramParameterfv }, + { 25410, _gloffset_GetMinmaxParameteriv }, + { 27649, _gloffset_ResetMinmax }, + { 28513, _gloffset_GetHistogramParameteriv }, + { 29682, _gloffset_GetHistogram }, + { 32306, _gloffset_Minmax }, + { 33928, _gloffset_GetMinmaxParameterfv }, /* from GL_EXT_paletted_texture */ - { 8728, _gloffset_ColorTable }, - { 15718, _gloffset_GetColorTable }, - { 23783, _gloffset_GetColorTableParameterfv }, - { 25947, _gloffset_GetColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15758, _gloffset_GetColorTable }, + { 23937, _gloffset_GetColorTableParameterfv }, + { 26101, _gloffset_GetColorTableParameteriv }, /* from GL_EXT_subtexture */ - { 7439, _gloffset_TexSubImage1D }, - { 11074, _gloffset_TexSubImage2D }, + { 7408, _gloffset_TexSubImage1D }, + { 11043, _gloffset_TexSubImage2D }, /* from GL_EXT_texture3D */ - { 1865, _gloffset_TexImage3D }, - { 23552, _gloffset_TexSubImage3D }, + { 1826, _gloffset_TexImage3D }, + { 23706, _gloffset_TexSubImage3D }, /* from GL_EXT_texture_object */ - { 3444, _gloffset_PrioritizeTextures }, - { 7888, _gloffset_AreTexturesResident }, - { 14058, _gloffset_GenTextures }, - { 16231, _gloffset_DeleteTextures }, - { 20242, _gloffset_IsTexture }, - { 30712, _gloffset_BindTexture }, + { 3366, _gloffset_PrioritizeTextures }, + { 7857, _gloffset_AreTexturesResident }, + { 14027, _gloffset_GenTextures }, + { 16271, _gloffset_DeleteTextures }, + { 20396, _gloffset_IsTexture }, + { 30782, _gloffset_BindTexture }, /* from GL_EXT_vertex_array */ - { 25032, _gloffset_ArrayElement }, - { 31824, _gloffset_GetPointerv }, - { 33437, _gloffset_DrawArrays }, + { 25186, _gloffset_ArrayElement }, + { 31894, _gloffset_GetPointerv }, + { 33479, _gloffset_DrawArrays }, /* from GL_SGI_color_table */ - { 8006, _gloffset_ColorTableParameteriv }, - { 8728, _gloffset_ColorTable }, - { 15718, _gloffset_GetColorTable }, - { 15828, _gloffset_CopyColorTable }, - { 20103, _gloffset_ColorTableParameterfv }, - { 23783, _gloffset_GetColorTableParameterfv }, - { 25947, _gloffset_GetColorTableParameteriv }, + { 7975, _gloffset_ColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15758, _gloffset_GetColorTable }, + { 15868, _gloffset_CopyColorTable }, + { 20257, _gloffset_ColorTableParameterfv }, + { 23937, _gloffset_GetColorTableParameterfv }, + { 26101, _gloffset_GetColorTableParameteriv }, /* from GL_VERSION_1_3 */ - { 464, _gloffset_MultiTexCoord3sARB }, - { 696, _gloffset_ActiveTextureARB }, - { 4451, _gloffset_MultiTexCoord1fvARB }, - { 6505, _gloffset_MultiTexCoord3dARB }, - { 6550, _gloffset_MultiTexCoord2iARB }, - { 6674, _gloffset_MultiTexCoord2svARB }, - { 8684, _gloffset_MultiTexCoord2fARB }, - { 10779, _gloffset_MultiTexCoord3fvARB }, - { 11381, _gloffset_MultiTexCoord4sARB }, - { 12062, _gloffset_MultiTexCoord2dvARB }, - { 12469, _gloffset_MultiTexCoord1svARB }, - { 12870, _gloffset_MultiTexCoord3svARB }, - { 12931, _gloffset_MultiTexCoord4iARB }, - { 13762, _gloffset_MultiTexCoord3iARB }, - { 14561, _gloffset_MultiTexCoord1dARB }, - { 14793, _gloffset_MultiTexCoord3dvARB }, - { 16072, _gloffset_MultiTexCoord3ivARB }, - { 16117, _gloffset_MultiTexCoord2sARB }, - { 17577, _gloffset_MultiTexCoord4ivARB }, - { 19743, _gloffset_ClientActiveTextureARB }, - { 22106, _gloffset_MultiTexCoord2dARB }, - { 22543, _gloffset_MultiTexCoord4dvARB }, - { 22920, _gloffset_MultiTexCoord4fvARB }, - { 23924, _gloffset_MultiTexCoord3fARB }, - { 26541, _gloffset_MultiTexCoord4dARB }, - { 26807, _gloffset_MultiTexCoord1sARB }, - { 27011, _gloffset_MultiTexCoord1dvARB }, - { 28019, _gloffset_MultiTexCoord1ivARB }, - { 28112, _gloffset_MultiTexCoord2ivARB }, - { 28451, _gloffset_MultiTexCoord1iARB }, - { 29887, _gloffset_MultiTexCoord4svARB }, - { 30511, _gloffset_MultiTexCoord1fARB }, - { 30774, _gloffset_MultiTexCoord4fARB }, - { 33271, _gloffset_MultiTexCoord2fvARB }, + { 425, _gloffset_MultiTexCoord3sARB }, + { 657, _gloffset_ActiveTextureARB }, + { 4378, _gloffset_MultiTexCoord1fvARB }, + { 6474, _gloffset_MultiTexCoord3dARB }, + { 6519, _gloffset_MultiTexCoord2iARB }, + { 6643, _gloffset_MultiTexCoord2svARB }, + { 8653, _gloffset_MultiTexCoord2fARB }, + { 10748, _gloffset_MultiTexCoord3fvARB }, + { 11350, _gloffset_MultiTexCoord4sARB }, + { 12031, _gloffset_MultiTexCoord2dvARB }, + { 12438, _gloffset_MultiTexCoord1svARB }, + { 12839, _gloffset_MultiTexCoord3svARB }, + { 12900, _gloffset_MultiTexCoord4iARB }, + { 13731, _gloffset_MultiTexCoord3iARB }, + { 14601, _gloffset_MultiTexCoord1dARB }, + { 14833, _gloffset_MultiTexCoord3dvARB }, + { 16112, _gloffset_MultiTexCoord3ivARB }, + { 16157, _gloffset_MultiTexCoord2sARB }, + { 17689, _gloffset_MultiTexCoord4ivARB }, + { 19897, _gloffset_ClientActiveTextureARB }, + { 22260, _gloffset_MultiTexCoord2dARB }, + { 22697, _gloffset_MultiTexCoord4dvARB }, + { 23074, _gloffset_MultiTexCoord4fvARB }, + { 24078, _gloffset_MultiTexCoord3fARB }, + { 26695, _gloffset_MultiTexCoord4dARB }, + { 26961, _gloffset_MultiTexCoord1sARB }, + { 27165, _gloffset_MultiTexCoord1dvARB }, + { 28141, _gloffset_MultiTexCoord1ivARB }, + { 28234, _gloffset_MultiTexCoord2ivARB }, + { 28573, _gloffset_MultiTexCoord1iARB }, + { 29957, _gloffset_MultiTexCoord4svARB }, + { 30581, _gloffset_MultiTexCoord1fARB }, + { 30844, _gloffset_MultiTexCoord4fARB }, + { 33313, _gloffset_MultiTexCoord2fvARB }, { -1, -1 } }; @@ -5568,7 +5573,7 @@ static const struct gl_function_remap MESA_alt_functions[] = { #if defined(need_GL_3DFX_tbuffer) static const struct gl_function_remap GL_3DFX_tbuffer_functions[] = { - { 9586, -1 }, /* TbufferMask3DFX */ + { 9555, -1 }, /* TbufferMask3DFX */ { -1, -1 } }; #endif @@ -5667,7 +5672,7 @@ static const struct gl_function_remap GL_ARB_framebuffer_object_functions[] = { #if defined(need_GL_ARB_geometry_shader4) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_ARB_geometry_shader4_functions[] = { - { 12834, -1 }, /* FramebufferTextureLayer */ + { 12803, -1 }, /* FramebufferTextureLayer */ { -1, -1 } }; #endif @@ -5688,11 +5693,11 @@ static const struct gl_function_remap GL_ARB_map_buffer_range_functions[] = { #if defined(need_GL_ARB_matrix_palette) static const struct gl_function_remap GL_ARB_matrix_palette_functions[] = { - { 3927, -1 }, /* MatrixIndexusvARB */ - { 13583, -1 }, /* MatrixIndexuivARB */ - { 14948, -1 }, /* MatrixIndexPointerARB */ - { 20509, -1 }, /* CurrentPaletteMatrixARB */ - { 23668, -1 }, /* MatrixIndexubvARB */ + { 3849, -1 }, /* MatrixIndexusvARB */ + { 13552, -1 }, /* MatrixIndexuivARB */ + { 14988, -1 }, /* MatrixIndexPointerARB */ + { 20663, -1 }, /* CurrentPaletteMatrixARB */ + { 23822, -1 }, /* MatrixIndexubvARB */ { -1, -1 } }; #endif @@ -5790,16 +5795,16 @@ static const struct gl_function_remap GL_ARB_vertex_array_object_functions[] = { #if defined(need_GL_ARB_vertex_blend) static const struct gl_function_remap GL_ARB_vertex_blend_functions[] = { - { 2508, -1 }, /* WeightubvARB */ - { 6917, -1 }, /* WeightivARB */ - { 11484, -1 }, /* WeightPointerARB */ - { 14318, -1 }, /* WeightfvARB */ - { 18120, -1 }, /* WeightbvARB */ - { 21739, -1 }, /* WeightusvARB */ - { 24786, -1 }, /* VertexBlendARB */ - { 30595, -1 }, /* WeightsvARB */ - { 32661, -1 }, /* WeightdvARB */ - { 33471, -1 }, /* WeightuivARB */ + { 2469, -1 }, /* WeightubvARB */ + { 6886, -1 }, /* WeightivARB */ + { 11453, -1 }, /* WeightPointerARB */ + { 14319, -1 }, /* WeightfvARB */ + { 18232, -1 }, /* WeightbvARB */ + { 21893, -1 }, /* WeightusvARB */ + { 24940, -1 }, /* VertexBlendARB */ + { 30665, -1 }, /* WeightsvARB */ + { 32770, -1 }, /* WeightdvARB */ + { 33513, -1 }, /* WeightuivARB */ { -1, -1 } }; #endif @@ -5869,7 +5874,7 @@ static const struct gl_function_remap GL_ATI_separate_stencil_functions[] = { #if defined(need_GL_EXT_blend_color) static const struct gl_function_remap GL_EXT_blend_color_functions[] = { - { 2767, _gloffset_BlendColor }, + { 2728, _gloffset_BlendColor }, { -1, -1 } }; #endif @@ -5890,15 +5895,15 @@ static const struct gl_function_remap GL_EXT_blend_func_separate_functions[] = { #if defined(need_GL_EXT_blend_minmax) static const struct gl_function_remap GL_EXT_blend_minmax_functions[] = { - { 11619, _gloffset_BlendEquation }, + { 11588, _gloffset_BlendEquation }, { -1, -1 } }; #endif #if defined(need_GL_EXT_color_subtable) static const struct gl_function_remap GL_EXT_color_subtable_functions[] = { - { 17520, _gloffset_ColorSubTable }, - { 32611, _gloffset_CopyColorSubTable }, + { 17632, _gloffset_ColorSubTable }, + { 32720, _gloffset_CopyColorSubTable }, { -1, -1 } }; #endif @@ -5912,66 +5917,66 @@ static const struct gl_function_remap GL_EXT_compiled_vertex_array_functions[] = #if defined(need_GL_EXT_convolution) static const struct gl_function_remap GL_EXT_convolution_functions[] = { - { 296, _gloffset_ConvolutionFilter1D }, - { 2566, _gloffset_CopyConvolutionFilter1D }, - { 4293, _gloffset_GetConvolutionParameteriv }, - { 8866, _gloffset_ConvolutionFilter2D }, - { 9068, _gloffset_ConvolutionParameteriv }, - { 9528, _gloffset_ConvolutionParameterfv }, - { 21275, _gloffset_GetSeparableFilter }, - { 24860, _gloffset_SeparableFilter2D }, - { 25723, _gloffset_ConvolutionParameteri }, - { 25891, _gloffset_ConvolutionParameterf }, - { 27605, _gloffset_GetConvolutionParameterfv }, - { 28494, _gloffset_GetConvolutionFilter }, - { 31009, _gloffset_CopyConvolutionFilter2D }, + { 257, _gloffset_ConvolutionFilter1D }, + { 2527, _gloffset_CopyConvolutionFilter1D }, + { 4168, _gloffset_GetConvolutionParameteriv }, + { 8835, _gloffset_ConvolutionFilter2D }, + { 9037, _gloffset_ConvolutionParameteriv }, + { 9497, _gloffset_ConvolutionParameterfv }, + { 21429, _gloffset_GetSeparableFilter }, + { 25014, _gloffset_SeparableFilter2D }, + { 25877, _gloffset_ConvolutionParameteri }, + { 26045, _gloffset_ConvolutionParameterf }, + { 27759, _gloffset_GetConvolutionParameterfv }, + { 28616, _gloffset_GetConvolutionFilter }, + { 31079, _gloffset_CopyConvolutionFilter2D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_coordinate_frame) static const struct gl_function_remap GL_EXT_coordinate_frame_functions[] = { - { 10918, -1 }, /* TangentPointerEXT */ - { 12989, -1 }, /* Binormal3ivEXT */ - { 13715, -1 }, /* Tangent3sEXT */ - { 15013, -1 }, /* Tangent3fvEXT */ - { 19188, -1 }, /* Tangent3ivEXT */ - { 19415, -1 }, /* Tangent3dvEXT */ - { 20189, -1 }, /* Binormal3bvEXT */ - { 21328, -1 }, /* Binormal3dEXT */ - { 23600, -1 }, /* Tangent3fEXT */ - { 25795, -1 }, /* Binormal3sEXT */ - { 26337, -1 }, /* Tangent3dEXT */ - { 27284, -1 }, /* Binormal3svEXT */ - { 27917, -1 }, /* Binormal3fEXT */ - { 28825, -1 }, /* Binormal3dvEXT */ - { 30144, -1 }, /* Tangent3iEXT */ - { 31294, -1 }, /* Tangent3bvEXT */ - { 31859, -1 }, /* Tangent3bEXT */ - { 32384, -1 }, /* Binormal3fvEXT */ - { 33170, -1 }, /* BinormalPointerEXT */ - { 33651, -1 }, /* Tangent3svEXT */ - { 34088, -1 }, /* Binormal3bEXT */ - { 34265, -1 }, /* Binormal3iEXT */ + { 10887, -1 }, /* TangentPointerEXT */ + { 12958, -1 }, /* Binormal3ivEXT */ + { 13684, -1 }, /* Tangent3sEXT */ + { 15053, -1 }, /* Tangent3fvEXT */ + { 19342, -1 }, /* Tangent3ivEXT */ + { 19569, -1 }, /* Tangent3dvEXT */ + { 20343, -1 }, /* Binormal3bvEXT */ + { 21482, -1 }, /* Binormal3dEXT */ + { 23754, -1 }, /* Tangent3fEXT */ + { 25949, -1 }, /* Binormal3sEXT */ + { 26491, -1 }, /* Tangent3dEXT */ + { 27438, -1 }, /* Binormal3svEXT */ + { 28039, -1 }, /* Binormal3fEXT */ + { 28947, -1 }, /* Binormal3dvEXT */ + { 30214, -1 }, /* Tangent3iEXT */ + { 31364, -1 }, /* Tangent3bvEXT */ + { 31929, -1 }, /* Tangent3bEXT */ + { 32493, -1 }, /* Binormal3fvEXT */ + { 33212, -1 }, /* BinormalPointerEXT */ + { 33693, -1 }, /* Tangent3svEXT */ + { 34130, -1 }, /* Binormal3bEXT */ + { 34307, -1 }, /* Binormal3iEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_copy_texture) static const struct gl_function_remap GL_EXT_copy_texture_functions[] = { - { 15538, _gloffset_CopyTexSubImage3D }, - { 17207, _gloffset_CopyTexImage2D }, - { 25331, _gloffset_CopyTexImage1D }, - { 28175, _gloffset_CopyTexSubImage2D }, - { 30647, _gloffset_CopyTexSubImage1D }, + { 15578, _gloffset_CopyTexSubImage3D }, + { 17319, _gloffset_CopyTexImage2D }, + { 25485, _gloffset_CopyTexImage1D }, + { 28297, _gloffset_CopyTexSubImage2D }, + { 30717, _gloffset_CopyTexSubImage1D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_cull_vertex) static const struct gl_function_remap GL_EXT_cull_vertex_functions[] = { - { 9217, -1 }, /* CullParameterdvEXT */ - { 12107, -1 }, /* CullParameterfvEXT */ + { 9186, -1 }, /* CullParameterdvEXT */ + { 12076, -1 }, /* CullParameterfvEXT */ { -1, -1 } }; #endif @@ -5999,7 +6004,7 @@ static const struct gl_function_remap GL_EXT_draw_instanced_functions[] = { #if defined(need_GL_EXT_draw_range_elements) static const struct gl_function_remap GL_EXT_draw_range_elements_functions[] = { - { 9865, _gloffset_DrawRangeElements }, + { 9834, _gloffset_DrawRangeElements }, { -1, -1 } }; #endif @@ -6048,39 +6053,39 @@ static const struct gl_function_remap GL_EXT_gpu_shader4_functions[] = { #if defined(need_GL_EXT_histogram) static const struct gl_function_remap GL_EXT_histogram_functions[] = { - { 895, _gloffset_Histogram }, - { 3676, _gloffset_ResetHistogram }, - { 10370, _gloffset_GetMinmax }, - { 15872, _gloffset_GetHistogramParameterfv }, - { 25256, _gloffset_GetMinmaxParameteriv }, - { 27495, _gloffset_ResetMinmax }, - { 28391, _gloffset_GetHistogramParameteriv }, - { 29612, _gloffset_GetHistogram }, - { 32236, _gloffset_Minmax }, - { 33886, _gloffset_GetMinmaxParameterfv }, + { 856, _gloffset_Histogram }, + { 3598, _gloffset_ResetHistogram }, + { 10339, _gloffset_GetMinmax }, + { 15912, _gloffset_GetHistogramParameterfv }, + { 25410, _gloffset_GetMinmaxParameteriv }, + { 27649, _gloffset_ResetMinmax }, + { 28513, _gloffset_GetHistogramParameteriv }, + { 29682, _gloffset_GetHistogram }, + { 32306, _gloffset_Minmax }, + { 33928, _gloffset_GetMinmaxParameterfv }, { -1, -1 } }; #endif #if defined(need_GL_EXT_index_func) static const struct gl_function_remap GL_EXT_index_func_functions[] = { - { 11893, -1 }, /* IndexFuncEXT */ + { 11862, -1 }, /* IndexFuncEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_index_material) static const struct gl_function_remap GL_EXT_index_material_functions[] = { - { 21861, -1 }, /* IndexMaterialEXT */ + { 22015, -1 }, /* IndexMaterialEXT */ { -1, -1 } }; #endif #if defined(need_GL_EXT_light_texture) static const struct gl_function_remap GL_EXT_light_texture_functions[] = { - { 27304, -1 }, /* ApplyTextureEXT */ - { 27449, -1 }, /* TextureMaterialEXT */ - { 27474, -1 }, /* TextureLightEXT */ + { 27458, -1 }, /* ApplyTextureEXT */ + { 27603, -1 }, /* TextureMaterialEXT */ + { 27628, -1 }, /* TextureLightEXT */ { -1, -1 } }; #endif @@ -6101,20 +6106,20 @@ static const struct gl_function_remap GL_EXT_multisample_functions[] = { #if defined(need_GL_EXT_paletted_texture) static const struct gl_function_remap GL_EXT_paletted_texture_functions[] = { - { 8728, _gloffset_ColorTable }, - { 15718, _gloffset_GetColorTable }, - { 23783, _gloffset_GetColorTableParameterfv }, - { 25947, _gloffset_GetColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15758, _gloffset_GetColorTable }, + { 23937, _gloffset_GetColorTableParameterfv }, + { 26101, _gloffset_GetColorTableParameteriv }, { -1, -1 } }; #endif #if defined(need_GL_EXT_pixel_transform) static const struct gl_function_remap GL_EXT_pixel_transform_functions[] = { - { 22508, -1 }, /* PixelTransformParameterfEXT */ - { 22588, -1 }, /* PixelTransformParameteriEXT */ - { 31574, -1 }, /* PixelTransformParameterfvEXT */ - { 33134, -1 }, /* PixelTransformParameterivEXT */ + { 22662, -1 }, /* PixelTransformParameterfEXT */ + { 22742, -1 }, /* PixelTransformParameteriEXT */ + { 31644, -1 }, /* PixelTransformParameterfvEXT */ + { 33176, -1 }, /* PixelTransformParameterivEXT */ { -1, -1 } }; #endif @@ -6163,16 +6168,16 @@ static const struct gl_function_remap GL_EXT_stencil_two_side_functions[] = { #if defined(need_GL_EXT_subtexture) static const struct gl_function_remap GL_EXT_subtexture_functions[] = { - { 7439, _gloffset_TexSubImage1D }, - { 11074, _gloffset_TexSubImage2D }, + { 7408, _gloffset_TexSubImage1D }, + { 11043, _gloffset_TexSubImage2D }, { -1, -1 } }; #endif #if defined(need_GL_EXT_texture3D) static const struct gl_function_remap GL_EXT_texture3D_functions[] = { - { 1865, _gloffset_TexImage3D }, - { 23552, _gloffset_TexSubImage3D }, + { 1826, _gloffset_TexImage3D }, + { 23706, _gloffset_TexSubImage3D }, { -1, -1 } }; #endif @@ -6193,19 +6198,19 @@ static const struct gl_function_remap GL_EXT_texture_integer_functions[] = { #if defined(need_GL_EXT_texture_object) static const struct gl_function_remap GL_EXT_texture_object_functions[] = { - { 3444, _gloffset_PrioritizeTextures }, - { 7888, _gloffset_AreTexturesResident }, - { 14058, _gloffset_GenTextures }, - { 16231, _gloffset_DeleteTextures }, - { 20242, _gloffset_IsTexture }, - { 30712, _gloffset_BindTexture }, + { 3366, _gloffset_PrioritizeTextures }, + { 7857, _gloffset_AreTexturesResident }, + { 14027, _gloffset_GenTextures }, + { 16271, _gloffset_DeleteTextures }, + { 20396, _gloffset_IsTexture }, + { 30782, _gloffset_BindTexture }, { -1, -1 } }; #endif #if defined(need_GL_EXT_texture_perturb_normal) static const struct gl_function_remap GL_EXT_texture_perturb_normal_functions[] = { - { 14268, -1 }, /* TextureNormalEXT */ + { 14269, -1 }, /* TextureNormalEXT */ { -1, -1 } }; #endif @@ -6227,30 +6232,30 @@ static const struct gl_function_remap GL_EXT_transform_feedback_functions[] = { #if defined(need_GL_EXT_vertex_array) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_EXT_vertex_array_functions[] = { - { 25032, _gloffset_ArrayElement }, - { 31824, _gloffset_GetPointerv }, - { 33437, _gloffset_DrawArrays }, + { 25186, _gloffset_ArrayElement }, + { 31894, _gloffset_GetPointerv }, + { 33479, _gloffset_DrawArrays }, { -1, -1 } }; #endif #if defined(need_GL_EXT_vertex_weighting) static const struct gl_function_remap GL_EXT_vertex_weighting_functions[] = { - { 20290, -1 }, /* VertexWeightfvEXT */ - { 27860, -1 }, /* VertexWeightfEXT */ - { 29581, -1 }, /* VertexWeightPointerEXT */ + { 20444, -1 }, /* VertexWeightfvEXT */ + { 27982, -1 }, /* VertexWeightfEXT */ + { 29651, -1 }, /* VertexWeightPointerEXT */ { -1, -1 } }; #endif #if defined(need_GL_HP_image_transform) static const struct gl_function_remap GL_HP_image_transform_functions[] = { - { 2439, -1 }, /* GetImageTransformParameterfvHP */ - { 3893, -1 }, /* ImageTransformParameterfHP */ - { 10612, -1 }, /* ImageTransformParameterfvHP */ - { 12354, -1 }, /* ImageTransformParameteriHP */ - { 12724, -1 }, /* GetImageTransformParameterivHP */ - { 20354, -1 }, /* ImageTransformParameterivHP */ + { 2400, -1 }, /* GetImageTransformParameterfvHP */ + { 3815, -1 }, /* ImageTransformParameterfHP */ + { 10581, -1 }, /* ImageTransformParameterfvHP */ + { 12323, -1 }, /* ImageTransformParameteriHP */ + { 12693, -1 }, /* GetImageTransformParameterivHP */ + { 20508, -1 }, /* ImageTransformParameterivHP */ { -1, -1 } }; #endif @@ -6264,14 +6269,14 @@ static const struct gl_function_remap GL_IBM_multimode_draw_arrays_functions[] = #if defined(need_GL_IBM_vertex_array_lists) static const struct gl_function_remap GL_IBM_vertex_array_lists_functions[] = { - { 4583, -1 }, /* SecondaryColorPointerListIBM */ - { 6371, -1 }, /* NormalPointerListIBM */ - { 8062, -1 }, /* FogCoordPointerListIBM */ - { 8403, -1 }, /* VertexPointerListIBM */ - { 12608, -1 }, /* ColorPointerListIBM */ - { 13822, -1 }, /* TexCoordPointerListIBM */ - { 14290, -1 }, /* IndexPointerListIBM */ - { 33829, -1 }, /* EdgeFlagPointerListIBM */ + { 4510, -1 }, /* SecondaryColorPointerListIBM */ + { 6340, -1 }, /* NormalPointerListIBM */ + { 8031, -1 }, /* FogCoordPointerListIBM */ + { 8372, -1 }, /* VertexPointerListIBM */ + { 12577, -1 }, /* ColorPointerListIBM */ + { 13791, -1 }, /* TexCoordPointerListIBM */ + { 14291, -1 }, /* IndexPointerListIBM */ + { 33871, -1 }, /* EdgeFlagPointerListIBM */ { -1, -1 } }; #endif @@ -6285,10 +6290,10 @@ static const struct gl_function_remap GL_INGR_blend_func_separate_functions[] = #if defined(need_GL_INTEL_parallel_arrays) static const struct gl_function_remap GL_INTEL_parallel_arrays_functions[] = { - { 13162, -1 }, /* VertexPointervINTEL */ - { 15965, -1 }, /* ColorPointervINTEL */ - { 30983, -1 }, /* NormalPointervINTEL */ - { 31506, -1 }, /* TexCoordPointervINTEL */ + { 13131, -1 }, /* VertexPointervINTEL */ + { 16005, -1 }, /* ColorPointervINTEL */ + { 31053, -1 }, /* NormalPointervINTEL */ + { 31576, -1 }, /* TexCoordPointervINTEL */ { -1, -1 } }; #endif @@ -6302,10 +6307,10 @@ static const struct gl_function_remap GL_MESA_resize_buffers_functions[] = { #if defined(need_GL_MESA_shader_debug) static const struct gl_function_remap GL_MESA_shader_debug_functions[] = { - { 1729, -1 }, /* GetDebugLogLengthMESA */ - { 3615, -1 }, /* ClearDebugLogMESA */ - { 4768, -1 }, /* GetDebugLogMESA */ - { 32017, -1 }, /* CreateDebugObjectMESA */ + { 1690, -1 }, /* GetDebugLogLengthMESA */ + { 3537, -1 }, /* ClearDebugLogMESA */ + { 4695, -1 }, /* GetDebugLogMESA */ + { 32087, -1 }, /* CreateDebugObjectMESA */ { -1, -1 } }; #endif @@ -6326,15 +6331,15 @@ static const struct gl_function_remap GL_NV_condtitional_render_functions[] = { #if defined(need_GL_NV_evaluators) static const struct gl_function_remap GL_NV_evaluators_functions[] = { - { 7101, -1 }, /* GetMapAttribParameterivNV */ - { 8834, -1 }, /* MapControlPointsNV */ - { 8933, -1 }, /* MapParameterfvNV */ - { 11057, -1 }, /* EvalMapsNV */ - { 17718, -1 }, /* GetMapAttribParameterfvNV */ - { 17935, -1 }, /* MapParameterivNV */ - { 25646, -1 }, /* GetMapParameterivNV */ - { 26189, -1 }, /* GetMapParameterfvNV */ - { 30298, -1 }, /* GetMapControlPointsNV */ + { 7070, -1 }, /* GetMapAttribParameterivNV */ + { 8803, -1 }, /* MapControlPointsNV */ + { 8902, -1 }, /* MapParameterfvNV */ + { 11026, -1 }, /* EvalMapsNV */ + { 17830, -1 }, /* GetMapAttribParameterfvNV */ + { 18047, -1 }, /* MapParameterivNV */ + { 25800, -1 }, /* GetMapParameterivNV */ + { 26343, -1 }, /* GetMapParameterfvNV */ + { 30368, -1 }, /* GetMapControlPointsNV */ { -1, -1 } }; #endif @@ -6376,8 +6381,8 @@ static const struct gl_function_remap GL_NV_register_combiners_functions[] = { #if defined(need_GL_NV_register_combiners2) static const struct gl_function_remap GL_NV_register_combiners2_functions[] = { - { 16384, -1 }, /* CombinerStageParameterfvNV */ - { 16780, -1 }, /* GetCombinerStageParameterfvNV */ + { 16424, -1 }, /* CombinerStageParameterfvNV */ + { 16820, -1 }, /* GetCombinerStageParameterfvNV */ { -1, -1 } }; #endif @@ -6412,23 +6417,23 @@ static const struct gl_function_remap GL_OES_EGL_image_functions[] = { #if defined(need_GL_PGI_misc_hints) static const struct gl_function_remap GL_PGI_misc_hints_functions[] = { - { 9054, -1 }, /* HintPGI */ + { 9023, -1 }, /* HintPGI */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_detail_texture) static const struct gl_function_remap GL_SGIS_detail_texture_functions[] = { - { 16753, -1 }, /* GetDetailTexFuncSGIS */ - { 17152, -1 }, /* DetailTexFuncSGIS */ + { 16793, -1 }, /* GetDetailTexFuncSGIS */ + { 17264, -1 }, /* DetailTexFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_fog_function) static const struct gl_function_remap GL_SGIS_fog_function_functions[] = { - { 28157, -1 }, /* FogFuncSGIS */ - { 28930, -1 }, /* GetFogFuncSGIS */ + { 28279, -1 }, /* FogFuncSGIS */ + { 29000, -1 }, /* GetFogFuncSGIS */ { -1, -1 } }; #endif @@ -6456,112 +6461,112 @@ static const struct gl_function_remap GL_SGIS_point_parameters_functions[] = { #if defined(need_GL_SGIS_sharpen_texture) static const struct gl_function_remap GL_SGIS_sharpen_texture_functions[] = { - { 7162, -1 }, /* GetSharpenTexFuncSGIS */ - { 22894, -1 }, /* SharpenTexFuncSGIS */ + { 7131, -1 }, /* GetSharpenTexFuncSGIS */ + { 23048, -1 }, /* SharpenTexFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture4D) static const struct gl_function_remap GL_SGIS_texture4D_functions[] = { - { 1034, -1 }, /* TexImage4DSGIS */ - { 16300, -1 }, /* TexSubImage4DSGIS */ + { 995, -1 }, /* TexImage4DSGIS */ + { 16340, -1 }, /* TexSubImage4DSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture_color_mask) static const struct gl_function_remap GL_SGIS_texture_color_mask_functions[] = { - { 15671, -1 }, /* TextureColorMaskSGIS */ + { 15711, -1 }, /* TextureColorMaskSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIS_texture_filter4) static const struct gl_function_remap GL_SGIS_texture_filter4_functions[] = { - { 7339, -1 }, /* GetTexFilterFuncSGIS */ - { 16926, -1 }, /* TexFilterFuncSGIS */ + { 7308, -1 }, /* GetTexFilterFuncSGIS */ + { 16966, -1 }, /* TexFilterFuncSGIS */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_async) static const struct gl_function_remap GL_SGIX_async_functions[] = { - { 3541, -1 }, /* AsyncMarkerSGIX */ - { 4722, -1 }, /* FinishAsyncSGIX */ - { 5794, -1 }, /* PollAsyncSGIX */ - { 23103, -1 }, /* DeleteAsyncMarkersSGIX */ - { 23158, -1 }, /* IsAsyncMarkerSGIX */ - { 33626, -1 }, /* GenAsyncMarkersSGIX */ + { 3463, -1 }, /* AsyncMarkerSGIX */ + { 4649, -1 }, /* FinishAsyncSGIX */ + { 5721, -1 }, /* PollAsyncSGIX */ + { 23257, -1 }, /* DeleteAsyncMarkersSGIX */ + { 23312, -1 }, /* IsAsyncMarkerSGIX */ + { 33668, -1 }, /* GenAsyncMarkersSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_flush_raster) static const struct gl_function_remap GL_SGIX_flush_raster_functions[] = { - { 7716, -1 }, /* FlushRasterSGIX */ + { 7685, -1 }, /* FlushRasterSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_fragment_lighting) static const struct gl_function_remap GL_SGIX_fragment_lighting_functions[] = { - { 2737, -1 }, /* FragmentMaterialfvSGIX */ - { 5698, -1 }, /* FragmentLightiSGIX */ - { 8470, -1 }, /* FragmentMaterialfSGIX */ - { 8607, -1 }, /* GetFragmentLightivSGIX */ - { 9480, -1 }, /* FragmentLightModeliSGIX */ - { 11120, -1 }, /* FragmentLightivSGIX */ - { 11427, -1 }, /* GetFragmentMaterialivSGIX */ - { 16693, -1 }, /* GetFragmentMaterialfvSGIX */ - { 20159, -1 }, /* FragmentLightModelfSGIX */ - { 20477, -1 }, /* FragmentColorMaterialSGIX */ - { 20894, -1 }, /* FragmentMaterialiSGIX */ - { 22189, -1 }, /* LightEnviSGIX */ - { 23875, -1 }, /* FragmentLightModelfvSGIX */ - { 24210, -1 }, /* FragmentLightfvSGIX */ - { 29314, -1 }, /* FragmentLightModelivSGIX */ - { 29463, -1 }, /* FragmentLightfSGIX */ - { 32354, -1 }, /* GetFragmentLightfvSGIX */ - { 34109, -1 }, /* FragmentMaterialivSGIX */ + { 2698, -1 }, /* FragmentMaterialfvSGIX */ + { 5625, -1 }, /* FragmentLightiSGIX */ + { 8439, -1 }, /* FragmentMaterialfSGIX */ + { 8576, -1 }, /* GetFragmentLightivSGIX */ + { 9449, -1 }, /* FragmentLightModeliSGIX */ + { 11089, -1 }, /* FragmentLightivSGIX */ + { 11396, -1 }, /* GetFragmentMaterialivSGIX */ + { 16733, -1 }, /* GetFragmentMaterialfvSGIX */ + { 20313, -1 }, /* FragmentLightModelfSGIX */ + { 20631, -1 }, /* FragmentColorMaterialSGIX */ + { 21048, -1 }, /* FragmentMaterialiSGIX */ + { 22343, -1 }, /* LightEnviSGIX */ + { 24029, -1 }, /* FragmentLightModelfvSGIX */ + { 24364, -1 }, /* FragmentLightfvSGIX */ + { 29384, -1 }, /* FragmentLightModelivSGIX */ + { 29533, -1 }, /* FragmentLightfSGIX */ + { 32463, -1 }, /* GetFragmentLightfvSGIX */ + { 34151, -1 }, /* FragmentMaterialivSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_framezoom) static const struct gl_function_remap GL_SGIX_framezoom_functions[] = { - { 23181, -1 }, /* FrameZoomSGIX */ + { 23335, -1 }, /* FrameZoomSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_igloo_interface) static const struct gl_function_remap GL_SGIX_igloo_interface_functions[] = { - { 29771, -1 }, /* IglooInterfaceSGIX */ + { 29841, -1 }, /* IglooInterfaceSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_instruments) static const struct gl_function_remap GL_SGIX_instruments_functions[] = { - { 2917, -1 }, /* ReadInstrumentsSGIX */ - { 6935, -1 }, /* PollInstrumentsSGIX */ - { 10978, -1 }, /* GetInstrumentsSGIX */ - { 13420, -1 }, /* StartInstrumentsSGIX */ - { 16418, -1 }, /* StopInstrumentsSGIX */ - { 18383, -1 }, /* InstrumentsBufferSGIX */ + { 2878, -1 }, /* ReadInstrumentsSGIX */ + { 6904, -1 }, /* PollInstrumentsSGIX */ + { 10947, -1 }, /* GetInstrumentsSGIX */ + { 13389, -1 }, /* StartInstrumentsSGIX */ + { 16458, -1 }, /* StopInstrumentsSGIX */ + { 18495, -1 }, /* InstrumentsBufferSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_list_priority) static const struct gl_function_remap GL_SGIX_list_priority_functions[] = { - { 1265, -1 }, /* ListParameterfSGIX */ - { 3243, -1 }, /* GetListParameterfvSGIX */ - { 18248, -1 }, /* ListParameteriSGIX */ - { 19365, -1 }, /* ListParameterfvSGIX */ - { 21560, -1 }, /* ListParameterivSGIX */ - { 33670, -1 }, /* GetListParameterivSGIX */ + { 1226, -1 }, /* ListParameterfSGIX */ + { 3165, -1 }, /* GetListParameterfvSGIX */ + { 18360, -1 }, /* ListParameteriSGIX */ + { 19519, -1 }, /* ListParameterfvSGIX */ + { 21714, -1 }, /* ListParameterivSGIX */ + { 33712, -1 }, /* GetListParameterivSGIX */ { -1, -1 } }; #endif @@ -6575,134 +6580,134 @@ static const struct gl_function_remap GL_SGIX_pixel_texture_functions[] = { #if defined(need_GL_SGIX_polynomial_ffd) static const struct gl_function_remap GL_SGIX_polynomial_ffd_functions[] = { - { 2959, -1 }, /* DeformationMap3dSGIX */ - { 3839, -1 }, /* LoadIdentityDeformationMapSGIX */ - { 16518, -1 }, /* DeformSGIX */ - { 25144, -1 }, /* DeformationMap3fSGIX */ + { 3761, -1 }, /* LoadIdentityDeformationMapSGIX */ + { 16558, -1 }, /* DeformSGIX */ + { 25298, -1 }, /* DeformationMap3fSGIX */ + { 32351, -1 }, /* DeformationMap3dSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_reference_plane) static const struct gl_function_remap GL_SGIX_reference_plane_functions[] = { - { 15222, -1 }, /* ReferencePlaneSGIX */ + { 15262, -1 }, /* ReferencePlaneSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_sprite) static const struct gl_function_remap GL_SGIX_sprite_functions[] = { - { 9978, -1 }, /* SpriteParameterfvSGIX */ - { 21349, -1 }, /* SpriteParameteriSGIX */ - { 27529, -1 }, /* SpriteParameterfSGIX */ - { 30441, -1 }, /* SpriteParameterivSGIX */ + { 9947, -1 }, /* SpriteParameterfvSGIX */ + { 21503, -1 }, /* SpriteParameteriSGIX */ + { 27683, -1 }, /* SpriteParameterfSGIX */ + { 30511, -1 }, /* SpriteParameterivSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGIX_tag_sample_buffer) static const struct gl_function_remap GL_SGIX_tag_sample_buffer_functions[] = { - { 21408, -1 }, /* TagSampleBufferSGIX */ + { 21562, -1 }, /* TagSampleBufferSGIX */ { -1, -1 } }; #endif #if defined(need_GL_SGI_color_table) static const struct gl_function_remap GL_SGI_color_table_functions[] = { - { 8006, _gloffset_ColorTableParameteriv }, - { 8728, _gloffset_ColorTable }, - { 15718, _gloffset_GetColorTable }, - { 15828, _gloffset_CopyColorTable }, - { 20103, _gloffset_ColorTableParameterfv }, - { 23783, _gloffset_GetColorTableParameterfv }, - { 25947, _gloffset_GetColorTableParameteriv }, + { 7975, _gloffset_ColorTableParameteriv }, + { 8697, _gloffset_ColorTable }, + { 15758, _gloffset_GetColorTable }, + { 15868, _gloffset_CopyColorTable }, + { 20257, _gloffset_ColorTableParameterfv }, + { 23937, _gloffset_GetColorTableParameterfv }, + { 26101, _gloffset_GetColorTableParameteriv }, { -1, -1 } }; #endif #if defined(need_GL_SUNX_constant_data) static const struct gl_function_remap GL_SUNX_constant_data_functions[] = { - { 32332, -1 }, /* FinishTextureSUNX */ + { 32441, -1 }, /* FinishTextureSUNX */ { -1, -1 } }; #endif #if defined(need_GL_SUN_global_alpha) static const struct gl_function_remap GL_SUN_global_alpha_functions[] = { - { 3562, -1 }, /* GlobalAlphaFactorubSUN */ - { 5075, -1 }, /* GlobalAlphaFactoriSUN */ - { 6960, -1 }, /* GlobalAlphaFactordSUN */ - { 10062, -1 }, /* GlobalAlphaFactoruiSUN */ - { 10569, -1 }, /* GlobalAlphaFactorbSUN */ - { 13735, -1 }, /* GlobalAlphaFactorfSUN */ - { 13899, -1 }, /* GlobalAlphaFactorusSUN */ - { 23470, -1 }, /* GlobalAlphaFactorsSUN */ + { 3484, -1 }, /* GlobalAlphaFactorubSUN */ + { 5002, -1 }, /* GlobalAlphaFactoriSUN */ + { 6929, -1 }, /* GlobalAlphaFactordSUN */ + { 10031, -1 }, /* GlobalAlphaFactoruiSUN */ + { 10538, -1 }, /* GlobalAlphaFactorbSUN */ + { 13704, -1 }, /* GlobalAlphaFactorfSUN */ + { 13868, -1 }, /* GlobalAlphaFactorusSUN */ + { 23624, -1 }, /* GlobalAlphaFactorsSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_mesh_array) static const struct gl_function_remap GL_SUN_mesh_array_functions[] = { - { 30232, -1 }, /* DrawMeshArraysSUN */ + { 30302, -1 }, /* DrawMeshArraysSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_triangle_list) static const struct gl_function_remap GL_SUN_triangle_list_functions[] = { - { 4696, -1 }, /* ReplacementCodeubSUN */ - { 6719, -1 }, /* ReplacementCodeubvSUN */ - { 19824, -1 }, /* ReplacementCodeusvSUN */ - { 20012, -1 }, /* ReplacementCodePointerSUN */ - { 22253, -1 }, /* ReplacementCodeuiSUN */ - { 23132, -1 }, /* ReplacementCodeusSUN */ - { 30898, -1 }, /* ReplacementCodeuivSUN */ + { 4623, -1 }, /* ReplacementCodeubSUN */ + { 6688, -1 }, /* ReplacementCodeubvSUN */ + { 19978, -1 }, /* ReplacementCodeusvSUN */ + { 20166, -1 }, /* ReplacementCodePointerSUN */ + { 22407, -1 }, /* ReplacementCodeuiSUN */ + { 23286, -1 }, /* ReplacementCodeusSUN */ + { 30968, -1 }, /* ReplacementCodeuivSUN */ { -1, -1 } }; #endif #if defined(need_GL_SUN_vertex) static const struct gl_function_remap GL_SUN_vertex_functions[] = { - { 1139, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */ - { 1337, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */ - { 1591, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */ - { 1960, -1 }, /* ReplacementCodeuiVertex3fvSUN */ - { 2094, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */ - { 2673, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */ - { 3052, -1 }, /* Color4ubVertex3fvSUN */ - { 4880, -1 }, /* Color4ubVertex3fSUN */ - { 5003, -1 }, /* TexCoord2fVertex3fSUN */ - { 5421, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */ - { 5898, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */ - { 6614, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ - { 7394, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */ - { 7753, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */ - { 9279, -1 }, /* Color3fVertex3fSUN */ - { 10478, -1 }, /* Color3fVertex3fvSUN */ - { 10943, -1 }, /* Color4fNormal3fVertex3fvSUN */ - { 11772, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ - { 13283, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */ - { 14838, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ - { 15364, -1 }, /* TexCoord2fColor3fVertex3fSUN */ - { 16443, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */ - { 16885, -1 }, /* Color4ubVertex2fvSUN */ - { 17177, -1 }, /* Normal3fVertex3fSUN */ - { 18324, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */ - { 18676, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */ - { 18983, -1 }, /* TexCoord2fNormal3fVertex3fSUN */ - { 19617, -1 }, /* TexCoord2fVertex3fvSUN */ - { 20447, -1 }, /* Color4ubVertex2fSUN */ - { 20685, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */ - { 22719, -1 }, /* TexCoord2fColor4ubVertex3fSUN */ - { 23200, -1 }, /* Normal3fVertex3fvSUN */ - { 23692, -1 }, /* Color4fNormal3fVertex3fSUN */ - { 24693, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ - { 26850, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */ - { 28273, -1 }, /* TexCoord4fVertex4fSUN */ - { 28719, -1 }, /* TexCoord2fColor3fVertex3fvSUN */ - { 29158, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */ - { 29285, -1 }, /* TexCoord4fVertex4fvSUN */ - { 30019, -1 }, /* ReplacementCodeuiVertex3fSUN */ + { 1100, -1 }, /* ReplacementCodeuiColor3fVertex3fvSUN */ + { 1298, -1 }, /* TexCoord4fColor4fNormal3fVertex4fvSUN */ + { 1552, -1 }, /* TexCoord2fColor4ubVertex3fvSUN */ + { 1921, -1 }, /* ReplacementCodeuiVertex3fvSUN */ + { 2055, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fvSUN */ + { 2634, -1 }, /* ReplacementCodeuiNormal3fVertex3fSUN */ + { 2974, -1 }, /* Color4ubVertex3fvSUN */ + { 4807, -1 }, /* Color4ubVertex3fSUN */ + { 4930, -1 }, /* TexCoord2fVertex3fSUN */ + { 5348, -1 }, /* TexCoord2fColor4fNormal3fVertex3fSUN */ + { 5825, -1 }, /* TexCoord2fNormal3fVertex3fvSUN */ + { 6583, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ + { 7363, -1 }, /* ReplacementCodeuiColor4ubVertex3fvSUN */ + { 7722, -1 }, /* ReplacementCodeuiTexCoord2fVertex3fSUN */ + { 9248, -1 }, /* Color3fVertex3fSUN */ + { 10447, -1 }, /* Color3fVertex3fvSUN */ + { 10912, -1 }, /* Color4fNormal3fVertex3fvSUN */ + { 11741, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ + { 13252, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fvSUN */ + { 14878, -1 }, /* ReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ + { 15404, -1 }, /* TexCoord2fColor3fVertex3fSUN */ + { 16483, -1 }, /* TexCoord4fColor4fNormal3fVertex4fSUN */ + { 16925, -1 }, /* Color4ubVertex2fvSUN */ + { 17289, -1 }, /* Normal3fVertex3fSUN */ + { 18436, -1 }, /* ReplacementCodeuiColor4fNormal3fVertex3fSUN */ + { 18788, -1 }, /* TexCoord2fColor4fNormal3fVertex3fvSUN */ + { 19095, -1 }, /* TexCoord2fNormal3fVertex3fSUN */ + { 19771, -1 }, /* TexCoord2fVertex3fvSUN */ + { 20601, -1 }, /* Color4ubVertex2fSUN */ + { 20839, -1 }, /* ReplacementCodeuiColor4ubVertex3fSUN */ + { 22873, -1 }, /* TexCoord2fColor4ubVertex3fSUN */ + { 23354, -1 }, /* Normal3fVertex3fvSUN */ + { 23846, -1 }, /* Color4fNormal3fVertex3fSUN */ + { 24847, -1 }, /* ReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ + { 27004, -1 }, /* ReplacementCodeuiColor3fVertex3fSUN */ + { 28395, -1 }, /* TexCoord4fVertex4fSUN */ + { 28841, -1 }, /* TexCoord2fColor3fVertex3fvSUN */ + { 29228, -1 }, /* ReplacementCodeuiNormal3fVertex3fvSUN */ + { 29355, -1 }, /* TexCoord4fVertex4fvSUN */ + { 30089, -1 }, /* ReplacementCodeuiVertex3fSUN */ { -1, -1 } }; #endif @@ -6710,40 +6715,40 @@ static const struct gl_function_remap GL_SUN_vertex_functions[] = { #if defined(need_GL_VERSION_1_3) /* functions defined in MESA_remap_table_functions are excluded */ static const struct gl_function_remap GL_VERSION_1_3_functions[] = { - { 464, _gloffset_MultiTexCoord3sARB }, - { 696, _gloffset_ActiveTextureARB }, - { 4451, _gloffset_MultiTexCoord1fvARB }, - { 6505, _gloffset_MultiTexCoord3dARB }, - { 6550, _gloffset_MultiTexCoord2iARB }, - { 6674, _gloffset_MultiTexCoord2svARB }, - { 8684, _gloffset_MultiTexCoord2fARB }, - { 10779, _gloffset_MultiTexCoord3fvARB }, - { 11381, _gloffset_MultiTexCoord4sARB }, - { 12062, _gloffset_MultiTexCoord2dvARB }, - { 12469, _gloffset_MultiTexCoord1svARB }, - { 12870, _gloffset_MultiTexCoord3svARB }, - { 12931, _gloffset_MultiTexCoord4iARB }, - { 13762, _gloffset_MultiTexCoord3iARB }, - { 14561, _gloffset_MultiTexCoord1dARB }, - { 14793, _gloffset_MultiTexCoord3dvARB }, - { 16072, _gloffset_MultiTexCoord3ivARB }, - { 16117, _gloffset_MultiTexCoord2sARB }, - { 17577, _gloffset_MultiTexCoord4ivARB }, - { 19743, _gloffset_ClientActiveTextureARB }, - { 22106, _gloffset_MultiTexCoord2dARB }, - { 22543, _gloffset_MultiTexCoord4dvARB }, - { 22920, _gloffset_MultiTexCoord4fvARB }, - { 23924, _gloffset_MultiTexCoord3fARB }, - { 26541, _gloffset_MultiTexCoord4dARB }, - { 26807, _gloffset_MultiTexCoord1sARB }, - { 27011, _gloffset_MultiTexCoord1dvARB }, - { 28019, _gloffset_MultiTexCoord1ivARB }, - { 28112, _gloffset_MultiTexCoord2ivARB }, - { 28451, _gloffset_MultiTexCoord1iARB }, - { 29887, _gloffset_MultiTexCoord4svARB }, - { 30511, _gloffset_MultiTexCoord1fARB }, - { 30774, _gloffset_MultiTexCoord4fARB }, - { 33271, _gloffset_MultiTexCoord2fvARB }, + { 425, _gloffset_MultiTexCoord3sARB }, + { 657, _gloffset_ActiveTextureARB }, + { 4378, _gloffset_MultiTexCoord1fvARB }, + { 6474, _gloffset_MultiTexCoord3dARB }, + { 6519, _gloffset_MultiTexCoord2iARB }, + { 6643, _gloffset_MultiTexCoord2svARB }, + { 8653, _gloffset_MultiTexCoord2fARB }, + { 10748, _gloffset_MultiTexCoord3fvARB }, + { 11350, _gloffset_MultiTexCoord4sARB }, + { 12031, _gloffset_MultiTexCoord2dvARB }, + { 12438, _gloffset_MultiTexCoord1svARB }, + { 12839, _gloffset_MultiTexCoord3svARB }, + { 12900, _gloffset_MultiTexCoord4iARB }, + { 13731, _gloffset_MultiTexCoord3iARB }, + { 14601, _gloffset_MultiTexCoord1dARB }, + { 14833, _gloffset_MultiTexCoord3dvARB }, + { 16112, _gloffset_MultiTexCoord3ivARB }, + { 16157, _gloffset_MultiTexCoord2sARB }, + { 17689, _gloffset_MultiTexCoord4ivARB }, + { 19897, _gloffset_ClientActiveTextureARB }, + { 22260, _gloffset_MultiTexCoord2dARB }, + { 22697, _gloffset_MultiTexCoord4dvARB }, + { 23074, _gloffset_MultiTexCoord4fvARB }, + { 24078, _gloffset_MultiTexCoord3fARB }, + { 26695, _gloffset_MultiTexCoord4dARB }, + { 26961, _gloffset_MultiTexCoord1sARB }, + { 27165, _gloffset_MultiTexCoord1dvARB }, + { 28141, _gloffset_MultiTexCoord1ivARB }, + { 28234, _gloffset_MultiTexCoord2ivARB }, + { 28573, _gloffset_MultiTexCoord1iARB }, + { 29957, _gloffset_MultiTexCoord4svARB }, + { 30581, _gloffset_MultiTexCoord1fARB }, + { 30844, _gloffset_MultiTexCoord4fARB }, + { 33313, _gloffset_MultiTexCoord2fvARB }, { -1, -1 } }; #endif diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c index 514eed5d0b1..b58e30de9c4 100644 --- a/src/mesa/main/shaderapi.c +++ b/src/mesa/main/shaderapi.c @@ -925,6 +925,8 @@ print_shader_info(const struct gl_shader_program *shProg) printf(" vert prog %u\n", shProg->VertexProgram->Base.Id); if (shProg->FragmentProgram) printf(" frag prog %u\n", shProg->FragmentProgram->Base.Id); + if (shProg->GeometryProgram) + printf(" geom prog %u\n", shProg->GeometryProgram->Base.Id); } @@ -1075,6 +1077,7 @@ validate_shader_program(const struct gl_shader_program *shProg, char *errMsg) { const struct gl_vertex_program *vp = shProg->VertexProgram; + const struct gl_geometry_program *gp = shProg->GeometryProgram; const struct gl_fragment_program *fp = shProg->FragmentProgram; if (!shProg->LinkStatus) { @@ -1104,6 +1107,9 @@ validate_shader_program(const struct gl_shader_program *shProg, if (vp && !validate_samplers(&vp->Base, errMsg)) { return GL_FALSE; } + if (gp && !validate_samplers(&gp->Base, errMsg)) { + return GL_FALSE; + } if (fp && !validate_samplers(&fp->Base, errMsg)) { return GL_FALSE; } @@ -1519,7 +1525,8 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count, for (i = 0; i < count; i++) { if (string[i] == NULL) { free((GLvoid *) offsets); - _mesa_error(ctx, GL_INVALID_OPERATION, "glShaderSourceARB(null string)"); + _mesa_error(ctx, GL_INVALID_OPERATION, + "glShaderSourceARB(null string)"); return; } if (length == NULL || length[i] < 0) @@ -1570,7 +1577,7 @@ _mesa_ShaderSourceARB(GLhandleARB shaderObj, GLsizei count, free(source); source = newSource; } - } + } shader_source(ctx, shaderObj, source); @@ -1592,6 +1599,8 @@ _mesa_UseProgramObjectARB(GLhandleARB program) struct gl_transform_feedback_object *obj = ctx->TransformFeedback.CurrentObject; + ASSERT_OUTSIDE_BEGIN_END(ctx); + if (obj->Active) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUseProgram(transform feedback active)"); @@ -1709,8 +1718,7 @@ _mesa_ShaderBinary(GLint n, const GLuint* shaders, GLenum binaryformat, #if FEATURE_ARB_geometry_shader4 void GLAPIENTRY -_mesa_ProgramParameteriARB(GLuint program, GLenum pname, - GLint value) +_mesa_ProgramParameteriARB(GLuint program, GLenum pname, GLint value) { struct gl_shader_program *shProg; GET_CURRENT_CONTEXT(ctx); @@ -1788,6 +1796,8 @@ _mesa_UseShaderProgramEXT(GLenum type, GLuint program) GET_CURRENT_CONTEXT(ctx); struct gl_shader_program *shProg = NULL; + ASSERT_OUTSIDE_BEGIN_END(ctx); + if (!validate_shader_target(ctx, type)) { _mesa_error(ctx, GL_INVALID_ENUM, "glUseShaderProgramEXT(type)"); return; diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 456687b0c5c..8cbb021d8b0 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -217,10 +217,12 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat, case GL_DEPTH_COMPONENT24: case GL_DEPTH_COMPONENT32: RETURN_IF_SUPPORTED(MESA_FORMAT_Z32); + RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); break; case GL_DEPTH_COMPONENT16: RETURN_IF_SUPPORTED(MESA_FORMAT_Z16); + RETURN_IF_SUPPORTED(MESA_FORMAT_X8_Z24); RETURN_IF_SUPPORTED(MESA_FORMAT_S8_Z24); default: ; /* fallthrough */ diff --git a/src/mesa/main/texgetimage.c b/src/mesa/main/texgetimage.c index b23317c46a0..97d10122541 100644 --- a/src/mesa/main/texgetimage.c +++ b/src/mesa/main/texgetimage.c @@ -40,6 +40,7 @@ #include "pack.h" #include "pbo.h" #include "texgetimage.h" +#include "texfetch.h" #include "teximage.h" @@ -220,110 +221,14 @@ get_tex_ycbcr(struct gl_context *ctx, GLuint dimensions, } -#if FEATURE_EXT_texture_sRGB - - -/** - * Convert a float value from linear space to a - * non-linear sRGB value in [0, 255]. - * Not terribly efficient. - */ -static INLINE GLfloat -linear_to_nonlinear(GLfloat cl) -{ - /* can't have values outside [0, 1] */ - GLfloat cs; - if (cl < 0.0031308f) { - cs = 12.92f * cl; - } - else { - cs = (GLfloat)(1.055 * pow(cl, 0.41666) - 0.055); - } - return cs; -} - - -/** - * glGetTexImagefor sRGB pixels; - */ -static void -get_tex_srgb(struct gl_context *ctx, GLuint dimensions, - GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_image *texImage) -{ - const GLint width = texImage->Width; - const GLint height = texImage->Height; - const GLint depth = texImage->Depth; - const GLbitfield transferOps = 0x0; - GLint img, row; - GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat)); - - if (!rgba) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage"); - return; - } - - for (img = 0; img < depth; img++) { - for (row = 0; row < height; row++) { - void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, - width, height, format, type, - img, row, 0); - - GLint col; - - /* convert row to RGBA format */ - for (col = 0; col < width; col++) { - texImage->FetchTexelf(texImage, col, row, img, rgba[col]); - if (texImage->_BaseFormat == GL_LUMINANCE) { - rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); - rgba[col][GCOMP] = 0.0; - rgba[col][BCOMP] = 0.0; - } - else if (texImage->_BaseFormat == GL_LUMINANCE_ALPHA) { - rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); - rgba[col][GCOMP] = 0.0; - rgba[col][BCOMP] = 0.0; - } - else if (texImage->_BaseFormat == GL_RGB || - texImage->_BaseFormat == GL_RGBA) { - rgba[col][RCOMP] = linear_to_nonlinear(rgba[col][RCOMP]); - rgba[col][GCOMP] = linear_to_nonlinear(rgba[col][GCOMP]); - rgba[col][BCOMP] = linear_to_nonlinear(rgba[col][BCOMP]); - } - } - _mesa_pack_rgba_span_float(ctx, width, (GLfloat (*)[4]) rgba, - format, type, dest, - &ctx->Pack, transferOps); - } - } - - free(rgba); -} - - -#else /* FEATURE_EXT_texture_sRGB */ - - -static INLINE void -get_tex_srgb(struct gl_context *ctx, GLuint dimensions, - GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_image *texImage) -{ - ASSERT_NO_FEATURE(); -} - - -#endif /* FEATURE_EXT_texture_sRGB */ - - /** - * glGetTexImagefor RGBA, Luminance, etc. pixels. + * glGetTexImage for (s)RGBA, Luminance, etc. pixels. * This is the slow way since we use texture sampling. */ static void get_tex_rgba(struct gl_context *ctx, GLuint dimensions, GLenum format, GLenum type, GLvoid *pixels, - const struct gl_texture_image *texImage) + struct gl_texture_image *texImage) { const GLint width = texImage->Width; const GLint height = texImage->Height; @@ -334,12 +239,23 @@ get_tex_rgba(struct gl_context *ctx, GLuint dimensions, GLbitfield transferOps = 0x0; GLint img, row; GLfloat (*rgba)[4] = (GLfloat (*)[4]) malloc(4 * width * sizeof(GLfloat)); + const GLboolean is_sampler_srgb_decode = + _mesa_get_format_color_encoding(texImage->TexFormat) == GL_SRGB && + texImage->TexObject->Sampler.sRGBDecode == GL_DECODE_EXT; if (!rgba) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glGetTexImage"); return; } + /* glGetTexImage always returns sRGB data for sRGB textures. Make sure the + * fetch functions return sRGB data without linearizing it. + */ + if (is_sampler_srgb_decode) { + texImage->TexObject->Sampler.sRGBDecode = GL_SKIP_DECODE_EXT; + _mesa_set_fetch_functions(texImage, dimensions); + } + for (img = 0; img < depth; img++) { for (row = 0; row < height; row++) { void *dest = _mesa_image_address(dimensions, &ctx->Pack, pixels, @@ -389,6 +305,11 @@ get_tex_rgba(struct gl_context *ctx, GLuint dimensions, } } + if (is_sampler_srgb_decode) { + texImage->TexObject->Sampler.sRGBDecode = GL_DECODE_EXT; + _mesa_set_fetch_functions(texImage, dimensions); + } + free(rgba); } @@ -548,9 +469,6 @@ _mesa_get_teximage(struct gl_context *ctx, GLenum target, GLint level, else if (format == GL_YCBCR_MESA) { get_tex_ycbcr(ctx, dimensions, format, type, pixels, texImage); } - else if (_mesa_get_format_color_encoding(texImage->TexFormat) == GL_SRGB) { - get_tex_srgb(ctx, dimensions, format, type, pixels, texImage); - } else { get_tex_rgba(ctx, dimensions, format, type, pixels, texImage); } diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 8fb54c693e0..3e429110ae9 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -81,31 +81,18 @@ _mesa_free_texmemory(void *m) /* - * Compute floor(log_base_2(n)). - * If n < 0 return -1. + * Returns the floor form of binary logarithm for a 32-bit integer. */ -static int -logbase2( int n ) +static GLuint +logbase2(GLuint n) { - GLint i = 1; - GLint log2 = 0; - - if (n < 0) - return -1; - - if (n == 0) - return 0; - - while ( n > i ) { - i *= 2; - log2++; - } - if (i != n) { - return log2 - 1; - } - else { - return log2; - } + GLuint pos = 0; + if (n >= 1<<16) { n >>= 16; pos += 16; } + if (n >= 1<< 8) { n >>= 8; pos += 8; } + if (n >= 1<< 4) { n >>= 4; pos += 4; } + if (n >= 1<< 2) { n >>= 2; pos += 2; } + if (n >= 1<< 1) { pos += 1; } + return pos; } @@ -2693,7 +2680,7 @@ texsubimage(struct gl_context *ctx, GLuint dims, GLenum target, GLint level, format, type, texImage)) { /* error was recorded */ } - else if (width > 0 && height > 0 && height > 0) { + else if (width > 0 && height > 0 && depth > 0) { /* If we have a border, offset=-1 is legal. Bias by border width. */ switch (dims) { case 3: diff --git a/src/mesa/main/uniforms.c b/src/mesa/main/uniforms.c index 12fe7b5e226..c9b12c8c2e1 100644 --- a/src/mesa/main/uniforms.c +++ b/src/mesa/main/uniforms.c @@ -39,6 +39,7 @@ #include "main/glheader.h" #include "main/context.h" #include "main/dispatch.h" +#include "main/image.h" #include "main/mfeatures.h" #include "main/mtypes.h" #include "main/shaderapi.h" @@ -121,32 +122,72 @@ is_sampler_type(GLenum type) } -static struct gl_program_parameter * -get_uniform_parameter(const struct gl_shader_program *shProg, GLuint index) +/** + * Given a uniform index, return the vertex/geometry/fragment program + * that has that parameter, plus the position of the parameter in the + * parameter/constant buffer. + * \param shProg the shader program + * \param index the uniform index in [0, NumUniforms-1] + * \param progOut returns containing program + * \param posOut returns position of the uniform in the param/const buffer + * \return GL_TRUE for success, GL_FALSE for invalid index + */ +static GLboolean +find_uniform_parameter_pos(struct gl_shader_program *shProg, GLint index, + struct gl_program **progOut, GLint *posOut) { - const struct gl_program *prog = NULL; - GLint progPos; + struct gl_program *prog = NULL; + GLint pos; - progPos = shProg->Uniforms->Uniforms[index].VertPos; - if (progPos >= 0) { + if (!shProg->Uniforms || + index < 0 || + index >= (GLint) shProg->Uniforms->NumUniforms) { + return GL_FALSE; + } + + pos = shProg->Uniforms->Uniforms[index].VertPos; + if (pos >= 0) { prog = &shProg->VertexProgram->Base; } else { - progPos = shProg->Uniforms->Uniforms[index].FragPos; - if (progPos >= 0) { + pos = shProg->Uniforms->Uniforms[index].FragPos; + if (pos >= 0) { prog = &shProg->FragmentProgram->Base; - } else { - progPos = shProg->Uniforms->Uniforms[index].GeomPos; - if (progPos >= 0) { + } + else { + pos = shProg->Uniforms->Uniforms[index].GeomPos; + if (pos >= 0) { prog = &shProg->GeometryProgram->Base; } } } - if (!prog || progPos < 0) - return NULL; /* should never happen */ + if (!prog || pos < 0) + return GL_FALSE; /* should really never happen */ - return &prog->Parameters->Parameters[progPos]; + *progOut = prog; + *posOut = pos; + + return GL_TRUE; +} + + +/** + * Return pointer to a gl_program_parameter which corresponds to a uniform. + * \param shProg the shader program + * \param index the uniform index in [0, NumUniforms-1] + * \return gl_program_parameter point or NULL if index is invalid + */ +static const struct gl_program_parameter * +get_uniform_parameter(struct gl_shader_program *shProg, GLint index) +{ + struct gl_program *prog; + GLint progPos; + + if (find_uniform_parameter_pos(shProg, index, &prog, &progPos)) + return &prog->Parameters->Parameters[progPos]; + else + return NULL; } @@ -158,12 +199,10 @@ _mesa_get_active_uniform(struct gl_context *ctx, GLuint program, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLchar *nameOut) { - const struct gl_shader_program *shProg; - const struct gl_program *prog = NULL; + struct gl_shader_program *shProg = + _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniform"); const struct gl_program_parameter *param; - GLint progPos; - shProg = _mesa_lookup_shader_program_err(ctx, program, "glGetActiveUniform"); if (!shProg) return; @@ -172,27 +211,9 @@ _mesa_get_active_uniform(struct gl_context *ctx, GLuint program, GLuint index, return; } - progPos = shProg->Uniforms->Uniforms[index].VertPos; - if (progPos >= 0) { - prog = &shProg->VertexProgram->Base; - } - else { - progPos = shProg->Uniforms->Uniforms[index].FragPos; - if (progPos >= 0) { - prog = &shProg->FragmentProgram->Base; - } else { - progPos = shProg->Uniforms->Uniforms[index].GeomPos; - if (progPos >= 0) { - prog = &shProg->GeometryProgram->Base; - } - } - } - - if (!prog || progPos < 0) - return; /* should never happen */ - - ASSERT(progPos < prog->Parameters->NumParameters); - param = &prog->Parameters->Parameters[progPos]; + param = get_uniform_parameter(shProg, index); + if (!param) + return; if (nameOut) { _mesa_copy_string(nameOut, maxLength, length, param->Name); @@ -313,54 +334,7 @@ get_uniform_rows_cols(const struct gl_program_parameter *p, /** - * Helper for get_uniform[fi]v() functions. - * Given a shader program name and uniform location, return a pointer - * to the shader program and return the program parameter position. - */ -static void -lookup_uniform_parameter(struct gl_context *ctx, GLuint program, GLint location, - struct gl_program **progOut, GLint *paramPosOut) -{ - struct gl_shader_program *shProg - = _mesa_lookup_shader_program_err(ctx, program, "glGetUniform[if]v"); - struct gl_program *prog = NULL; - GLint progPos = -1; - - /* if shProg is NULL, we'll have already recorded an error */ - - if (shProg) { - if (!shProg->Uniforms || - location < 0 || - location >= (GLint) shProg->Uniforms->NumUniforms) { - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformfv(location)"); - } - else { - /* OK, find the gl_program and program parameter location */ - progPos = shProg->Uniforms->Uniforms[location].VertPos; - if (progPos >= 0) { - prog = &shProg->VertexProgram->Base; - } - else { - progPos = shProg->Uniforms->Uniforms[location].FragPos; - if (progPos >= 0) { - prog = &shProg->FragmentProgram->Base; - } else { - progPos = shProg->Uniforms->Uniforms[location].GeomPos; - if (progPos >= 0) { - prog = &shProg->GeometryProgram->Base; - } - } - } - } - } - - *progOut = prog; - *paramPosOut = progPos; -} - - -/** - * GLGL uniform arrays and structs require special handling. + * GLSL uniform arrays and structs require special handling. * * The GL_ARB_shader_objects spec says that if you use * glGetUniformLocation to get the location of an array, you CANNOT @@ -408,20 +382,26 @@ split_location_offset(GLint *location, GLint *offset) /** - * Called via glGetUniformfv(). + * Called via glGetUniform[fiui]v() to get the current value of a uniform. */ static void -_mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, - GLsizei bufSize, GLfloat *params) +get_uniform(struct gl_context *ctx, GLuint program, GLint location, + GLsizei bufSize, GLenum returnType, GLvoid *paramsOut) { + struct gl_shader_program *shProg = + _mesa_lookup_shader_program_err(ctx, program, "glGetUniformfv"); struct gl_program *prog; GLint paramPos, offset; - split_location_offset(&location, &offset); + if (!shProg) + return; - lookup_uniform_parameter(ctx, program, location, &prog, ¶mPos); + split_location_offset(&location, &offset); - if (prog) { + if (!find_uniform_parameter_pos(shProg, location, &prog, ¶mPos)) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformfv(location)"); + } + else { const struct gl_program_parameter *p = &prog->Parameters->Parameters[paramPos]; GLint rows, cols, i, j, k; @@ -429,7 +409,7 @@ _mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, get_uniform_rows_cols(p, &rows, &cols); - numBytes = rows * cols * sizeof *params; + numBytes = rows * cols * _mesa_sizeof_type(returnType); if (bufSize < numBytes) { _mesa_error( ctx, GL_INVALID_OPERATION, "glGetnUniformfvARB(out of bounds: bufSize is %d," @@ -437,126 +417,74 @@ _mesa_get_uniformfv(struct gl_context *ctx, GLuint program, GLint location, return; } - k = 0; - for (i = 0; i < rows; i++) { - const int base = paramPos + offset + i; - - for (j = 0; j < cols; j++ ) { - params[k++] = prog->Parameters->ParameterValues[base][j]; + switch (returnType) { + case GL_FLOAT: + { + GLfloat *params = (GLfloat *) paramsOut; + k = 0; + for (i = 0; i < rows; i++) { + const int base = paramPos + offset + i; + for (j = 0; j < cols; j++ ) { + params[k++] = prog->Parameters->ParameterValues[base][j]; + } + } } - } - } -} - - -/** - * Called via glGetUniformiv(). - * \sa _mesa_get_uniformfv, only difference is a cast. - */ -static void -_mesa_get_uniformiv(struct gl_context *ctx, GLuint program, GLint location, - GLsizei bufSize, GLint *params) -{ - struct gl_program *prog; - GLint paramPos, offset; - - split_location_offset(&location, &offset); - - lookup_uniform_parameter(ctx, program, location, &prog, ¶mPos); - - if (prog) { - const struct gl_program_parameter *p = - &prog->Parameters->Parameters[paramPos]; - GLint rows, cols, i, j, k; - GLsizei numBytes; - - get_uniform_rows_cols(p, &rows, &cols); - - numBytes = rows * cols * sizeof *params; - if (bufSize < numBytes) { - _mesa_error( ctx, GL_INVALID_OPERATION, - "glGetnUniformivARB(out of bounds: bufSize is %d," - " but %d bytes are required)", bufSize, numBytes ); - return; - } - - k = 0; - for (i = 0; i < rows; i++) { - const int base = paramPos + offset + i; - - for (j = 0; j < cols; j++ ) { - params[k++] = (GLint) prog->Parameters->ParameterValues[base][j]; + break; + case GL_DOUBLE: + { + GLfloat *params = (GLfloat *) paramsOut; + k = 0; + for (i = 0; i < rows; i++) { + const int base = paramPos + offset + i; + for (j = 0; j < cols; j++ ) { + params[k++] = (GLdouble) + prog->Parameters->ParameterValues[base][j]; + } + } } - } - } -} - - -/** - * Called via glGetUniformuiv(). - * New in GL_EXT_gpu_shader4, OpenGL 3.0 - * \sa _mesa_get_uniformfv, only difference is a cast. - */ -static void -_mesa_get_uniformuiv(struct gl_context *ctx, GLuint program, GLint location, - GLsizei bufSize, GLuint *params) -{ - struct gl_program *prog; - GLint paramPos, offset; - - split_location_offset(&location, &offset); - - lookup_uniform_parameter(ctx, program, location, &prog, ¶mPos); - - if (prog) { - const struct gl_program_parameter *p = - &prog->Parameters->Parameters[paramPos]; - GLint rows, cols, i, j, k; - GLsizei numBytes; - - get_uniform_rows_cols(p, &rows, &cols); - - numBytes = rows * cols * sizeof *params; - if (bufSize < numBytes) { - _mesa_error( ctx, GL_INVALID_OPERATION, - "glGetnUniformuivARB(out of bounds: bufSize is %d," - " but %d bytes are required)", bufSize, numBytes ); - return; - } - - k = 0; - for (i = 0; i < rows; i++) { - const int base = paramPos + offset + i; - - for (j = 0; j < cols; j++ ) { - params[k++] = (GLuint) prog->Parameters->ParameterValues[base][j]; + break; + case GL_INT: + { + GLint *params = (GLint *) paramsOut; + k = 0; + for (i = 0; i < rows; i++) { + const int base = paramPos + offset + i; + for (j = 0; j < cols; j++ ) { + params[k++] = (GLint) + prog->Parameters->ParameterValues[base][j]; + } + } + } + break; + case GL_UNSIGNED_INT: + { + GLuint *params = (GLuint *) paramsOut; + k = 0; + for (i = 0; i < rows; i++) { + const int base = paramPos + offset + i; + for (j = 0; j < cols; j++ ) { + params[k++] = (GLuint) + prog->Parameters->ParameterValues[base][j]; + } + } } + break; + default: + _mesa_problem(ctx, "bad returnType in get_uniform()"); } } } /** - * Called via glGetUniformdv(). - * New in GL_ARB_gpu_shader_fp64, OpenGL 4.0 - */ -static void -_mesa_get_uniformdv(struct gl_context *ctx, GLuint program, GLint location, - GLsizei bufSize, GLdouble *params) -{ - _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformdvARB" - "(GL_ARB_gpu_shader_fp64 not implemented)"); -} - - -/** * Called via glGetUniformLocation(). * * The return value will encode two values, the uniform location and an * offset (used for arrays, structs). */ GLint -_mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shProg, +_mesa_get_uniform_location(struct gl_context *ctx, + struct gl_shader_program *shProg, const GLchar *name) { GLint offset = 0, location = -1; @@ -593,8 +521,8 @@ _mesa_get_uniform_location(struct gl_context *ctx, struct gl_shader_program *shP const GLint element = atoi(c + 1); if (element > 0) { /* get type of the uniform array element */ - struct gl_program_parameter *p; - p = get_uniform_parameter(shProg, location); + const struct gl_program_parameter *p = + get_uniform_parameter(shProg, location); if (p) { GLint rows, cols; get_matrix_dims(p->DataType, &rows, &cols); @@ -737,8 +665,8 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program, /* loop over number of samplers to change */ for (i = 0; i < count; i++) { - GLuint sampler = - (GLuint) program->Parameters->ParameterValues[index + offset + i][0]; + GLuint sampler = (GLuint) + program->Parameters->ParameterValues[index + offset + i][0]; GLuint texUnit = ((GLuint *) values)[i]; /* check that the sampler (tex unit index) is legal */ @@ -790,7 +718,9 @@ set_program_uniform(struct gl_context *ctx, struct gl_program *program, /* we'll ignore extra data below */ } else { - /* non-array: count must be at most one; count == 0 is handled by the loop below */ + /* non-array: count must be at most one; count == 0 is handled + * by the loop below + */ if (count > 1) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniform(uniform '%s' is not an array)", @@ -855,6 +785,8 @@ _mesa_uniform(struct gl_context *ctx, struct gl_shader_program *shProg, struct gl_uniform *uniform; GLint elems, offset; + ASSERT_OUTSIDE_BEGIN_END(ctx); + if (!shProg || !shProg->LinkStatus) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniform(program not linked)"); return; @@ -959,7 +891,8 @@ set_program_uniform_matrix(struct gl_context *ctx, struct gl_program *program, { GLuint mat, row, col; GLuint src = 0; - const struct gl_program_parameter * param = &program->Parameters->Parameters[index]; + const struct gl_program_parameter *param = + &program->Parameters->Parameters[index]; const GLuint slots = (param->Size + 3) / 4; const GLint typeSize = _mesa_sizeof_glsl_type(param->DataType); GLint nr, nc; @@ -973,7 +906,9 @@ set_program_uniform_matrix(struct gl_context *ctx, struct gl_program *program, } if ((GLint) param->Size <= typeSize) { - /* non-array: count must be at most one; count == 0 is handled by the loop below */ + /* non-array: count must be at most one; count == 0 is handled + * by the loop below + */ if (count > 1) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformMatrix(uniform is not an array)"); @@ -1028,6 +963,8 @@ _mesa_uniform_matrix(struct gl_context *ctx, struct gl_shader_program *shProg, struct gl_uniform *uniform; GLint offset; + ASSERT_OUTSIDE_BEGIN_END(ctx); + if (!shProg || !shProg->LinkStatus) { _mesa_error(ctx, GL_INVALID_OPERATION, "glUniformMatrix(program not linked)"); @@ -1391,7 +1328,7 @@ _mesa_GetnUniformfvARB(GLhandleARB program, GLint location, GLsizei bufSize, GLfloat *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformfv(ctx, program, location, bufSize, params); + get_uniform(ctx, program, location, bufSize, GL_FLOAT, params); } void GLAPIENTRY @@ -1406,7 +1343,7 @@ _mesa_GetnUniformivARB(GLhandleARB program, GLint location, GLsizei bufSize, GLint *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformiv(ctx, program, location, bufSize, params); + get_uniform(ctx, program, location, bufSize, GL_INT, params); } void GLAPIENTRY @@ -1422,7 +1359,7 @@ _mesa_GetnUniformuivARB(GLhandleARB program, GLint location, GLsizei bufSize, GLuint *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformuiv(ctx, program, location, bufSize, params); + get_uniform(ctx, program, location, bufSize, GL_UNSIGNED_INT, params); } void GLAPIENTRY @@ -1438,7 +1375,11 @@ _mesa_GetnUniformdvARB(GLhandleARB program, GLint location, GLsizei bufSize, GLdouble *params) { GET_CURRENT_CONTEXT(ctx); - _mesa_get_uniformdv(ctx, program, location, bufSize, params); + /* + get_uniform(ctx, program, location, bufSize, GL_DOUBLE, params); + */ + _mesa_error(ctx, GL_INVALID_OPERATION, "glGetUniformdvARB" + "(GL_ARB_gpu_shader_fp64 not implemented)"); } void GLAPIENTRY diff --git a/src/mesa/main/vtxfmt.c b/src/mesa/main/vtxfmt.c index 692ce080c9f..d0941477d61 100644 --- a/src/mesa/main/vtxfmt.c +++ b/src/mesa/main/vtxfmt.c @@ -106,6 +106,7 @@ install_vtxfmt( struct _glapi_table *tab, const GLvertexformat *vfmt ) SET_MultiDrawElementsBaseVertex(tab, vfmt->MultiDrawElementsBaseVertex); SET_DrawArraysInstancedARB(tab, vfmt->DrawArraysInstanced); SET_DrawElementsInstancedARB(tab, vfmt->DrawElementsInstanced); + SET_DrawElementsInstancedBaseVertex(tab, vfmt->DrawElementsInstancedBaseVertex); /* GL_NV_vertex_program */ SET_VertexAttrib1fNV(tab, vfmt->VertexAttrib1fNV); diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp index 510aeab82da..00869979dd8 100644 --- a/src/mesa/program/ir_to_mesa.cpp +++ b/src/mesa/program/ir_to_mesa.cpp @@ -3172,7 +3172,8 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader) &ctx->Extensions, ctx->API); if (ctx->Shader.Flags & GLSL_DUMP) { - printf("GLSL source for shader %d:\n", shader->Name); + printf("GLSL source for %s shader %d:\n", + _mesa_glsl_shader_target_name(state->target), shader->Name); printf("%s\n", shader->Source); } diff --git a/src/mesa/program/prog_parameter_layout.c b/src/mesa/program/prog_parameter_layout.c index d7dc97edbfb..90a9771080c 100644 --- a/src/mesa/program/prog_parameter_layout.c +++ b/src/mesa/program/prog_parameter_layout.c @@ -207,6 +207,7 @@ _mesa_layout_parameters(struct asm_parser_state *state) } } + layout->StateFlags = state->prog->Parameters->StateFlags; _mesa_free_parameter_list(state->prog->Parameters); state->prog->Parameters = layout; diff --git a/src/mesa/state_tracker/st_atom_pixeltransfer.c b/src/mesa/state_tracker/st_atom_pixeltransfer.c index 57430b36f8d..95b706cb96c 100644 --- a/src/mesa/state_tracker/st_atom_pixeltransfer.c +++ b/src/mesa/state_tracker/st_atom_pixeltransfer.c @@ -121,7 +121,7 @@ load_color_map_texture(struct gl_context *ctx, struct pipe_resource *pt) uint *dest; uint i, j; - transfer = pipe_get_transfer(st_context(ctx)->pipe, + transfer = pipe_get_transfer(pipe, pt, 0, 0, PIPE_TRANSFER_WRITE, 0, 0, texSize, texSize); dest = (uint *) pipe_transfer_map(pipe, transfer); diff --git a/src/mesa/state_tracker/st_cb_accum.c b/src/mesa/state_tracker/st_cb_accum.c index 3e01c440bda..3e3659d1571 100644 --- a/src/mesa/state_tracker/st_cb_accum.c +++ b/src/mesa/state_tracker/st_cb_accum.c @@ -248,7 +248,7 @@ accum_return(struct gl_context *ctx, GLfloat value, else usage = PIPE_TRANSFER_WRITE; - color_trans = pipe_get_transfer(st_context(ctx)->pipe, + color_trans = pipe_get_transfer(pipe, color_strb->texture, 0, 0, usage, xpos, ypos, diff --git a/src/mesa/state_tracker/st_cb_blit.c b/src/mesa/state_tracker/st_cb_blit.c index 25c95c7b9dc..416be194d11 100644 --- a/src/mesa/state_tracker/st_cb_blit.c +++ b/src/mesa/state_tracker/st_cb_blit.c @@ -109,6 +109,11 @@ st_BlitFramebuffer(struct gl_context *ctx, dstY1 = tmp; } + /* Disable conditional rendering. */ + if (st->render_condition) { + st->pipe->render_condition(st->pipe, NULL, 0); + } + if (mask & GL_COLOR_BUFFER_BIT) { struct gl_renderbuffer_attachment *srcAtt = &readFB->Attachment[readFB->_ColorReadBufferIndex]; @@ -121,7 +126,7 @@ st_BlitFramebuffer(struct gl_context *ctx, struct pipe_surface *dstSurf = dstRb->surface; if (!srcObj->pt) - return; + goto done; util_blit_pixels(st->blit, srcObj->pt, srcAtt->TextureLevel, srcX0, srcY0, srcX1, srcY1, @@ -199,6 +204,13 @@ st_BlitFramebuffer(struct gl_context *ctx, } } } + +done: + /* Restore conditional rendering state. */ + if (st->render_condition) { + st->pipe->render_condition(st->pipe, st->render_condition, + st->condition_mode); + } } diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c index 1e489b29d93..7374bb0acc5 100644 --- a/src/mesa/state_tracker/st_cb_bufferobjects.c +++ b/src/mesa/state_tracker/st_cb_bufferobjects.c @@ -222,8 +222,7 @@ st_bufferobj_data(struct gl_context *ctx, } if (data) - pipe_buffer_write(st_context(ctx)->pipe, st_obj->buffer, 0, - size, data); + pipe_buffer_write(pipe, st_obj->buffer, 0, size, data); return GL_TRUE; } diff --git a/src/mesa/state_tracker/st_cb_condrender.c b/src/mesa/state_tracker/st_cb_condrender.c index 7766ead48b5..64c6c117fca 100644 --- a/src/mesa/state_tracker/st_cb_condrender.c +++ b/src/mesa/state_tracker/st_cb_condrender.c @@ -51,7 +51,8 @@ st_BeginConditionalRender(struct gl_context *ctx, struct gl_query_object *q, GLenum mode) { struct st_query_object *stq = st_query_object(q); - struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; uint m; switch (mode) { @@ -72,6 +73,9 @@ st_BeginConditionalRender(struct gl_context *ctx, struct gl_query_object *q, m = PIPE_RENDER_COND_WAIT; } + st->render_condition = stq->pq; + st->condition_mode = m; + pipe->render_condition(pipe, stq->pq, m); } @@ -82,9 +86,12 @@ st_BeginConditionalRender(struct gl_context *ctx, struct gl_query_object *q, static void st_EndConditionalRender(struct gl_context *ctx, struct gl_query_object *q) { - struct pipe_context *pipe = st_context(ctx)->pipe; + struct st_context *st = st_context(ctx); + struct pipe_context *pipe = st->pipe; (void) q; + pipe->render_condition(pipe, NULL, 0); + st->render_condition = NULL; } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index 9948f8d2bc5..965fbcd1d9e 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -793,9 +793,10 @@ draw_stencil_pixels(struct gl_context *ctx, GLint x, GLint y, else usage = PIPE_TRANSFER_WRITE; - pt = pipe_get_transfer(st_context(ctx)->pipe, strb->texture, 0, 0, - usage, x, y, - width, height); + pt = pipe_get_transfer(pipe, strb->texture, + strb->rtt_level, strb->rtt_face + strb->rtt_slice, + usage, x, y, + width, height); stmap = pipe_transfer_map(pipe, pt); @@ -1130,8 +1131,10 @@ copy_stencil_pixels(struct gl_context *ctx, GLint srcx, GLint srcy, dsty = rbDraw->Base.Height - dsty - height; } - ptDraw = pipe_get_transfer(st_context(ctx)->pipe, - rbDraw->texture, 0, 0, + ptDraw = pipe_get_transfer(pipe, + rbDraw->texture, + rbDraw->rtt_level, + rbDraw->rtt_face + rbDraw->rtt_slice, usage, dstx, dsty, width, height); @@ -1244,7 +1247,8 @@ blit_copy_pixels(struct gl_context *ctx, GLint srcx, GLint srcy, !ctx->VertexProgram.Enabled && !ctx->Shader.CurrentFragmentProgram && st_fb_orientation(ctx->ReadBuffer) == st_fb_orientation(ctx->DrawBuffer) && - ctx->DrawBuffer->_NumColorDrawBuffers == 1) { + ctx->DrawBuffer->_NumColorDrawBuffers == 1 && + !ctx->Query.CondRenderQuery) { struct st_renderbuffer *rbRead, *rbDraw; GLint drawX, drawY; @@ -1291,8 +1295,10 @@ blit_copy_pixels(struct gl_context *ctx, GLint srcx, GLint srcy, u_box_2d(readX, readY, readW, readH, &srcBox); pipe->resource_copy_region(pipe, - rbDraw->texture, 0, drawX, drawY, 0, - rbRead->texture, 0, &srcBox); + rbDraw->texture, + rbDraw->rtt_level, drawX, drawY, 0, + rbRead->texture, + rbRead->rtt_level, &srcBox); return GL_TRUE; } } @@ -1444,10 +1450,10 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy, /* copy source framebuffer surface into mipmap/texture */ pipe->resource_copy_region(pipe, pt, /* dest tex */ - 0, + 0, /* dest lvl */ pack.SkipPixels, pack.SkipRows, 0, /* dest pos */ rbRead->texture, /* src tex */ - 0, + rbRead->rtt_level, /* src lvl */ &src_box); } @@ -1455,7 +1461,8 @@ st_CopyPixels(struct gl_context *ctx, GLint srcx, GLint srcy, /* CPU-based fallback/conversion */ struct pipe_transfer *ptRead = pipe_get_transfer(st->pipe, rbRead->texture, - 0, 0, /* level, layer */ + rbRead->rtt_level, + rbRead->rtt_face + rbRead->rtt_slice, PIPE_TRANSFER_READ, readX, readY, readW, readH); struct pipe_transfer *ptTex; diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index e632d816542..64424f77634 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -74,11 +74,8 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx, enum pipe_format format; struct pipe_surface surf_tmpl; - if (strb->format != PIPE_FORMAT_NONE) - format = strb->format; - else - format = st_choose_renderbuffer_format(screen, internalFormat, - rb->NumSamples); + format = st_choose_renderbuffer_format(screen, internalFormat, + rb->NumSamples); if (format == PIPE_FORMAT_NONE) { return FALSE; @@ -90,6 +87,7 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx, strb->Base.Format = st_pipe_format_to_mesa_format(format); strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat); strb->Base.DataType = st_format_datatype(format); + strb->format = format; strb->defined = GL_FALSE; /* undefined contents now */ diff --git a/src/mesa/state_tracker/st_cb_readpixels.c b/src/mesa/state_tracker/st_cb_readpixels.c index 2a63799bdbc..67926e39297 100644 --- a/src/mesa/state_tracker/st_cb_readpixels.c +++ b/src/mesa/state_tracker/st_cb_readpixels.c @@ -82,7 +82,8 @@ st_read_stencil_pixels(struct gl_context *ctx, GLint x, GLint y, /* Create a read transfer from the renderbuffer's texture */ pt = pipe_get_transfer(pipe, strb->texture, - 0, 0, + strb->rtt_level, + strb->rtt_face + strb->rtt_slice, PIPE_TRANSFER_READ, x, y, width, height); @@ -250,7 +251,8 @@ st_fast_readpixels(struct gl_context *ctx, struct st_renderbuffer *strb, } trans = pipe_get_transfer(pipe, strb->texture, - 0, 0, + strb->rtt_level, + strb->rtt_face + strb->rtt_slice, PIPE_TRANSFER_READ, x, y, width, height); if (!trans) { @@ -445,7 +447,8 @@ st_readpixels(struct gl_context *ctx, GLint x, GLint y, GLsizei width, GLsizei h /* Create a read transfer from the renderbuffer's texture */ trans = pipe_get_transfer(pipe, strb->texture, - 0, 0, + strb->rtt_level, /* level */ + strb->rtt_face + strb->rtt_slice, /* layer */ PIPE_TRANSFER_READ, x, y, width, height); diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index a27c30e51fe..88f62902b25 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -795,6 +795,11 @@ decompress_with_blit(struct gl_context * ctx, GLenum target, GLint level, return; } + /* Disable conditional rendering. */ + if (st->render_condition) { + pipe->render_condition(pipe, NULL, 0); + } + /* blit/render/decompress */ util_blit_pixels_tex(st->blit, src_view, /* pipe_resource (src) */ @@ -806,8 +811,14 @@ decompress_with_blit(struct gl_context * ctx, GLenum target, GLint level, 0.0, /* z */ PIPE_TEX_MIPFILTER_NEAREST); + /* Restore conditional rendering state. */ + if (st->render_condition) { + pipe->render_condition(pipe, st->render_condition, + st->condition_mode); + } + /* map the dst_surface so we can read from it */ - tex_xfer = pipe_get_transfer(st_context(ctx)->pipe, + tex_xfer = pipe_get_transfer(pipe, dst_texture, 0, 0, PIPE_TRANSFER_READ, 0, 0, width, height); @@ -1228,7 +1239,7 @@ fallback_copy_texsubimage(struct gl_context *ctx, GLenum target, GLint level, srcY = strb->Base.Height - srcY - height; } - src_trans = pipe_get_transfer(st_context(ctx)->pipe, + src_trans = pipe_get_transfer(pipe, strb->texture, 0, 0, PIPE_TRANSFER_READ, @@ -1556,6 +1567,11 @@ st_copy_texsubimage(struct gl_context *ctx, srcY1 = srcY0 + height; } + /* Disable conditional rendering. */ + if (st->render_condition) { + pipe->render_condition(pipe, NULL, 0); + } + util_blit_pixels_writemask(st->blit, strb->texture, strb->surface->u.tex.level, @@ -1567,6 +1583,13 @@ st_copy_texsubimage(struct gl_context *ctx, destX + width, destY + height, 0.0, PIPE_TEX_MIPFILTER_NEAREST, format_writemask); + + /* Restore conditional rendering state. */ + if (st->render_condition) { + pipe->render_condition(pipe, st->render_condition, + st->condition_mode); + } + use_fallback = GL_FALSE; } diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index c6fc31801d6..ff207039d78 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -200,6 +200,10 @@ struct st_context GLsizei stride; } user_attrib[PIPE_MAX_ATTRIBS]; unsigned num_user_attribs; + + /* Active render condition. */ + struct pipe_query *render_condition; + unsigned condition_mode; }; diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index acfafe351d2..72d5a25336e 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -563,18 +563,559 @@ st_pipe_format_to_mesa_format(enum pipe_format format) /** + * Map GL texture formats to Gallium pipe formats. + */ +struct format_mapping +{ + GLenum glFormats[18]; /**< list of GLenum formats, 0-terminated */ + enum pipe_format pipeFormats[10]; /**< list of pipe formats, 0-terminated */ +}; + + +#define DEFAULT_RGBA_FORMATS \ + PIPE_FORMAT_B8G8R8A8_UNORM, \ + PIPE_FORMAT_A8R8G8B8_UNORM, \ + PIPE_FORMAT_A8B8G8R8_UNORM, \ + PIPE_FORMAT_B5G6R5_UNORM, \ + 0 + +#define DEFAULT_RGB_FORMATS \ + PIPE_FORMAT_B8G8R8X8_UNORM, \ + PIPE_FORMAT_X8R8G8B8_UNORM, \ + PIPE_FORMAT_X8B8G8R8_UNORM, \ + PIPE_FORMAT_B8G8R8A8_UNORM, \ + PIPE_FORMAT_A8R8G8B8_UNORM, \ + PIPE_FORMAT_A8B8G8R8_UNORM, \ + PIPE_FORMAT_B5G6R5_UNORM, \ + 0 + +#define DEFAULT_SRGBA_FORMATS \ + PIPE_FORMAT_B8G8R8A8_SRGB, \ + PIPE_FORMAT_A8R8G8B8_SRGB, \ + PIPE_FORMAT_A8B8G8R8_SRGB, \ + 0 + +#define DEFAULT_DEPTH_FORMATS \ + PIPE_FORMAT_Z24X8_UNORM, \ + PIPE_FORMAT_X8Z24_UNORM, \ + PIPE_FORMAT_Z16_UNORM, \ + PIPE_FORMAT_Z24_UNORM_S8_USCALED, \ + PIPE_FORMAT_S8_USCALED_Z24_UNORM, \ + 0 + +/** + * This table maps OpenGL texture format enums to Gallium pipe_format enums. + * Multiple GL enums might map to multiple pipe_formats. + * The first pipe format in the list that's supported is the one that's chosen. + */ +static struct format_mapping format_map[] = { + /* Basic RGB, RGBA formats */ + { + { GL_RGB10, GL_RGB10_A2, 0 }, + { PIPE_FORMAT_B10G10R10A2_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { 4, GL_RGBA, GL_RGBA8, 0 }, + { DEFAULT_RGBA_FORMATS, 0 } + }, + { + { GL_BGRA, 0 }, + { PIPE_FORMAT_B8G8R8A8_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { 3, GL_RGB, GL_RGB8, 0 }, + { DEFAULT_RGB_FORMATS, 0 } + }, + { + { GL_RGB12, GL_RGB16, GL_RGBA12, GL_RGBA16, 0 }, + { PIPE_FORMAT_R16G16B16A16_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_RGBA4, GL_RGBA2, 0 }, + { PIPE_FORMAT_B4G4R4A4_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_RGB5_A1, 0 }, + { PIPE_FORMAT_B5G5R5A1_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_R3_G3_B2, 0 }, + { PIPE_FORMAT_B2G3R3_UNORM, PIPE_FORMAT_B5G6R5_UNORM, + PIPE_FORMAT_B5G5R5A1_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_RGB5, GL_RGB4 }, + { PIPE_FORMAT_B5G6R5_UNORM, PIPE_FORMAT_B5G5R5A1_UNORM, + DEFAULT_RGBA_FORMATS } + }, + + /* basic Alpha formats */ + { + { GL_ALPHA12, GL_ALPHA16, 0 }, + { PIPE_FORMAT_A16_UNORM, PIPE_FORMAT_A8_UNORM, + DEFAULT_RGBA_FORMATS } + }, + { + { GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_COMPRESSED_ALPHA, 0 }, + { PIPE_FORMAT_A8_UNORM, DEFAULT_RGBA_FORMATS } + }, + + /* basic Luminance formats */ + { + { GL_LUMINANCE12, GL_LUMINANCE16, 0 }, + { PIPE_FORMAT_L16_UNORM, PIPE_FORMAT_L8_UNORM, DEFAULT_RGB_FORMATS } + }, + { + { 1, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, 0 }, + { PIPE_FORMAT_L8_UNORM, DEFAULT_RGB_FORMATS } + }, + + /* basic Luminance/Alpha formats */ + { + { GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, + GL_LUMINANCE16_ALPHA16, 0}, + { PIPE_FORMAT_L16A16_UNORM, PIPE_FORMAT_L8A8_UNORM, + DEFAULT_RGBA_FORMATS } + }, + { + { 2, GL_LUMINANCE_ALPHA, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, 0 }, + { PIPE_FORMAT_L8A8_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_LUMINANCE4_ALPHA4, 0 }, + { PIPE_FORMAT_L4A4_UNORM, PIPE_FORMAT_L8A8_UNORM, + DEFAULT_RGBA_FORMATS } + }, + + /* basic Intensity formats */ + { + { GL_INTENSITY12, GL_INTENSITY16, 0 }, + { PIPE_FORMAT_I16_UNORM, PIPE_FORMAT_I8_UNORM, DEFAULT_RGBA_FORMATS } + }, + { + { GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, + GL_COMPRESSED_INTENSITY, 0 }, + { PIPE_FORMAT_I8_UNORM, DEFAULT_RGBA_FORMATS } + }, + + /* YCbCr */ + { + { GL_YCBCR_MESA, 0 }, + { PIPE_FORMAT_UYVY, PIPE_FORMAT_YUYV, 0 } + }, + + /* compressed formats */ /* XXX PIPE_BIND_SAMPLER_VIEW only */ + { + { GL_COMPRESSED_RGB, 0 }, + { PIPE_FORMAT_DXT1_RGB, DEFAULT_RGB_FORMATS } + }, + { + { GL_COMPRESSED_RGBA, 0 }, + { PIPE_FORMAT_DXT5_RGBA, DEFAULT_RGBA_FORMATS } + }, + { + { GL_RGB_S3TC, GL_RGB4_S3TC, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 0 }, + { PIPE_FORMAT_DXT1_RGB, 0 } + }, + { + { GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 0 }, + { PIPE_FORMAT_DXT1_RGBA, 0 } + }, + { + { GL_RGBA_S3TC, GL_RGBA4_S3TC, GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, 0 }, + { PIPE_FORMAT_DXT3_RGBA, 0 } + }, + { + { GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, 0 }, + { PIPE_FORMAT_DXT5_RGBA, 0 } + }, + +#if 0 + { + { GL_COMPRESSED_RGB_FXT1_3DFX, 0 }, + { PIPE_FORMAT_RGB_FXT1, 0 } + }, + { + { GL_COMPRESSED_RGBA_FXT1_3DFX, 0 }, + { PIPE_FORMAT_RGBA_FXT1, 0 } + }, +#endif + + /* Depth formats */ + { + { GL_DEPTH_COMPONENT16, 0 }, + { PIPE_FORMAT_Z16_UNORM, DEFAULT_DEPTH_FORMATS } + }, + { + { GL_DEPTH_COMPONENT24, 0 }, + { PIPE_FORMAT_Z24X8_UNORM, PIPE_FORMAT_X8Z24_UNORM, + DEFAULT_DEPTH_FORMATS } + }, + { + { GL_DEPTH_COMPONENT32, 0 }, + { PIPE_FORMAT_Z32_UNORM, DEFAULT_DEPTH_FORMATS } + }, + { + { GL_DEPTH_COMPONENT, 0 }, + { DEFAULT_DEPTH_FORMATS } + }, + + /* stencil formats */ + { + { GL_STENCIL_INDEX, GL_STENCIL_INDEX1_EXT, GL_STENCIL_INDEX4_EXT, + GL_STENCIL_INDEX8_EXT, GL_STENCIL_INDEX16_EXT, 0 }, + { + PIPE_FORMAT_S8_USCALED, PIPE_FORMAT_Z24_UNORM_S8_USCALED, + PIPE_FORMAT_S8_USCALED_Z24_UNORM, 0 + } + }, + + /* Depth / Stencil formats */ + { + { GL_DEPTH_STENCIL_EXT, GL_DEPTH24_STENCIL8_EXT, 0 }, + { PIPE_FORMAT_Z24_UNORM_S8_USCALED, PIPE_FORMAT_S8_USCALED_Z24_UNORM, 0 } + }, + + /* sRGB formats */ + { + { GL_SRGB_EXT, GL_SRGB8_EXT, GL_SRGB_ALPHA_EXT, GL_SRGB8_ALPHA8_EXT, 0 }, + { DEFAULT_SRGBA_FORMATS } + }, + { + { GL_COMPRESSED_SRGB_EXT, GL_COMPRESSED_SRGB_S3TC_DXT1_EXT, 0 }, + { PIPE_FORMAT_DXT1_SRGB, DEFAULT_SRGBA_FORMATS } + }, + { + { GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT, 0 }, + { PIPE_FORMAT_DXT1_SRGBA, 0 } + }, + { + { GL_COMPRESSED_SRGB_ALPHA_EXT, + GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT, 0 }, + { PIPE_FORMAT_DXT3_SRGBA, DEFAULT_SRGBA_FORMATS } + }, + { + { GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT, 0 }, + { PIPE_FORMAT_DXT5_SRGBA, 0 } + }, + { + { GL_SLUMINANCE_ALPHA_EXT, GL_SLUMINANCE8_ALPHA8_EXT, + GL_COMPRESSED_SLUMINANCE_EXT, GL_COMPRESSED_SLUMINANCE_ALPHA_EXT, 0 }, + { PIPE_FORMAT_L8A8_SRGB, DEFAULT_SRGBA_FORMATS } + }, + { + { GL_SLUMINANCE_EXT, GL_SLUMINANCE8_EXT, 0 }, + { PIPE_FORMAT_L8_SRGB, DEFAULT_SRGBA_FORMATS } + }, + + /* 16-bit float formats */ + { + { GL_RGBA16F_ARB, 0 }, + { PIPE_FORMAT_R16G16B16A16_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_RGB16F_ARB, 0 }, + { PIPE_FORMAT_R16G16B16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_R32G32B32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_LUMINANCE_ALPHA16F_ARB, 0 }, + { PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_ALPHA16F_ARB, 0 }, + { PIPE_FORMAT_A16_FLOAT, PIPE_FORMAT_L16A16_FLOAT, + PIPE_FORMAT_A32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_INTENSITY16F_ARB, 0 }, + { PIPE_FORMAT_I16_FLOAT, PIPE_FORMAT_L16A16_FLOAT, + PIPE_FORMAT_I32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_LUMINANCE16F_ARB, 0 }, + { PIPE_FORMAT_L16_FLOAT, PIPE_FORMAT_L16A16_FLOAT, + PIPE_FORMAT_L32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_R16F, 0 }, + { PIPE_FORMAT_R16_FLOAT, PIPE_FORMAT_R16G16_FLOAT, + PIPE_FORMAT_R32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + { + { GL_RG16F, 0 }, + { PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, + PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, 0 } + }, + + /* 32-bit float formats */ + { + { GL_RGBA32F_ARB, 0 }, + { PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_RGB32F_ARB, 0 }, + { PIPE_FORMAT_R32G32B32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_LUMINANCE_ALPHA32F_ARB, 0 }, + { PIPE_FORMAT_L32A32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_ALPHA32F_ARB, 0 }, + { PIPE_FORMAT_A32_FLOAT, PIPE_FORMAT_L32A32_FLOAT, + PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_A16_FLOAT, + PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_INTENSITY32F_ARB, 0 }, + { PIPE_FORMAT_I32_FLOAT, PIPE_FORMAT_L32A32_FLOAT, + PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_I16_FLOAT, + PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_LUMINANCE32F_ARB, 0 }, + { PIPE_FORMAT_L32_FLOAT, PIPE_FORMAT_L32A32_FLOAT, + PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_L16_FLOAT, + PIPE_FORMAT_L16A16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_R32F, 0 }, + { PIPE_FORMAT_R32_FLOAT, PIPE_FORMAT_R32G32_FLOAT, + PIPE_FORMAT_R32G32B32A32_FLOAT, PIPE_FORMAT_R16_FLOAT, + PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + { + { GL_RG32F, 0 }, + { PIPE_FORMAT_R32G32_FLOAT, PIPE_FORMAT_R32G32B32A32_FLOAT, + PIPE_FORMAT_R16G16_FLOAT, PIPE_FORMAT_R16G16B16A16_FLOAT, 0 } + }, + + /* R, RG formats */ + { + { GL_RED, GL_R8, 0 }, + { PIPE_FORMAT_R8_UNORM, 0 } + }, + { + { GL_RG, GL_RG8, 0 }, + { PIPE_FORMAT_R8G8_UNORM, 0 } + }, + { + { GL_R16, 0 }, + { PIPE_FORMAT_R16_UNORM, 0 } + }, + { + { GL_RG16, 0 }, + { PIPE_FORMAT_R16G16_UNORM, 0 } + }, + + /* compressed R, RG formats */ + { + { GL_COMPRESSED_RED, GL_COMPRESSED_RED_RGTC1, 0 }, + { PIPE_FORMAT_RGTC1_UNORM, PIPE_FORMAT_R8_UNORM, 0 } + }, + { + { GL_COMPRESSED_SIGNED_RED_RGTC1, 0 }, + { PIPE_FORMAT_RGTC1_SNORM, 0 } + }, + { + { GL_COMPRESSED_RG, GL_COMPRESSED_RG_RGTC2, 0 }, + { PIPE_FORMAT_RGTC2_UNORM, PIPE_FORMAT_R8G8_UNORM, 0 } + }, + { + { GL_COMPRESSED_SIGNED_RG_RGTC2, 0 }, + { PIPE_FORMAT_RGTC2_SNORM, 0 } + }, + { + { GL_COMPRESSED_LUMINANCE, GL_COMPRESSED_LUMINANCE_LATC1_EXT, 0 }, + { PIPE_FORMAT_LATC1_UNORM, PIPE_FORMAT_L8_UNORM, 0 } + }, + { + { GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT, 0 }, + { PIPE_FORMAT_LATC1_SNORM, 0 } + }, + { + { GL_COMPRESSED_LUMINANCE_ALPHA, GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT, + GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI, 0 }, + { PIPE_FORMAT_LATC2_UNORM, PIPE_FORMAT_L8A8_UNORM, 0 } + }, + { + { GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT, 0 }, + { PIPE_FORMAT_LATC2_SNORM, 0 } + }, + + /* signed/unsigned integer formats. + * XXX Mesa only has formats for RGBA signed/unsigned integer formats. + * If/when new formats are added this code should be updated. + */ + { + { GL_RED_INTEGER_EXT, + GL_GREEN_INTEGER_EXT, + GL_BLUE_INTEGER_EXT, + GL_ALPHA_INTEGER_EXT, + GL_RGB_INTEGER_EXT, + GL_RGBA_INTEGER_EXT, + GL_BGR_INTEGER_EXT, + GL_BGRA_INTEGER_EXT, + GL_LUMINANCE_INTEGER_EXT, + GL_LUMINANCE_ALPHA_INTEGER_EXT, + GL_RGBA8I_EXT, + GL_RGB8I_EXT, + GL_ALPHA8I_EXT, + GL_INTENSITY8I_EXT, + GL_LUMINANCE8I_EXT, + GL_LUMINANCE_ALPHA8I_EXT, 0 }, + { PIPE_FORMAT_R8G8B8A8_SSCALED, 0 } + }, + { + { + GL_RGBA16I_EXT, + GL_RGB16I_EXT, + GL_ALPHA16I_EXT, + GL_INTENSITY16I_EXT, + GL_LUMINANCE16I_EXT, + GL_LUMINANCE_ALPHA16I_EXT, 0 }, + { PIPE_FORMAT_R16G16B16A16_SSCALED, 0 }, + }, + { + { + GL_RGBA32I_EXT, + GL_RGB32I_EXT, + GL_ALPHA32I_EXT, + GL_INTENSITY32I_EXT, + GL_LUMINANCE32I_EXT, + GL_LUMINANCE_ALPHA32I_EXT, 0 }, + { PIPE_FORMAT_R32G32B32A32_SSCALED, 0 } + }, + { + { + GL_RGBA8UI_EXT, + GL_RGB8UI_EXT, + GL_ALPHA8UI_EXT, + GL_INTENSITY8UI_EXT, + GL_LUMINANCE8UI_EXT, + GL_LUMINANCE_ALPHA8UI_EXT, 0 }, + { PIPE_FORMAT_R8G8B8A8_USCALED, 0 } + }, + { + { + GL_RGBA16UI_EXT, + GL_RGB16UI_EXT, + GL_ALPHA16UI_EXT, + GL_INTENSITY16UI_EXT, + GL_LUMINANCE16UI_EXT, + GL_LUMINANCE_ALPHA16UI_EXT, 0 }, + { PIPE_FORMAT_R16G16B16A16_USCALED, 0 } + }, + { + { + GL_RGBA32UI_EXT, + GL_RGB32UI_EXT, + GL_ALPHA32UI_EXT, + GL_INTENSITY32UI_EXT, + GL_LUMINANCE32UI_EXT, + GL_LUMINANCE_ALPHA32UI_EXT, 0 }, + { PIPE_FORMAT_R32G32B32A32_USCALED, 0 } + }, + + /* signed normalized formats */ + { + { GL_RED_SNORM, GL_R8_SNORM, 0 }, + { PIPE_FORMAT_R8_SNORM, PIPE_FORMAT_R8G8_SNORM, + PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_R16_SNORM, 0 }, + { PIPE_FORMAT_R16_SNORM, + PIPE_FORMAT_R16G16_SNORM, + PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_R8_SNORM, + PIPE_FORMAT_R8G8_SNORM, + PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_RG_SNORM, GL_RG8_SNORM, 0 }, + { PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_RG16_SNORM, 0 }, + { PIPE_FORMAT_R16G16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_R8G8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_RGB_SNORM, GL_RGB8_SNORM, GL_RGBA_SNORM, GL_RGBA8_SNORM, 0 }, + { PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_RGB16_SNORM, GL_RGBA16_SNORM, 0 }, + { PIPE_FORMAT_R16G16B16A16_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_ALPHA_SNORM, GL_ALPHA8_SNORM, 0 }, + { PIPE_FORMAT_A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_ALPHA16_SNORM, 0 }, + { PIPE_FORMAT_A16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_LUMINANCE_SNORM, GL_LUMINANCE8_SNORM, 0 }, + { PIPE_FORMAT_L8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_LUMINANCE16_SNORM, 0 }, + { PIPE_FORMAT_L16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_L8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_LUMINANCE_ALPHA_SNORM, GL_LUMINANCE8_ALPHA8_SNORM, 0 }, + { PIPE_FORMAT_L8A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_LUMINANCE16_ALPHA16_SNORM, 0 }, + { PIPE_FORMAT_L16A16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_L8A8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_INTENSITY_SNORM, GL_INTENSITY8_SNORM, 0 }, + { PIPE_FORMAT_I8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_INTENSITY16_SNORM, 0 }, + { PIPE_FORMAT_I16_SNORM, PIPE_FORMAT_R16G16B16A16_SNORM, + PIPE_FORMAT_I8_SNORM, PIPE_FORMAT_R8G8B8A8_SNORM, 0 } + }, + { + { GL_RGB9_E5, 0 }, + { PIPE_FORMAT_R9G9B9E5_FLOAT, 0 } + }, + { + { GL_R11F_G11F_B10F, 0 }, + { PIPE_FORMAT_R11G11B10_FLOAT, 0 } + } +}; + + +/** * Return first supported format from the given list. */ static enum pipe_format find_supported_format(struct pipe_screen *screen, const enum pipe_format formats[], - uint num_formats, enum pipe_texture_target target, unsigned sample_count, unsigned tex_usage) { uint i; - for (i = 0; i < num_formats; i++) { + for (i = 0; formats[i]; i++) { if (screen->is_format_supported(screen, formats[i], target, sample_count, tex_usage)) { return formats[i]; @@ -585,67 +1126,6 @@ find_supported_format(struct pipe_screen *screen, /** - * Find an RGBA format supported by the context/winsys. - */ -static enum pipe_format -default_rgba_format(struct pipe_screen *screen, - enum pipe_texture_target target, - unsigned sample_count, - unsigned tex_usage) -{ - static const enum pipe_format colorFormats[] = { - PIPE_FORMAT_B8G8R8A8_UNORM, - PIPE_FORMAT_A8R8G8B8_UNORM, - PIPE_FORMAT_A8B8G8R8_UNORM, - PIPE_FORMAT_B5G6R5_UNORM - }; - return find_supported_format(screen, colorFormats, Elements(colorFormats), - target, sample_count, tex_usage); -} - - -/** - * Find an RGB format supported by the context/winsys. - */ -static enum pipe_format -default_rgb_format(struct pipe_screen *screen, - enum pipe_texture_target target, - unsigned sample_count, - unsigned tex_usage) -{ - static const enum pipe_format colorFormats[] = { - PIPE_FORMAT_B8G8R8X8_UNORM, - PIPE_FORMAT_X8R8G8B8_UNORM, - PIPE_FORMAT_X8B8G8R8_UNORM, - PIPE_FORMAT_B8G8R8A8_UNORM, - PIPE_FORMAT_A8R8G8B8_UNORM, - PIPE_FORMAT_A8B8G8R8_UNORM, - PIPE_FORMAT_B5G6R5_UNORM - }; - return find_supported_format(screen, colorFormats, Elements(colorFormats), - target, sample_count, tex_usage); -} - -/** - * Find an sRGBA format supported by the context/winsys. - */ -static enum pipe_format -default_srgba_format(struct pipe_screen *screen, - enum pipe_texture_target target, - unsigned sample_count, - unsigned tex_usage) -{ - static const enum pipe_format colorFormats[] = { - PIPE_FORMAT_B8G8R8A8_SRGB, - PIPE_FORMAT_A8R8G8B8_SRGB, - PIPE_FORMAT_A8B8G8R8_SRGB, - }; - return find_supported_format(screen, colorFormats, Elements(colorFormats), - target, sample_count, tex_usage); -} - - -/** * Given an OpenGL internalFormat value for a texture or surface, return * the best matching PIPE_FORMAT_x, or PIPE_FORMAT_NONE if there's no match. * This is called during glTexImage2D, for example. @@ -663,853 +1143,31 @@ st_choose_format(struct pipe_screen *screen, GLenum internalFormat, enum pipe_texture_target target, unsigned sample_count, unsigned bindings) { + GET_CURRENT_CONTEXT(ctx); /* XXX this should be a function parameter */ + int i, j; - switch (internalFormat) { - case GL_RGB10: - case GL_RGB10_A2: - if (screen->is_format_supported( screen, PIPE_FORMAT_B10G10R10A2_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B10G10R10A2_UNORM; - /* Pass through. */ - case 4: - case GL_RGBA: - case GL_RGBA8: - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_BGRA: - if (screen->is_format_supported( screen, PIPE_FORMAT_B8G8R8A8_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B8G8R8A8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case 3: - case GL_RGB: - case GL_RGB8: - return default_rgb_format( screen, target, sample_count, bindings); - - case GL_RGB12: - case GL_RGB16: - case GL_RGBA12: - case GL_RGBA16: - if (screen->is_format_supported( screen, PIPE_FORMAT_R16G16B16A16_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_R16G16B16A16_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_RGBA4: - case GL_RGBA2: - if (screen->is_format_supported( screen, PIPE_FORMAT_B4G4R4A4_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B4G4R4A4_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_RGB5_A1: - if (screen->is_format_supported( screen, PIPE_FORMAT_B5G5R5A1_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B5G5R5A1_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_R3_G3_B2: - if (screen->is_format_supported( screen, PIPE_FORMAT_B2G3R3_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B2G3R3_UNORM; - /* Pass through. */ - case GL_RGB5: - case GL_RGB4: - if (screen->is_format_supported( screen, PIPE_FORMAT_B5G6R5_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B5G6R5_UNORM; - if (screen->is_format_supported( screen, PIPE_FORMAT_B5G5R5A1_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_B5G5R5A1_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_ALPHA12: - case GL_ALPHA16: - if (screen->is_format_supported( screen, PIPE_FORMAT_A16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_A16_UNORM; - /* Pass through. */ - case GL_ALPHA: - case GL_ALPHA4: - case GL_ALPHA8: - case GL_COMPRESSED_ALPHA: - if (screen->is_format_supported( screen, PIPE_FORMAT_A8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_A8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_LUMINANCE12: - case GL_LUMINANCE16: - if (screen->is_format_supported( screen, PIPE_FORMAT_L16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L16_UNORM; - /* Pass through. */ - case 1: - case GL_LUMINANCE: - case GL_LUMINANCE4: - case GL_LUMINANCE8: - if (screen->is_format_supported( screen, PIPE_FORMAT_L8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_LUMINANCE12_ALPHA4: - case GL_LUMINANCE12_ALPHA12: - case GL_LUMINANCE16_ALPHA16: - if (screen->is_format_supported( screen, PIPE_FORMAT_L16A16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L16A16_UNORM; - /* Pass through. */ - case 2: - case GL_LUMINANCE_ALPHA: - case GL_LUMINANCE6_ALPHA2: - case GL_LUMINANCE8_ALPHA8: - if (screen->is_format_supported( screen, PIPE_FORMAT_L8A8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L8A8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_LUMINANCE4_ALPHA4: - if (screen->is_format_supported( screen, PIPE_FORMAT_L4A4_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L4A4_UNORM; - if (screen->is_format_supported( screen, PIPE_FORMAT_L8A8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L8A8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_INTENSITY12: - case GL_INTENSITY16: - if (screen->is_format_supported( screen, PIPE_FORMAT_I16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_I16_UNORM; - /* Pass through. */ - case GL_INTENSITY: - case GL_INTENSITY4: - case GL_INTENSITY8: - case GL_COMPRESSED_INTENSITY: - if (screen->is_format_supported( screen, PIPE_FORMAT_I8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_I8_UNORM; - return default_rgba_format( screen, target, sample_count, bindings); - - case GL_YCBCR_MESA: - if (screen->is_format_supported(screen, PIPE_FORMAT_UYVY, target, - sample_count, bindings)) { - return PIPE_FORMAT_UYVY; - } - if (screen->is_format_supported(screen, PIPE_FORMAT_YUYV, target, - sample_count, bindings)) { - return PIPE_FORMAT_YUYV; - } - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_RGB: - /* can only sample from compressed formats */ - if (bindings & ~PIPE_BIND_SAMPLER_VIEW) - return PIPE_FORMAT_NONE; - else if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGB, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT1_RGB; - else - return default_rgb_format(screen, target, sample_count, bindings); - - case GL_COMPRESSED_RGBA: - /* can only sample from compressed formats */ - if (bindings & ~PIPE_BIND_SAMPLER_VIEW) - return PIPE_FORMAT_NONE; - else if (screen->is_format_supported(screen, PIPE_FORMAT_DXT3_RGBA, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT3_RGBA; - else - return default_rgba_format(screen, target, sample_count, bindings); - - case GL_RGB_S3TC: - case GL_RGB4_S3TC: - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGB, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT1_RGB; - else - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_RGBA, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT1_RGBA; - else - return PIPE_FORMAT_NONE; - - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT3_RGBA, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT3_RGBA; - else - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT5_RGBA, - target, sample_count, bindings)) - return PIPE_FORMAT_DXT5_RGBA; - else - return PIPE_FORMAT_NONE; - -#if 0 - case GL_COMPRESSED_RGB_FXT1_3DFX: - return PIPE_FORMAT_RGB_FXT1; - case GL_COMPRESSED_RGBA_FXT1_3DFX: - return PIPE_FORMAT_RGB_FXT1; -#endif - - case GL_DEPTH_COMPONENT16: - if (screen->is_format_supported(screen, PIPE_FORMAT_Z16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_Z16_UNORM; - /* fall-through */ - case GL_DEPTH_COMPONENT24: - if (screen->is_format_supported(screen, PIPE_FORMAT_Z24_UNORM_S8_USCALED, - target, sample_count, bindings)) - return PIPE_FORMAT_Z24_UNORM_S8_USCALED; - if (screen->is_format_supported(screen, PIPE_FORMAT_S8_USCALED_Z24_UNORM, - target, sample_count, bindings)) - return PIPE_FORMAT_S8_USCALED_Z24_UNORM; - /* fall-through */ - case GL_DEPTH_COMPONENT32: - if (screen->is_format_supported(screen, PIPE_FORMAT_Z32_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_Z32_UNORM; - /* fall-through */ - case GL_DEPTH_COMPONENT: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_Z32_UNORM, - PIPE_FORMAT_Z24_UNORM_S8_USCALED, - PIPE_FORMAT_S8_USCALED_Z24_UNORM, - PIPE_FORMAT_Z16_UNORM - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_STENCIL_INDEX: - case GL_STENCIL_INDEX1_EXT: - case GL_STENCIL_INDEX4_EXT: - case GL_STENCIL_INDEX8_EXT: - case GL_STENCIL_INDEX16_EXT: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_S8_USCALED, - PIPE_FORMAT_Z24_UNORM_S8_USCALED, - PIPE_FORMAT_S8_USCALED_Z24_UNORM - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_DEPTH_STENCIL_EXT: - case GL_DEPTH24_STENCIL8_EXT: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_Z24_UNORM_S8_USCALED, - PIPE_FORMAT_S8_USCALED_Z24_UNORM - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_SRGB_EXT: - case GL_SRGB8_EXT: - case GL_SRGB_ALPHA_EXT: - case GL_SRGB8_ALPHA8_EXT: - return default_srgba_format( screen, target, sample_count, bindings); - - case GL_COMPRESSED_SRGB_EXT: - case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT1_SRGB, target, - sample_count, bindings)) - return PIPE_FORMAT_DXT1_SRGB; - return default_srgba_format( screen, target, sample_count, bindings); - - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: - return PIPE_FORMAT_DXT1_SRGBA; - - case GL_COMPRESSED_SRGB_ALPHA_EXT: - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_DXT3_SRGBA, target, - sample_count, bindings)) - return PIPE_FORMAT_DXT3_SRGBA; - return default_srgba_format( screen, target, sample_count, bindings); - - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: - return PIPE_FORMAT_DXT5_SRGBA; - - case GL_SLUMINANCE_ALPHA_EXT: - case GL_SLUMINANCE8_ALPHA8_EXT: - case GL_COMPRESSED_SLUMINANCE_EXT: - case GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_L8A8_SRGB, target, - sample_count, bindings)) - return PIPE_FORMAT_L8A8_SRGB; - return default_srgba_format( screen, target, sample_count, bindings); - - case GL_SLUMINANCE_EXT: - case GL_SLUMINANCE8_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_L8_SRGB, target, - sample_count, bindings)) - return PIPE_FORMAT_L8_SRGB; - return default_srgba_format( screen, target, sample_count, bindings); - - /* prefer formats in order of data size, choosing 16-bit ones if equal sized */ - case GL_RGBA16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_RGB16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16G16B16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R32G32B32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_LUMINANCE_ALPHA16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_ALPHA16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_A16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_A32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_INTENSITY16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_I16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_I32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_LUMINANCE16F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_L32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_R16F: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16_FLOAT, - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_RG16F: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT, - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - /* try a 32-bit format if available, otherwise fallback to a 16-bit one */ - case GL_RGBA32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_RGB32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R32G32B32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_LUMINANCE_ALPHA32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_ALPHA32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_A32_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_A16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_INTENSITY32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_I32_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_I16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_LUMINANCE32F_ARB: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L32_FLOAT, - PIPE_FORMAT_L32A32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_L16_FLOAT, - PIPE_FORMAT_L16A16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_R32F: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R32_FLOAT, - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R16_FLOAT, - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - case GL_RG32F: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R32G32_FLOAT, - PIPE_FORMAT_R32G32B32A32_FLOAT, - PIPE_FORMAT_R16G16_FLOAT, - PIPE_FORMAT_R16G16B16A16_FLOAT - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_RED: - case GL_R8: - if (screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R8_UNORM; - return PIPE_FORMAT_NONE; - case GL_RG: - case GL_RG8: - if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R8G8_UNORM; - return PIPE_FORMAT_NONE; - - case GL_R16: - if (screen->is_format_supported(screen, PIPE_FORMAT_R16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R16_UNORM; - return PIPE_FORMAT_NONE; - - case GL_RG16: - if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R16G16_UNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_RED: - case GL_COMPRESSED_RED_RGTC1: - if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_RGTC1_UNORM; - if (screen->is_format_supported(screen, PIPE_FORMAT_R8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R8_UNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_SIGNED_RED_RGTC1: - if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC1_SNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_RGTC1_SNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_RG: - case GL_COMPRESSED_RG_RGTC2: - if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_RGTC2_UNORM; - if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_R8G8_UNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_SIGNED_RG_RGTC2: - if (screen->is_format_supported(screen, PIPE_FORMAT_RGTC2_SNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_RGTC2_SNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_LUMINANCE: - case GL_COMPRESSED_LUMINANCE_LATC1_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_LATC1_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_LATC1_UNORM; - if (screen->is_format_supported(screen, PIPE_FORMAT_L8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L8_UNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_LATC1_SNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_LATC1_SNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_LUMINANCE_ALPHA: - case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: - case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: - if (screen->is_format_supported(screen, PIPE_FORMAT_LATC2_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_LATC2_UNORM; - if (screen->is_format_supported(screen, PIPE_FORMAT_L8A8_UNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_L8A8_UNORM; - return PIPE_FORMAT_NONE; - - case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_LATC2_SNORM, target, - sample_count, bindings)) - return PIPE_FORMAT_LATC2_SNORM; - return PIPE_FORMAT_NONE; - - /* signed/unsigned integer formats. - * XXX Mesa only has formats for RGBA signed/unsigned integer formats. - * If/when new formats are added this code should be updated. - */ - case GL_RED_INTEGER_EXT: - case GL_GREEN_INTEGER_EXT: - case GL_BLUE_INTEGER_EXT: - case GL_ALPHA_INTEGER_EXT: - case GL_RGB_INTEGER_EXT: - case GL_RGBA_INTEGER_EXT: - case GL_BGR_INTEGER_EXT: - case GL_BGRA_INTEGER_EXT: - case GL_LUMINANCE_INTEGER_EXT: - case GL_LUMINANCE_ALPHA_INTEGER_EXT: - /* fall-through */ - case GL_RGBA8I_EXT: - case GL_RGB8I_EXT: - case GL_ALPHA8I_EXT: - case GL_INTENSITY8I_EXT: - case GL_LUMINANCE8I_EXT: - case GL_LUMINANCE_ALPHA8I_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SSCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R8G8B8A8_SSCALED; - return PIPE_FORMAT_NONE; - case GL_RGBA16I_EXT: - case GL_RGB16I_EXT: - case GL_ALPHA16I_EXT: - case GL_INTENSITY16I_EXT: - case GL_LUMINANCE16I_EXT: - case GL_LUMINANCE_ALPHA16I_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_SSCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R16G16B16A16_SSCALED; - return PIPE_FORMAT_NONE; - case GL_RGBA32I_EXT: - case GL_RGB32I_EXT: - case GL_ALPHA32I_EXT: - case GL_INTENSITY32I_EXT: - case GL_LUMINANCE32I_EXT: - case GL_LUMINANCE_ALPHA32I_EXT: - /* xxx */ - if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_SSCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R32G32B32A32_SSCALED; - return PIPE_FORMAT_NONE; - - case GL_RGBA8UI_EXT: - case GL_RGB8UI_EXT: - case GL_ALPHA8UI_EXT: - case GL_INTENSITY8UI_EXT: - case GL_LUMINANCE8UI_EXT: - case GL_LUMINANCE_ALPHA8UI_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_USCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R8G8B8A8_USCALED; - return PIPE_FORMAT_NONE; - - case GL_RGBA16UI_EXT: - case GL_RGB16UI_EXT: - case GL_ALPHA16UI_EXT: - case GL_INTENSITY16UI_EXT: - case GL_LUMINANCE16UI_EXT: - case GL_LUMINANCE_ALPHA16UI_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_R16G16B16A16_USCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R16G16B16A16_USCALED; - return PIPE_FORMAT_NONE; - - case GL_RGBA32UI_EXT: - case GL_RGB32UI_EXT: - case GL_ALPHA32UI_EXT: - case GL_INTENSITY32UI_EXT: - case GL_LUMINANCE32UI_EXT: - case GL_LUMINANCE_ALPHA32UI_EXT: - if (screen->is_format_supported(screen, PIPE_FORMAT_R32G32B32A32_USCALED, - target, - sample_count, bindings)) - return PIPE_FORMAT_R32G32B32A32_USCALED; - return PIPE_FORMAT_NONE; - - /* signed normalized formats */ - case GL_RED_SNORM: - case GL_R8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R8_SNORM, - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_R16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16_SNORM, - PIPE_FORMAT_R16G16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_R8_SNORM, - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_RG_SNORM: - case GL_RG8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_RG16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16G16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_R8G8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_RGB_SNORM: - case GL_RGB8_SNORM: - case GL_RGBA_SNORM: - case GL_RGBA8_SNORM: - if (screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_SNORM, - target, - sample_count, bindings)) - return PIPE_FORMAT_R8G8B8A8_SNORM; - return PIPE_FORMAT_NONE; - - case GL_RGB16_SNORM: - case GL_RGBA16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - - case GL_ALPHA_SNORM: - case GL_ALPHA8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_A8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_ALPHA16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_A16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_A8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_LUMINANCE_SNORM: - case GL_LUMINANCE8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_LUMINANCE16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_L8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_LUMINANCE_ALPHA_SNORM: - case GL_LUMINANCE8_ALPHA8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L8A8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_LUMINANCE16_ALPHA16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_L16A16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_L8A8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_INTENSITY_SNORM: - case GL_INTENSITY8_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_I8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_INTENSITY16_SNORM: - { - static const enum pipe_format formats[] = { - PIPE_FORMAT_I16_SNORM, - PIPE_FORMAT_R16G16B16A16_SNORM, - PIPE_FORMAT_I8_SNORM, - PIPE_FORMAT_R8G8B8A8_SNORM, - }; - return find_supported_format(screen, formats, Elements(formats), - target, sample_count, bindings); - } - - case GL_RGB9_E5: - if (screen->is_format_supported(screen, PIPE_FORMAT_R9G9B9E5_FLOAT, target, - sample_count, bindings)) { - return PIPE_FORMAT_R9G9B9E5_FLOAT; - } + /* can't render to compressed formats at this time */ + if (_mesa_is_compressed_format(ctx, internalFormat) + && (bindings & ~PIPE_BIND_SAMPLER_VIEW)) { return PIPE_FORMAT_NONE; + } - case GL_R11F_G11F_B10F: - if (screen->is_format_supported(screen, PIPE_FORMAT_R11G11B10_FLOAT, target, - sample_count, bindings)) { - return PIPE_FORMAT_R11G11B10_FLOAT; + /* search table for internalFormat */ + for (i = 0; i < Elements(format_map); i++) { + const struct format_mapping *mapping = &format_map[i]; + for (j = 0; mapping->glFormats[j]; j++) { + if (mapping->glFormats[j] == internalFormat) { + /* Found the desired internal format. Find first pipe format + * which is supported by the driver. + */ + return find_supported_format(screen, mapping->pipeFormats, + target, sample_count, bindings); + } } - return PIPE_FORMAT_NONE; - - default: - return PIPE_FORMAT_NONE; } + + _mesa_problem(NULL, "unhandled format!\n"); + return PIPE_FORMAT_NONE; } diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index aea69c1b434..b0911294a7c 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -91,9 +91,18 @@ st_render_mipmap(struct st_context *st, return FALSE; } + /* Disable conditional rendering. */ + if (st->render_condition) { + pipe->render_condition(pipe, NULL, 0); + } + util_gen_mipmap(st->gen_mipmap, psv, face, baseLevel, lastLevel, PIPE_TEX_FILTER_LINEAR); + if (st->render_condition) { + pipe->render_condition(pipe, st->render_condition, st->condition_mode); + } + return TRUE; } @@ -229,12 +238,12 @@ fallback_generate_mipmap(struct gl_context *ctx, GLenum target, ubyte *dstData; int srcStride, dstStride; - srcTrans = pipe_get_transfer(st_context(ctx)->pipe, pt, srcLevel, + srcTrans = pipe_get_transfer(pipe, pt, srcLevel, face, PIPE_TRANSFER_READ, 0, 0, srcWidth, srcHeight); - dstTrans = pipe_get_transfer(st_context(ctx)->pipe, pt, dstLevel, + dstTrans = pipe_get_transfer(pipe, pt, dstLevel, face, PIPE_TRANSFER_WRITE, 0, 0, dstWidth, dstHeight); diff --git a/src/mesa/swrast/s_blit.c b/src/mesa/swrast/s_blit.c index d943e09b29f..3516a41bf41 100644 --- a/src/mesa/swrast/s_blit.c +++ b/src/mesa/swrast/s_blit.c @@ -568,9 +568,6 @@ _swrast_BlitFramebuffer(struct gl_context *ctx, }; GLint i; - if (!_mesa_check_conditional_render(ctx)) - return; /* don't clear */ - if (!ctx->DrawBuffer->_NumColorDrawBuffers) return; diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index a49cd5017a3..5e9b2798c43 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -1045,13 +1045,37 @@ vbo_exec_DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, _mesa_lookup_enum_by_nr(type), indices, numInstances); if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices, - numInstances)) + numInstances, 0)) return; vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0, count, type, indices, 0, numInstances); } +/** + * Called by glDrawElementsInstancedBaseVertex() in immediate mode. + */ +static void GLAPIENTRY +vbo_exec_DrawElementsInstancedBaseVertex(GLenum mode, GLsizei count, GLenum type, + const GLvoid *indices, GLsizei numInstances, + GLint basevertex) +{ + GET_CURRENT_CONTEXT(ctx); + + if (MESA_VERBOSE & VERBOSE_DRAW) + _mesa_debug(ctx, "glDrawElementsInstancedBaseVertex(%s, %d, %s, %p, %d; %d)\n", + _mesa_lookup_enum_by_nr(mode), count, + _mesa_lookup_enum_by_nr(type), indices, + numInstances, basevertex); + + if (!_mesa_validate_DrawElementsInstanced(ctx, mode, count, type, indices, + numInstances, basevertex)) + return; + + vbo_validated_drawrangeelements(ctx, mode, GL_FALSE, ~0, ~0, + count, type, indices, basevertex, numInstances); +} + /** * Inner support for both _mesa_MultiDrawElements() and @@ -1260,6 +1284,7 @@ vbo_exec_array_init( struct vbo_exec_context *exec ) exec->vtxfmt.MultiDrawElementsBaseVertex = vbo_exec_MultiDrawElementsBaseVertex; exec->vtxfmt.DrawArraysInstanced = vbo_exec_DrawArraysInstanced; exec->vtxfmt.DrawElementsInstanced = vbo_exec_DrawElementsInstanced; + exec->vtxfmt.DrawElementsInstancedBaseVertex = vbo_exec_DrawElementsInstancedBaseVertex; } |