Mesa (master): st/glsl_to_nir: remove unused options variable
Module: Mesa Branch: master Commit: ff0e3fa1fe664f6a7aba289ed36fca9ff505bc18 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff0e3fa1fe664f6a7aba289ed36fca9ff505bc18 Author: Timothy ArceriDate: Sat Feb 10 11:06:55 2018 +1100 st/glsl_to_nir: remove unused options variable --- src/mesa/state_tracker/st_glsl_to_nir.cpp | 2 -- 1 file changed, 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 b9ac9fafc2..3f48a27835 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -471,8 +471,6 @@ st_nir_get_mesa_program(struct gl_context *ctx, struct gl_linked_shader *shader) { struct st_context *st = st_context(ctx); - const nir_shader_compiler_options *options = - ctx->Const.ShaderCompilerOptions[shader->Program->info.stage].NirOptions; struct gl_program *prog; validate_ir_tree(shader->ir); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/radeonsi: enable disk cache for nir
Module: Mesa Branch: master Commit: 8f378c116eb226e18193583dcbf1a5a77246b507 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f378c116eb226e18193583dcbf1a5a77246b507 Author: Timothy ArceriDate: Tue Jan 23 16:00:31 2018 +1100 st/radeonsi: enable disk cache for nir Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_pipe.c | 4 src/mesa/state_tracker/st_program.c| 15 +++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c index 97f11ea687..3180557484 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.c +++ b/src/gallium/drivers/radeonsi/si_pipe.c @@ -619,10 +619,6 @@ static void si_disk_cache_create(struct si_screen *sscreen) if (sscreen->debug_flags & DBG_ALL_SHADERS) return; - /* TODO: remove this once gallium supports a nir cache */ - if (sscreen->debug_flags & DBG(NIR)) - return; - uint32_t mesa_timestamp; if (disk_cache_get_function_timestamp(si_disk_cache_create, _timestamp)) { diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 191567ceec..d9b7155a91 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -465,6 +465,7 @@ st_translate_vertex_program(struct st_context *st, >tgsi.stream_output); } + st_store_ir_in_disk_cache(st, >Base, true); return true; } @@ -899,9 +900,11 @@ st_translate_fragment_program(struct st_context *st, } } - /* We have already compiler to NIR so just return */ - if (stfp->shader_program) + /* We have already compiled to NIR so just return */ + if (stfp->shader_program) { + st_store_ir_in_disk_cache(st, >Base, true); return true; + } ureg = ureg_create_with_screen(PIPE_SHADER_FRAGMENT, st->pipe->screen); if (ureg == NULL) @@ -1471,6 +1474,7 @@ st_translate_geometry_program(struct st_context *st, /* We have already compiled to NIR so just return */ if (stgp->shader_program) { st_translate_program_stream_output(>Base, >tgsi.stream_output); + st_store_ir_in_disk_cache(st, >Base, true); return true; } @@ -1570,8 +1574,10 @@ st_translate_tessctrl_program(struct st_context *st, struct ureg_program *ureg; /* We have already compiled to NIR so just return */ - if (sttcp->shader_program) + if (sttcp->shader_program) { + st_store_ir_in_disk_cache(st, >Base, true); return true; + } ureg = ureg_create_with_screen(PIPE_SHADER_TESS_CTRL, st->pipe->screen); if (ureg == NULL) @@ -1601,6 +1607,7 @@ st_translate_tesseval_program(struct st_context *st, /* We have already compiled to NIR so just return */ if (sttep->shader_program) { st_translate_program_stream_output(>Base, >tgsi.stream_output); + st_store_ir_in_disk_cache(st, >Base, true); return true; } @@ -1651,7 +1658,7 @@ st_translate_compute_program(struct st_context *st, /* no compute variants: */ st_finalize_nir(st, >Base, stcp->shader_program, (struct nir_shader *) stcp->tgsi.prog); - + st_store_ir_in_disk_cache(st, >Base, true); return true; } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st: add nir shader disk cache support
Module: Mesa Branch: master Commit: bc9d9f9b864efd24f0a4c65e2645f689f3ee9e79 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc9d9f9b864efd24f0a4c65e2645f689f3ee9e79 Author: Timothy ArceriDate: Wed Jan 24 11:12:51 2018 +1100 st: add nir shader disk cache support v2: include compute shader support Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- src/mesa/state_tracker/st_program.c| 6 +- src/mesa/state_tracker/st_shader_cache.c | 163 ++--- src/mesa/state_tracker/st_shader_cache.h | 8 +- 4 files changed, 135 insertions(+), 44 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 34e495864a..ffe0ca0ad7 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6992,7 +6992,7 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) bool use_nir = preferred_ir == PIPE_SHADER_IR_NIR; /* Return early if we are loading the shader from on-disk cache */ - if (st_load_tgsi_from_disk_cache(ctx, prog)) { + if (st_load_ir_from_disk_cache(ctx, prog, use_nir)) { return GL_TRUE; } diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 2c367efa6c..191567ceec 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -538,7 +538,7 @@ st_translate_vertex_program(struct st_context *st, if (stvp->glsl_to_tgsi) { stvp->glsl_to_tgsi = NULL; - st_store_tgsi_in_disk_cache(st, >Base); + st_store_ir_in_disk_cache(st, >Base, false); } return stvp->tgsi.tokens != NULL; @@ -995,7 +995,7 @@ st_translate_fragment_program(struct st_context *st, if (stfp->glsl_to_tgsi) { stfp->glsl_to_tgsi = NULL; - st_store_tgsi_in_disk_cache(st, >Base); + st_store_ir_in_disk_cache(st, >Base, false); } return stfp->tgsi.tokens != NULL; @@ -1411,7 +1411,7 @@ st_translate_program_common(struct st_context *st, outputMapping, _state->stream_output); - st_store_tgsi_in_disk_cache(st, prog); + st_store_ir_in_disk_cache(st, prog, false); if ((ST_DEBUG & DEBUG_TGSI) && (ST_DEBUG & DEBUG_MESA)) { _mesa_print_program(prog); diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c index 12d73965bf..8eccf7c921 100644 --- a/src/mesa/state_tracker/st_shader_cache.c +++ b/src/mesa/state_tracker/st_shader_cache.c @@ -26,6 +26,8 @@ #include "st_program.h" #include "st_shader_cache.h" #include "compiler/glsl/program.h" +#include "compiler/nir/nir.h" +#include "compiler/nir/nir_serialize.h" #include "pipe/p_shader_tokens.h" #include "program/ir_to_mesa.h" #include "util/u_memory.h" @@ -45,19 +47,32 @@ write_stream_out_to_cache(struct blob *blob, } static void +copy_blob_to_driver_cache_blob(struct blob *blob, struct gl_program *prog) +{ + prog->driver_cache_blob = ralloc_size(NULL, blob->size); + memcpy(prog->driver_cache_blob, blob->data, blob->size); + prog->driver_cache_blob_size = blob->size; +} + +static void write_tgsi_to_cache(struct blob *blob, const struct tgsi_token *tokens, struct gl_program *prog, unsigned num_tokens) { blob_write_uint32(blob, num_tokens); blob_write_bytes(blob, tokens, num_tokens * sizeof(struct tgsi_token)); + copy_blob_to_driver_cache_blob(blob, prog); +} - prog->driver_cache_blob = ralloc_size(NULL, blob->size); - memcpy(prog->driver_cache_blob, blob->data, blob->size); - prog->driver_cache_blob_size = blob->size; +static void +write_nir_to_cache(struct blob *blob, struct gl_program *prog) +{ + nir_serialize(blob, prog->nir); + copy_blob_to_driver_cache_blob(blob, prog); } -void -st_serialise_tgsi_program(struct gl_context *ctx, struct gl_program *prog) +static void +st_serialise_ir_program(struct gl_context *ctx, struct gl_program *prog, +bool nir) { struct blob blob; blob_init(); @@ -73,8 +88,12 @@ st_serialise_tgsi_program(struct gl_context *ctx, struct gl_program *prog) sizeof(stvp->result_to_output)); write_stream_out_to_cache(, >tgsi); - write_tgsi_to_cache(, stvp->tgsi.tokens, prog, - stvp->num_tgsi_tokens); + + if (nir) + write_nir_to_cache(, prog); + else + write_tgsi_to_cache(, stvp->tgsi.tokens, prog, + stvp->num_tgsi_tokens); break; } case MESA_SHADER_TESS_CTRL: @@ -83,22 +102,32 @@ st_serialise_tgsi_program(struct gl_context *ctx, struct gl_program *prog) struct st_common_program *stcp = (struct st_common_program *) prog; write_stream_out_to_cache(, >tgsi); - write_tgsi_to_cache(, stcp->tgsi.tokens, prog, -
Mesa (master): clover: use PIPE_SHADER_CAP_SUPPORTED_IRS to discover IR
Module: Mesa Branch: master Commit: 51f484bb44f2341d41dbce964d76549cd1a045cb URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=51f484bb44f2341d41dbce964d76549cd1a045cb Author: Timothy ArceriDate: Fri Feb 9 12:03:57 2018 +1100 clover: use PIPE_SHADER_CAP_SUPPORTED_IRS to discover IR PIPE_SHADER_CAP_PREFERRED_IR was conflicting with PIPE_SHADER_IR_NIR for compute shaders, so we let clover pick the one it wants to use. Reviewed-by: Marek Olšák --- src/gallium/state_trackers/clover/core/device.cpp | 11 +-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/clover/core/device.cpp b/src/gallium/state_trackers/clover/core/device.cpp index 9dd7eed3f1..71cf4bf60a 100644 --- a/src/gallium/state_trackers/clover/core/device.cpp +++ b/src/gallium/state_trackers/clover/core/device.cpp @@ -243,8 +243,15 @@ device::vendor_name() const { enum pipe_shader_ir device::ir_format() const { - return (enum pipe_shader_ir) pipe->get_shader_param( - pipe, PIPE_SHADER_COMPUTE, PIPE_SHADER_CAP_PREFERRED_IR); + int supported_irs = + pipe->get_shader_param(pipe, PIPE_SHADER_COMPUTE, + PIPE_SHADER_CAP_SUPPORTED_IRS); + + if (supported_irs & (1 << PIPE_SHADER_IR_NATIVE)) { + return PIPE_SHADER_IR_NATIVE; + } + + return PIPE_SHADER_IR_TGSI; } std::string ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeonsi: stop returning PIPE_SHADER_IR_NATIVE for PIPE_SHADER_CAP_PREFERRED_IR
Module: Mesa Branch: master Commit: b5e23887fe86478a63b3b602de32909a641f268f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5e23887fe86478a63b3b602de32909a641f268f Author: Timothy ArceriDate: Fri Feb 9 12:02:27 2018 +1100 radeonsi: stop returning PIPE_SHADER_IR_NATIVE for PIPE_SHADER_CAP_PREFERRED_IR Clover now checks PIPE_SHADER_CAP_SUPPORTED_IRS for native support instead. This change indirectly enables NIR support for compute shaders on radeonsi. Reviewed-by: Marek Olšák --- src/gallium/drivers/radeonsi/si_get.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c index 9a205c07f8..14d7ca5ba6 100644 --- a/src/gallium/drivers/radeonsi/si_get.c +++ b/src/gallium/drivers/radeonsi/si_get.c @@ -389,9 +389,6 @@ static int si_get_shader_param(struct pipe_screen* pscreen, break; case PIPE_SHADER_COMPUTE: switch (param) { - case PIPE_SHADER_CAP_PREFERRED_IR: - return PIPE_SHADER_IR_NATIVE; - case PIPE_SHADER_CAP_SUPPORTED_IRS: { int ir = 1 << PIPE_SHADER_IR_NATIVE; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: add PIPE_SHADER_IR_NATIVE to supported shaders for cs
Module: Mesa Branch: master Commit: 3af4f34e6113c3a8b4f62379127ab475de716056 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3af4f34e6113c3a8b4f62379127ab475de716056 Author: Timothy ArceriDate: Fri Feb 9 11:59:54 2018 +1100 r600: add PIPE_SHADER_IR_NATIVE to supported shaders for cs Acked-by: Pierre Moreau Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/r600_pipe.c | 10 +++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index cc35d86709..fd8edcc9fb 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -603,10 +603,14 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, } else { return PIPE_SHADER_IR_TGSI; } - case PIPE_SHADER_CAP_SUPPORTED_IRS: + case PIPE_SHADER_CAP_SUPPORTED_IRS: { + int ir = 0; + if (shader == PIPE_SHADER_COMPUTE) + ir = 1 << PIPE_SHADER_IR_NATIVE; if (rscreen->b.family >= CHIP_CEDAR) - return (1 << PIPE_SHADER_IR_TGSI); - return 0; + ir |= 1 << PIPE_SHADER_IR_TGSI; + return ir; + } case PIPE_SHADER_CAP_TGSI_FMA_SUPPORTED: if (rscreen->b.family == CHIP_ARUBA || rscreen->b.family == CHIP_CAYMAN || ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): r600: always return PIPE_SHADER_IR_TGSI for PIPE_SHADER_CAP_PREFERRED_IR
Module: Mesa Branch: master Commit: 73f1d6f0c1030d90bf022333def69b4324c0e4ae URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=73f1d6f0c1030d90bf022333def69b4324c0e4ae Author: Timothy ArceriDate: Fri Feb 9 12:01:04 2018 +1100 r600: always return PIPE_SHADER_IR_TGSI for PIPE_SHADER_CAP_PREFERRED_IR We now use PIPE_SHADER_CAP_SUPPORTED_IRS to check for native support in clover. Reviewed-by: Marek Olšák --- src/gallium/drivers/r600/r600_pipe.c | 6 +- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c index fd8edcc9fb..ecdbe5d9bf 100644 --- a/src/gallium/drivers/r600/r600_pipe.c +++ b/src/gallium/drivers/r600/r600_pipe.c @@ -598,11 +598,7 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, case PIPE_SHADER_CAP_MAX_SAMPLER_VIEWS: return 16; case PIPE_SHADER_CAP_PREFERRED_IR: - if (shader == PIPE_SHADER_COMPUTE) { - return PIPE_SHADER_IR_NATIVE; - } else { - return PIPE_SHADER_IR_TGSI; - } + return PIPE_SHADER_IR_TGSI; case PIPE_SHADER_CAP_SUPPORTED_IRS: { int ir = 0; if (shader == PIPE_SHADER_COMPUTE) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/glsl_to_tgsi: move nir detection earlier
Module: Mesa Branch: master Commit: 97efdc0d57b3b9b6af4a40715482a15f2b8c7d6e URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=97efdc0d57b3b9b6af4a40715482a15f2b8c7d6e Author: Timothy ArceriDate: Tue Jan 30 11:56:57 2018 +1100 st/glsl_to_tgsi: move nir detection earlier We move the nir check before the shader cache call so that we can call a nir based caching function in a following patch. Also with this change we simply check if vertex shaders support NIR rather than looping over the stages as mixing of shader types is not supported anyway. Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 15 +++ 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 1f87591893..34e495864a 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -6984,15 +6984,20 @@ extern "C" { GLboolean st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) { + struct pipe_screen *pscreen = ctx->st->pipe->screen; + + enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir) + pscreen->get_shader_param(pscreen, PIPE_SHADER_VERTEX, +PIPE_SHADER_CAP_PREFERRED_IR); + bool use_nir = preferred_ir == PIPE_SHADER_IR_NIR; + /* Return early if we are loading the shader from on-disk cache */ if (st_load_tgsi_from_disk_cache(ctx, prog)) { return GL_TRUE; } - struct pipe_screen *pscreen = ctx->st->pipe->screen; assert(prog->data->LinkStatus); - bool use_nir = false; for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) { if (prog->_LinkedShaders[i] == NULL) continue; @@ -7012,12 +7017,6 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) unsigned if_threshold = pscreen->get_shader_param(pscreen, ptarget, PIPE_SHADER_CAP_LOWER_IF_THRESHOLD); - enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir) - pscreen->get_shader_param(pscreen, ptarget, - PIPE_SHADER_CAP_PREFERRED_IR); - if (preferred_ir == PIPE_SHADER_IR_NIR) - use_nir = true; - /* If there are forms of indirect addressing that the driver * cannot handle, perform the lowering pass. */ ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ac: fix some 64bit unpack asserts
Module: Mesa Branch: master Commit: 1b1e5f8edfb16b8c8d5170bdd110f730352b6137 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b1e5f8edfb16b8c8d5170bdd110f730352b6137 Author: Timothy ArceriDate: Fri Feb 9 17:15:54 2018 +1100 ac: fix some 64bit unpack asserts Previously the asserts did not take swizzles into account. Reviewed-by: Samuel Pitoiset --- src/amd/common/ac_nir_to_llvm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 3691555208..396627bf1b 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -2042,7 +2042,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) break; case nir_op_unpack_64_2x32_split_x: { - assert(instr->src[0].src.ssa->num_components == 1); + assert(ac_get_llvm_num_components(src[0]) == 1); LLVMValueRef tmp = LLVMBuildBitCast(ctx->ac.builder, src[0], ctx->ac.v2i32, ""); @@ -2052,7 +2052,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) } case nir_op_unpack_64_2x32_split_y: { - assert(instr->src[0].src.ssa->num_components == 1); + assert(ac_get_llvm_num_components(src[0]) == 1); LLVMValueRef tmp = LLVMBuildBitCast(ctx->ac.builder, src[0], ctx->ac.v2i32, ""); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeonsi/nir: add FRAG_RESULT_COLOR to scan pass
Module: Mesa Branch: master Commit: 6a8efbe652c328c2367476069ff1435c358e6f78 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6a8efbe652c328c2367476069ff1435c358e6f78 Author: Timothy ArceriDate: Fri Feb 9 20:34:53 2018 +1100 radeonsi/nir: add FRAG_RESULT_COLOR to scan pass Fixes a number of draw buffers piglit tests. Reviewed-by: Samuel Pitoiset --- src/gallium/drivers/radeonsi/si_shader_nir.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index dd1de6c851..04d07381f5 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -517,6 +517,12 @@ void si_nir_scan_shader(const struct nir_shader *nir, info->reads_pervertex_outputs = true; } } + + unsigned loc = variable->data.location; + if (loc == FRAG_RESULT_COLOR && + nir->info.outputs_written & (1ull << loc)) { + info->properties[TGSI_PROPERTY_FS_COLOR0_WRITES_ALL_CBUFS] = true; + } } info->num_outputs = num_outputs; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): ac: convert nir_op_f2f32 src to a float
Module: Mesa Branch: master Commit: ef8082baf860cb19cbb8c6435e9144ff16b3429f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef8082baf860cb19cbb8c6435e9144ff16b3429f Author: Timothy ArceriDate: Fri Feb 9 17:17:31 2018 +1100 ac: convert nir_op_f2f32 src to a float Fixes the following piglit test: ./bin/arb_vertex_attrib_64bit-check-explicit-location -auto -fbo Where we would end up with the nir such as: vec1 64 ssa_11 = pack_64_2x32_split ssa_9, ssa_10 vec1 32 ssa_12 = f2f32 ssa_2 And our pack_64_2x32_split nir to llvm code always produces a 64bit integer as output. Reviewed-by: Samuel Pitoiset --- src/amd/common/ac_nir_to_llvm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 396627bf1b..cd12805496 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -1957,6 +1957,7 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) result = LLVMBuildFPExt(ctx->ac.builder, src[0], ac_to_float_type(>ac, def_type), ""); break; case nir_op_f2f32: + src[0] = ac_to_float(>ac, src[0]); result = LLVMBuildFPTrunc(ctx->ac.builder, src[0], ac_to_float_type(>ac, def_type), ""); break; case nir_op_u2u32: ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): radeonsi/nir: add depth layout to scan pass
Module: Mesa Branch: master Commit: ce836487b80e94fd91932c0a4bfadf1d61f74ded URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ce836487b80e94fd91932c0a4bfadf1d61f74ded Author: Timothy ArceriDate: Fri Feb 9 21:09:35 2018 +1100 radeonsi/nir: add depth layout to scan pass Reviewed-by: Samuel Pitoiset --- src/gallium/drivers/radeonsi/si_shader_nir.c | 19 +++ 1 file changed, 19 insertions(+) diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c index 04d07381f5..f467ce282a 100644 --- a/src/gallium/drivers/radeonsi/si_shader_nir.c +++ b/src/gallium/drivers/radeonsi/si_shader_nir.c @@ -279,6 +279,25 @@ void si_nir_scan_shader(const struct nir_shader *nir, if (nir->info.stage == MESA_SHADER_FRAGMENT) { info->properties[TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL] = nir->info.fs.early_fragment_tests; info->properties[TGSI_PROPERTY_FS_POST_DEPTH_COVERAGE] = nir->info.fs.post_depth_coverage; + + if (nir->info.fs.depth_layout != FRAG_DEPTH_LAYOUT_NONE) { + switch (nir->info.fs.depth_layout) { + case FRAG_DEPTH_LAYOUT_ANY: + info->properties[TGSI_PROPERTY_FS_DEPTH_LAYOUT] = TGSI_FS_DEPTH_LAYOUT_ANY; + break; + case FRAG_DEPTH_LAYOUT_GREATER: + info->properties[TGSI_PROPERTY_FS_DEPTH_LAYOUT] = TGSI_FS_DEPTH_LAYOUT_GREATER; + break; + case FRAG_DEPTH_LAYOUT_LESS: + info->properties[TGSI_PROPERTY_FS_DEPTH_LAYOUT] = TGSI_FS_DEPTH_LAYOUT_LESS; + break; + case FRAG_DEPTH_LAYOUT_UNCHANGED: + info->properties[TGSI_PROPERTY_FS_DEPTH_LAYOUT] = TGSI_FS_DEPTH_LAYOUT_UNCHANGED; + break; + default: + unreachable("Unknow depth layout"); + } + } } if (nir->info.stage == MESA_SHADER_COMPUTE) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): Revert "i965: prevent potentially null pointer access"
Module: Mesa Branch: master Commit: 9a05c66feb0c3c7877999827ce70765c656338f1 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a05c66feb0c3c7877999827ce70765c656338f1 Author: Mark JanesDate: Fri Feb 9 09:37:57 2018 -0800 Revert "i965: prevent potentially null pointer access" This reverts commit 712332ed54f14b5ee34c2990e351ca48992488b2, which caused over 90k failures in Mesa i965 CI. Reviewed-by: Dylan Baker --- src/mesa/drivers/dri/i965/intel_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 3f74ee78f3..1f866cf845 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -315,7 +315,7 @@ modifier_is_supported(const struct gen_device_info *devinfo, int i; /* ISL had better know about the modifier */ - if (!fmt || !modinfo) + if (!modinfo) return false; if (modinfo->aux_usage == ISL_AUX_USAGE_CCS_E) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Use proper enum type in visual definition
Module: Mesa Branch: master Commit: 66912641df480f53a0bac459fc7b6395d31c4eb3 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=66912641df480f53a0bac459fc7b6395d31c4eb3 Author: Daniel StoneDate: Tue Feb 6 09:33:56 2018 + egl/wayland: Use proper enum type in visual definition No semantic change. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index b74dfa2ba9..1384cddd6b 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -67,7 +67,7 @@ enum wl_drm_format_flags { static const struct { const char *format_name; - int has_format; + enum wl_drm_format_flags has_format; unsigned int rgba_masks[4]; } dri2_wl_visuals[] = { { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/gbm: Remove duplicate format table
Module: Mesa Branch: master Commit: 8174e5b49e96a98a585b13074d6f1a68e70629d7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=8174e5b49e96a98a585b13074d6f1a68e70629d7 Author: Daniel StoneDate: Tue Feb 6 17:44:37 2018 + egl/gbm: Remove duplicate format table Now that we have mask/channel information in gbm_dri's format conversion table, we can remove the copy in EGL. As this table contains more formats (notably including R8 and RG8, which can be used for BO but not surface allocation), we now compare the masks of all channels when trying to find a suitable config. Without doing this, an XRGB EGLConfig would match on an R8 format. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_drm.c | 35 +-- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 6e7403d9ab..94b5be026c 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -572,37 +572,36 @@ static EGLBoolean drm_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - static const struct { - int format; - unsigned int red_mask; - unsigned int alpha_mask; - } visuals[] = { - { GBM_FORMAT_XRGB2101010, 0x3ff0, 0x }, - { GBM_FORMAT_ARGB2101010, 0x3ff0, 0xc000 }, - { GBM_FORMAT_XRGB,0x00ff, 0x }, - { GBM_FORMAT_ARGB,0x00ff, 0xff00 }, - { GBM_FORMAT_RGB565, 0xf800, 0x }, - }; - - unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 }; + const struct gbm_dri_visual *visuals = dri2_dpy->gbm_dri->visual_table; + int num_visuals = dri2_dpy->gbm_dri->num_visuals; + unsigned int format_count[num_visuals]; unsigned int config_count = 0; + memset(format_count, 0, num_visuals * sizeof(unsigned int)); + for (unsigned i = 0; dri2_dpy->driver_configs[i]; i++) { - unsigned int red, alpha; + unsigned int red, green, blue, alpha; dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i], __DRI_ATTRIB_RED_MASK, ); dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i], + __DRI_ATTRIB_GREEN_MASK, ); + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i], + __DRI_ATTRIB_BLUE_MASK, ); + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i], __DRI_ATTRIB_ALPHA_MASK, ); - for (unsigned j = 0; j < ARRAY_SIZE(visuals); j++) { + for (unsigned j = 0; j < num_visuals; j++) { struct dri2_egl_config *dri2_conf; - if (visuals[j].red_mask != red || visuals[j].alpha_mask != alpha) + if (visuals[j].rgba_masks[0] != red || + visuals[j].rgba_masks[1] != green || + visuals[j].rgba_masks[2] != blue || +visuals[j].rgba_masks[3] != alpha) continue; const EGLint attr_list[] = { -EGL_NATIVE_VISUAL_ID, visuals[j].format, +EGL_NATIVE_VISUAL_ID, visuals[j].gbm_format, EGL_NONE, }; @@ -619,7 +618,7 @@ drm_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) { if (!format_count[i]) { _eglLog(_EGL_DEBUG, "No DRI config supports native format 0x%x", - visuals[i].format); + visuals[i].gbm_format); } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gbm/dri: Add RGBA masks to GBM format table
Module: Mesa Branch: master Commit: 2ed344645d65f379f8196596b1b77534e28c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ed344645d65f379f8196596b1b77534e28c Author: Daniel StoneDate: Tue Feb 6 17:38:37 2018 + gbm/dri: Add RGBA masks to GBM format table Eventually, we can replace the visuals list inside GBM EGL driver with this one. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/gbm/backends/dri/gbm_dri.c | 46 +- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index fd5fb4b91c..7e2423e935 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -546,16 +546,44 @@ dri_screen_create_sw(struct gbm_dri_device *dri) static const struct { uint32_t gbm_format; int dri_image_format; + uint32_t rgba_masks[4]; } gbm_to_dri_image_formats[] = { - { GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8 }, - { GBM_FORMAT_GR88,__DRI_IMAGE_FORMAT_GR88}, - { GBM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565 }, - { GBM_FORMAT_XRGB,__DRI_IMAGE_FORMAT_XRGB}, - { GBM_FORMAT_ARGB,__DRI_IMAGE_FORMAT_ARGB}, - { GBM_FORMAT_XBGR,__DRI_IMAGE_FORMAT_XBGR}, - { GBM_FORMAT_ABGR,__DRI_IMAGE_FORMAT_ABGR}, - { GBM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010 }, - { GBM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010 }, + { + GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8, + { 0x00ff, 0x, 0x, 0x }, + }, + { + GBM_FORMAT_GR88, __DRI_IMAGE_FORMAT_GR88, + { 0x00ff, 0xff00, 0x, 0x }, + }, + { + GBM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565, + { 0xf800, 0x07e0, 0x001f, 0x }, + }, + { + GBM_FORMAT_XRGB, __DRI_IMAGE_FORMAT_XRGB, + { 0x00ff, 0xff00, 0x00ff, 0x }, + }, + { + GBM_FORMAT_ARGB, __DRI_IMAGE_FORMAT_ARGB, + { 0x00ff, 0xff00, 0x00ff, 0x00ff }, + }, + { + GBM_FORMAT_XBGR, __DRI_IMAGE_FORMAT_XBGR, + { 0x00ff, 0xff00, 0x00ff, 0x }, + }, + { + GBM_FORMAT_ABGR, __DRI_IMAGE_FORMAT_ABGR, + { 0x00ff, 0xff00, 0x00ff, 0x00ff }, + }, + { + GBM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010, + { 0x3ff0, 0x000ffc00, 0x03ff, 0x }, + }, + { + GBM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010, + { 0x3ff0, 0x000ffc00, 0x03ff, 0xc000 }, + }, }; /* The two GBM_BO_FORMAT_[XA]RGB formats alias the GBM_FORMAT_* ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Use visual map for DRIImage<->FourCC map
Module: Mesa Branch: master Commit: 4de98a9c07b599939143255214858c7525e814c4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4de98a9c07b599939143255214858c7525e814c4 Author: Daniel StoneDate: Tue Feb 6 11:51:17 2018 + egl/wayland: Use visual map for DRIImage<->FourCC map When trying to translate between DRIImage format enums and FourCC codes, use our visual map rather than an open-coded subset. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 25 +++-- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 9118709ac2..6d6ce29c1d 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -432,10 +432,15 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display); int use_flags; + int visual_idx; unsigned int dri_image_format; uint64_t *modifiers; int num_modifiers; + visual_idx = dri2_wl_visual_idx_from_fourcc(dri2_surf->format); + assert(visual_idx != -1); + dri_image_format = dri2_wl_visuals[visual_idx].dri_image_format; + /* currently supports five WL DRM formats, * WL_DRM_FORMAT_ARGB2101010, WL_DRM_FORMAT_XRGB2101010, * WL_DRM_FORMAT_ARGB, WL_DRM_FORMAT_XRGB, @@ -443,27 +448,22 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) */ switch (dri2_surf->format) { case WL_DRM_FORMAT_ARGB2101010: - dri_image_format = __DRI_IMAGE_FORMAT_ARGB2101010; modifiers = u_vector_tail(_dpy->wl_modifiers.argb2101010); num_modifiers = u_vector_length(_dpy->wl_modifiers.argb2101010); break; case WL_DRM_FORMAT_XRGB2101010: - dri_image_format = __DRI_IMAGE_FORMAT_XRGB2101010; modifiers = u_vector_tail(_dpy->wl_modifiers.xrgb2101010); num_modifiers = u_vector_length(_dpy->wl_modifiers.xrgb2101010); break; case WL_DRM_FORMAT_ARGB: - dri_image_format = __DRI_IMAGE_FORMAT_ARGB; modifiers = u_vector_tail(_dpy->wl_modifiers.argb); num_modifiers = u_vector_length(_dpy->wl_modifiers.argb); break; case WL_DRM_FORMAT_XRGB: - dri_image_format = __DRI_IMAGE_FORMAT_XRGB; modifiers = u_vector_tail(_dpy->wl_modifiers.xrgb); num_modifiers = u_vector_length(_dpy->wl_modifiers.xrgb); break; case WL_DRM_FORMAT_RGB565: - dri_image_format = __DRI_IMAGE_FORMAT_RGB565; modifiers = u_vector_tail(_dpy->wl_modifiers.rgb565); num_modifiers = u_vector_length(_dpy->wl_modifiers.rgb565); break; @@ -786,6 +786,7 @@ get_fourcc(struct dri2_egl_display *dri2_dpy, { EGLBoolean query; int dri_format; + int visual_idx; query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC, fourcc); @@ -797,16 +798,12 @@ get_fourcc(struct dri2_egl_display *dri2_dpy, if (!query) return false; - switch (dri_format) { - case __DRI_IMAGE_FORMAT_ARGB: - *fourcc = __DRI_IMAGE_FOURCC_ARGB; - return true; - case __DRI_IMAGE_FORMAT_XRGB: - *fourcc = __DRI_IMAGE_FOURCC_XRGB; - return true; - default: + visual_idx = dri2_wl_visual_idx_from_dri_image_format(dri_format); + if (visual_idx == -1) return false; - } + + *fourcc = dri2_wl_visuals[visual_idx].wl_drm_format; + return true; } static struct wl_buffer * ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Use an array for modifiers
Module: Mesa Branch: master Commit: 4732094cff302a10c167e0cb23851c19fccddbe0 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4732094cff302a10c167e0cb23851c19fccddbe0 Author: Daniel StoneDate: Tue Feb 6 10:29:13 2018 + egl/wayland: Use an array for modifiers Each Wayland EGLDisplay currently contains a struct with one vector of modifiers per format, hardcoded in the header. To allow easier support for more formats, turn this into an array of u_vectors which is opaque outside of platform_wayland.c. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/egl_dri2.h | 8 +--- src/egl/drivers/dri2/platform_wayland.c | 84 - 2 files changed, 20 insertions(+), 72 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index c49156fbb6..0f4e7a8d1e 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -212,13 +212,7 @@ struct dri2_egl_display struct wl_shm*wl_shm; struct wl_event_queue*wl_queue; struct zwp_linux_dmabuf_v1 *wl_dmabuf; - struct { - struct u_vectorxrgb2101010; - struct u_vectorargb2101010; - struct u_vectorxrgb; - struct u_vectorargb; - struct u_vectorrgb565; - } wl_modifiers; + struct u_vector *wl_modifiers; bool authenticated; int formats; uint32_t capabilities; diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index d214a8515d..f91baded87 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -436,37 +436,8 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) visual_idx = dri2_wl_visual_idx_from_fourcc(dri2_surf->format); assert(visual_idx != -1); dri_image_format = dri2_wl_visuals[visual_idx].dri_image_format; - - /* currently supports five WL DRM formats, -* WL_DRM_FORMAT_ARGB2101010, WL_DRM_FORMAT_XRGB2101010, -* WL_DRM_FORMAT_ARGB, WL_DRM_FORMAT_XRGB, -* and WL_DRM_FORMAT_RGB565 -*/ - switch (dri2_surf->format) { - case WL_DRM_FORMAT_ARGB2101010: - modifiers = u_vector_tail(_dpy->wl_modifiers.argb2101010); - num_modifiers = u_vector_length(_dpy->wl_modifiers.argb2101010); - break; - case WL_DRM_FORMAT_XRGB2101010: - modifiers = u_vector_tail(_dpy->wl_modifiers.xrgb2101010); - num_modifiers = u_vector_length(_dpy->wl_modifiers.xrgb2101010); - break; - case WL_DRM_FORMAT_ARGB: - modifiers = u_vector_tail(_dpy->wl_modifiers.argb); - num_modifiers = u_vector_length(_dpy->wl_modifiers.argb); - break; - case WL_DRM_FORMAT_XRGB: - modifiers = u_vector_tail(_dpy->wl_modifiers.xrgb); - num_modifiers = u_vector_length(_dpy->wl_modifiers.xrgb); - break; - case WL_DRM_FORMAT_RGB565: - modifiers = u_vector_tail(_dpy->wl_modifiers.rgb565); - num_modifiers = u_vector_length(_dpy->wl_modifiers.rgb565); - break; - default: - /* format is not supported */ - return -1; - } + modifiers = u_vector_tail(_dpy->wl_modifiers[visual_idx]); + num_modifiers = u_vector_length(_dpy->wl_modifiers[visual_idx]); /* There might be a buffer release already queued that wasn't processed */ wl_display_dispatch_queue_pending(dri2_dpy->wl_dpy, dri2_surf->wl_queue); @@ -1187,36 +1158,18 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, { struct dri2_egl_display *dri2_dpy = data; int visual_idx = dri2_wl_visual_idx_from_fourcc(format); - uint64_t *mod = NULL; + uint64_t *mod; - if (modifier_hi == (DRM_FORMAT_MOD_INVALID >> 32) && - modifier_lo == (DRM_FORMAT_MOD_INVALID & 0x)) + if (visual_idx == -1) return; - switch (format) { - case WL_DRM_FORMAT_ARGB2101010: - mod = u_vector_add(_dpy->wl_modifiers.argb2101010); - break; - case WL_DRM_FORMAT_XRGB2101010: - mod = u_vector_add(_dpy->wl_modifiers.xrgb2101010); - break; - case WL_DRM_FORMAT_ARGB: - mod = u_vector_add(_dpy->wl_modifiers.argb); - break; - case WL_DRM_FORMAT_XRGB: - mod = u_vector_add(_dpy->wl_modifiers.xrgb); - break; - case WL_DRM_FORMAT_RGB565: - mod = u_vector_add(_dpy->wl_modifiers.rgb565); - break; - default: - break; - } - - if (!mod) + if (modifier_hi == (DRM_FORMAT_MOD_INVALID >> 32) && + modifier_lo == (DRM_FORMAT_MOD_INVALID & 0x)) return; dri2_dpy->formats |= (1 << visual_idx); + + mod = u_vector_add(_dpy->wl_modifiers[visual_idx]); *mod = (uint64_t) modifier_hi << 32; *mod |= (uint64_t) (modifier_lo & 0x); } @@ -1358,12 +1311,13 @@
Mesa (master): egl/wayland: Remove has_format enum
Module: Mesa Branch: master Commit: 5bc49d4cbf8c7c5d465dc994d0a0d2111f742705 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5bc49d4cbf8c7c5d465dc994d0a0d2111f742705 Author: Daniel StoneDate: Tue Feb 6 11:14:32 2018 + egl/wayland: Remove has_format enum Instead of the has_format enum, use an index into the visual array. This makes adding new formats less typing. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 33 ++--- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index c64e2e7a12..d214a8515d 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -57,17 +57,12 @@ #define DRM_FORMAT_MOD_LINEAR 0 #endif -enum wl_drm_format_flags { - HAS_ARGB = 1, - HAS_XRGB = 2, - HAS_RGB565 = 4, - HAS_ARGB2101010 = 8, - HAS_XRGB2101010 = 16, -}; - +/* + * The index of entries in this table is used as a bitmask in + * dri2_dpy->formats, which tracks the formats supported by our server. + */ static const struct dri2_wl_visual { const char *format_name; - enum wl_drm_format_flags has_format; uint32_t wl_drm_format; uint32_t wl_shm_format; int dri_image_format; @@ -75,31 +70,31 @@ static const struct dri2_wl_visual { unsigned int rgba_masks[4]; } dri2_wl_visuals[] = { { - "XRGB2101010", HAS_XRGB2101010, + "XRGB2101010", WL_DRM_FORMAT_XRGB2101010, WL_SHM_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XRGB2101010, 32, { 0x3ff0, 0x000ffc00, 0x03ff, 0x } }, { - "ARGB2101010", HAS_ARGB2101010, + "ARGB2101010", WL_DRM_FORMAT_ARGB2101010, WL_SHM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010, 32, { 0x3ff0, 0x000ffc00, 0x03ff, 0xc000 } }, { - "XRGB", HAS_XRGB, + "XRGB", WL_DRM_FORMAT_XRGB, WL_SHM_FORMAT_XRGB, __DRI_IMAGE_FORMAT_XRGB, 32, { 0x00ff, 0xff00, 0x00ff, 0x } }, { - "ARGB", HAS_ARGB, + "ARGB", WL_DRM_FORMAT_ARGB, WL_SHM_FORMAT_ARGB, __DRI_IMAGE_FORMAT_ARGB, 32, { 0x00ff, 0xff00, 0x00ff, 0xff00 } }, { - "RGB565", HAS_RGB565, + "RGB565", WL_DRM_FORMAT_RGB565, WL_SHM_FORMAT_RGB565, __DRI_IMAGE_FORMAT_RGB565, 16, { 0xf800, 0x07e0, 0x001f, 0x } @@ -1071,7 +1066,7 @@ dri2_wl_create_wayland_buffer_from_image(_EGLDriver *drv, if (visual_idx == -1) goto bad_format; - if (!(dri2_dpy->formats & dri2_wl_visuals[visual_idx].has_format)) + if (!(dri2_dpy->formats & (1 << visual_idx))) goto bad_format; buffer = create_wl_buffer(dri2_dpy, NULL, image); @@ -1152,7 +1147,7 @@ drm_handle_format(void *data, struct wl_drm *drm, uint32_t format) if (visual_idx == -1) return; - dri2_dpy->formats |= dri2_wl_visuals[visual_idx].has_format; + dri2_dpy->formats |= (1 << visual_idx); } static void @@ -1221,7 +1216,7 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, if (!mod) return; - dri2_dpy->formats |= dri2_wl_visuals[visual_idx].has_format; + dri2_dpy->formats |= (1 << visual_idx); *mod = (uint64_t) modifier_hi << 32; *mod |= (uint64_t) (modifier_lo & 0x); } @@ -1318,7 +1313,7 @@ dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) for (unsigned j = 0; j < ARRAY_SIZE(dri2_wl_visuals); j++) { struct dri2_egl_config *dri2_conf; - if (!(dri2_dpy->formats & dri2_wl_visuals[j].has_format)) + if (!(dri2_dpy->formats & (1 << j))) continue; dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i], @@ -1933,7 +1928,7 @@ shm_handle_format(void *data, struct wl_shm *shm, uint32_t format) if (visual_idx == -1) return; - dri2_dpy->formats |= dri2_wl_visuals[visual_idx].has_format; + dri2_dpy->formats |= (1 << visual_idx); } static const struct wl_shm_listener shm_listener = { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Hoist format <-> EGLConfig definition up
Module: Mesa Branch: master Commit: 19cbca38e45b609f21fb14d75b3bffbd6c6426d6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=19cbca38e45b609f21fb14d75b3bffbd6c6426d6 Author: Daniel StoneDate: Tue Feb 6 09:32:22 2018 + egl/wayland: Hoist format <-> EGLConfig definition up Pull the mapping between Wayland formats and EGLConfigs up to the top level, so we can reuse it elsewhere. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 33 + 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 75bb1c508c..e1d5af4e3f 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -65,6 +65,18 @@ enum wl_drm_format_flags { HAS_XRGB2101010 = 16, }; +static const struct { + const char *format_name; + int has_format; + unsigned int rgba_masks[4]; +} dri2_wl_visuals[] = { + { "XRGB2101010", HAS_XRGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0 } }, + { "ARGB2101010", HAS_ARGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0xc000 } }, + { "XRGB", HAS_XRGB, { 0xff, 0xff00, 0x00ff, 0 } }, + { "ARGB", HAS_ARGB, { 0xff, 0xff00, 0x00ff, 0xff00 } }, + { "RGB565", HAS_RGB565, { 0x00f800, 0x07e0, 0x001f, 0 } }, +}; + static int roundtrip(struct dri2_egl_display *dri2_dpy) { @@ -1267,29 +1279,18 @@ static EGLBoolean dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); - static const struct { - const char *format_name; - int has_format; - unsigned int rgba_masks[4]; - } visuals[] = { - { "XRGB2101010", HAS_XRGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0 } }, - { "ARGB2101010", HAS_ARGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0xc000 } }, - { "XRGB", HAS_XRGB, { 0xff, 0xff00, 0x00ff, 0 } }, - { "ARGB", HAS_ARGB, { 0xff, 0xff00, 0x00ff, 0xff00 } }, - { "RGB565", HAS_RGB565, { 0x00f800, 0x07e0, 0x001f, 0 } }, - }; - unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 }; + unsigned int format_count[ARRAY_SIZE(dri2_wl_visuals)] = { 0 }; unsigned int count = 0; for (unsigned i = 0; dri2_dpy->driver_configs[i]; i++) { - for (unsigned j = 0; j < ARRAY_SIZE(visuals); j++) { + for (unsigned j = 0; j < ARRAY_SIZE(dri2_wl_visuals); j++) { struct dri2_egl_config *dri2_conf; - if (!(dri2_dpy->formats & visuals[j].has_format)) + if (!(dri2_dpy->formats & dri2_wl_visuals[j].has_format)) continue; dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i], - count + 1, EGL_WINDOW_BIT, NULL, visuals[j].rgba_masks); + count + 1, EGL_WINDOW_BIT, NULL, dri2_wl_visuals[j].rgba_masks); if (dri2_conf) { if (dri2_conf->base.ConfigID == count + 1) count++; @@ -1301,7 +1302,7 @@ dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) for (unsigned i = 0; i < ARRAY_SIZE(format_count); i++) { if (!format_count[i]) { _eglLog(_EGL_DEBUG, "No DRI config supports native format %s", - visuals[i].format_name); + dri2_wl_visuals[i].format_name); } } ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): gbm/dri: Expose visuals table through gbm_dri_device
Module: Mesa Branch: master Commit: 314714ac5311c39785d16c0f03484dbaf482c52b URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=314714ac5311c39785d16c0f03484dbaf482c52b Author: Daniel StoneDate: Tue Feb 6 17:42:03 2018 + gbm/dri: Expose visuals table through gbm_dri_device Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/gbm/backends/dri/gbm_dri.c| 21 ++--- src/gbm/backends/dri/gbm_driint.h | 9 + 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 7e2423e935..0d088bd62b 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -543,11 +543,7 @@ dri_screen_create_sw(struct gbm_dri_device *dri) return dri_screen_create_swrast(dri); } -static const struct { - uint32_t gbm_format; - int dri_image_format; - uint32_t rgba_masks[4]; -} gbm_to_dri_image_formats[] = { +static const struct gbm_dri_visual gbm_dri_visuals_table[] = { { GBM_FORMAT_R8, __DRI_IMAGE_FORMAT_R8, { 0x00ff, 0x, 0x, 0x }, @@ -608,9 +604,9 @@ gbm_format_to_dri_format(uint32_t gbm_format) int i; gbm_format = gbm_format_canonicalize(gbm_format); - for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) { - if (gbm_to_dri_image_formats[i].gbm_format == gbm_format) - return gbm_to_dri_image_formats[i].dri_image_format; + for (i = 0; i < ARRAY_SIZE(gbm_dri_visuals_table); i++) { + if (gbm_dri_visuals_table[i].gbm_format == gbm_format) + return gbm_dri_visuals_table[i].dri_image_format; } return 0; @@ -621,9 +617,9 @@ gbm_dri_to_gbm_format(int dri_format) { int i; - for (i = 0; i < ARRAY_SIZE(gbm_to_dri_image_formats); i++) { - if (gbm_to_dri_image_formats[i].dri_image_format == dri_format) - return gbm_to_dri_image_formats[i].gbm_format; + for (i = 0; i < ARRAY_SIZE(gbm_dri_visuals_table); i++) { + if (gbm_dri_visuals_table[i].dri_image_format == dri_format) + return gbm_dri_visuals_table[i].gbm_format; } return 0; @@ -1418,6 +1414,9 @@ dri_device_create(int fd) dri->base.name = "drm"; + dri->visual_table = gbm_dri_visuals_table; + dri->num_visuals = ARRAY_SIZE(gbm_dri_visuals_table); + mtx_init(>mutex, mtx_plain); force_sw = env_var_as_boolean("GBM_ALWAYS_SOFTWARE", false); diff --git a/src/gbm/backends/dri/gbm_driint.h b/src/gbm/backends/dri/gbm_driint.h index db9038a623..84a98533c7 100644 --- a/src/gbm/backends/dri/gbm_driint.h +++ b/src/gbm/backends/dri/gbm_driint.h @@ -40,6 +40,12 @@ struct gbm_dri_surface; struct gbm_dri_bo; +struct gbm_dri_visual { + uint32_t gbm_format; + int dri_image_format; + uint32_t rgba_masks[4]; +}; + struct gbm_dri_device { struct gbm_device base; @@ -97,6 +103,9 @@ struct gbm_dri_device { void *loaderPrivate); struct wl_drm *wl_drm; + + const struct gbm_dri_visual *visual_table; + int num_visuals; }; struct gbm_dri_bo { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Widen channel masks to bpp
Module: Mesa Branch: master Commit: 845c2f61563f17193cfdec263f2b72ede20af3c7 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=845c2f61563f17193cfdec263f2b72ede20af3c7 Author: Daniel StoneDate: Tue Feb 6 18:06:52 2018 + egl/wayland: Widen channel masks to bpp Widen the channel masks given in the visual table to the full width of the pixel format, i.e. as many leading zeros as required. No functional change. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 25 - 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index e1d5af4e3f..b74dfa2ba9 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -70,11 +70,26 @@ static const struct { int has_format; unsigned int rgba_masks[4]; } dri2_wl_visuals[] = { - { "XRGB2101010", HAS_XRGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0 } }, - { "ARGB2101010", HAS_ARGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0xc000 } }, - { "XRGB", HAS_XRGB, { 0xff, 0xff00, 0x00ff, 0 } }, - { "ARGB", HAS_ARGB, { 0xff, 0xff00, 0x00ff, 0xff00 } }, - { "RGB565", HAS_RGB565, { 0x00f800, 0x07e0, 0x001f, 0 } }, + { + "XRGB2101010", HAS_XRGB2101010, + { 0x3ff0, 0x000ffc00, 0x03ff, 0x } + }, + { + "ARGB2101010", HAS_ARGB2101010, + { 0x3ff0, 0x000ffc00, 0x03ff, 0xc000 } + }, + { + "XRGB", HAS_XRGB, + { 0x00ff, 0xff00, 0x00ff, 0x } + }, + { + "ARGB", HAS_ARGB, + { 0x00ff, 0xff00, 0x00ff, 0xff00 } + }, + { + "RGB565", HAS_RGB565, + { 0xf800, 0x07e0, 0x001f, 0x } + }, }; static int ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Add bpp to visual map
Module: Mesa Branch: master Commit: d32b23f3830099a328b912957de881cf30a0ee7a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d32b23f3830099a328b912957de881cf30a0ee7a Author: Daniel StoneDate: Tue Feb 6 11:58:45 2018 + egl/wayland: Add bpp to visual map Both the DRI2 GetBuffersWithFormat interface, and SHM buffer allocation, had their own format -> bpp lookup tables. Replace these with a lookup into the visual map. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 36 +++-- 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 6d6ce29c1d..c64e2e7a12 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -71,36 +71,37 @@ static const struct dri2_wl_visual { uint32_t wl_drm_format; uint32_t wl_shm_format; int dri_image_format; + int bpp; unsigned int rgba_masks[4]; } dri2_wl_visuals[] = { { "XRGB2101010", HAS_XRGB2101010, WL_DRM_FORMAT_XRGB2101010, WL_SHM_FORMAT_XRGB2101010, - __DRI_IMAGE_FORMAT_XRGB2101010, + __DRI_IMAGE_FORMAT_XRGB2101010, 32, { 0x3ff0, 0x000ffc00, 0x03ff, 0x } }, { "ARGB2101010", HAS_ARGB2101010, WL_DRM_FORMAT_ARGB2101010, WL_SHM_FORMAT_ARGB2101010, - __DRI_IMAGE_FORMAT_ARGB2101010, + __DRI_IMAGE_FORMAT_ARGB2101010, 32, { 0x3ff0, 0x000ffc00, 0x03ff, 0xc000 } }, { "XRGB", HAS_XRGB, WL_DRM_FORMAT_XRGB, WL_SHM_FORMAT_XRGB, - __DRI_IMAGE_FORMAT_XRGB, + __DRI_IMAGE_FORMAT_XRGB, 32, { 0x00ff, 0xff00, 0x00ff, 0x } }, { "ARGB", HAS_ARGB, WL_DRM_FORMAT_ARGB, WL_SHM_FORMAT_ARGB, - __DRI_IMAGE_FORMAT_ARGB, + __DRI_IMAGE_FORMAT_ARGB, 32, { 0x00ff, 0xff00, 0x00ff, 0xff00 } }, { "RGB565", HAS_RGB565, WL_DRM_FORMAT_RGB565, WL_SHM_FORMAT_RGB565, - __DRI_IMAGE_FORMAT_RGB565, + __DRI_IMAGE_FORMAT_RGB565, 16, { 0xf800, 0x07e0, 0x001f, 0x } }, }; @@ -685,22 +686,10 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable, struct dri2_egl_surface *dri2_surf = loaderPrivate; unsigned int *attachments_with_format; __DRIbuffer *buffer; - unsigned int bpp; + int visual_idx = dri2_wl_visual_idx_from_fourcc(dri2_surf->format); - switch (dri2_surf->format) { - case WL_DRM_FORMAT_ARGB2101010: - case WL_DRM_FORMAT_XRGB2101010: - case WL_DRM_FORMAT_ARGB: - case WL_DRM_FORMAT_XRGB: - bpp = 32; - break; - case WL_DRM_FORMAT_RGB565: - bpp = 16; - break; - default: - /* format is not supported */ + if (visual_idx == -1) return NULL; - } attachments_with_format = calloc(count, 2 * sizeof(unsigned int)); if (!attachments_with_format) { @@ -710,7 +699,7 @@ dri2_wl_get_buffers(__DRIdrawable * driDrawable, for (int i = 0; i < count; ++i) { attachments_with_format[2*i] = attachments[i]; - attachments_with_format[2*i + 1] = bpp; + attachments_with_format[2*i + 1] = dri2_wl_visuals[visual_idx].bpp; } buffer = @@ -1515,10 +1504,9 @@ dri2_initialize_wayland_drm(_EGLDriver *drv, _EGLDisplay *disp) static int dri2_wl_swrast_get_stride_for_format(int format, int w) { - if (format == WL_SHM_FORMAT_RGB565) - return 2 * w; - else /* ARGB || XRGB || ARGB2101010 || XRGB2101010 */ - return 4 * w; + int visual_idx = dri2_wl_visual_idx_from_shm_format(format); + + return w * (dri2_wl_visuals[visual_idx].bpp / 8); } /* ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Use visual map for format advertisement
Module: Mesa Branch: master Commit: 68a80c11bd3b362d7782ded9c8c12ba0e9ecc933 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=68a80c11bd3b362d7782ded9c8c12ba0e9ecc933 Author: Daniel StoneDate: Tue Feb 6 10:20:39 2018 + egl/wayland: Use visual map for format advertisement Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 75 - 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 28eba98092..9118709ac2 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -131,6 +131,19 @@ dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy, } static int +dri2_wl_visual_idx_from_fourcc(uint32_t fourcc) +{ + for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { + /* wl_drm format codes overlap with DRIImage FourCC codes for all formats + * we support. */ + if (dri2_wl_visuals[i].wl_drm_format == fourcc) + return i; + } + + return -1; +} + +static int dri2_wl_visual_idx_from_dri_image_format(uint32_t dri_image_format) { for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { @@ -142,6 +155,17 @@ dri2_wl_visual_idx_from_dri_image_format(uint32_t dri_image_format) } static int +dri2_wl_visual_idx_from_shm_format(uint32_t shm_format) +{ + for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { + if (dri2_wl_visuals[i].wl_shm_format == shm_format) + return i; + } + + return -1; +} + +static int roundtrip(struct dri2_egl_display *dri2_dpy) { return wl_display_roundtrip_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue); @@ -1137,24 +1161,12 @@ static void drm_handle_format(void *data, struct wl_drm *drm, uint32_t format) { struct dri2_egl_display *dri2_dpy = data; + int visual_idx = dri2_wl_visual_idx_from_fourcc(format); - switch (format) { - case WL_DRM_FORMAT_ARGB2101010: - dri2_dpy->formats |= HAS_ARGB2101010; - break; - case WL_DRM_FORMAT_XRGB2101010: - dri2_dpy->formats |= HAS_XRGB2101010; - break; - case WL_DRM_FORMAT_ARGB: - dri2_dpy->formats |= HAS_ARGB; - break; - case WL_DRM_FORMAT_XRGB: - dri2_dpy->formats |= HAS_XRGB; - break; - case WL_DRM_FORMAT_RGB565: - dri2_dpy->formats |= HAS_RGB565; - break; - } + if (visual_idx == -1) + return; + + dri2_dpy->formats |= dri2_wl_visuals[visual_idx].has_format; } static void @@ -1193,6 +1205,7 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, uint32_t modifier_lo) { struct dri2_egl_display *dri2_dpy = data; + int visual_idx = dri2_wl_visual_idx_from_fourcc(format); uint64_t *mod = NULL; if (modifier_hi == (DRM_FORMAT_MOD_INVALID >> 32) && @@ -1202,23 +1215,18 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, switch (format) { case WL_DRM_FORMAT_ARGB2101010: mod = u_vector_add(_dpy->wl_modifiers.argb2101010); - dri2_dpy->formats |= HAS_ARGB2101010; break; case WL_DRM_FORMAT_XRGB2101010: mod = u_vector_add(_dpy->wl_modifiers.xrgb2101010); - dri2_dpy->formats |= HAS_XRGB2101010; break; case WL_DRM_FORMAT_ARGB: mod = u_vector_add(_dpy->wl_modifiers.argb); - dri2_dpy->formats |= HAS_ARGB; break; case WL_DRM_FORMAT_XRGB: mod = u_vector_add(_dpy->wl_modifiers.xrgb); - dri2_dpy->formats |= HAS_XRGB; break; case WL_DRM_FORMAT_RGB565: mod = u_vector_add(_dpy->wl_modifiers.rgb565); - dri2_dpy->formats |= HAS_RGB565; break; default: break; @@ -1227,6 +1235,7 @@ dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, if (!mod) return; + dri2_dpy->formats |= dri2_wl_visuals[visual_idx].has_format; *mod = (uint64_t) modifier_hi << 32; *mod |= (uint64_t) (modifier_lo & 0x); } @@ -1934,24 +1943,12 @@ static void shm_handle_format(void *data, struct wl_shm *shm, uint32_t format) { struct dri2_egl_display *dri2_dpy = data; + int visual_idx = dri2_wl_visual_idx_from_shm_format(format); - switch (format) { - case WL_SHM_FORMAT_ARGB2101010: - dri2_dpy->formats |= HAS_ARGB2101010; - break; - case WL_SHM_FORMAT_XRGB2101010: - dri2_dpy->formats |= HAS_XRGB2101010; - break; - case WL_SHM_FORMAT_ARGB: - dri2_dpy->formats |= HAS_ARGB; - break; - case WL_SHM_FORMAT_XRGB: - dri2_dpy->formats |= HAS_XRGB; - break; - case WL_SHM_FORMAT_RGB565: - dri2_dpy->formats |= HAS_RGB565; - break; - } + if (visual_idx == -1) + return; + + dri2_dpy->formats |=
Mesa (master): egl/wayland: Use visual map for config->format lookup
Module: Mesa Branch: master Commit: a9cc4edb6077e9ccda5792c240358ba01df62aed URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9cc4edb6077e9ccda5792c240358ba01df62aed Author: Daniel StoneDate: Tue Feb 6 10:07:23 2018 + egl/wayland: Use visual map for config->format lookup Having hoisted the format -> config map into common code, we now use it for config -> format lookups. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 61 +++-- 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index b72b5f8b88..91434dbba0 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -65,7 +65,7 @@ enum wl_drm_format_flags { HAS_XRGB2101010 = 16, }; -static const struct { +static const struct dri2_wl_visual { const char *format_name; enum wl_drm_format_flags has_format; uint32_t wl_drm_format; @@ -106,6 +106,31 @@ static const struct { }; static int +dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy, + const __DRIconfig *config) +{ + unsigned int red, green, blue, alpha; + + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_RED_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_GREEN_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_BLUE_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_ALPHA_MASK, ); + + for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { + const struct dri2_wl_visual *wl_visual = _wl_visuals[i]; + + if (red == wl_visual->rgba_masks[0] && + green == wl_visual->rgba_masks[1] && + blue == wl_visual->rgba_masks[2] && + alpha == wl_visual->rgba_masks[3]) { + return i; + } + } + + return -1; +} + +static int roundtrip(struct dri2_egl_display *dri2_dpy) { return wl_display_roundtrip_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue); @@ -176,6 +201,7 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, struct dri2_egl_config *dri2_conf = dri2_egl_config(conf); struct wl_egl_window *window = native_window; struct dri2_egl_surface *dri2_surf; + int visual_idx; const __DRIconfig *config; dri2_surf = calloc(1, sizeof *dri2_surf); @@ -184,32 +210,20 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, return NULL; } - if (!dri2_init_surface(_surf->base, disp, EGL_WINDOW_BIT, conf, attrib_list, false)) + if (!dri2_init_surface(_surf->base, disp, EGL_WINDOW_BIT, conf, + attrib_list, false)) goto cleanup_surf; + config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, +dri2_surf->base.GLColorspace); + visual_idx = dri2_wl_visual_idx_from_config(dri2_dpy, config); + assert(visual_idx != -1); + if (dri2_dpy->wl_dmabuf || dri2_dpy->wl_drm) { - if (conf->RedSize == 5) - dri2_surf->format = WL_DRM_FORMAT_RGB565; - else if (conf->RedSize == 8 && conf->AlphaSize == 0) - dri2_surf->format = WL_DRM_FORMAT_XRGB; - else if (conf->RedSize == 8) - dri2_surf->format = WL_DRM_FORMAT_ARGB; - else if (conf->RedSize == 10 && conf->AlphaSize == 0) - dri2_surf->format = WL_DRM_FORMAT_XRGB2101010; - else if (conf->RedSize == 10) - dri2_surf->format = WL_DRM_FORMAT_ARGB2101010; + dri2_surf->format = dri2_wl_visuals[visual_idx].wl_drm_format; } else { assert(dri2_dpy->wl_shm); - if (conf->RedSize == 5) - dri2_surf->format = WL_SHM_FORMAT_RGB565; - else if (conf->RedSize == 8 && conf->AlphaSize == 0) - dri2_surf->format = WL_SHM_FORMAT_XRGB; - else if (conf->RedSize == 8) - dri2_surf->format = WL_SHM_FORMAT_ARGB; - else if (conf->RedSize == 10 && conf->AlphaSize == 0) - dri2_surf->format = WL_SHM_FORMAT_XRGB2101010; - else if (conf->RedSize == 10) - dri2_surf->format = WL_SHM_FORMAT_ARGB2101010; + dri2_surf->format = dri2_wl_visuals[visual_idx].wl_shm_format; } dri2_surf->wl_queue = wl_display_create_queue(dri2_dpy->wl_dpy); @@ -250,9 +264,6 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, if (dri2_dpy->flush) dri2_surf->wl_win->resize_callback = resize_callback; - config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, -dri2_surf->base.GLColorspace); - if (dri2_dpy->image_driver) createNewDrawable = dri2_dpy->image_driver->createNewDrawable; else if (dri2_dpy->dri2) ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org
Mesa (master): egl/gbm: Ensure EGLConfigs match GBM surface format
Module: Mesa Branch: master Commit: 37a8d907cc167279f44e2e15f980cd93869a51f9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=37a8d907cc167279f44e2e15f980cd93869a51f9 Author: Daniel StoneDate: Tue Feb 6 17:59:05 2018 + egl/gbm: Ensure EGLConfigs match GBM surface format When we create an EGL window surface on a GBM surface, ensure that the EGLConfig is compatible with the GBM format, notwithstanding XRGB/ARGB interchange. For example, rendering with an XRGB EGLConfig on to an ARGB gbm_surface (and vice-versa) are acceptable, but rendering with an XRGB2101010 EGLConfig on to an XRGB gbm_surface will now be rejected. This was previously allowed through; when 10bpc formats were enabled, clients which picked a completely random EGL config and hoped/assumed they were XRGB would break. If you have bisected a failure to start a GBM/KMS client to this commit, please look at its EGLConfig selection (e.g. through eglChooseConfigs), and add an EGL_NATIVE_VISUAL_ID == gbm_surface format match to the attribs for config selection. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_drm.c | 52 ++--- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 94b5be026c..3eabd678e9 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -90,6 +90,44 @@ has_free_buffers(struct gbm_surface *_surf) return 0; } +static bool +dri2_drm_config_is_compatible(struct dri2_egl_display *dri2_dpy, + const __DRIconfig *config, + struct gbm_surface *surface) +{ + const struct gbm_dri_visual *visual; + unsigned int red, green, blue, alpha; + int i; + + /* Check that the EGLConfig being used to render to the surface is +* compatible with the surface format. Since mixing ARGB and XRGB of +* otherwise-compatible formats is relatively common, explicitly allow +* this. +*/ + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_RED_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_GREEN_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_BLUE_MASK, ); + dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_ALPHA_MASK, ); + + for (i = 0; i < dri2_dpy->gbm_dri->num_visuals; i++) { + visual = _dpy->gbm_dri->visual_table[i]; + if (visual->gbm_format == surface->format) + break; + } + + if (i == dri2_dpy->gbm_dri->num_visuals) + return false; + + if (red != visual->rgba_masks[0] || + green != visual->rgba_masks[1] || + blue != visual->rgba_masks[2] || + (alpha && visual->rgba_masks[3] && alpha != visual->rgba_masks[3])) { + return false; + } + + return true; +} + static _EGLSurface * dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf, void *native_surface, @@ -110,18 +148,24 @@ dri2_drm_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, return NULL; } - if (!dri2_init_surface(_surf->base, disp, EGL_WINDOW_BIT, conf, attrib_list, false)) + if (!dri2_init_surface(_surf->base, disp, EGL_WINDOW_BIT, conf, + attrib_list, false)) goto cleanup_surf; + config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, +dri2_surf->base.GLColorspace); + + if (!dri2_drm_config_is_compatible(dri2_dpy, config, surface)) { + _eglError(EGL_BAD_MATCH, "EGL config not compatible with GBM format"); + goto cleanup_surf; + } + surf = gbm_dri_surface(surface); dri2_surf->gbm_surf = surf; dri2_surf->base.Width = surf->base.width; dri2_surf->base.Height = surf->base.height; surf->dri_private = dri2_surf; - config = dri2_get_dri_config(dri2_conf, EGL_WINDOW_BIT, -dri2_surf->base.GLColorspace); - if (dri2_dpy->dri2) { dri2_surf->dri_drawable = dri2_dpy->dri2->createNewDrawable(dri2_dpy->dri_screen, config, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Fix ARGB/XRGB transposition in config map
Module: Mesa Branch: master Commit: 4fbd2d50b1c06a3c10f3a254e933646345123751 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4fbd2d50b1c06a3c10f3a254e933646345123751 Author: Daniel StoneDate: Tue Feb 6 09:45:01 2018 + egl/wayland: Fix ARGB/XRGB transposition in config map When 0b2b7191214eb moved from an if tree to a struct to map between wl_drm formats and EGLConfigs, it transposed the mapping between XRGB and ARGB. Luckily, everyone exposes both formats, so this is harmless. Signed-off-by: Daniel Stone Fixes: 0b2b7191214eb ("egl/wayland: introduce dri2_wl_add_configs_for_visuals() helper") Reviewed-by: Emil Velikov Reviewed-by: Eric Engestrom Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index d221728ff2..75bb1c508c 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -1274,8 +1274,8 @@ dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) } visuals[] = { { "XRGB2101010", HAS_XRGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0 } }, { "ARGB2101010", HAS_ARGB2101010, { 0x3ff0, 0xffc00, 0x3ff, 0xc000 } }, - { "XRGB", HAS_XRGB, { 0xff, 0xff00, 0x00ff, 0xff00 } }, - { "ARGB", HAS_ARGB, { 0xff, 0xff00, 0x00ff, 0 } }, + { "XRGB", HAS_XRGB, { 0xff, 0xff00, 0x00ff, 0 } }, + { "ARGB", HAS_ARGB, { 0xff, 0xff00, 0x00ff, 0xff00 } }, { "RGB565", HAS_RGB565, { 0x00f800, 0x07e0, 0x001f, 0 } }, }; unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Add format enums to visual map
Module: Mesa Branch: master Commit: 1dc013f1ee2246e683d18b968c07f6ab9cf76981 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1dc013f1ee2246e683d18b968c07f6ab9cf76981 Author: Daniel StoneDate: Tue Feb 6 09:42:27 2018 + egl/wayland: Add format enums to visual map Extend the visual map from only containing names and bitmasks, to also carrying the three format enums we need. These are the DRIImage format tokens for internal allocation, FourCC codes for wl_drm and dmabuf protocol, and wl_shm codes for swrast drivers. We will later use these formats to eliminate a bunch of open-coded conversions. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 13 + 1 file changed, 13 insertions(+) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 1384cddd6b..b72b5f8b88 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -68,26 +68,39 @@ enum wl_drm_format_flags { static const struct { const char *format_name; enum wl_drm_format_flags has_format; + uint32_t wl_drm_format; + uint32_t wl_shm_format; + int dri_image_format; unsigned int rgba_masks[4]; } dri2_wl_visuals[] = { { "XRGB2101010", HAS_XRGB2101010, + WL_DRM_FORMAT_XRGB2101010, WL_SHM_FORMAT_XRGB2101010, + __DRI_IMAGE_FORMAT_XRGB2101010, { 0x3ff0, 0x000ffc00, 0x03ff, 0x } }, { "ARGB2101010", HAS_ARGB2101010, + WL_DRM_FORMAT_ARGB2101010, WL_SHM_FORMAT_ARGB2101010, + __DRI_IMAGE_FORMAT_ARGB2101010, { 0x3ff0, 0x000ffc00, 0x03ff, 0xc000 } }, { "XRGB", HAS_XRGB, + WL_DRM_FORMAT_XRGB, WL_SHM_FORMAT_XRGB, + __DRI_IMAGE_FORMAT_XRGB, { 0x00ff, 0xff00, 0x00ff, 0x } }, { "ARGB", HAS_ARGB, + WL_DRM_FORMAT_ARGB, WL_SHM_FORMAT_ARGB, + __DRI_IMAGE_FORMAT_ARGB, { 0x00ff, 0xff00, 0x00ff, 0xff00 } }, { "RGB565", HAS_RGB565, + WL_DRM_FORMAT_RGB565, WL_SHM_FORMAT_RGB565, + __DRI_IMAGE_FORMAT_RGB565, { 0xf800, 0x07e0, 0x001f, 0x } }, }; ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): egl/wayland: Use visual map for buffer_from_image
Module: Mesa Branch: master Commit: 3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6 Author: Daniel StoneDate: Tue Feb 6 10:15:32 2018 + egl/wayland: Use visual map for buffer_from_image When creating a wl_buffer on an upstream Wayland display from an existing EGLImage, use the dri2_wl_visual map rather than another hardcoded list of formats. Signed-off-by: Daniel Stone Reviewed-by: Emil Velikov Tested-by: Ilia Mirkin --- src/egl/drivers/dri2/platform_wayland.c | 40 - 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 91434dbba0..28eba98092 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -116,7 +116,7 @@ dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy, dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_BLUE_MASK, ); dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_ALPHA_MASK, ); - for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { + for (unsigned int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { const struct dri2_wl_visual *wl_visual = _wl_visuals[i]; if (red == wl_visual->rgba_masks[0] && @@ -131,6 +131,17 @@ dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy, } static int +dri2_wl_visual_idx_from_dri_image_format(uint32_t dri_image_format) +{ + for (int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) { + if (dri2_wl_visuals[i].dri_image_format == dri_image_format) + return i; + } + + return -1; +} + +static int roundtrip(struct dri2_egl_display *dri2_dpy) { return wl_display_roundtrip_queue(dri2_dpy->wl_dpy, dri2_dpy->wl_queue); @@ -1042,29 +1053,16 @@ dri2_wl_create_wayland_buffer_from_image(_EGLDriver *drv, struct dri2_egl_image *dri2_img = dri2_egl_image(img); __DRIimage *image = dri2_img->dri_image; struct wl_buffer *buffer; - int format; + int format, visual_idx; + /* Check the upstream display supports this buffer's format. */ dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FORMAT, ); - switch (format) { - case __DRI_IMAGE_FORMAT_ARGB2101010: - if (!(dri2_dpy->formats & HAS_ARGB2101010)) - goto bad_format; - break; - case __DRI_IMAGE_FORMAT_XRGB2101010: - if (!(dri2_dpy->formats & HAS_XRGB2101010)) - goto bad_format; - break; - case __DRI_IMAGE_FORMAT_ARGB: - if (!(dri2_dpy->formats & HAS_ARGB)) - goto bad_format; - break; - case __DRI_IMAGE_FORMAT_XRGB: - if (!(dri2_dpy->formats & HAS_XRGB)) - goto bad_format; - break; - default: + visual_idx = dri2_wl_visual_idx_from_dri_image_format(format); + if (visual_idx == -1) + goto bad_format; + + if (!(dri2_dpy->formats & dri2_wl_visuals[visual_idx].has_format)) goto bad_format; - } buffer = create_wl_buffer(dri2_dpy, NULL, image); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: generate blend state according to the number of enabled color buffers
Module: Mesa Branch: master Commit: 76085f2048d426ae5fd35b26bae2141c6cfeba28 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=76085f2048d426ae5fd35b26bae2141c6cfeba28 Author: Marek OlšákDate: Wed Jan 31 04:37:00 2018 +0100 st/mesa: generate blend state according to the number of enabled color buffers Non-MRT cases always translate blend state for 1 color buffer only. MRT cases only check and translate blend state for enabled color buffers. This also avoids an assertion failure in translate_blend for: dEQP-GLES31.functional.draw_buffers_indexed.overwrite_common.common_advanced_blend_eq_buffer_blend_eq Reviewed-by: Eric Anholt --- src/mesa/state_tracker/st_atom_blend.c | 21 + src/mesa/state_tracker/st_atom_framebuffer.c | 1 + src/mesa/state_tracker/st_atom_list.h| 2 +- src/mesa/state_tracker/st_context.h | 1 + 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index 2a8da75f36..57400e2e79 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -112,23 +112,26 @@ translate_blend(GLenum blend) * Figure out if colormasks are different per rt. */ static GLboolean -colormask_per_rt(const struct gl_context *ctx) +colormask_per_rt(const struct gl_context *ctx, unsigned num_cb) { + GLbitfield full_mask = _mesa_replicate_colormask(0xf, num_cb); GLbitfield repl_mask0 = _mesa_replicate_colormask(GET_COLORMASK(ctx->Color.ColorMask, 0), -ctx->Const.MaxDrawBuffers); +num_cb); - return ctx->Color.ColorMask != repl_mask0; + return (ctx->Color.ColorMask & full_mask) != repl_mask0; } /** * Figure out if blend enables/state are different per rt. */ static GLboolean -blend_per_rt(const struct gl_context *ctx) +blend_per_rt(const struct gl_context *ctx, unsigned num_cb) { - if (ctx->Color.BlendEnabled && - (ctx->Color.BlendEnabled != ((1U << ctx->Const.MaxDrawBuffers) - 1))) { + GLbitfield cb_mask = u_bit_consecutive(0, num_cb); + GLbitfield blend_enabled = ctx->Color.BlendEnabled & cb_mask; + + if (blend_enabled && blend_enabled != cb_mask) { /* This can only happen if GL_EXT_draw_buffers2 is enabled */ return GL_TRUE; } @@ -144,13 +147,15 @@ st_update_blend( struct st_context *st ) { struct pipe_blend_state *blend = >state.blend; const struct gl_context *ctx = st->ctx; + unsigned num_cb = st->state.fb_num_cb; unsigned num_state = 1; unsigned i, j; memset(blend, 0, sizeof(*blend)); - if (blend_per_rt(ctx) || colormask_per_rt(ctx)) { - num_state = ctx->Const.MaxDrawBuffers; + if (num_cb > 1 && + (blend_per_rt(ctx, num_cb) || colormask_per_rt(ctx, num_cb))) { + num_state = num_cb; blend->independent_blend_enable = 1; } diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index acbe980903..a29f5b35a8 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -216,4 +216,5 @@ st_update_framebuffer_state( struct st_context *st ) st->state.fb_height = framebuffer.height; st->state.fb_num_samples = util_framebuffer_get_num_samples(); st->state.fb_num_layers = util_framebuffer_get_num_layers(); + st->state.fb_num_cb = framebuffer.nr_cbufs; } diff --git a/src/mesa/state_tracker/st_atom_list.h b/src/mesa/state_tracker/st_atom_list.h index 8f50a72d00..5391d4710c 100644 --- a/src/mesa/state_tracker/st_atom_list.h +++ b/src/mesa/state_tracker/st_atom_list.h @@ -10,7 +10,6 @@ ST_STATE(ST_NEW_VS_STATE, st_update_vp) ST_STATE(ST_NEW_POLY_STIPPLE, st_update_polygon_stipple) ST_STATE(ST_NEW_WINDOW_RECTANGLES, st_update_window_rectangles) -ST_STATE(ST_NEW_BLEND, st_update_blend) ST_STATE(ST_NEW_BLEND_COLOR, st_update_blend_color) ST_STATE(ST_NEW_VS_SAMPLER_VIEWS, st_update_vertex_textures) @@ -33,6 +32,7 @@ ST_STATE(ST_NEW_GS_IMAGES, st_bind_gs_images) ST_STATE(ST_NEW_FS_IMAGES, st_bind_fs_images) ST_STATE(ST_NEW_FB_STATE, st_update_framebuffer_state) /* depends on update_*_texture and bind_*_images */ +ST_STATE(ST_NEW_BLEND, st_update_blend) /* depends on update_framebuffer_state */ ST_STATE(ST_NEW_RASTERIZER, st_update_rasterizer) /* depends on update_framebuffer_state */ ST_STATE(ST_NEW_SAMPLE_MASK, st_update_sample_mask) /* depends on update_framebuffer_state */ ST_STATE(ST_NEW_SAMPLE_SHADING, st_update_sample_shading) diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h index 660c993fe2..9f2480e5da 100644 --- a/src/mesa/state_tracker/st_context.h +++ b/src/mesa/state_tracker/st_context.h @@ -164,6 +164,7 @@ struct st_context unsigned fb_height; unsigned fb_num_samples; unsigned fb_num_layers; + unsigned
Mesa (master): st/mesa: don't translate blend state when color writes are disabled
Module: Mesa Branch: master Commit: c446dd7927477e68e9a961acb1727ff53fb7ea4f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c446dd7927477e68e9a961acb1727ff53fb7ea4f Author: Marek OlšákDate: Wed Jan 31 00:53:16 2018 +0100 st/mesa: don't translate blend state when color writes are disabled Reviewed-by: Eric Anholt --- src/mesa/state_tracker/st_atom_blend.c | 10 ++ 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index a5f7edbcfe..2a8da75f36 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -153,6 +153,10 @@ st_update_blend( struct st_context *st ) num_state = ctx->Const.MaxDrawBuffers; blend->independent_blend_enable = 1; } + + for (i = 0; i < num_state; i++) + blend->rt[i].colormask = GET_COLORMASK(ctx->Color.ColorMask, i); + if (ctx->Color.ColorLogicOpEnabled) { /* logicop enabled */ blend->logicop_enable = 1; @@ -161,7 +165,8 @@ st_update_blend( struct st_context *st ) else if (ctx->Color.BlendEnabled && !ctx->Color._AdvancedBlendMode) { /* blending enabled */ for (i = 0, j = 0; i < num_state; i++) { - if (!(ctx->Color.BlendEnabled & (1 << i))) + if (!(ctx->Color.BlendEnabled & (1 << i)) || + !blend->rt[i].colormask) continue; if (ctx->Extensions.ARB_draw_buffers_blend) @@ -205,9 +210,6 @@ st_update_blend( struct st_context *st ) /* no blending / logicop */ } - for (i = 0; i < num_state; i++) - blend->rt[i].colormask = GET_COLORMASK(ctx->Color.ColorMask, i); - blend->dither = ctx->Color.DitherFlag; if (_mesa_is_multisample_enabled(ctx) && ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: don't translate blend state when it's disabled for a colorbuffer
Module: Mesa Branch: master Commit: 3d06c8afb5543cce88e331278d92823d88aac7b6 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3d06c8afb5543cce88e331278d92823d88aac7b6 Author: Marek OlšákDate: Wed Jan 31 00:53:16 2018 +0100 st/mesa: don't translate blend state when it's disabled for a colorbuffer Reviewed-by: Eric Anholt --- src/mesa/state_tracker/st_atom_blend.c | 7 --- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_blend.c b/src/mesa/state_tracker/st_atom_blend.c index f7327d6838..a5f7edbcfe 100644 --- a/src/mesa/state_tracker/st_atom_blend.c +++ b/src/mesa/state_tracker/st_atom_blend.c @@ -161,12 +161,13 @@ st_update_blend( struct st_context *st ) else if (ctx->Color.BlendEnabled && !ctx->Color._AdvancedBlendMode) { /* blending enabled */ for (i = 0, j = 0; i < num_state; i++) { + if (!(ctx->Color.BlendEnabled & (1 << i))) +continue; - blend->rt[i].blend_enable = (ctx->Color.BlendEnabled >> i) & 0x1; - - if (ctx->Extensions.ARB_draw_buffers_blend) +if (ctx->Extensions.ARB_draw_buffers_blend) j = i; + blend->rt[i].blend_enable = 1; blend->rt[i].rgb_func = translate_blend(ctx->Color.Blend[j].EquationRGB); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): i965: prevent potentially null pointer access
Module: Mesa Branch: master Commit: 712332ed54f14b5ee34c2990e351ca48992488b2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=712332ed54f14b5ee34c2990e351ca48992488b2 Author: Lionel LandwerlinDate: Thu Feb 8 17:33:09 2018 + i965: prevent potentially null pointer access Signed-off-by: Lionel Landwerlin Reviewed-by: Alejandro Piñeiro CID: 1418110 --- src/mesa/drivers/dri/i965/intel_screen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c index 1f866cf845..3f74ee78f3 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c @@ -315,7 +315,7 @@ modifier_is_supported(const struct gen_device_info *devinfo, int i; /* ISL had better know about the modifier */ - if (!modinfo) + if (!fmt || !modinfo) return false; if (modinfo->aux_usage == ISL_AUX_USAGE_CCS_E) { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/va: Enable vaExportSurfaceHandle()
Module: Mesa Branch: master Commit: 768f1487b0c084507ba5e2641e0bbf4ec789ec85 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=768f1487b0c084507ba5e2641e0bbf4ec789ec85 Author: Mark ThompsonDate: Wed Feb 7 23:10:15 2018 + st/va: Enable vaExportSurfaceHandle() It is present from libva 2.1 (VAAPI 1.1.0 or higher). Signed-off-by: Mark Thompson Reviewed-by: Christian König --- src/gallium/state_trackers/va/context.c | 8 +++- src/gallium/state_trackers/va/surface.c | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c index f567f544fd..189d361ff3 100644 --- a/src/gallium/state_trackers/va/context.c +++ b/src/gallium/state_trackers/va/context.c @@ -89,7 +89,13 @@ static struct VADriverVTable vtable = , , , -#if 0 +#if VA_CHECK_VERSION(1, 1, 0) + NULL, /* vaCreateMFContext */ + NULL, /* vaMFAddContext */ + NULL, /* vaMFReleaseContext */ + NULL, /* vaMFSubmit */ + NULL, /* vaCreateBuffer2 */ + NULL, /* vaQueryProcessingRate */ , #endif }; diff --git a/src/gallium/state_trackers/va/surface.c b/src/gallium/state_trackers/va/surface.c index 9823232413..8604136944 100644 --- a/src/gallium/state_trackers/va/surface.c +++ b/src/gallium/state_trackers/va/surface.c @@ -926,7 +926,7 @@ vlVaQueryVideoProcPipelineCaps(VADriverContextP ctx, VAContextID context, return VA_STATUS_SUCCESS; } -#if 0 +#if VA_CHECK_VERSION(1, 1, 0) VAStatus vlVaExportSurfaceHandle(VADriverContextP ctx, VASurfaceID surface_id, ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/va: Make the vendor string more descriptive
Module: Mesa Branch: master Commit: 5db29d62ce1fefa3f2ee6e4a4688576fde4bde4a URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5db29d62ce1fefa3f2ee6e4a4688576fde4bde4a Author: Mark ThompsonDate: Wed Feb 7 23:15:05 2018 + st/va: Make the vendor string more descriptive Include the Mesa version and detail about the platform. Signed-off-by: Mark Thompson Reviewed-by: Christian König --- src/gallium/state_trackers/va/context.c| 6 +- src/gallium/state_trackers/va/va_private.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c index 189d361ff3..836aa77c36 100644 --- a/src/gallium/state_trackers/va/context.c +++ b/src/gallium/state_trackers/va/context.c @@ -181,7 +181,11 @@ VA_DRIVER_INIT_FUNC(VADriverContextP ctx) ctx->max_image_formats = VL_VA_MAX_IMAGE_FORMATS; ctx->max_subpic_formats = 1; ctx->max_display_attributes = 1; - ctx->str_vendor = "mesa gallium vaapi"; + + snprintf(drv->vendor_string, sizeof(drv->vendor_string), +"Mesa Gallium driver " PACKAGE_VERSION " for %s", +drv->vscreen->pscreen->get_name(drv->vscreen->pscreen)); + ctx->str_vendor = drv->vendor_string; return VA_STATUS_SUCCESS; diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h index 11b208c4b3..4396abb586 100644 --- a/src/gallium/state_trackers/va/va_private.h +++ b/src/gallium/state_trackers/va/va_private.h @@ -233,6 +233,7 @@ typedef struct { struct vl_compositor_state cstate; vl_csc_matrix csc; mtx_t mutex; + char vendor_string[256]; } vlVaDriver; typedef struct { ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): disk cache: move path creation back to constructor
Module: Mesa Branch: master Commit: 41c5bf38369c9d57695a0544b8a19d68eef6da3d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=41c5bf38369c9d57695a0544b8a19d68eef6da3d Author: Tapani PälliDate: Fri Feb 9 07:37:49 2018 +0200 disk cache: move path creation back to constructor This patch moves disk cache path and index creation back to the constructor which matches previous behavior. We still allow create to succeed without path so that cache can be used with callback functionality. Fixes: c95d3ed091 "disk cache: create cache even if path creation fails" Signed-off-by: Tapani Pälli Reviewed-by: Timothy Arceri --- src/util/disk_cache.c | 162 +++--- 1 file changed, 76 insertions(+), 86 deletions(-) diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index ea6808aaf8..4a762eff20 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -182,20 +182,47 @@ concatenate_and_mkdir(void *ctx, const char *path, const char *name) return NULL; } -static bool -disk_cache_path_init(struct disk_cache *cache) +#define DRV_KEY_CPY(_dst, _src, _src_size) \ +do { \ + memcpy(_dst, _src, _src_size); \ + _dst += _src_size; \ +} while (0); + +struct disk_cache * +disk_cache_create(const char *gpu_name, const char *timestamp, + uint64_t driver_flags) { - void *local = NULL; - char *path; + void *local; + struct disk_cache *cache = NULL; + char *path, *max_size_str; + uint64_t max_size; int fd = -1; struct stat sb; size_t size; + uint8_t cache_version = CACHE_VERSION; + size_t cv_size = sizeof(cache_version); + + /* If running as a users other than the real user disable cache */ + if (geteuid() != getuid()) + return NULL; + /* A ralloc context for transient data during this invocation. */ local = ralloc_context(NULL); if (local == NULL) goto fail; + /* At user request, disable shader cache entirely. */ + if (env_var_as_boolean("MESA_GLSL_CACHE_DISABLE", false)) + goto fail; + + cache = rzalloc(NULL, struct disk_cache); + if (cache == NULL) + goto fail; + + /* Assume failure. */ + cache->path_init_failed = true; + /* Determine path for cache based on the first defined name as follows: * * $MESA_GLSL_CACHE_DIR @@ -205,11 +232,11 @@ disk_cache_path_init(struct disk_cache *cache) path = getenv("MESA_GLSL_CACHE_DIR"); if (path) { if (mkdir_if_needed(path) == -1) - goto fail; + goto path_fail; path = concatenate_and_mkdir(local, path, CACHE_DIR_NAME); if (path == NULL) - goto fail; + goto path_fail; } if (path == NULL) { @@ -217,11 +244,11 @@ disk_cache_path_init(struct disk_cache *cache) if (xdg_cache_home) { if (mkdir_if_needed(xdg_cache_home) == -1) -goto fail; +goto path_fail; path = concatenate_and_mkdir(local, xdg_cache_home, CACHE_DIR_NAME); if (path == NULL) -goto fail; +goto path_fail; } } @@ -247,39 +274,39 @@ disk_cache_path_init(struct disk_cache *cache) buf = NULL; buf_size *= 2; } else { -goto fail; +goto path_fail; } } path = concatenate_and_mkdir(local, pwd.pw_dir, ".cache"); if (path == NULL) - goto fail; + goto path_fail; path = concatenate_and_mkdir(local, path, CACHE_DIR_NAME); if (path == NULL) - goto fail; + goto path_fail; } cache->path = ralloc_strdup(cache, path); if (cache->path == NULL) - goto fail; + goto path_fail; path = ralloc_asprintf(local, "%s/index", cache->path); if (path == NULL) - goto fail; + goto path_fail; fd = open(path, O_RDWR | O_CREAT | O_CLOEXEC, 0644); if (fd == -1) - goto fail; + goto path_fail; if (fstat(fd, ) == -1) - goto fail; + goto path_fail; /* Force the index file to be the expected size. */ size = sizeof(*cache->size) + CACHE_INDEX_MAX_KEYS * CACHE_KEY_SIZE; if (sb.st_size != size) { if (ftruncate(fd, size) == -1) - goto fail; + goto path_fail; } /* We map this shared so that other processes see updates that we @@ -300,7 +327,7 @@ disk_cache_path_init(struct disk_cache *cache) cache->index_mmap = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (cache->index_mmap == MAP_FAILED) - goto fail; + goto path_fail; cache->index_mmap_size = size; close(fd); @@ -308,58 +335,6 @@ disk_cache_path_init(struct disk_cache *cache) cache->size = (uint64_t *) cache->index_mmap; cache->stored_keys = cache->index_mmap + sizeof(uint64_t); -
Mesa (master): ac/nir: compute correct number of user SGPRs on GFX9
Module: Mesa Branch: master Commit: 3a2bb4db23e4ac742363c2bd4769a77b4291231d URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a2bb4db23e4ac742363c2bd4769a77b4291231d Author: Samuel PitoisetDate: Thu Feb 8 23:04:53 2018 +0100 ac/nir: compute correct number of user SGPRs on GFX9 For merged shaders. Signed-off-by: Samuel Pitoiset Reviewed-by: Dave Airlie --- src/amd/common/ac_nir_to_llvm.c | 39 +-- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c index 60276c1d41..3691555208 100644 --- a/src/amd/common/ac_nir_to_llvm.c +++ b/src/amd/common/ac_nir_to_llvm.c @@ -513,8 +513,21 @@ static bool needs_view_index_sgpr(struct nir_to_llvm_context *ctx, return false; } +static uint8_t +count_vs_user_sgprs(struct nir_to_llvm_context *ctx) +{ + uint8_t count = 0; + + count += ctx->shader_info->info.vs.has_vertex_buffers ? 2 : 0; + count += ctx->shader_info->info.vs.needs_draw_id ? 3 : 2; + + return count; +} + static void allocate_user_sgprs(struct nir_to_llvm_context *ctx, gl_shader_stage stage, + bool has_previous_stage, + gl_shader_stage previous_stage, bool needs_view_index, struct user_sgpr_info *user_sgpr_info) { @@ -537,7 +550,6 @@ static void allocate_user_sgprs(struct nir_to_llvm_context *ctx, user_sgpr_info->sgpr_count += 2; } - /* FIXME: fix the number of user sgprs for merged shaders on GFX9 */ switch (stage) { case MESA_SHADER_COMPUTE: if (ctx->shader_info->info.cs.uses_grid_size) @@ -547,24 +559,30 @@ static void allocate_user_sgprs(struct nir_to_llvm_context *ctx, user_sgpr_info->sgpr_count += ctx->shader_info->info.ps.needs_sample_positions; break; case MESA_SHADER_VERTEX: - if (!ctx->is_gs_copy_shader) { - user_sgpr_info->sgpr_count += ctx->shader_info->info.vs.has_vertex_buffers ? 2 : 0; - if (ctx->shader_info->info.vs.needs_draw_id) { - user_sgpr_info->sgpr_count += 3; - } else { - user_sgpr_info->sgpr_count += 2; - } - } + if (!ctx->is_gs_copy_shader) + user_sgpr_info->sgpr_count += count_vs_user_sgprs(ctx); if (ctx->options->key.vs.as_ls) user_sgpr_info->sgpr_count++; break; case MESA_SHADER_TESS_CTRL: + if (has_previous_stage) { + if (previous_stage == MESA_SHADER_VERTEX) + user_sgpr_info->sgpr_count += count_vs_user_sgprs(ctx); + user_sgpr_info->sgpr_count++; + } user_sgpr_info->sgpr_count += 4; break; case MESA_SHADER_TESS_EVAL: user_sgpr_info->sgpr_count += 1; break; case MESA_SHADER_GEOMETRY: + if (has_previous_stage) { + if (previous_stage == MESA_SHADER_VERTEX) { + user_sgpr_info->sgpr_count += count_vs_user_sgprs(ctx); + } else { + user_sgpr_info->sgpr_count++; + } + } user_sgpr_info->sgpr_count += 2; break; default: @@ -746,7 +764,8 @@ static void create_function(struct nir_to_llvm_context *ctx, struct arg_info args = {}; LLVMValueRef desc_sets; bool needs_view_index = needs_view_index_sgpr(ctx, stage); - allocate_user_sgprs(ctx, stage, needs_view_index, _sgpr_info); + allocate_user_sgprs(ctx, stage, has_previous_stage, + previous_stage, needs_view_index, _sgpr_info); if (user_sgpr_info.need_ring_offsets && !ctx->options->supports_spill) { add_arg(, ARG_SGPR, ac_array_in_const_addr_space(ctx->ac.v4i32), ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit
Mesa (master): st/mesa: Initialize tex_target in compile_tgsi_instruction
Module: Mesa Branch: master Commit: 171076f0826f932606d35e6a315b74a6598e2d6f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=171076f0826f932606d35e6a315b74a6598e2d6f Author: Michel DänzerDate: Thu Feb 8 18:48:45 2018 +0100 st/mesa: Initialize tex_target in compile_tgsi_instruction Initialize to TGSI_TEXTURE_BUFFER (== 0), same as was done before the variable type was changed to enum tgsi_texture_type. Fixes a bunch of piglit failures with radeonsi, e.g.: gles-3.0-transform-feedback-uniform-buffer-object: ../../../../src/gallium/auxiliary/tgsi/tgsi_util.c:502: tgsi_util_get_texture_coord_dim: Assertion `!"unknown texture target"' failed. Corresponding compiler warning: CXX state_tracker/st_glsl_to_tgsi.lo ../../../src/mesa/state_tracker/st_glsl_to_tgsi.cpp: In function ‘pipe_error st_translate_program(gl_context*, uint, ureg_program*, glsl_to_tgsi_visitor*, const gl_program*, GLuint, const ubyte*, const ubyte*, const ubyte*, const ubyte*, const ubyte*, GLuint, const ubyte*, const ubyte*, const ubyte*)’: ../../../src/mesa/state_tracker/st_glsl_to_tgsi.cpp:5992:23: warning: ‘tex_target’ may be used uninitialized in this function [-Wmaybe-uninitialized] ureg_memory_insn(ureg, inst->op, dst, num_dst, src, num_src, ^~~~ inst->buffer_access, tex_target, inst->image_format); ~~~ ../../../src/mesa/state_tracker/st_glsl_to_tgsi.cpp:5866:27: note: ‘tex_target’ was declared here enum tgsi_texture_type tex_target; ^~ Fixes: 9f9ce1625fb3 ("st/mesa: use TGSI enum types in st_glsl_to_tgsi.cpp") Reviewed-by: Marek Olšák --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 39a81fad62..1f87591893 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -5863,7 +5863,7 @@ compile_tgsi_instruction(struct st_translate *t, int num_dst; int num_src; - enum tgsi_texture_type tex_target; + enum tgsi_texture_type tex_target = TGSI_TEXTURE_BUFFER; num_dst = num_inst_dst_regs(inst); num_src = num_inst_src_regs(inst); ___ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit