Mesa (master): st/glsl_to_nir: remove unused options variable

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: ff0e3fa1fe664f6a7aba289ed36fca9ff505bc18
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ff0e3fa1fe664f6a7aba289ed36fca9ff505bc18

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 8f378c116eb226e18193583dcbf1a5a77246b507
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f378c116eb226e18193583dcbf1a5a77246b507

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: bc9d9f9b864efd24f0a4c65e2645f689f3ee9e79
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bc9d9f9b864efd24f0a4c65e2645f689f3ee9e79

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 51f484bb44f2341d41dbce964d76549cd1a045cb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=51f484bb44f2341d41dbce964d76549cd1a045cb

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: b5e23887fe86478a63b3b602de32909a641f268f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b5e23887fe86478a63b3b602de32909a641f268f

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 3af4f34e6113c3a8b4f62379127ab475de716056
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3af4f34e6113c3a8b4f62379127ab475de716056

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 73f1d6f0c1030d90bf022333def69b4324c0e4ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=73f1d6f0c1030d90bf022333def69b4324c0e4ae

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 97efdc0d57b3b9b6af4a40715482a15f2b8c7d6e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=97efdc0d57b3b9b6af4a40715482a15f2b8c7d6e

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 1b1e5f8edfb16b8c8d5170bdd110f730352b6137
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1b1e5f8edfb16b8c8d5170bdd110f730352b6137

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 6a8efbe652c328c2367476069ff1435c358e6f78
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6a8efbe652c328c2367476069ff1435c358e6f78

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: ef8082baf860cb19cbb8c6435e9144ff16b3429f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef8082baf860cb19cbb8c6435e9144ff16b3429f

Author: Timothy Arceri 
Date:   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

2018-02-09 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: ce836487b80e94fd91932c0a4bfadf1d61f74ded
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ce836487b80e94fd91932c0a4bfadf1d61f74ded

Author: Timothy Arceri 
Date:   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"

2018-02-09 Thread Mark Janes
Module: Mesa
Branch: master
Commit: 9a05c66feb0c3c7877999827ce70765c656338f1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a05c66feb0c3c7877999827ce70765c656338f1

Author: Mark Janes 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 66912641df480f53a0bac459fc7b6395d31c4eb3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=66912641df480f53a0bac459fc7b6395d31c4eb3

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 8174e5b49e96a98a585b13074d6f1a68e70629d7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8174e5b49e96a98a585b13074d6f1a68e70629d7

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 2ed344645d65f379f8196596b1b77534e28c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ed344645d65f379f8196596b1b77534e28c

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 4de98a9c07b599939143255214858c7525e814c4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4de98a9c07b599939143255214858c7525e814c4

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 4732094cff302a10c167e0cb23851c19fccddbe0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4732094cff302a10c167e0cb23851c19fccddbe0

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 5bc49d4cbf8c7c5d465dc994d0a0d2111f742705
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5bc49d4cbf8c7c5d465dc994d0a0d2111f742705

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 19cbca38e45b609f21fb14d75b3bffbd6c6426d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=19cbca38e45b609f21fb14d75b3bffbd6c6426d6

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 314714ac5311c39785d16c0f03484dbaf482c52b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=314714ac5311c39785d16c0f03484dbaf482c52b

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 845c2f61563f17193cfdec263f2b72ede20af3c7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=845c2f61563f17193cfdec263f2b72ede20af3c7

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: d32b23f3830099a328b912957de881cf30a0ee7a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d32b23f3830099a328b912957de881cf30a0ee7a

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 68a80c11bd3b362d7782ded9c8c12ba0e9ecc933
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=68a80c11bd3b362d7782ded9c8c12ba0e9ecc933

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: a9cc4edb6077e9ccda5792c240358ba01df62aed
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a9cc4edb6077e9ccda5792c240358ba01df62aed

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 37a8d907cc167279f44e2e15f980cd93869a51f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=37a8d907cc167279f44e2e15f980cd93869a51f9

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 4fbd2d50b1c06a3c10f3a254e933646345123751
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4fbd2d50b1c06a3c10f3a254e933646345123751

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 1dc013f1ee2246e683d18b968c07f6ab9cf76981
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1dc013f1ee2246e683d18b968c07f6ab9cf76981

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Daniel Stone
Module: Mesa
Branch: master
Commit: 3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3323ce72ff2d5de2fa7ad32d192c1a28ba8681e6

Author: Daniel Stone 
Date:   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

2018-02-09 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 76085f2048d426ae5fd35b26bae2141c6cfeba28
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=76085f2048d426ae5fd35b26bae2141c6cfeba28

Author: Marek Olšák 
Date:   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

2018-02-09 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: c446dd7927477e68e9a961acb1727ff53fb7ea4f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c446dd7927477e68e9a961acb1727ff53fb7ea4f

Author: Marek Olšák 
Date:   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

2018-02-09 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 3d06c8afb5543cce88e331278d92823d88aac7b6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3d06c8afb5543cce88e331278d92823d88aac7b6

Author: Marek Olšák 
Date:   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

2018-02-09 Thread Lionel Landwerlin
Module: Mesa
Branch: master
Commit: 712332ed54f14b5ee34c2990e351ca48992488b2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=712332ed54f14b5ee34c2990e351ca48992488b2

Author: Lionel Landwerlin 
Date:   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()

2018-02-09 Thread Christian König
Module: Mesa
Branch: master
Commit: 768f1487b0c084507ba5e2641e0bbf4ec789ec85
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=768f1487b0c084507ba5e2641e0bbf4ec789ec85

Author: Mark Thompson 
Date:   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

2018-02-09 Thread Christian König
Module: Mesa
Branch: master
Commit: 5db29d62ce1fefa3f2ee6e4a4688576fde4bde4a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5db29d62ce1fefa3f2ee6e4a4688576fde4bde4a

Author: Mark Thompson 
Date:   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

2018-02-09 Thread Tapani Pälli
Module: Mesa
Branch: master
Commit: 41c5bf38369c9d57695a0544b8a19d68eef6da3d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=41c5bf38369c9d57695a0544b8a19d68eef6da3d

Author: Tapani Pälli 
Date:   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

2018-02-09 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 3a2bb4db23e4ac742363c2bd4769a77b4291231d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3a2bb4db23e4ac742363c2bd4769a77b4291231d

Author: Samuel Pitoiset 
Date:   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

2018-02-09 Thread Michel Dänzer
Module: Mesa
Branch: master
Commit: 171076f0826f932606d35e6a315b74a6598e2d6f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=171076f0826f932606d35e6a315b74a6598e2d6f

Author: Michel Dänzer 
Date:   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