[Mesa-dev] Add interpolateAt builtin support to the radeonsi nir backend
This series is intended to be applied on top of the previous serires that ebales glsl 450 starting with: [PATCH 1/5] ac/radeonsi: add tcs load outputs support ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 4/8] radeonsi/nir: add si_nir_load_sample_position() helper
--- src/gallium/drivers/radeonsi/si_shader.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 8e91a45455..a04b01eb79 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1905,6 +1905,12 @@ static LLVMValueRef load_sample_position(struct si_shader_context *ctx, LLVMValu return lp_build_gather_values(>gallivm, pos, 4); } +static LLVMValueRef si_nir_load_sample_position(struct ac_shader_abi *abi, LLVMValueRef sample_id) +{ + struct si_shader_context *ctx = si_shader_context_from_abi(abi); + return load_sample_position(ctx, sample_id); +} + static LLVMValueRef si_load_tess_coord(struct ac_shader_abi *abi, LLVMTypeRef type, unsigned num_components) -- 2.14.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 6/8] ac/radeonsi: add lookup_interp_param and load_sample_position to the abi
The will enable the interpolateAt builtins to work on the radeonsi nir backend. --- src/amd/common/ac_nir_to_llvm.c | 64 +--- src/amd/common/ac_shader_abi.h | 7 src/gallium/drivers/radeonsi/si_shader.c | 2 + 3 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 7de208011a..94e1b68eee 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3925,9 +3925,11 @@ static LLVMValueRef visit_var_atomic(struct nir_to_llvm_context *ctx, return result; } -static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx, +static LLVMValueRef lookup_interp_param(struct ac_shader_abi *abi, enum glsl_interp_mode interp, unsigned location) { + struct nir_to_llvm_context *ctx = nir_to_llvm_context_from_abi(abi); + switch (interp) { case INTERP_MODE_FLAT: default: @@ -3953,9 +3955,11 @@ static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx, return NULL; } -static LLVMValueRef load_sample_position(struct nir_to_llvm_context *ctx, +static LLVMValueRef load_sample_position(struct ac_shader_abi *abi, LLVMValueRef sample_id) { + struct nir_to_llvm_context *ctx = nir_to_llvm_context_from_abi(abi); + LLVMValueRef result; LLVMValueRef ptr = ac_build_gep0(>ac, ctx->ring_offsets, LLVMConstInt(ctx->ac.i32, RING_PS_SAMPLE_POSITIONS, false)); @@ -3977,7 +3981,7 @@ static LLVMValueRef load_sample_pos(struct ac_nir_context *ctx) return ac_build_gather_values(>ac, values, 2); } -static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx, +static LLVMValueRef visit_interp(struct ac_nir_context *ctx, const nir_intrinsic_instr *instr) { LLVMValueRef result[4]; @@ -3995,33 +3999,33 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx, case nir_intrinsic_interp_var_at_sample: case nir_intrinsic_interp_var_at_offset: location = INTERP_CENTER; - src0 = get_src(ctx->nir, instr->src[0]); + src0 = get_src(ctx, instr->src[0]); break; default: break; } if (instr->intrinsic == nir_intrinsic_interp_var_at_offset) { - src_c0 = ac_to_float(>ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->ac.i32_0, "")); - src_c1 = ac_to_float(>ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->ac.i32_1, "")); + src_c0 = ac_to_float(>ac, LLVMBuildExtractElement(ctx->ac.builder, src0, ctx->ac.i32_0, "")); + src_c1 = ac_to_float(>ac, LLVMBuildExtractElement(ctx->ac.builder, src0, ctx->ac.i32_1, "")); } else if (instr->intrinsic == nir_intrinsic_interp_var_at_sample) { LLVMValueRef sample_position; LLVMValueRef halfval = LLVMConstReal(ctx->ac.f32, 0.5f); /* fetch sample ID */ - sample_position = load_sample_position(ctx, src0); + sample_position = ctx->abi->load_sample_position(ctx->abi, src0); - src_c0 = LLVMBuildExtractElement(ctx->builder, sample_position, ctx->ac.i32_0, ""); - src_c0 = LLVMBuildFSub(ctx->builder, src_c0, halfval, ""); - src_c1 = LLVMBuildExtractElement(ctx->builder, sample_position, ctx->ac.i32_1, ""); - src_c1 = LLVMBuildFSub(ctx->builder, src_c1, halfval, ""); + src_c0 = LLVMBuildExtractElement(ctx->ac.builder, sample_position, ctx->ac.i32_0, ""); + src_c0 = LLVMBuildFSub(ctx->ac.builder, src_c0, halfval, ""); + src_c1 = LLVMBuildExtractElement(ctx->ac.builder, sample_position, ctx->ac.i32_1, ""); + src_c1 = LLVMBuildFSub(ctx->ac.builder, src_c1, halfval, ""); } - interp_param = lookup_interp_param(ctx, instr->variables[0]->var->data.interpolation, location); + interp_param = ctx->abi->lookup_interp_param(ctx->abi, instr->variables[0]->var->data.interpolation, location); attr_number = LLVMConstInt(ctx->ac.i32, input_index, false); if (location == INTERP_CENTER) { LLVMValueRef ij_out[2]; - LLVMValueRef ddxy_out = emit_ddxy_interp(ctx->nir, interp_param); + LLVMValueRef ddxy_out = emit_ddxy_interp(ctx, interp_param); /* * take the I then J parameters, and the DDX/Y for it, and @@ -4034,24 +4038,24 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx, for (unsigned i = 0; i < 2; i++) { LLVMValueRef ix_ll = LLVMConstInt(ctx->ac.i32, i, false); LLVMValueRef iy_ll = LLVMConstInt(ctx->ac.i32, i + 2, false); - LLVMValueRef ddx_el =
[Mesa-dev] [PATCH 3/8] radeonsi/nir: add si_nir_lookup_interp_param() helper
--- src/amd/common/ac_nir_to_llvm.c | 4 --- src/amd/common/ac_nir_to_llvm.h | 5 src/amd/common/ac_shader_abi.h| 2 ++ src/gallium/drivers/radeonsi/si_shader_internal.h | 4 +++ src/gallium/drivers/radeonsi/si_shader_nir.c | 36 +++ 5 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index e79fdd2ec2..3efb01137c 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -3926,10 +3926,6 @@ static LLVMValueRef visit_var_atomic(struct nir_to_llvm_context *ctx, return result; } -#define INTERP_CENTER 0 -#define INTERP_CENTROID 1 -#define INTERP_SAMPLE 2 - static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx, enum glsl_interp_mode interp, unsigned location) { diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h index b3ad0a0985..99bc3ef8dd 100644 --- a/src/amd/common/ac_nir_to_llvm.h +++ b/src/amd/common/ac_nir_to_llvm.h @@ -115,6 +115,11 @@ enum ac_ud_index { AC_UD_MAX_UD = AC_UD_TCS_MAX_UD, }; +/* Interpolation locations */ +#define INTERP_CENTER 0 +#define INTERP_CENTROID 1 +#define INTERP_SAMPLE 2 + /* descriptor index into scratch ring offsets */ #define RING_SCRATCH 0 #define RING_ESGS_VS 1 diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h index 3e9e7a4786..579fca9e7c 100644 --- a/src/amd/common/ac_shader_abi.h +++ b/src/amd/common/ac_shader_abi.h @@ -26,6 +26,8 @@ #include +#include "compiler/shader_enums.h" + enum ac_descriptor_type { AC_DESC_IMAGE, AC_DESC_FMASK, diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 7306481ccd..8b0e73abbf 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -292,6 +292,10 @@ LLVMValueRef si_llvm_load_input_gs(struct ac_shader_abi *abi, LLVMTypeRef type, unsigned swizzle); +LLVMValueRef si_nir_lookup_interp_param(struct ac_shader_abi *abi, + enum glsl_interp_mode interp, + unsigned location); + void si_llvm_emit_store(struct lp_build_tgsi_context *bld_base, const struct tgsi_full_instruction *inst, const struct tgsi_opcode_info *info, diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index d2314e03ec..32ac985bc7 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -624,6 +624,42 @@ LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi *abi, return ac_build_varying_gather_values(>ac, value, num_components, component); } +LLVMValueRef +si_nir_lookup_interp_param(struct ac_shader_abi *abi, + enum glsl_interp_mode interp, unsigned location) +{ + struct si_shader_context *ctx = si_shader_context_from_abi(abi); + int interp_param_idx = -1; + + switch (interp) { + case INTERP_MODE_FLAT: + return NULL; + case INTERP_MODE_SMOOTH: + case INTERP_MODE_NONE: + if (location == INTERP_CENTER) + interp_param_idx = SI_PARAM_PERSP_CENTER; + else if (location == INTERP_CENTROID) + interp_param_idx = SI_PARAM_PERSP_CENTROID; + else if (location == INTERP_SAMPLE) + interp_param_idx = SI_PARAM_PERSP_SAMPLE; + break; + case INTERP_MODE_NOPERSPECTIVE: + if (location == INTERP_CENTER) + interp_param_idx = SI_PARAM_LINEAR_CENTER; + else if (location == INTERP_CENTROID) + interp_param_idx = SI_PARAM_LINEAR_CENTROID; + else if (location == INTERP_SAMPLE) + interp_param_idx = SI_PARAM_LINEAR_SAMPLE; + break; + default: + assert(!"Unhandled interpolation mode."); + return NULL; + } + + return interp_param_idx != -1 ? + LLVMGetParam(ctx->main_fn, interp_param_idx) : NULL; +} + static LLVMValueRef si_nir_load_sampler_desc(struct ac_shader_abi *abi, unsigned descriptor_set, unsigned base_index, -- 2.14.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/8] radeonsi/nir: add interpolate at intrinsics to scan_instruction()
--- src/gallium/drivers/radeonsi/si_shader_nir.c | 26 ++ 1 file changed, 26 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 20b3beccc4..fcc857f838 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -124,6 +124,32 @@ static void scan_instruction(struct tgsi_shader_info *info, case nir_intrinsic_ssbo_atomic_comp_swap: info->writes_memory = true; break; + case nir_intrinsic_interp_var_at_centroid: + case nir_intrinsic_interp_var_at_sample: + case nir_intrinsic_interp_var_at_offset: { + enum glsl_interp_mode interp = + intr->variables[0]->var->data.interpolation; + switch (interp) { + case INTERP_MODE_SMOOTH: + case INTERP_MODE_NONE: + if (intr->intrinsic == nir_intrinsic_interp_var_at_centroid) + info->uses_persp_centroid = true; + else + info->uses_persp_center = true; + break; + case INTERP_MODE_NOPERSPECTIVE: + if (intr->intrinsic == nir_intrinsic_interp_var_at_centroid) + info->uses_linear_centroid = true; + else + info->uses_linear_center = true; + break; + case INTERP_MODE_FLAT: + break; + default: + unreachable("Unsupported interpoation type"); + } + break; + } default: break; } -- 2.14.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 7/8] radeonsi/nir: add input support for arrays that have not been copied to temps and split
We need this to be able to support the interpolateAt builtins in a sane way. It also leads to the generation of more optimal code. --- src/gallium/drivers/radeonsi/si_shader_nir.c | 146 +++ 1 file changed, 81 insertions(+), 65 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 32ac985bc7..a9e852c0bc 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -259,7 +259,14 @@ void si_nir_scan_shader(const struct nir_shader *nir, unsigned num_inputs = 0; nir_foreach_variable(variable, >inputs) { unsigned semantic_name, semantic_index; - unsigned attrib_count = glsl_count_attribute_slots(variable->type, + + const struct glsl_type *type = variable->type; + if (nir_is_per_vertex_io(variable, nir->info.stage)) { + assert(glsl_type_is_array(type)); + type = glsl_get_array_element(type); + } + + unsigned attrib_count = glsl_count_attribute_slots(type, nir->info.stage == MESA_SHADER_VERTEX); /* Vertex shader inputs don't have semantics. The state @@ -274,9 +281,6 @@ void si_nir_scan_shader(const struct nir_shader *nir, continue; } - assert(nir->info.stage != MESA_SHADER_FRAGMENT || - (attrib_count == 1 && "not implemented")); - /* Fragment shader position is a system value. */ if (nir->info.stage == MESA_SHADER_FRAGMENT && variable->data.location == VARYING_SLOT_POS) { @@ -289,63 +293,71 @@ void si_nir_scan_shader(const struct nir_shader *nir, } i = variable->data.driver_location; - if (processed_inputs & ((uint64_t)1 << i)) - continue; - processed_inputs |= ((uint64_t)1 << i); - num_inputs++; + for (unsigned j = 0; j < attrib_count; j++, i++) { - tgsi_get_gl_varying_semantic(variable->data.location, true, -_name, _index); + if (processed_inputs & ((uint64_t)1 << i)) { +//printf("continue %s %d\n", variable->name, variable->data.location + j); + continue; +} - info->input_semantic_name[i] = semantic_name; - info->input_semantic_index[i] = semantic_index; + processed_inputs |= ((uint64_t)1 << i); + num_inputs++; - if (variable->data.sample) - info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_SAMPLE; - else if (variable->data.centroid) - info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTROID; - else - info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTER; +//printf("in %s %d idx %d\n", variable->name, variable->data.location + j, i); - enum glsl_base_type base_type = - glsl_get_base_type(glsl_without_array(variable->type)); + tgsi_get_gl_varying_semantic(variable->data.location + j, true, +_name, _index); - switch (variable->data.interpolation) { - case INTERP_MODE_NONE: - if (glsl_base_type_is_integer(base_type)) { - info->input_interpolate[i] = TGSI_INTERPOLATE_CONSTANT; - break; - } + info->input_semantic_name[i] = semantic_name; + info->input_semantic_index[i] = semantic_index; - if (semantic_name == TGSI_SEMANTIC_COLOR) { - info->input_interpolate[i] = TGSI_INTERPOLATE_COLOR; - break; - } - /* fall-through */ + if (variable->data.sample) + info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_SAMPLE; + else if (variable->data.centroid) + info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTROID; + else + info->input_interpolate_loc[i] = TGSI_INTERPOLATE_LOC_CENTER; - case INTERP_MODE_SMOOTH: - assert(!glsl_base_type_is_integer(base_type)); + enum glsl_base_type base_type = + glsl_get_base_type(glsl_without_array(variable->type)); - info->input_interpolate[i] = TGSI_INTERPOLATE_PERSPECTIVE; -
[Mesa-dev] [PATCH 5/8] radeonsi/nir: add prim_mask to the abi
--- src/amd/common/ac_nir_to_llvm.c | 11 +-- src/amd/common/ac_shader_abi.h | 1 + src/gallium/drivers/radeonsi/si_shader.c | 7 --- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 3efb01137c..7de208011a 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -126,7 +126,6 @@ struct nir_to_llvm_context { LLVMValueRef hs_ring_tess_offchip; LLVMValueRef hs_ring_tess_factor; - LLVMValueRef prim_mask; LLVMValueRef sample_pos_offset; LLVMValueRef persp_sample, persp_center, persp_centroid; LLVMValueRef linear_sample, linear_center, linear_centroid; @@ -1006,7 +1005,7 @@ static void create_function(struct nir_to_llvm_context *ctx, add_arg(, ARG_SGPR, ctx->ac.i32, >sample_pos_offset); - add_arg(, ARG_SGPR, ctx->ac.i32, >prim_mask); + add_arg(, ARG_SGPR, ctx->ac.i32, >abi.prim_mask); add_arg(, ARG_VGPR, ctx->ac.v2i32, >persp_sample); add_arg(, ARG_VGPR, ctx->ac.v2i32, >persp_center); add_arg(, ARG_VGPR, ctx->ac.v2i32, >persp_centroid); @@ -4072,12 +4071,12 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx, result[chan] = ac_build_fs_interp(>ac, llvm_chan, attr_number, - ctx->prim_mask, i, j); + ctx->abi.prim_mask, i, j); } else { result[chan] = ac_build_fs_interp_mov(>ac, LLVMConstInt(ctx->ac.i32, 2, false), llvm_chan, attr_number, - ctx->prim_mask); + ctx->abi.prim_mask); } } return ac_build_varying_gather_values(>ac, result, instr->num_components, @@ -5329,7 +5328,7 @@ prepare_interp_optimize(struct nir_to_llvm_context *ctx, } if (uses_center && uses_centroid) { - LLVMValueRef sel = LLVMBuildICmp(ctx->builder, LLVMIntSLT, ctx->prim_mask, ctx->ac.i32_0, ""); + LLVMValueRef sel = LLVMBuildICmp(ctx->builder, LLVMIntSLT, ctx->abi.prim_mask, ctx->ac.i32_0, ""); ctx->persp_centroid = LLVMBuildSelect(ctx->builder, sel, ctx->persp_center, ctx->persp_centroid, ""); ctx->linear_centroid = LLVMBuildSelect(ctx->builder, sel, ctx->linear_center, ctx->linear_centroid, ""); } @@ -5360,7 +5359,7 @@ handle_fs_inputs(struct nir_to_llvm_context *ctx, if (i >= VARYING_SLOT_VAR0 || i == VARYING_SLOT_PNTC || i == VARYING_SLOT_PRIMITIVE_ID || i == VARYING_SLOT_LAYER) { interp_param = *inputs; - interp_fs_input(ctx, index, interp_param, ctx->prim_mask, + interp_fs_input(ctx, index, interp_param, ctx->abi.prim_mask, inputs); if (!interp_param) diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h index 579fca9e7c..38727478d3 100644 --- a/src/amd/common/ac_shader_abi.h +++ b/src/amd/common/ac_shader_abi.h @@ -53,6 +53,7 @@ struct ac_shader_abi { LLVMValueRef front_face; LLVMValueRef ancillary; LLVMValueRef sample_coverage; + LLVMValueRef prim_mask; /* For VS and PS: pre-loaded shader inputs. * diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index a04b01eb79..26599201ab 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -1853,7 +1853,7 @@ void si_llvm_load_input_fs( interp_fs_input(ctx, input_index, semantic_name, semantic_index, 0, /* this param is unused */ shader->selector->info.colors_read, interp_param, - LLVMGetParam(main_fn, SI_PARAM_PRIM_MASK), + ctx->abi.prim_mask, LLVMGetParam(main_fn, SI_PARAM_FRONT_FACE), [0]); } @@ -4092,7 +4092,7 @@ static void build_interp_intrinsic(const struct lp_build_tgsi_action *action, int input_base, input_array_size; int chan; int i; - LLVMValueRef prim_mask = LLVMGetParam(ctx->main_fn, SI_PARAM_PRIM_MASK); + LLVMValueRef prim_mask = ctx->abi.prim_mask; LLVMValueRef array_idx; int interp_param_idx; unsigned interp; @@ -4889,7 +4889,8 @@ static void create_function(struct si_shader_context *ctx)
[Mesa-dev] [PATCH 8/8] st/glsl_to_nir: disable io lowering and forced indirect array splitting in fs
We need this to be able to support the interpolateAt builtins in a sane way. It also leads to the generation of more optimal code. The lowering and splitting is made conditional on glsl 400 because vc4 and freedreno both expect these passes to be enabled and niether support glsl 400 so don't need to deal with the interpolateAt builtins. We leave the other stages for now as to avoid regressions. --- src/mesa/state_tracker/st_glsl_to_nir.cpp | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 6e3a1548f4..bc55c5b7db 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -461,7 +461,9 @@ st_nir_get_mesa_program(struct gl_context *ctx, struct gl_linked_shader *shader) { struct st_context *st = st_context(ctx); + struct pipe_screen *screen = st->pipe->screen; struct gl_program *prog; + unsigned glsl_version = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); validate_ir_tree(shader->ir); @@ -491,11 +493,14 @@ st_nir_get_mesa_program(struct gl_context *ctx, prog->nir = nir; if (nir->info.stage != MESA_SHADER_TESS_CTRL && - nir->info.stage != MESA_SHADER_TESS_EVAL) { + nir->info.stage != MESA_SHADER_TESS_EVAL && + (nir->info.stage != MESA_SHADER_FRAGMENT || +(glsl_version < 400 && nir->info.stage == MESA_SHADER_FRAGMENT))) { NIR_PASS_V(nir, nir_lower_io_to_temporaries, nir_shader_get_entrypoint(nir), true, true); } + NIR_PASS_V(nir, nir_lower_global_vars_to_local); NIR_PASS_V(nir, nir_split_var_copies); NIR_PASS_V(nir, nir_lower_var_copies); @@ -665,12 +670,16 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog, struct gl_shader_program *shader_program, nir_shader *nir) { struct pipe_screen *screen = st->pipe->screen; + unsigned glsl_version = screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL); NIR_PASS_V(nir, nir_split_var_copies); NIR_PASS_V(nir, nir_lower_var_copies); if (nir->info.stage != MESA_SHADER_TESS_CTRL && - nir->info.stage != MESA_SHADER_TESS_EVAL) + nir->info.stage != MESA_SHADER_TESS_EVAL && + (nir->info.stage != MESA_SHADER_FRAGMENT || +(glsl_version < 400 && nir->info.stage == MESA_SHADER_FRAGMENT))) { NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects); + } if (nir->info.stage == MESA_SHADER_VERTEX) { /* Needs special handling so drvloc matches the vbo state: */ -- 2.14.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 2/8] radeonsi/nir: move the interpolation qualifier scanning
We need to collect this when scanning over the instruction rather than when scanning over the inputs otherwise we might get confliting values for inputs that are use by the interpolateAt* builtins. --- src/gallium/drivers/radeonsi/si_shader_nir.c | 52 +++- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index fcc857f838..d2314e03ec 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -124,6 +124,40 @@ static void scan_instruction(struct tgsi_shader_info *info, case nir_intrinsic_ssbo_atomic_comp_swap: info->writes_memory = true; break; + case nir_intrinsic_load_var: { + nir_variable *var = intr->variables[0]->var; + nir_variable_mode mode = var->data.mode; + enum glsl_base_type base_type = + glsl_get_base_type(glsl_without_array(var->type)); + + if (mode == nir_var_shader_in) { + switch (var->data.interpolation) { + case INTERP_MODE_NONE: + if (glsl_base_type_is_integer(base_type)) + break; + + /* fall-through */ + case INTERP_MODE_SMOOTH: + if (var->data.sample) + info->uses_persp_sample = true; + else if (var->data.centroid) + info->uses_persp_centroid = true; + else + info->uses_persp_center = true; + break; + + case INTERP_MODE_NOPERSPECTIVE: + if (var->data.sample) + info->uses_linear_sample = true; + else if (var->data.centroid) + info->uses_linear_centroid = true; + else + info->uses_linear_center = true; + break; + } + } + break; + } case nir_intrinsic_interp_var_at_centroid: case nir_intrinsic_interp_var_at_sample: case nir_intrinsic_interp_var_at_offset: { @@ -286,34 +320,20 @@ void si_nir_scan_shader(const struct nir_shader *nir, if (semantic_name == TGSI_SEMANTIC_COLOR) { info->input_interpolate[i] = TGSI_INTERPOLATE_COLOR; - goto persp_locations; + break; } /* fall-through */ + case INTERP_MODE_SMOOTH: assert(!glsl_base_type_is_integer(base_type)); info->input_interpolate[i] = TGSI_INTERPOLATE_PERSPECTIVE; - - persp_locations: - if (variable->data.sample) - info->uses_persp_sample = true; - else if (variable->data.centroid) - info->uses_persp_centroid = true; - else - info->uses_persp_center = true; break; case INTERP_MODE_NOPERSPECTIVE: assert(!glsl_base_type_is_integer(base_type)); info->input_interpolate[i] = TGSI_INTERPOLATE_LINEAR; - - if (variable->data.sample) - info->uses_linear_sample = true; - else if (variable->data.centroid) - info->uses_linear_centroid = true; - else - info->uses_linear_center = true; break; case INTERP_MODE_FLAT: -- 2.14.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 104490] [radeonsi/290x] Dota2 fails to start (can't create opengl context)
https://bugs.freedesktop.org/show_bug.cgi?id=104490 Christian Incichanged: What|Removed |Added CC||chris.bugsfd@broke-the-inte ||r.net --- Comment #10 from Christian Inci --- *** Bug 104627 has been marked as a duplicate of this bug. *** -- You are receiving this mail because: You are the assignee for the bug. You are the QA Contact for the bug.___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] radeon: remove unneeded semicolons
Trivial. Found by Coccinelle. --- src/gallium/drivers/radeon/radeon_vcn_dec.c | 6 +++--- src/mesa/drivers/dri/radeon/radeon_debug.c | 2 +- src/mesa/drivers/dri/radeon/radeon_state_init.c | 2 +- src/mesa/drivers/dri/radeon/radeon_swtcl.c | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/radeon/radeon_vcn_dec.c b/src/gallium/drivers/radeon/radeon_vcn_dec.c index 8be9538..5999b92 100644 --- a/src/gallium/drivers/radeon/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeon/radeon_vcn_dec.c @@ -633,14 +633,14 @@ static struct pb_buffer *rvcn_dec_message_decode(struct radeon_decoder *dec, index->offset = offset_codec; index->size = sizeof(rvcn_dec_message_avc_t); index->filled = 0; - decode->stream_type = dec->stream_type;; + decode->stream_type = dec->stream_type; decode->decode_flags = 0x1; - decode->width_in_samples = dec->base.width;; - decode->height_in_samples = dec->base.height;; + decode->width_in_samples = dec->base.width; + decode->height_in_samples = dec->base.height; decode->bsd_size = align(dec->bs_size, 128); decode->dpb_size = dec->dpb.res->buf->size; decode->dt_size = ((struct r600_resource *)((struct vl_video_buffer *)target)->resources[0])->buf->size + diff --git a/src/mesa/drivers/dri/radeon/radeon_debug.c b/src/mesa/drivers/dri/radeon/radeon_debug.c index 383a5df..91f86a9 100644 --- a/src/mesa/drivers/dri/radeon/radeon_debug.c +++ b/src/mesa/drivers/dri/radeon/radeon_debug.c @@ -73,11 +73,11 @@ void _radeon_debug_add_indent(void) const size_t length = sizeof(radeon->debug.indent) / sizeof(radeon->debug.indent[0]); if (radeon->debug.indent_depth < length - 1) { radeon->debug.indent[radeon->debug.indent_depth] = '\t'; ++radeon->debug.indent_depth; - }; + } } void _radeon_debug_remove_indent(void) { GET_CURRENT_CONTEXT(ctx); diff --git a/src/mesa/drivers/dri/radeon/radeon_state_init.c b/src/mesa/drivers/dri/radeon/radeon_state_init.c index 99c535a..b847be5 100644 --- a/src/mesa/drivers/dri/radeon/radeon_state_init.c +++ b/src/mesa/drivers/dri/radeon/radeon_state_init.c @@ -438,11 +438,11 @@ static void cube_emit_cs(struct gl_context *ctx, struct radeon_state_atom *atom) switch(i) { case 1: base_reg = RADEON_PP_CUBIC_OFFSET_T1_0; break; case 2: base_reg = RADEON_PP_CUBIC_OFFSET_T2_0; break; default: case 0: base_reg = RADEON_PP_CUBIC_OFFSET_T0_0; break; - }; + } BEGIN_BATCH(dwords); OUT_BATCH_TABLE(atom->cmd, 2); lvl = >mt->levels[0]; for (j = 0; j < 5; j++) { OUT_BATCH(CP_PACKET0(base_reg + (4 * j), 0)); diff --git a/src/mesa/drivers/dri/radeon/radeon_swtcl.c b/src/mesa/drivers/dri/radeon/radeon_swtcl.c index d5365cd..860bba6 100644 --- a/src/mesa/drivers/dri/radeon/radeon_swtcl.c +++ b/src/mesa/drivers/dri/radeon/radeon_swtcl.c @@ -207,11 +207,11 @@ static void radeonSetVertexFormat( struct gl_context *ctx ) radeon_cp_vc_frmts[i][1] ); } break; default: continue; - }; + } } } } if (rmesa->radeon.tnl_index_bitset != index_bitset || -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] mesa: remove unneeded semicolons
Trivial. Found by Coccinelle. --- src/gbm/backends/dri/gbm_dri.c | 2 +- src/mesa/main/dlist.c| 2 +- src/mesa/main/program_resource.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index b2121cb..fd5fb4b 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -438,11 +438,11 @@ dri_screen_create_dri2(struct gbm_dri_device *dri, char *driver_name) ret = dri_load_driver(dri); if (ret) { fprintf(stderr, "failed to load driver: %s\n", dri->driver_name); return ret; - }; + } dri->loader_extensions = gbm_dri_screen_extensions; if (dri->dri2 == NULL) return -1; diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c index b7d1406..a6b212e 100644 --- a/src/mesa/main/dlist.c +++ b/src/mesa/main/dlist.c @@ -1910,11 +1910,11 @@ save_CallLists(GLsizei num, GLenum type, const GLvoid * lists) n = alloc_instruction(ctx, OPCODE_CALL_LISTS, 2 + POINTER_DWORDS); if (n) { n[1].i = num; n[2].e = type; save_pointer([3], lists_copy); - }; + } /* After this, we don't know what state we're in. Invalidate all * cached information previously gathered: */ invalidate_saved_current_state( ctx ); diff --git a/src/mesa/main/program_resource.c b/src/mesa/main/program_resource.c index 4eacdfb..5fa5d75 100644 --- a/src/mesa/main/program_resource.c +++ b/src/mesa/main/program_resource.c @@ -198,11 +198,11 @@ _mesa_GetProgramInterfaceiv(GLuint program, GLenum programInterface, default: _mesa_error(ctx, GL_INVALID_OPERATION, "glGetProgramInterfaceiv(%s pname %s)", _mesa_enum_to_string(programInterface), _mesa_enum_to_string(pname)); - }; + } break; case GL_MAX_NUM_COMPATIBLE_SUBROUTINES: switch (programInterface) { case GL_VERTEX_SUBROUTINE_UNIFORM: case GL_FRAGMENT_SUBROUTINE_UNIFORM: -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] osmesa: don't check SmoothFlag twice
Trivial. Found by Coccinelle. --- src/mesa/drivers/osmesa/osmesa.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c index 1df3da4..e0f87b8 100644 --- a/src/mesa/drivers/osmesa/osmesa.c +++ b/src/mesa/drivers/osmesa/osmesa.c @@ -212,11 +212,10 @@ osmesa_choose_line_function( struct gl_context *ctx ) */ return NULL; } if (ctx->RenderMode != GL_RENDER || - ctx->Line.SmoothFlag || ctx->Texture._MaxEnabledTexImageUnit == -1 || ctx->Light.ShadeModel != GL_FLAT || ctx->Line.Width != 1.0F || ctx->Line.StippleFlag || ctx->Line.SmoothFlag) { -- 2.7.4 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 104626] broadcom/vc5: double compare
https://bugs.freedesktop.org/show_bug.cgi?id=104626 --- Comment #1 from Grazvydas Ignotas--- also in src/gallium/drivers/vc5/vc5_emit.c: +int min_img_filter = psampler->min_img_filter; +int min_mip_filter = psampler->min_mip_filter; +int mag_img_filter = psampler->mag_img_filter; + +if (vc5_get_tex_return_size(psview->format) == 32) { +min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST; +mag_img_filter = PIPE_TEX_FILTER_NEAREST; +mag_img_filter = PIPE_TEX_FILTER_NEAREST; +} did you mean min_img_filter instead of setting mag_img_filter twice? -- You are receiving this mail because: You are the QA Contact for the bug.___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 104626] broadcom/vc5: double compare
https://bugs.freedesktop.org/show_bug.cgi?id=104626 Bug ID: 104626 Summary: broadcom/vc5: double compare Product: Mesa Version: git Hardware: Other OS: All Status: NEW Severity: normal Priority: medium Component: Other Assignee: e...@anholt.net Reporter: nota...@gmail.com QA Contact: mesa-dev@lists.freedesktop.org 2e3c7beb1e60a47e1f5dd12d28ac3f328555a543 adds: +if (surf->format == PIPE_FORMAT_B4G4R4A4_UNORM || +surf->format == PIPE_FORMAT_B4G4R4A4_UNORM) { perhaps something else was intended? -- You are receiving this mail because: You are the QA Contact for the bug.___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 104625] semicolon after if
https://bugs.freedesktop.org/show_bug.cgi?id=104625 Bug ID: 104625 Summary: semicolon after if Product: Mesa Version: git Hardware: Other OS: All Status: NEW Severity: normal Priority: medium Component: Other Assignee: thellst...@vmware.com Reporter: nota...@gmail.com QA Contact: mesa-dev@lists.freedesktop.org 9d81ab73768db6647c116f4710f7a93d8d41e3b1 adds this: + if (blit_info->src.resource->format != blit_info->src.format || + blit_info->dst.resource->format != blit_info->dst.format || + !util_is_format_compatible(src_desc, dst_desc)); which looks wrong and does nothing if I read it right. Perhaps something else was intended? -- You are receiving this mail because: You are the QA Contact for the bug.___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH] glx: fix non-dri build
I don't know enough about glx to know if this is correct, but you'll need to add the c files to the meson.build as well On January 13, 2018 3:36:30 AM PST, Samuel Thibaultwrote: >glXGetDriverConfig parameters do not provide a context to dynamically >check for the presence of the function, so the dispatcher directly >calls >glXGetDriverConfig, but in non-dri builds dri_glx.c didn't provide >glXGetDriverConfig. > >This change makes it provide a NULL-returning stub in non-dri builds. > >Fixes: 84f764a7591 "glxglvnddispatch: Add missing dispatch for >GetDriverConfig" > >--- >Compiling dri_glx.c in non-dri builds might be frowned upon. I'll be >happy to move the glXGetDriverConfig to another file if somebody tells >me which file would be the proper place. >--- > src/glx/Makefile.am | 2 +- > src/glx/dri_glx.c | 11 ++- > src/glx/glxclient.h | 4 ++-- > 3 files changed, 13 insertions(+), 4 deletions(-) > >diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am >index 5448a0907..0ae403403 100644 >--- a/src/glx/Makefile.am >+++ b/src/glx/Makefile.am >@@ -59,6 +59,7 @@ libglx_la_SOURCES = \ > clientinfo.c \ > compsize.c \ > create_context.c \ >+ dri_glx.c \ > eval.c \ > glxclient.h \ > glxcmds.c \ >@@ -123,7 +124,6 @@ libglx_la_SOURCES += \ > dri2_glx.c \ > dri2.h \ > dri2_priv.h \ >- dri_glx.c \ > dri_sarea.h \ > XF86dri.c \ > xf86dri.h \ >diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c >index 5c4346cec..893cb4acd 100644 >--- a/src/glx/dri_glx.c >+++ b/src/glx/dri_glx.c >@@ -32,12 +32,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE >SOFTWARE. > * > */ > >+#include "glxclient.h" >+ > #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) > > #include > #include > #include >-#include "glxclient.h" > #include "xf86dri.h" > #include "dri2.h" > #include "dri_sarea.h" >@@ -1020,4 +1021,12 @@ driCreateDisplay(Display * dpy) >return >base; > } > >+#else /* GLX_DIRECT_RENDERING */ >+ >+_GLX_PUBLIC const char * >+glXGetDriverConfig(const char *driverName) >+{ >+ return NULL; >+} >+ > #endif /* GLX_DIRECT_RENDERING */ >diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h >index f3a36cf10..a1925a5fe 100644 >--- a/src/glx/glxclient.h >+++ b/src/glx/glxclient.h >@@ -169,10 +169,10 @@ extern unsigned dri2GetSwapEventType(Display >*dpy, XID drawable); > */ > extern const char *glXGetScreenDriver(Display * dpy, int scrNum); > >-extern const char *glXGetDriverConfig(const char *driverName); >- > #endif > >+extern const char *glXGetDriverConfig(const char *driverName); >+ >// > > #define __GL_CLIENT_ATTRIB_STACK_DEPTH 16 >-- >2.15.1 > >___ >mesa-dev mailing list >mesa-dev@lists.freedesktop.org >https://lists.freedesktop.org/mailman/listinfo/mesa-dev ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] r600/shader: Initialize max_driver_temp_used correctly for the first time
Without this initialization the temp registers used in tgsi_declaration may used random indices, and this may result in failing translation from TGSI with an error message "GPR limit exceeded", because the random index is greater then the allowed limit implying that the shader uses more temporary registers then available. Signed-off-by: Gert Wollny--- src/gallium/drivers/r600/r600_shader.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index d60a94cb4c..4b1e8c768e 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -3335,6 +3335,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx, ctx.nliterals = 0; ctx.literals = NULL; + ctx.max_driver_temp_used = 0; shader->fs_write_all = ctx.info.properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] && ctx.info.colors_written == 1; -- 2.13.6 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [Bug 104490] [radeonsi/290x] Dota2 fails to start (can't create opengl context)
https://bugs.freedesktop.org/show_bug.cgi?id=104490 --- Comment #9 from Mike Lothian--- Has there been any progress on this bug? -- You are receiving this mail because: You are the assignee for the bug. You are the QA Contact for the bug.___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] u_thread: Use pthread_setname_np on linux only
pthread_setname_np was added in glibc 2.12 for the Linux port only, other ports do not necessarily have it. --- src/util/u_thread.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/u_thread.h b/src/util/u_thread.h index 26cc0b093..8c6e0bdc5 100644 --- a/src/util/u_thread.h +++ b/src/util/u_thread.h @@ -62,7 +62,8 @@ static inline void u_thread_setname( const char *name ) { #if defined(HAVE_PTHREAD) # if defined(__GNU_LIBRARY__) && defined(__GLIBC__) && defined(__GLIBC_MINOR__) && \ - (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) + (__GLIBC__ >= 3 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 12)) && \ + defined(__linux__) pthread_setname_np(pthread_self(), name); # endif #endif -- 2.15.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] glx: fix non-dri build
glXGetDriverConfig parameters do not provide a context to dynamically check for the presence of the function, so the dispatcher directly calls glXGetDriverConfig, but in non-dri builds dri_glx.c didn't provide glXGetDriverConfig. This change makes it provide a NULL-returning stub in non-dri builds. Fixes: 84f764a7591 "glxglvnddispatch: Add missing dispatch for GetDriverConfig" --- Compiling dri_glx.c in non-dri builds might be frowned upon. I'll be happy to move the glXGetDriverConfig to another file if somebody tells me which file would be the proper place. --- src/glx/Makefile.am | 2 +- src/glx/dri_glx.c | 11 ++- src/glx/glxclient.h | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am index 5448a0907..0ae403403 100644 --- a/src/glx/Makefile.am +++ b/src/glx/Makefile.am @@ -59,6 +59,7 @@ libglx_la_SOURCES = \ clientinfo.c \ compsize.c \ create_context.c \ + dri_glx.c \ eval.c \ glxclient.h \ glxcmds.c \ @@ -123,7 +124,6 @@ libglx_la_SOURCES += \ dri2_glx.c \ dri2.h \ dri2_priv.h \ - dri_glx.c \ dri_sarea.h \ XF86dri.c \ xf86dri.h \ diff --git a/src/glx/dri_glx.c b/src/glx/dri_glx.c index 5c4346cec..893cb4acd 100644 --- a/src/glx/dri_glx.c +++ b/src/glx/dri_glx.c @@ -32,12 +32,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ +#include "glxclient.h" + #if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL) #include #include #include -#include "glxclient.h" #include "xf86dri.h" #include "dri2.h" #include "dri_sarea.h" @@ -1020,4 +1021,12 @@ driCreateDisplay(Display * dpy) return >base; } +#else /* GLX_DIRECT_RENDERING */ + +_GLX_PUBLIC const char * +glXGetDriverConfig(const char *driverName) +{ + return NULL; +} + #endif /* GLX_DIRECT_RENDERING */ diff --git a/src/glx/glxclient.h b/src/glx/glxclient.h index f3a36cf10..a1925a5fe 100644 --- a/src/glx/glxclient.h +++ b/src/glx/glxclient.h @@ -169,10 +169,10 @@ extern unsigned dri2GetSwapEventType(Display *dpy, XID drawable); */ extern const char *glXGetScreenDriver(Display * dpy, int scrNum); -extern const char *glXGetDriverConfig(const char *driverName); - #endif +extern const char *glXGetDriverConfig(const char *driverName); + // #define __GL_CLIENT_ATTRIB_STACK_DEPTH 16 -- 2.15.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev