Mesa (master): mesa: expose ARB_tessellation_shader in the compatibility profile

2018-05-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 858ac8942d07d4c2d3e1cd1ac18381fa2e1de32c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=858ac8942d07d4c2d3e1cd1ac18381fa2e1de32c

Author: Marek Olšák 
Date:   Wed May 23 01:47:55 2018 -0400

mesa: expose ARB_tessellation_shader in the compatibility profile

Gallium drivers don't expose this yet due to:
"st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY"

Reviewed-by: Timothy Arceri 

---

 src/mesa/drivers/dri/i965/intel_extensions.c | 3 ++-
 src/mesa/main/extensions_table.h | 2 +-
 src/mesa/state_tracker/st_extensions.c   | 4 +++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c 
b/src/mesa/drivers/dri/i965/intel_extensions.c
index 93a4de139e..34597c5e05 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -236,7 +236,8 @@ intelInitExtensions(struct gl_context *ctx)
   ctx->Extensions.ARB_shader_image_size = true;
   ctx->Extensions.ARB_shader_precision = true;
   ctx->Extensions.ARB_shader_texture_image_samples = true;
-  ctx->Extensions.ARB_tessellation_shader = true;
+  if (ctx->API != API_OPENGL_COMPAT)
+ ctx->Extensions.ARB_tessellation_shader = true;
   ctx->Extensions.ARB_texture_compression_bptc = true;
   ctx->Extensions.ARB_texture_view = true;
   ctx->Extensions.ARB_shader_storage_buffer_object = true;
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 02b0d2689c..447eb087fc 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -132,7 +132,7 @@ EXT(ARB_shadow  , ARB_shadow
 EXT(ARB_sparse_buffer   , ARB_sparse_buffer
  , GLL, GLC,  x ,  x , 2014)
 EXT(ARB_stencil_texturing   , ARB_stencil_texturing
  , GLL, GLC,  x ,  x , 2012)
 EXT(ARB_sync, ARB_sync 
  , GLL, GLC,  x ,  x , 2003)
-EXT(ARB_tessellation_shader , ARB_tessellation_shader  
  ,  x , GLC,  x ,  x , 2009)
+EXT(ARB_tessellation_shader , ARB_tessellation_shader  
  , GLL, GLC,  x ,  x , 2009)
 EXT(ARB_texture_barrier , NV_texture_barrier   
  , GLL, GLC,  x ,  x , 2014)
 EXT(ARB_texture_border_clamp, ARB_texture_border_clamp 
  , GLL,  x ,  x ,  x , 2000)
 EXT(ARB_texture_buffer_object   , ARB_texture_buffer_object
  , GLL, GLC,  x ,  x , 2008)
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index b5622b330b..bf73d506c1 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -1020,8 +1020,10 @@ void st_init_extensions(struct pipe_screen *screen,
 
/* Below are the cases which cannot be moved into tables easily. */
 
+   /* The compatibility profile also requires GLSLVersionCompat >= 400. */
if (screen->get_shader_param(screen, PIPE_SHADER_TESS_CTRL,
-PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) {
+PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0 &&
+   (api != API_OPENGL_COMPAT || consts->GLSLVersionCompat >= 400)) {
   extensions->ARB_tessellation_shader = GL_TRUE;
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: expose ARB_gpu_shader5 in the compatibility profile

2018-05-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 518d8065ced241d16becc36f512afe11b02021de
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=518d8065ced241d16becc36f512afe11b02021de

Author: Marek Olšák 
Date:   Wed Feb 14 22:38:15 2018 +0100

mesa: expose ARB_gpu_shader5 in the compatibility profile

Gallium drivers don't expose this yet due to:
"st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY"

Reviewed-by: Timothy Arceri 

---

 src/mesa/drivers/dri/i965/intel_extensions.c | 6 --
 src/mesa/main/extensions_table.h | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c 
b/src/mesa/drivers/dri/i965/intel_extensions.c
index 192971f32c..2e79e96503 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -224,8 +224,10 @@ intelInitExtensions(struct gl_context *ctx)
   ctx->Extensions.ARB_conservative_depth = true;
   ctx->Extensions.ARB_derivative_control = true;
   ctx->Extensions.ARB_framebuffer_no_attachments = true;
-  ctx->Extensions.ARB_gpu_shader5 = true;
-  ctx->Extensions.ARB_gpu_shader_fp64 = devinfo->has_64bit_types;
+  if (ctx->API != API_OPENGL_COMPAT) {
+ ctx->Extensions.ARB_gpu_shader5 = true;
+ ctx->Extensions.ARB_gpu_shader_fp64 = devinfo->has_64bit_types;
+  }
   ctx->Extensions.ARB_shader_atomic_counters = true;
   ctx->Extensions.ARB_shader_atomic_counter_ops = true;
   ctx->Extensions.ARB_shader_clock = true;
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 9207e3f8c6..29eb41c605 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -74,7 +74,7 @@ EXT(ARB_framebuffer_sRGB, 
EXT_framebuffer_sRGB
 EXT(ARB_get_program_binary  , dummy_true   
  , GLL, GLC,  x ,  x , 2010)
 EXT(ARB_get_texture_sub_image   , dummy_true   
  , GLL, GLC,  x ,  x , 2014)
 EXT(ARB_gl_spirv, ARB_gl_spirv 
  ,  x,  GLC,  x ,  x , 2016)
-EXT(ARB_gpu_shader5 , ARB_gpu_shader5  
  ,  x , GLC,  x ,  x , 2010)
+EXT(ARB_gpu_shader5 , ARB_gpu_shader5  
  , GLL, GLC,  x ,  x , 2010)
 EXT(ARB_gpu_shader_fp64 , ARB_gpu_shader_fp64  
  ,  x , GLC,  x ,  x , 2010)
 EXT(ARB_gpu_shader_int64, ARB_gpu_shader_int64 
  ,  x , GLC,  x ,  x , 2015)
 EXT(ARB_half_float_pixel, dummy_true   
  , GLL, GLC,  x ,  x , 2003)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: update fixed-func state constants for TCS, TES, GS

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

Author: Marek Olšák 
Date:   Wed May 23 01:37:12 2018 -0400

mesa: update fixed-func state constants for TCS, TES, GS

Reviewed-by: Nicolai Hähnle 
Reviewed-by: Timothy Arceri 

---

 src/mesa/main/state.c | 64 +--
 1 file changed, 36 insertions(+), 28 deletions(-)

diff --git a/src/mesa/main/state.c b/src/mesa/main/state.c
index be8f3f302c..097cd9e20d 100644
--- a/src/mesa/main/state.c
+++ b/src/mesa/main/state.c
@@ -222,41 +222,49 @@ update_program(struct gl_context *ctx)
 }
 
 
-/**
- * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0.
- */
 static GLbitfield
-update_program_constants(struct gl_context *ctx)
+update_single_program_constants(struct gl_context *ctx,
+struct gl_program *prog,
+gl_shader_stage stage)
 {
-   GLbitfield new_state = 0x0;
-
-   if (ctx->FragmentProgram._Current) {
-  const struct gl_program_parameter_list *params =
- ctx->FragmentProgram._Current->Parameters;
+   if (prog) {
+  const struct gl_program_parameter_list *params = prog->Parameters;
   if (params && params->StateFlags & ctx->NewState) {
- if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT]) {
-ctx->NewDriverState |=
-   ctx->DriverFlags.NewShaderConstants[MESA_SHADER_FRAGMENT];
- } else {
-new_state |= _NEW_PROGRAM_CONSTANTS;
- }
+ if (ctx->DriverFlags.NewShaderConstants[stage])
+ctx->NewDriverState |= ctx->DriverFlags.NewShaderConstants[stage];
+ else
+return _NEW_PROGRAM_CONSTANTS;
   }
}
+   return 0;
+}
 
-   /* Don't handle tessellation and geometry shaders here. They don't use
-* any state constants.
-*/
 
-   if (ctx->VertexProgram._Current) {
-  const struct gl_program_parameter_list *params =
- ctx->VertexProgram._Current->Parameters;
-  if (params && params->StateFlags & ctx->NewState) {
- if (ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX]) {
-ctx->NewDriverState |=
-   ctx->DriverFlags.NewShaderConstants[MESA_SHADER_VERTEX];
- } else {
-new_state |= _NEW_PROGRAM_CONSTANTS;
- }
+/**
+ * This updates fixed-func state constants such as gl_ModelViewMatrix.
+ * Examine shader constants and return either _NEW_PROGRAM_CONSTANTS or 0.
+ */
+static GLbitfield
+update_program_constants(struct gl_context *ctx)
+{
+   GLbitfield new_state =
+  update_single_program_constants(ctx, ctx->VertexProgram._Current,
+  MESA_SHADER_VERTEX) |
+  update_single_program_constants(ctx, ctx->FragmentProgram._Current,
+  MESA_SHADER_FRAGMENT);
+
+   if (ctx->API == API_OPENGL_COMPAT &&
+   ctx->Const.GLSLVersionCompat >= 150) {
+  new_state |=
+ update_single_program_constants(ctx, ctx->GeometryProgram._Current,
+ MESA_SHADER_GEOMETRY);
+
+  if (_mesa_has_ARB_tessellation_shader(ctx)) {
+ new_state |=
+update_single_program_constants(ctx, ctx->TessCtrlProgram._Current,
+MESA_SHADER_TESS_CTRL) |
+update_single_program_constants(ctx, ctx->TessEvalProgram._Current,
+MESA_SHADER_TESS_EVAL);
   }
}
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallium: add PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY

2018-05-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 34ea55d8201b9bfd31dd432f45b5423861f8ad0b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=34ea55d8201b9bfd31dd432f45b5423861f8ad0b

Author: Marek Olšák 
Date:   Thu Feb 15 01:32:08 2018 +0100

gallium: add PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY

Reviewed-by: Nicolai Hähnle 
Reviewed-by: Timothy Arceri 

---

 src/gallium/docs/source/screen.rst   | 6 ++
 src/gallium/drivers/etnaviv/etnaviv_screen.c | 1 +
 src/gallium/drivers/freedreno/freedreno_screen.c | 1 +
 src/gallium/drivers/i915/i915_screen.c   | 1 +
 src/gallium/drivers/llvmpipe/lp_screen.c | 2 ++
 src/gallium/drivers/nouveau/nv30/nv30_screen.c   | 1 +
 src/gallium/drivers/nouveau/nv50/nv50_screen.c   | 2 ++
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c   | 2 ++
 src/gallium/drivers/r300/r300_screen.c   | 1 +
 src/gallium/drivers/r600/r600_pipe.c | 3 +++
 src/gallium/drivers/radeonsi/si_get.c| 3 +++
 src/gallium/drivers/softpipe/sp_screen.c | 2 ++
 src/gallium/drivers/svga/svga_screen.c   | 3 +++
 src/gallium/drivers/swr/swr_screen.cpp   | 2 ++
 src/gallium/drivers/v3d/v3d_screen.c | 3 +++
 src/gallium/drivers/vc4/vc4_screen.c | 1 +
 src/gallium/drivers/virgl/virgl_screen.c | 2 ++
 src/gallium/include/pipe/p_defines.h | 1 +
 18 files changed, 37 insertions(+)

diff --git a/src/gallium/docs/source/screen.rst 
b/src/gallium/docs/source/screen.rst
index 5bc6ee99f0..0f18b7a94b 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -93,6 +93,12 @@ The integer capabilities:
   shader.
 * ``PIPE_CAP_GLSL_FEATURE_LEVEL``: Whether the driver supports features
   equivalent to a specific GLSL version. E.g. for GLSL 1.3, report 130.
+* ``PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY``: Whether the driver supports
+  features equivalent to a specific GLSL version including all legacy OpenGL
+  features only present in the OpenGL compatibility profile.
+  The only legacy features that Gallium drivers must implement are
+  the legacy shader inputs and outputs (colors, texcoords, fog, clipvertex,
+  edgeflag).
 * ``PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION``: Whether quads adhere 
to
   the flatshade_first setting in ``pipe_rasterizer_state``.
 * ``PIPE_CAP_USER_VERTEX_BUFFERS``: Whether the driver supports user vertex
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c 
b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 10e60f5f9e..e031807117 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -154,6 +154,7 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
   return 4; /* XXX could easily be supported */
case PIPE_CAP_GLSL_FEATURE_LEVEL:
+   case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
   return 120;
 
case PIPE_CAP_NPOT_TEXTURES:
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c 
b/src/gallium/drivers/freedreno/freedreno_screen.c
index 7b97b79557..a414cb6d60 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -261,6 +261,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
return 64;
 
case PIPE_CAP_GLSL_FEATURE_LEVEL:
+   case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
if (glsl120)
return 120;
return is_ir3(screen) ? 140 : 120;
diff --git a/src/gallium/drivers/i915/i915_screen.c 
b/src/gallium/drivers/i915/i915_screen.c
index 1b8c0ad9a2..b08d2283e7 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -342,6 +342,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap 
cap)
   return 64;
 
case PIPE_CAP_GLSL_FEATURE_LEVEL:
+   case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
   return 120;
 
case PIPE_CAP_CONSTANT_BUFFER_OFFSET_ALIGNMENT:
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c 
b/src/gallium/drivers/llvmpipe/lp_screen.c
index af1aff4e1e..f12ad09298 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -205,6 +205,8 @@ llvmpipe_get_param(struct pipe_screen *screen, enum 
pipe_cap param)
   return 1;
case PIPE_CAP_GLSL_FEATURE_LEVEL:
   return 330;
+   case PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY:
+  return 140;
case PIPE_CAP_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION:
   return 0;
case PIPE_CAP_COMPUTE:
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c 
b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index a24176a8e9..99249d26b3 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -64,6 +64,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)

Mesa (master): st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY

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

Author: Marek Olšák 
Date:   Wed May 23 00:46:02 2018 -0400

st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY

Reviewed-by: Timothy Arceri 

---

 src/mesa/state_tracker/st_extensions.c | 25 +++--
 1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index 2d56a88027..b5622b330b 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -936,12 +936,17 @@ void st_init_extensions(struct pipe_screen *screen,
 
/* Figure out GLSL support and set GLSLVersion to it. */
consts->GLSLVersion = screen->get_param(screen, 
PIPE_CAP_GLSL_FEATURE_LEVEL);
-   consts->GLSLVersionCompat = _min(consts->GLSLVersion, 140);
+   consts->GLSLVersionCompat =
+  screen->get_param(screen, PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY);
+
+   const unsigned GLSLVersion =
+  api == API_OPENGL_COMPAT ? consts->GLSLVersionCompat :
+ consts->GLSLVersion;
 
_mesa_override_glsl_version(consts);
 
if (options->force_glsl_version > 0 &&
-   options->force_glsl_version <= consts->GLSLVersion) {
+   options->force_glsl_version <= GLSLVersion) {
   consts->ForceGLSLVersion = options->force_glsl_version;
}
 
@@ -955,24 +960,24 @@ void st_init_extensions(struct pipe_screen *screen,
 
consts->AllowGLSLCrossStageInterpolationMismatch = 
options->allow_glsl_cross_stage_interpolation_mismatch;
 
-   if (consts->GLSLVersion >= 400)
+   if (GLSLVersion >= 400)
   extensions->ARB_gpu_shader5 = GL_TRUE;
-   if (consts->GLSLVersion >= 410)
+   if (GLSLVersion >= 410)
   extensions->ARB_shader_precision = GL_TRUE;
 
/* This extension needs full OpenGL 3.2, but we don't know if that's
 * supported at this point. Only check the GLSL version. */
-   if (consts->GLSLVersion >= 150 &&
+   if (GLSLVersion >= 150 &&
screen->get_param(screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT)) {
   extensions->AMD_vertex_shader_layer = GL_TRUE;
}
 
-   if (consts->GLSLVersion >= 140) {
+   if (GLSLVersion >= 140) {
   if (screen->get_param(screen, PIPE_CAP_TGSI_ARRAY_COMPONENTS))
  extensions->ARB_enhanced_layouts = GL_TRUE;
}
 
-   if (consts->GLSLVersion >= 130) {
+   if (GLSLVersion >= 130) {
   consts->NativeIntegers = GL_TRUE;
   consts->MaxClipPlanes = 8;
 
@@ -1024,7 +1029,7 @@ void st_init_extensions(struct pipe_screen *screen,
 * invocations of a geometry shader. There is no separate cap for that, so
 * we check the GLSLVersion.
 */
-   if (consts->GLSLVersion >= 400 &&
+   if (GLSLVersion >= 400 &&
screen->get_shader_param(screen, PIPE_SHADER_GEOMETRY,
 PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) {
   extensions->OES_geometry_shader = GL_TRUE;
@@ -1171,7 +1176,7 @@ void st_init_extensions(struct pipe_screen *screen,
 
consts->MaxViewports = screen->get_param(screen, PIPE_CAP_MAX_VIEWPORTS);
if (consts->MaxViewports >= 16) {
-  if (consts->GLSLVersion >= 400) {
+  if (GLSLVersion >= 400) {
  consts->ViewportBounds.Min = -32768.0;
  consts->ViewportBounds.Max = 32767.0;
   } else {
@@ -1201,7 +1206,7 @@ void st_init_extensions(struct pipe_screen *screen,
 * Assume that ES3 is supported if GLSL 3.30 is supported.
 * (OpenGL 3.3 is a requirement for that extension.)
 */
-   if (consts->GLSLVersion >= 330 &&
+   if (GLSLVersion >= 330 &&
/* Requirements for ETC2 emulation. */
screen->is_format_supported(screen, PIPE_FORMAT_R8G8B8A8_UNORM,
PIPE_TEXTURE_2D, 0,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glsl: parse #version XXX compatibility

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

Author: Marek Olšák 
Date:   Wed Feb 14 21:00:09 2018 +0100

glsl: parse #version XXX compatibility

Reviewed-by: Nicolai Hähnle 
Reviewed-by: Timothy Arceri 

---

 src/compiler/glsl/glcpp/glcpp-parse.y | 12 
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y 
b/src/compiler/glsl/glcpp/glcpp-parse.y
index d83f99f1c7..4be5cfa3d5 100644
--- a/src/compiler/glsl/glcpp/glcpp-parse.y
+++ b/src/compiler/glsl/glcpp/glcpp-parse.y
@@ -2317,7 +2317,7 @@ _glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, 
YYLTYPE *loc)
 
 static void
 _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t 
version,
- const char *es_identifier,
+ const char *identifier,
  bool explicitly_set)
 {
if (parser->version_set)
@@ -2329,11 +2329,15 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t 
*parser, intmax_t versio
add_builtin_define (parser, "__VERSION__", version);
 
parser->is_gles = (version == 100) ||
- (es_identifier && (strcmp(es_identifier, "es") == 0));
+ (identifier && (strcmp(identifier, "es") == 0));
+   bool is_compat = version >= 150 && identifier &&
+strcmp(identifier, "compatibility") == 0;
 
/* Add pre-defined macros. */
if (parser->is_gles)
   add_builtin_define(parser, "GL_ES", 1);
+   else if (is_compat)
+  add_builtin_define(parser, "GL_compatibility_profile", 1);
else if (version >= 150)
   add_builtin_define(parser, "GL_core_profile", 1);
 
@@ -2368,8 +2372,8 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t 
*parser, intmax_t versio
if (explicitly_set) {
   _mesa_string_buffer_printf(parser->output,
  "#version %" PRIiMAX "%s%s", version,
- es_identifier ? " " : "",
- es_identifier ? es_identifier : "");
+ identifier ? " " : "",
+ identifier ? identifier : "");
}
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: expose AMD_vertex_shader_layer in the compatibility profile

2018-05-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 16ac832392c7737e42f4b1019dc3e8c688c6d3f4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=16ac832392c7737e42f4b1019dc3e8c688c6d3f4

Author: Marek Olšák 
Date:   Thu Feb 15 01:20:46 2018 +0100

mesa: expose AMD_vertex_shader_layer in the compatibility profile

This requires layered FBOs from GL 3.2.

Gallium drivers don't expose this yet due to:
"st/mesa: use PIPE_CAP_GLSL_FEATURE_LEVEL_COMPATIBILITY"

Reviewed-by: Nicolai Hähnle 
Reviewed-by: Timothy Arceri 

---

 src/mesa/drivers/dri/i965/intel_extensions.c | 3 ++-
 src/mesa/main/extensions_table.h | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c 
b/src/mesa/drivers/dri/i965/intel_extensions.c
index 2e79e96503..93a4de139e 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -196,7 +196,8 @@ intelInitExtensions(struct gl_context *ctx)
   ctx->Extensions.ARB_texture_multisample = true;
   ctx->Extensions.ARB_uniform_buffer_object = true;
 
-  ctx->Extensions.AMD_vertex_shader_layer = true;
+  if (ctx->API != API_OPENGL_COMPAT)
+ ctx->Extensions.AMD_vertex_shader_layer = true;
   ctx->Extensions.EXT_framebuffer_multisample = true;
   ctx->Extensions.EXT_framebuffer_multisample_blit_scaled = true;
   ctx->Extensions.EXT_transform_feedback = true;
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 29eb41c605..02b0d2689c 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -15,7 +15,7 @@ EXT(AMD_pinned_memory   , 
AMD_pinned_memory
 EXT(AMD_seamless_cubemap_per_texture, AMD_seamless_cubemap_per_texture 
  , GLL, GLC,  x ,  x , 2009)
 EXT(AMD_shader_stencil_export   , ARB_shader_stencil_export
  , GLL, GLC,  x ,  x , 2009)
 EXT(AMD_shader_trinary_minmax   , dummy_true   
  , GLL, GLC,  x ,  x , 2012)
-EXT(AMD_vertex_shader_layer , AMD_vertex_shader_layer  
  ,  x , GLC,  x ,  x , 2012)
+EXT(AMD_vertex_shader_layer , AMD_vertex_shader_layer  
  , GLL, GLC,  x ,  x , 2012)
 EXT(AMD_vertex_shader_viewport_index, AMD_vertex_shader_viewport_index 
  ,  x , GLC,  x ,  x , 2012)
 
 EXT(ANDROID_extension_pack_es31a, ANDROID_extension_pack_es31a 
  ,  x ,  x ,  x ,  31, 2014)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: print Compatibility Profile in the version string

2018-05-29 Thread Marek Olšák
Module: Mesa
Branch: master
Commit: 27a9f273109d0f7826013afcc3b9a3dcd6a79a91
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=27a9f273109d0f7826013afcc3b9a3dcd6a79a91

Author: Marek Olšák 
Date:   Wed Feb 14 21:21:24 2018 +0100

mesa: print Compatibility Profile in the version string

Reviewed-by: Nicolai Hähnle 
Reviewed-by: Timothy Arceri 

---

 src/mesa/main/version.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 3f3dff0bde..1bdccf4a1d 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -128,7 +128,9 @@ create_version_string(struct gl_context *ctx, const char 
*prefix)
 ,
 prefix,
 ctx->Version / 10, ctx->Version % 10,
-(ctx->API == API_OPENGL_CORE) ? " (Core Profile)" : ""
+(ctx->API == API_OPENGL_CORE) ? " (Core Profile)" :
+ (ctx->API == API_OPENGL_COMPAT && ctx->Version >= 32) ?
+" (Compatibility Profile)" : ""
 );
}
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: handle GL_UNSIGNED_INT64_ARB properly (v2)

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

Author: Marek Olšák 
Date:   Fri May 25 16:37:29 2018 -0400

mesa: handle GL_UNSIGNED_INT64_ARB properly (v2)

Bindless texture handles can be passed via vertex attribs using this type.
This fixes a bunch of bindless piglit tests on radeonsi.

Cc: 18.0 18.1 
Reviewed-by: Ilia Mirkin 

---

 src/mesa/main/glformats.c  | 2 ++
 src/mesa/vbo/vbo_private.h | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index cba5e670db..667020c193 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -563,6 +563,8 @@ _mesa_bytes_per_vertex_attrib(GLint comps, GLenum type)
  return sizeof(GLuint);
   else
  return -1;
+   case GL_UNSIGNED_INT64_ARB:
+  return comps * 8;
default:
   return -1;
}
diff --git a/src/mesa/vbo/vbo_private.h b/src/mesa/vbo/vbo_private.h
index b69f836aa0..3f7d0dc608 100644
--- a/src/mesa/vbo/vbo_private.h
+++ b/src/mesa/vbo/vbo_private.h
@@ -104,8 +104,8 @@ vbo_attrtype_to_double_flag(GLenum format)
case GL_FLOAT:
case GL_INT:
case GL_UNSIGNED_INT:
-   case GL_UNSIGNED_INT64_ARB:
   return GL_FALSE;
+   case GL_UNSIGNED_INT64_ARB:
case GL_DOUBLE:
   return GL_TRUE;
default:

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/mesa: fix assertion failures with GL_UNSIGNED_INT64_ARB (v2)

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

Author: Marek Olšák 
Date:   Fri May 25 16:37:29 2018 -0400

st/mesa: fix assertion failures with GL_UNSIGNED_INT64_ARB (v2)

Bindless texture handles can be passed via vertex attribs using this type.
They use the double codepath, so don't use st_pipe_vertex_format.

Cc: 18.0 18.1 
Reviewed-by: Ilia Mirkin 

---

 src/mesa/state_tracker/st_atom_array.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_atom_array.c 
b/src/mesa/state_tracker/st_atom_array.c
index 9a0935e21a..e4fc19eb5e 100644
--- a/src/mesa/state_tracker/st_atom_array.c
+++ b/src/mesa/state_tracker/st_atom_array.c
@@ -324,7 +324,6 @@ static void init_velement_lowered(const struct 
st_vertex_program *vp,
   int src_offset, int instance_divisor,
   int vbo_index, int idx)
 {
-   const unsigned format = st_pipe_vertex_format(attrib);
const GLubyte nr_components = attrib->Size;
 
if (attrib->Doubles) {
@@ -358,6 +357,8 @@ static void init_velement_lowered(const struct 
st_vertex_program *vp,
  }
   }
} else {
+  const unsigned format = st_pipe_vertex_format(attrib);
+
   init_velement([idx], src_offset,
 format, instance_divisor, vbo_index);
}

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): mesa: add display list support for glPatchParameter{i,fv}()

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

Author: Timothy Arceri 
Date:   Mon May 28 20:57:37 2018 +1000

mesa: add display list support for glPatchParameter{i,fv}()

This is required for tessellation shader Compat profile support.

Reviewed-by: Marek Olšák 

---

 src/mesa/main/dlist.c | 78 +++
 1 file changed, 78 insertions(+)

diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 8be223559a..4fc451000b 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -365,6 +365,11 @@ typedef enum
OPCODE_UNIFORM_3UIV,
OPCODE_UNIFORM_4UIV,
 
+   /* OpenGL 4.0 / GL_ARB_tessellation_shader */
+   OPCODE_PATCH_PARAMETER_I,
+   OPCODE_PATCH_PARAMETER_FV_INNER,
+   OPCODE_PATCH_PARAMETER_FV_OUTER,
+
/* OpenGL 4.2 / GL_ARB_separate_shader_objects */
OPCODE_USE_PROGRAM_STAGES,
OPCODE_PROGRAM_UNIFORM_1F,
@@ -3272,6 +3277,54 @@ save_Ortho(GLdouble left, GLdouble right,
 
 
 static void GLAPIENTRY
+save_PatchParameteri(GLenum pname, const GLint value)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+   n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_I, 2);
+   if (n) {
+  n[1].e = pname;
+  n[2].i = value;
+   }
+   if (ctx->ExecuteFlag) {
+  CALL_PatchParameteri(ctx->Exec, (pname, value));
+   }
+}
+
+
+static void GLAPIENTRY
+save_PatchParameterfv(GLenum pname, const GLfloat *params)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   Node *n;
+   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+
+   if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) {
+  n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_OUTER, 5);
+   } else {
+  assert(pname == GL_PATCH_DEFAULT_INNER_LEVEL);
+  n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_INNER, 3);
+   }
+   if (n) {
+  n[1].e = pname;
+  if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) {
+ n[2].f = params[0];
+ n[3].f = params[1];
+ n[4].f = params[2];
+ n[5].f = params[3];
+  } else {
+ n[2].f = params[0];
+ n[3].f = params[1];
+  }
+   }
+   if (ctx->ExecuteFlag) {
+  CALL_PatchParameterfv(ctx->Exec, (pname, params));
+   }
+}
+
+
+static void GLAPIENTRY
 save_PixelMapfv(GLenum map, GLint mapsize, const GLfloat *values)
 {
GET_CURRENT_CONTEXT(ctx);
@@ -8401,6 +8454,27 @@ execute_list(struct gl_context *ctx, GLuint list)
  case OPCODE_PASSTHROUGH:
 CALL_PassThrough(ctx->Exec, (n[1].f));
 break;
+ case OPCODE_PATCH_PARAMETER_I:
+CALL_PatchParameteri(ctx->Exec, (n[1].e, n[2].i));
+break;
+ case OPCODE_PATCH_PARAMETER_FV_INNER:
+{
+   GLfloat params[2];
+   params[0] = n[2].f;
+   params[1] = n[3].f;
+   CALL_PatchParameterfv(ctx->Exec, (n[1].e, params));
+}
+break;
+ case OPCODE_PATCH_PARAMETER_FV_OUTER:
+{
+   GLfloat params[4];
+   params[0] = n[2].f;
+   params[1] = n[3].f;
+   params[2] = n[4].f;
+   params[3] = n[5].f;
+   CALL_PatchParameterfv(ctx->Exec, (n[1].e, params));
+}
+break;
  case OPCODE_PIXEL_MAP:
 CALL_PixelMapfv(ctx->Exec,
 (n[1].e, n[2].i, get_pointer([3])));
@@ -9847,6 +9921,10 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_PointParameterf(table, save_PointParameterfEXT);
SET_PointParameterfv(table, save_PointParameterfvEXT);
 
+   /* 91. GL_ARB_tessellation_shader */
+   SET_PatchParameteri(table, save_PatchParameteri);
+   SET_PatchParameterfv(table, save_PatchParameterfv);
+
/* 173. GL_EXT_blend_func_separate */
SET_BlendFuncSeparate(table, save_BlendFuncSeparateEXT);
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): drisw: learn to query shmid handle type

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 9feaf333716f08111ac8a921940e3a0e3666df0e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9feaf333716f08111ac8a921940e3a0e3666df0e

Author: Marc-André Lureau 
Date:   Mon Jun 15 14:48:27 2015 +0200

drisw: learn to query shmid handle type

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/gallium/include/state_tracker/drisw_api.h |  1 +
 src/gallium/include/state_tracker/sw_winsys.h |  3 +--
 src/gallium/include/state_tracker/winsys_handle.h |  1 +
 src/gallium/winsys/sw/dri/dri_sw_winsys.c | 10 +-
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/gallium/include/state_tracker/drisw_api.h 
b/src/gallium/include/state_tracker/drisw_api.h
index 36bef087a4..e365ab81f1 100644
--- a/src/gallium/include/state_tracker/drisw_api.h
+++ b/src/gallium/include/state_tracker/drisw_api.h
@@ -2,6 +2,7 @@
 #define _DRISW_API_H_
 
 #include "pipe/p_compiler.h"
+#include "sw_winsys.h"
 
 struct pipe_screen;
 struct dri_drawable;
diff --git a/src/gallium/include/state_tracker/sw_winsys.h 
b/src/gallium/include/state_tracker/sw_winsys.h
index 0b792cd0ce..cd5838ad1d 100644
--- a/src/gallium/include/state_tracker/sw_winsys.h
+++ b/src/gallium/include/state_tracker/sw_winsys.h
@@ -37,14 +37,13 @@
 
 #include "pipe/p_compiler.h" /* for boolean */
 #include "pipe/p_format.h"
-
+#include "state_tracker/winsys_handle.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 
-struct winsys_handle;
 struct pipe_screen;
 struct pipe_context;
 struct pipe_resource;
diff --git a/src/gallium/include/state_tracker/winsys_handle.h 
b/src/gallium/include/state_tracker/winsys_handle.h
index 746e87683a..167c1a937f 100644
--- a/src/gallium/include/state_tracker/winsys_handle.h
+++ b/src/gallium/include/state_tracker/winsys_handle.h
@@ -9,6 +9,7 @@ extern "C" {
 #define WINSYS_HANDLE_TYPE_SHARED 0
 #define WINSYS_HANDLE_TYPE_KMS1
 #define WINSYS_HANDLE_TYPE_FD 2
+#define WINSYS_HANDLE_TYPE_SHMID   3
 
 /**
  * For use with pipe_screen::{texture_from_handle|texture_get_handle}.
diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c 
b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
index b36a53e960..8335e52200 100644
--- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
@@ -209,7 +209,15 @@ dri_sw_displaytarget_get_handle(struct sw_winsys *winsys,
 struct sw_displaytarget *dt,
 struct winsys_handle *whandle)
 {
-   assert(0);
+   struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
+
+   if (whandle->type == WINSYS_HANDLE_TYPE_SHMID) {
+  if (dri_sw_dt->shmid < 0)
+ return FALSE;
+  whandle->handle = dri_sw_dt->shmid;
+  return TRUE;
+   }
+
return FALSE;
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): drisw: use getImageShm() if available

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 17b27725fe5dd61ed461a45fb320464b45f045d8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=17b27725fe5dd61ed461a45fb320464b45f045d8

Author: Marc-André Lureau 
Date:   Mon Jun 15 15:09:58 2015 +0200

drisw: use getImageShm() if available

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/gallium/state_trackers/dri/drisw.c | 23 ++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/dri/drisw.c 
b/src/gallium/state_trackers/dri/drisw.c
index 40cbca5494..e24fcba386 100644
--- a/src/gallium/state_trackers/dri/drisw.c
+++ b/src/gallium/state_trackers/dri/drisw.c
@@ -117,6 +117,26 @@ get_image2(__DRIdrawable *dPriv, int x, int y, int width, 
int height, int stride
  data, dPriv->loaderPrivate);
 }
 
+static inline bool
+get_image_shm(__DRIdrawable *dPriv, int x, int y, int width, int height,
+  struct pipe_resource *res)
+{
+   __DRIscreen *sPriv = dPriv->driScreenPriv;
+   const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader;
+   struct winsys_handle whandle;
+
+   whandle.type = WINSYS_HANDLE_TYPE_SHMID;
+
+   if (loader->base.version < 4 || !loader->getImageShm)
+  return FALSE;
+
+   if (!res->screen->resource_get_handle(res->screen, NULL, res, , 
PIPE_HANDLE_USAGE_WRITE))
+  return FALSE;
+
+   loader->getImageShm(dPriv, x, y, width, height, whandle.handle, 
dPriv->loaderPrivate);
+   return TRUE;
+}
+
 static void
 drisw_update_drawable_info(struct dri_drawable *drawable)
 {
@@ -364,7 +384,8 @@ drisw_update_tex_buffer(struct dri_drawable *drawable,
x, y, w, h, );
 
/* Copy the Drawable content to the mapped texture buffer */
-   get_image(dPriv, x, y, w, h, map);
+   if (!get_image_shm(dPriv, x, y, w, h, res))
+  get_image(dPriv, x, y, w, h, map);
 
/* The pipe transfer has a pitch rounded up to the nearest 64 pixels.
   get_image() has a pitch rounded up to 4 bytes.  */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallium: move winsys handle to it's own file.

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: d2eaff33d0132ef17eb458f04e5369985129ce31
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d2eaff33d0132ef17eb458f04e5369985129ce31

Author: Marc-André Lureau 
Date:   Tue May 29 11:17:11 2018 +1000

gallium: move winsys handle to it's own file.

This will be used in the drisw interface later, which isn't
drm specific.

Reviewed-by: Marek Olšák 

---

 src/gallium/include/state_tracker/drm_driver.h| 49 +--
 src/gallium/include/state_tracker/winsys_handle.h | 57 +++
 2 files changed, 59 insertions(+), 47 deletions(-)

diff --git a/src/gallium/include/state_tracker/drm_driver.h 
b/src/gallium/include/state_tracker/drm_driver.h
index f188b5a7d4..19cd19f26e 100644
--- a/src/gallium/include/state_tracker/drm_driver.h
+++ b/src/gallium/include/state_tracker/drm_driver.h
@@ -4,58 +4,13 @@
 
 #include "pipe/p_compiler.h"
 
+#include "winsys_handle.h"
+
 struct pipe_screen;
 struct pipe_screen_config;
 struct pipe_context;
 struct pipe_resource;
 
-#define DRM_API_HANDLE_TYPE_SHARED 0
-#define DRM_API_HANDLE_TYPE_KMS1
-#define DRM_API_HANDLE_TYPE_FD 2
-
-
-/**
- * For use with pipe_screen::{texture_from_handle|texture_get_handle}.
- */
-struct winsys_handle
-{
-   /**
-* Input for texture_from_handle, valid values are
-* DRM_API_HANDLE_TYPE_SHARED or DRM_API_HANDLE_TYPE_FD.
-* Input to texture_get_handle,
-* to select handle for kms, flink, or prime.
-*/
-   unsigned type;
-   /**
-* Input for texture_get_handle, allows to export the offset
-* of a specific layer of an array texture.
-*/
-   unsigned layer;
-   /**
-* Input to texture_from_handle.
-* Output for texture_get_handle.
-*/
-   unsigned handle;
-   /**
-* Input to texture_from_handle.
-* Output for texture_get_handle.
-*/
-   unsigned stride;
-   /**
-* Input to texture_from_handle.
-* Output for texture_get_handle.
-*/
-   unsigned offset;
-
-   /**
-* Input to resource_from_handle.
-* Output from resource_get_handle.
-*/
-   uint64_t modifier;
-};
-
-
-
 /**
  * Configuration queries.
  */
diff --git a/src/gallium/include/state_tracker/winsys_handle.h 
b/src/gallium/include/state_tracker/winsys_handle.h
new file mode 100644
index 00..9217e4dcbf
--- /dev/null
+++ b/src/gallium/include/state_tracker/winsys_handle.h
@@ -0,0 +1,57 @@
+
+#ifndef _WINSYS_HANDLE_H_
+#define _WINSYS_HANDLE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DRM_API_HANDLE_TYPE_SHARED 0
+#define DRM_API_HANDLE_TYPE_KMS1
+#define DRM_API_HANDLE_TYPE_FD 2
+
+/**
+ * For use with pipe_screen::{texture_from_handle|texture_get_handle}.
+ */
+struct winsys_handle
+{
+   /**
+* Input for texture_from_handle, valid values are
+* WINSYS_HANDLE_TYPE_SHARED or WINSYS_HANDLE_TYPE_FD.
+* Input to texture_get_handle,
+* to select handle for kms, flink, or prime.
+*/
+   unsigned type;
+   /**
+* Input for texture_get_handle, allows to export the offset
+* of a specific layer of an array texture.
+*/
+   unsigned layer;
+   /**
+* Input to texture_from_handle.
+* Output for texture_get_handle.
+*/
+   unsigned handle;
+   /**
+* Input to texture_from_handle.
+* Output for texture_get_handle.
+*/
+   unsigned stride;
+   /**
+* Input to texture_from_handle.
+* Output for texture_get_handle.
+*/
+   unsigned offset;
+
+   /**
+* Input to resource_from_handle.
+* Output from resource_get_handle.
+*/
+   uint64_t modifier;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _WINSYS_HANDLE_H_ */

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): drisw: use putImageShm if available

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 63c427fa71a07649d5c033a5c6184ef701348590
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63c427fa71a07649d5c033a5c6184ef701348590

Author: Marc-André Lureau 
Date:   Wed Jun 10 17:34:15 2015 +0200

drisw: use putImageShm if available

If the DRIswrastLoaderExtension implements putImageShm, bind it to
drisw_loader_funcs.

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/gallium/include/state_tracker/drisw_api.h |  3 +++
 src/gallium/state_trackers/dri/drisw.c| 37 +--
 2 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/src/gallium/include/state_tracker/drisw_api.h 
b/src/gallium/include/state_tracker/drisw_api.h
index 03d5ee405a..36bef087a4 100644
--- a/src/gallium/include/state_tracker/drisw_api.h
+++ b/src/gallium/include/state_tracker/drisw_api.h
@@ -18,6 +18,9 @@ struct drisw_loader_funcs
   void *data, unsigned width, unsigned height);
void (*put_image2) (struct dri_drawable *dri_drawable,
void *data, int x, int y, unsigned width, unsigned 
height, unsigned stride);
+   void (*put_image_shm) (struct dri_drawable *dri_drawable,
+  int shmid, char *shmaddr, unsigned offset,
+  int x, int y, unsigned width, unsigned height, 
unsigned stride);
 };
 
 #endif
diff --git a/src/gallium/state_trackers/dri/drisw.c 
b/src/gallium/state_trackers/dri/drisw.c
index eb5752386d..40cbca5494 100644
--- a/src/gallium/state_trackers/dri/drisw.c
+++ b/src/gallium/state_trackers/dri/drisw.c
@@ -26,14 +26,6 @@
  *
  **/
 
-/* TODO:
- *
- * xshm / EGLImage:
- *
- * Allow the loaders to use the XSHM extension. It probably requires callbacks
- * for createImage/destroyImage similar to DRI2 getBuffers.
- */
-
 #include "util/u_format.h"
 #include "util/u_memory.h"
 #include "util/u_inlines.h"
@@ -87,6 +79,19 @@ put_image2(__DRIdrawable *dPriv, void *data, int x, int y,
 }
 
 static inline void
+put_image_shm(__DRIdrawable *dPriv, int shmid, char *shmaddr,
+  unsigned offset, int x, int y,
+  unsigned width, unsigned height, unsigned stride)
+{
+   __DRIscreen *sPriv = dPriv->driScreenPriv;
+   const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader;
+
+   loader->putImageShm(dPriv, __DRI_SWRAST_IMAGE_OP_SWAP,
+   x, y, width, height, stride,
+   shmid, shmaddr, offset, dPriv->loaderPrivate);
+}
+
+static inline void
 get_image(__DRIdrawable *dPriv, int x, int y, int width, int height, void 
*data)
 {
__DRIscreen *sPriv = dPriv->driScreenPriv;
@@ -153,6 +158,17 @@ drisw_put_image2(struct dri_drawable *drawable,
 }
 
 static inline void
+drisw_put_image_shm(struct dri_drawable *drawable,
+int shmid, char *shmaddr, unsigned offset,
+int x, int y, unsigned width, unsigned height,
+unsigned stride)
+{
+   __DRIdrawable *dPriv = drawable->dPriv;
+
+   put_image_shm(dPriv, shmid, shmaddr, offset, x, y, width, height, stride);
+}
+
+static inline void
 drisw_present_texture(__DRIdrawable *dPriv,
   struct pipe_resource *ptex, struct pipe_box *sub_box)
 {
@@ -394,6 +410,7 @@ static struct drisw_loader_funcs drisw_lf = {
 static const __DRIconfig **
 drisw_init_screen(__DRIscreen * sPriv)
 {
+   const __DRIswrastLoaderExtension *loader = sPriv->swrast_loader;
const __DRIconfig **configs;
struct dri_screen *screen;
struct pipe_screen *pscreen = NULL;
@@ -409,6 +426,10 @@ drisw_init_screen(__DRIscreen * sPriv)
 
sPriv->driverPrivate = (void *)screen;
sPriv->extensions = drisw_screen_extensions;
+   if (loader->base.version >= 4) {
+  if (loader->putImageShm)
+ drisw_lf.put_image_shm = drisw_put_image_shm;
+   }
 
if (pipe_loader_sw_probe_dri(>dev, _lf)) {
   dri_init_options(screen);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): drisw/glx: implement getImageShm

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 33ce3aa512fa9c8313003f61516588e1ae3e5f8f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=33ce3aa512fa9c8313003f61516588e1ae3e5f8f

Author: Marc-André Lureau 
Date:   Mon Jun 15 15:07:34 2015 +0200

drisw/glx: implement getImageShm

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/glx/drisw_glx.c | 31 ++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index 641917361b..3ff6a9617f 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -313,6 +313,32 @@ swrastGetImage(__DRIdrawable * read,
swrastGetImage2(read, x, y, w, h, 0, data, loaderPrivate);
 }
 
+static void
+swrastGetImageShm(__DRIdrawable * read,
+  int x, int y, int w, int h,
+  int shmid, void *loaderPrivate)
+{
+   struct drisw_drawable *prp = loaderPrivate;
+   __GLXDRIdrawable *pread = &(prp->base);
+   Display *dpy = pread->psc->dpy;
+   Drawable readable;
+   XImage *ximage;
+
+   if (!prp->ximage || shmid != prp->shminfo.shmid) {
+  if (!XCreateDrawable(prp, shmid, dpy))
+ return;
+   }
+   readable = pread->xDrawable;
+
+   ximage = prp->ximage;
+   ximage->data = prp->shminfo.shmaddr; /* no offset */
+   ximage->width = w;
+   ximage->height = h;
+   ximage->bytes_per_line = bytes_per_line(w * ximage->bits_per_pixel, 32);
+
+   XShmGetImage(dpy, readable, ximage, x, y, ~0L);
+}
+
 static __DRIswrastLoaderExtension swrastLoaderExtension = {
.base = {__DRI_SWRAST_LOADER, 4 },
 
@@ -322,6 +348,7 @@ static __DRIswrastLoaderExtension swrastLoaderExtension = {
.putImage2   = swrastPutImage2,
.getImage2   = swrastGetImage2,
.putImageShm = swrastPutImageShm,
+   .getImageShm = swrastGetImageShm,
 };
 
 static const __DRIextension *loader_extensions[] = {
@@ -802,8 +829,10 @@ driswCreateScreen(int screen, struct glx_display *priv)
if (extensions == NULL)
   goto handle_error;
 
-   if (!check_xshm(psc->base.dpy))
+   if (!check_xshm(psc->base.dpy)) {
   swrastLoaderExtension.putImageShm = NULL;
+  swrastLoaderExtension.getImageShm = NULL;
+   }
 
for (i = 0; extensions[i]; i++) {
   if (strcmp(extensions[i]->name, __DRI_CORE) == 0)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): glx/drisw: make the shm/non-shm loader extensions separately.

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: d3ff4787322c5855aad1e9ee0ee0aa141f7d6420
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3ff4787322c5855aad1e9ee0ee0aa141f7d6420

Author: Dave Airlie 
Date:   Tue May 29 13:04:03 2018 +1000

glx/drisw: make the shm/non-shm loader extensions separately.

I disliked removing the const here, function tables are meant
to be const just to avoid having to think about them,
make a second table for the shm vs non-shm paths to use.

Reviewed-by: Adam Jackson 

---

 src/glx/drisw_glx.c | 32 
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index 3ff6a9617f..a2777100a3 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -339,7 +339,7 @@ swrastGetImageShm(__DRIdrawable * read,
XShmGetImage(dpy, readable, ximage, x, y, ~0L);
 }
 
-static __DRIswrastLoaderExtension swrastLoaderExtension = {
+static const __DRIswrastLoaderExtension swrastLoaderExtension_shm = {
.base = {__DRI_SWRAST_LOADER, 4 },
 
.getDrawableInfo = swrastGetDrawableInfo,
@@ -351,7 +351,22 @@ static __DRIswrastLoaderExtension swrastLoaderExtension = {
.getImageShm = swrastGetImageShm,
 };
 
-static const __DRIextension *loader_extensions[] = {
+static const __DRIextension *loader_extensions_shm[] = {
+   _shm.base,
+   NULL
+};
+
+static const __DRIswrastLoaderExtension swrastLoaderExtension = {
+   .base = {__DRI_SWRAST_LOADER, 3 },
+
+   .getDrawableInfo = swrastGetDrawableInfo,
+   .putImage= swrastPutImage,
+   .getImage= swrastGetImage,
+   .putImage2   = swrastPutImage2,
+   .getImage2   = swrastGetImage2,
+};
+
+static const __DRIextension *loader_extensions_noshm[] = {
,
NULL
 };
@@ -811,6 +826,7 @@ driswCreateScreen(int screen, struct glx_display *priv)
struct drisw_screen *psc;
struct glx_config *configs = NULL, *visuals = NULL;
int i;
+   const __DRIextension **loader_extensions_local;
 
psc = calloc(1, sizeof *psc);
if (psc == NULL)
@@ -829,10 +845,10 @@ driswCreateScreen(int screen, struct glx_display *priv)
if (extensions == NULL)
   goto handle_error;
 
-   if (!check_xshm(psc->base.dpy)) {
-  swrastLoaderExtension.putImageShm = NULL;
-  swrastLoaderExtension.getImageShm = NULL;
-   }
+   if (!check_xshm(psc->base.dpy))
+  loader_extensions_local = loader_extensions_noshm;
+   else
+  loader_extensions_local = loader_extensions_shm;
 
for (i = 0; extensions[i]; i++) {
   if (strcmp(extensions[i]->name, __DRI_CORE) == 0)
@@ -850,12 +866,12 @@ driswCreateScreen(int screen, struct glx_display *priv)
 
if (psc->swrast->base.version >= 4) {
   psc->driScreen =
- psc->swrast->createNewScreen2(screen, loader_extensions,
+ psc->swrast->createNewScreen2(screen, loader_extensions_local,
extensions,
_configs, psc);
} else {
   psc->driScreen =
- psc->swrast->createNewScreen(screen, loader_extensions,
+ psc->swrast->createNewScreen(screen, loader_extensions_local,
   _configs, psc);
}
if (psc->driScreen == NULL) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): drisw/glx: use XShm if possible

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: bcd80be49a8260c2233dd07b2048d459a91a9c91
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bcd80be49a8260c2233dd07b2048d459a91a9c91

Author: Marc-André Lureau 
Date:   Wed Jun 10 17:58:31 2015 +0200

drisw/glx: use XShm if possible

Implements putImageShm from DRIswrastLoaderExtension.

If XShm extension is not available, or fails, it will fallback on
regular XPutImage().

Tested on Linux only with 16bpp and 32bpp visual.

(airlied: tested on 24bpp as well)

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/glx/drisw_glx.c  | 165 +++
 src/glx/drisw_priv.h |   3 +
 2 files changed, 144 insertions(+), 24 deletions(-)

diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
index df2467a5c2..641917361b 100644
--- a/src/glx/drisw_glx.c
+++ b/src/glx/drisw_glx.c
@@ -28,10 +28,12 @@
 #include 
 #include "dri_common.h"
 #include "drisw_priv.h"
+#include 
+#include 
 
 static Bool
-XCreateDrawable(struct drisw_drawable * pdp,
-Display * dpy, XID drawable, int visualid)
+XCreateGCs(struct drisw_drawable * pdp,
+   Display * dpy, XID drawable, int visualid)
 {
XGCValues gcvalues;
long visMask;
@@ -56,15 +58,78 @@ XCreateDrawable(struct drisw_drawable * pdp,
if (!pdp->visinfo || num_visuals == 0)
   return False;
 
-   /* create XImage */
-   pdp->ximage = XCreateImage(dpy,
-  pdp->visinfo->visual,
-  pdp->visinfo->depth,
-  ZPixmap, 0, /* format, offset */
-  NULL,   /* data */
-  0, 0,   /* width, height */
-  32, /* bitmap_pad */
-  0); /* bytes_per_line */
+   return True;
+}
+
+static int xshm_error = 0;
+static int xshm_opcode = -1;
+
+/**
+ * Catches potential Xlib errors.
+ */
+static int
+handle_xerror(Display *dpy, XErrorEvent *event)
+{
+   (void) dpy;
+
+   assert(xshm_opcode != -1);
+   if (event->request_code != xshm_opcode ||
+   event->minor_code != X_ShmAttach)
+  return 0;
+
+   xshm_error = 1;
+   return 0;
+}
+
+static Bool
+XCreateDrawable(struct drisw_drawable * pdp, int shmid, Display * dpy)
+{
+   if (pdp->ximage) {
+  XDestroyImage(pdp->ximage);
+  pdp->ximage = NULL;
+   }
+
+   if (!xshm_error && shmid >= 0) {
+  pdp->shminfo.shmid = shmid;
+  pdp->ximage = XShmCreateImage(dpy,
+pdp->visinfo->visual,
+pdp->visinfo->depth,
+ZPixmap,  /* format */
+NULL, /* data */
+>shminfo,/* shminfo */
+0, 0);/* width, height */
+  if (pdp->ximage != NULL) {
+ int (*old_handler)(Display *, XErrorEvent *);
+
+ /* dispatch pending errors */
+ XSync(dpy, False);
+
+ old_handler = XSetErrorHandler(handle_xerror);
+ /* This may trigger the X protocol error we're ready to catch: */
+ XShmAttach(dpy, >shminfo);
+ XSync(dpy, False);
+
+ if (xshm_error) {
+ /* we are on a remote display, this error is normal, don't print it */
+XDestroyImage(pdp->ximage);
+pdp->ximage = NULL;
+ }
+
+ (void) XSetErrorHandler(old_handler);
+  }
+   }
+
+   if (pdp->ximage == NULL) {
+  pdp->shminfo.shmid = -1;
+  pdp->ximage = XCreateImage(dpy,
+ pdp->visinfo->visual,
+ pdp->visinfo->depth,
+ ZPixmap, 0, /* format, offset */
+ NULL,   /* data */
+ 0, 0,   /* width, height */
+ 32, /* bitmap_pad */
+ 0); /* bytes_per_line */
+   }
 
   /**
* swrast does not handle 24-bit depth with 24 bpp, so let X do the
@@ -79,7 +144,9 @@ XCreateDrawable(struct drisw_drawable * pdp,
 static void
 XDestroyDrawable(struct drisw_drawable * pdp, Display * dpy, XID drawable)
 {
-   XDestroyImage(pdp->ximage);
+   if (pdp->ximage)
+  XDestroyImage(pdp->ximage);
+
free(pdp->visinfo);
 
XFreeGC(dpy, pdp->gc);
@@ -133,9 +200,9 @@ bytes_per_line(unsigned pitch_bits, unsigned mul)
 }
 
 static void
-swrastPutImage2(__DRIdrawable * draw, int op,
+swrastXPutImage(__DRIdrawable * draw, int op,
 int x, int y, int w, int h, int stride,
-char *data, void *loaderPrivate)
+int shmid, char *data, void *loaderPrivate)
 {
struct drisw_drawable *pdp = loaderPrivate;

Mesa (master): drisw: use shared memory when possible

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: cf54bd5e8381dba18d52fe438acda20cc1685bf3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cf54bd5e8381dba18d52fe438acda20cc1685bf3

Author: Marc-André Lureau 
Date:   Wed Jun 10 17:45:11 2015 +0200

drisw: use shared memory when possible

If drisw_loader_funcs implements put_image_shm, allocates display
target data with shared memory and display with put_image_shm().

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 src/gallium/winsys/sw/dri/dri_sw_winsys.c | 72 +--
 1 file changed, 60 insertions(+), 12 deletions(-)

diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c 
b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
index 00849985d6..b36a53e960 100644
--- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
@@ -26,6 +26,9 @@
  *
  **/
 
+#include 
+#include 
+
 #include "pipe/p_compiler.h"
 #include "pipe/p_format.h"
 #include "util/u_inlines.h"
@@ -45,6 +48,7 @@ struct dri_sw_displaytarget
unsigned stride;
 
unsigned map_flags;
+   int shmid;
void *data;
void *mapped;
const void *front_private;
@@ -79,6 +83,25 @@ dri_sw_is_displaytarget_format_supported( struct sw_winsys 
*ws,
return TRUE;
 }
 
+static char *
+alloc_shm(struct dri_sw_displaytarget *dri_sw_dt, unsigned size)
+{
+   char *addr;
+
+   dri_sw_dt->shmid = shmget(IPC_PRIVATE, size, IPC_CREAT|0777);
+   if (dri_sw_dt->shmid < 0)
+  return NULL;
+
+   addr = (char *) shmat(dri_sw_dt->shmid, 0, 0);
+   /* mark the segment immediately for deletion to avoid leaks */
+   shmctl(dri_sw_dt->shmid, IPC_RMID, 0);
+
+   if (addr == (char *) -1)
+  return NULL;
+
+   return addr;
+}
+
 static struct sw_displaytarget *
 dri_sw_displaytarget_create(struct sw_winsys *winsys,
 unsigned tex_usage,
@@ -88,6 +111,7 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys,
 const void *front_private,
 unsigned *stride)
 {
+   struct dri_sw_winsys *ws = dri_sw_winsys(winsys);
struct dri_sw_displaytarget *dri_sw_dt;
unsigned nblocksy, size, format_stride;
 
@@ -106,7 +130,13 @@ dri_sw_displaytarget_create(struct sw_winsys *winsys,
nblocksy = util_format_get_nblocksy(format, height);
size = dri_sw_dt->stride * nblocksy;
 
-   dri_sw_dt->data = align_malloc(size, alignment);
+   dri_sw_dt->shmid = -1;
+   if (ws->lf->put_image_shm)
+  dri_sw_dt->data = alloc_shm(dri_sw_dt, size);
+
+   if(!dri_sw_dt->data)
+  dri_sw_dt->data = align_malloc(size, alignment);
+
if(!dri_sw_dt->data)
   goto no_data;
 
@@ -125,7 +155,12 @@ dri_sw_displaytarget_destroy(struct sw_winsys *ws,
 {
struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
 
-   align_free(dri_sw_dt->data);
+   if (dri_sw_dt->shmid >= 0) {
+  shmdt(dri_sw_dt->data);
+  shmctl(dri_sw_dt->shmid, IPC_RMID, 0);
+   } else {
+  align_free(dri_sw_dt->data);
+   }
 
FREE(dri_sw_dt);
 }
@@ -187,25 +222,38 @@ dri_sw_displaytarget_display(struct sw_winsys *ws,
struct dri_sw_winsys *dri_sw_ws = dri_sw_winsys(ws);
struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
struct dri_drawable *dri_drawable = (struct dri_drawable *)context_private;
-   unsigned width, height;
+   unsigned width, height, x = 0, y = 0;
unsigned blsize = util_format_get_blocksize(dri_sw_dt->format);
+   unsigned offset = 0;
+   void *data = dri_sw_dt->data;
 
/* Set the width to 'stride / cpp'.
 *
 * PutImage correctly clips to the width of the dst drawable.
 */
-   width = dri_sw_dt->stride / blsize;
-
-   height = dri_sw_dt->height;
-
if (box) {
-   void *data;
-   data = (char *)dri_sw_dt->data + (dri_sw_dt->stride * box->y) + box->x 
* blsize;
-   dri_sw_ws->lf->put_image2(dri_drawable, data,
- box->x, box->y, box->width, box->height, 
dri_sw_dt->stride);
+  offset = (dri_sw_dt->stride * box->y) + box->x * blsize;
+  data += offset;
+  x = box->x;
+  y = box->y;
+  width = box->width;
+  height = box->height;
} else {
-   dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height);
+  width = dri_sw_dt->stride / blsize;
+  height = dri_sw_dt->height;
}
+
+   if (dri_sw_dt->shmid != -1) {
+  dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, 
dri_sw_dt->data, offset,
+   x, y, width, height, dri_sw_dt->stride);
+  return;
+   }
+
+   if (box)
+  dri_sw_ws->lf->put_image2(dri_drawable, data,
+x, y, width, height, dri_sw_dt->stride);
+   else
+  dri_sw_ws->lf->put_image(dri_drawable, data, width, height);
 }
 
 static void

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org

Mesa (master): dri: add putImageShm and getImageShm to swrastLoader

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: de8085e649235cd120e9eb06b82cc1dbabeb8652
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=de8085e649235cd120e9eb06b82cc1dbabeb8652

Author: Marc-André Lureau 
Date:   Wed Jun 10 17:28:47 2015 +0200

dri: add putImageShm and getImageShm to swrastLoader

Add new API to put and get an image using shared memory. Instead of only
passing the data pointer, 3 arguments are given: the shmid, the data
offset and the shmaddr.

Bump interface version.

Reviewed-by: Dave Airlie 
Reviewed-by: Adam Jackson 

---

 include/GL/internal/dri_interface.h | 20 +++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/include/GL/internal/dri_interface.h 
b/include/GL/internal/dri_interface.h
index 319a1fe4f9..c32cdd3767 100644
--- a/include/GL/internal/dri_interface.h
+++ b/include/GL/internal/dri_interface.h
@@ -589,7 +589,7 @@ struct __DRIdamageExtensionRec {
  * SWRast Loader extension.
  */
 #define __DRI_SWRAST_LOADER "DRI_SWRastLoader"
-#define __DRI_SWRAST_LOADER_VERSION 3
+#define __DRI_SWRAST_LOADER_VERSION 4
 struct __DRIswrastLoaderExtensionRec {
 __DRIextension base;
 
@@ -631,6 +631,24 @@ struct __DRIswrastLoaderExtensionRec {
void (*getImage2)(__DRIdrawable *readable,
 int x, int y, int width, int height, int stride,
 char *data, void *loaderPrivate);
+
+/**
+ * Put shm image to drawable
+ *
+ * \since 4
+ */
+void (*putImageShm)(__DRIdrawable *drawable, int op,
+int x, int y, int width, int height, int stride,
+int shmid, char *shmaddr, unsigned offset,
+void *loaderPrivate);
+/**
+ * Get shm image from readable
+ *
+ * \since 4
+ */
+void (*getImageShm)(__DRIdrawable *readable,
+int x, int y, int width, int height,
+int shmid, void *loaderPrivate);
 };
 
 /**

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): gallium/winsys: rename DRM_API_HANDLE_* to WINSYS_HANDLE_*

2018-05-29 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: b7ac0779e0228969536a6738926b8b7a0d565cd4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7ac0779e0228969536a6738926b8b7a0d565cd4

Author: Dave Airlie 
Date:   Tue May 29 11:21:38 2018 +1000

gallium/winsys: rename DRM_API_HANDLE_* to WINSYS_HANDLE_*

This just renames this as we want to add an shm handle which
isn't really drm related.

Originally by: Marc-André Lureau 
(airlied: I used this sed script instead)
This was generated with:
 git grep -l 'DRM_API_' | xargs sed -i 's/DRM_API_/WINSYS_/g'

Reviewed-by: Marek Olšák 

---

 src/gallium/auxiliary/renderonly/renderonly.c |  4 +--
 src/gallium/auxiliary/renderonly/renderonly.h |  2 +-
 src/gallium/auxiliary/vl/vl_winsys_dri.c  |  2 +-
 src/gallium/auxiliary/vl/vl_winsys_dri3.c |  4 +--
 src/gallium/drivers/etnaviv/etnaviv_resource.c|  8 +++---
 src/gallium/drivers/etnaviv/etnaviv_screen.c  |  4 +--
 src/gallium/drivers/freedreno/freedreno_screen.c  | 12 -
 src/gallium/drivers/nouveau/nouveau_screen.c  | 12 -
 src/gallium/drivers/radeonsi/si_texture.c |  2 +-
 src/gallium/drivers/tegra/tegra_screen.c  |  4 +--
 src/gallium/drivers/v3d/v3d_resource.c| 10 
 src/gallium/drivers/vc4/vc4_resource.c| 10 
 src/gallium/include/pipe/p_screen.h   |  6 ++---
 src/gallium/include/state_tracker/winsys_handle.h |  6 ++---
 src/gallium/state_trackers/dri/dri2.c | 30 +++
 src/gallium/state_trackers/nine/swapchain9.c  |  2 +-
 src/gallium/state_trackers/va/buffer.c|  2 +-
 src/gallium/state_trackers/va/surface.c   |  4 +--
 src/gallium/state_trackers/vdpau/output.c |  2 +-
 src/gallium/state_trackers/vdpau/surface.c|  2 +-
 src/gallium/state_trackers/xa/xa_tracker.c|  8 +++---
 src/gallium/winsys/amdgpu/drm/amdgpu_bo.c | 10 
 src/gallium/winsys/i915/drm/i915_drm_buffer.c | 12 -
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c | 14 +--
 src/gallium/winsys/svga/drm/vmw_screen_dri.c  | 14 +--
 src/gallium/winsys/svga/drm/vmw_screen_ioctl.c|  6 ++---
 src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.c | 12 -
 src/gallium/winsys/virgl/drm/virgl_drm_winsys.c   | 12 -
 src/mesa/state_tracker/st_cb_memoryobjects.c  |  2 +-
 src/mesa/state_tracker/st_vdpau.c |  2 +-
 30 files changed, 110 insertions(+), 110 deletions(-)

diff --git a/src/gallium/auxiliary/renderonly/renderonly.c 
b/src/gallium/auxiliary/renderonly/renderonly.c
index d31f458845..f83910a940 100644
--- a/src/gallium/auxiliary/renderonly/renderonly.c
+++ b/src/gallium/auxiliary/renderonly/renderonly.c
@@ -98,7 +98,7 @@ renderonly_create_kms_dumb_buffer_for_resource(struct 
pipe_resource *rsc,
 
/* fill in winsys handle */
memset(out_handle, 0, sizeof(*out_handle));
-   out_handle->type = DRM_API_HANDLE_TYPE_FD;
+   out_handle->type = WINSYS_HANDLE_TYPE_FD;
out_handle->stride = create_dumb.pitch;
 
err = drmPrimeHandleToFD(ro->kms_fd, create_dumb.handle, O_CLOEXEC,
@@ -130,7 +130,7 @@ renderonly_create_gpu_import_for_resource(struct 
pipe_resource *rsc,
boolean status;
int fd, err;
struct winsys_handle handle = {
-  .type = DRM_API_HANDLE_TYPE_FD
+  .type = WINSYS_HANDLE_TYPE_FD
};
 
scanout = CALLOC_STRUCT(renderonly_scanout);
diff --git a/src/gallium/auxiliary/renderonly/renderonly.h 
b/src/gallium/auxiliary/renderonly/renderonly.h
index 6a89c29e2e..a8d6a686ed 100644
--- a/src/gallium/auxiliary/renderonly/renderonly.h
+++ b/src/gallium/auxiliary/renderonly/renderonly.h
@@ -85,7 +85,7 @@ renderonly_get_handle(struct renderonly_scanout *scanout,
if (!scanout)
   return FALSE;
 
-   assert(handle->type == DRM_API_HANDLE_TYPE_KMS);
+   assert(handle->type == WINSYS_HANDLE_TYPE_KMS);
handle->handle = scanout->handle;
handle->stride = scanout->stride;
 
diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri.c 
b/src/gallium/auxiliary/vl/vl_winsys_dri.c
index 79ebf750cd..bb1ff50488 100644
--- a/src/gallium/auxiliary/vl/vl_winsys_dri.c
+++ b/src/gallium/auxiliary/vl/vl_winsys_dri.c
@@ -231,7 +231,7 @@ vl_dri2_screen_texture_from_drawable(struct vl_screen 
*vscreen, void *drawable)
}
 
memset(_handle, 0, sizeof(dri2_handle));
-   dri2_handle.type = DRM_API_HANDLE_TYPE_SHARED;
+   dri2_handle.type = WINSYS_HANDLE_TYPE_SHARED;
dri2_handle.handle = back_left->name;
dri2_handle.stride = back_left->pitch;
 
diff --git a/src/gallium/auxiliary/vl/vl_winsys_dri3.c 
b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
index 8251087f3f..8e3c4a0e04 100644
--- a/src/gallium/auxiliary/vl/vl_winsys_dri3.c
+++ b/src/gallium/auxiliary/vl/vl_winsys_dri3.c
@@ -271,7 +271,7 @@ dri3_alloc_back_buffer(struct vl_dri3_screen *scrn)
   pixmap_buffer_texture = buffer->texture;
}
memset(, 0, sizeof(whandle));
-   whandle.type= 

Mesa (master): intel/eu: Remove brw_codegen::compressed_stack.

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: 11c71f0e75bc5c42c9cdd11170325ff919f03c8b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=11c71f0e75bc5c42c9cdd11170325ff919f03c8b

Author: Francisco Jerez 
Date:   Thu Jan  5 19:26:13 2017 -0800

intel/eu: Remove brw_codegen::compressed_stack.

Reviewed-by: Jason Ekstrand 
Reviewed-by: Kenneth Graunke 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_eu.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/intel/compiler/brw_eu.h b/src/intel/compiler/brw_eu.h
index 120a74f035..2655cdb0c5 100644
--- a/src/intel/compiler/brw_eu.h
+++ b/src/intel/compiler/brw_eu.h
@@ -63,7 +63,6 @@ struct brw_codegen {
/* Allow clients to push/pop instruction state:
 */
brw_inst stack[BRW_EU_MAX_INSN_STACK];
-   bool compressed_stack[BRW_EU_MAX_INSN_STACK];
brw_inst *current;
 
/** Whether or not the user wants automatic exec sizes

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): intel/fs: Use groups for SIMD16 LINTERP on gen11+

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: 71a86d1fc69a025754d8d4c21f5777b21c65a3ea
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=71a86d1fc69a025754d8d4c21f5777b21c65a3ea

Author: Jason Ekstrand 
Date:   Wed May 16 17:33:17 2018 -0700

intel/fs: Use groups for SIMD16 LINTERP on gen11+

This is better than compression control because it naturally extends to
SIMD32.

v2:
 - Push/pop instruction state around adjusted codegen (Ken)

Reviewed-by: Kenneth Graunke 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_fs_generator.cpp | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/intel/compiler/brw_fs_generator.cpp 
b/src/intel/compiler/brw_fs_generator.cpp
index 0c050a73b4..20e356e23e 100644
--- a/src/intel/compiler/brw_fs_generator.cpp
+++ b/src/intel/compiler/brw_fs_generator.cpp
@@ -781,6 +781,7 @@ fs_generator::generate_linterp(fs_inst *inst,
   struct brw_reg dwQ = suboffset(interp, 1);
   struct brw_reg dwR = suboffset(interp, 3);
 
+  brw_push_insn_state(p);
   brw_set_default_exec_size(p, BRW_EXECUTE_8);
 
   if (inst->exec_size == 8) {
@@ -795,16 +796,14 @@ fs_generator::generate_linterp(fs_inst *inst,
   */
  brw_inst_set_saturate(p->devinfo, i[0], false);
   } else {
- brw_set_default_compression_control(p, BRW_COMPRESSION_NONE);
+ brw_set_default_group(p, inst->group);
  i[0] = brw_MAD(p,acc, dwR, offset(delta_x, 0), dwP);
  i[1] = brw_MAD(p, offset(dst, 0), acc, offset(delta_x, 1), dwQ);
 
- brw_set_default_compression_control(p, BRW_COMPRESSION_2NDHALF);
+ brw_set_default_group(p, inst->group + 8);
  i[2] = brw_MAD(p,acc, dwR, offset(delta_y, 0), dwP);
  i[3] = brw_MAD(p, offset(dst, 1), acc, offset(delta_y, 1), dwQ);
 
- brw_set_default_compression_control(p, BRW_COMPRESSION_COMPRESSED);
-
  brw_inst_set_cond_modifier(p->devinfo, i[1], inst->conditional_mod);
  brw_inst_set_cond_modifier(p->devinfo, i[3], inst->conditional_mod);
 
@@ -816,6 +815,8 @@ fs_generator::generate_linterp(fs_inst *inst,
  brw_inst_set_saturate(p->devinfo, i[2], false);
   }
 
+  brw_pop_insn_state(p);
+
   return true;
} else if (devinfo->has_pln) {
   /* From the Sandy Bridge PRM Vol. 4, Pt. 2, Section 8.3.53, "Plane":

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): intel/fs: Rename a local variable so it doesn't shadow component()

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: 4bfa2ac2eab7551b1d89309fa8da44a487542f72
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bfa2ac2eab7551b1d89309fa8da44a487542f72

Author: Francisco Jerez 
Date:   Fri May 18 15:13:25 2018 -0700

intel/fs: Rename a local variable so it doesn't shadow component()

v2 (Jason Ekstrand):
 - Break the refactor into its own patch

Reviewed-by: Jason Ekstrand 
Reviewed-by: Kenneth Graunke 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_fs_nir.cpp | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/intel/compiler/brw_fs_nir.cpp 
b/src/intel/compiler/brw_fs_nir.cpp
index 1ce89520bf..ad945b890c 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -3372,15 +3372,15 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder ,
case nir_intrinsic_load_input: {
   /* load_input is only used for flat inputs */
   unsigned base = nir_intrinsic_base(instr);
-  unsigned component = nir_intrinsic_component(instr);
+  unsigned comp = nir_intrinsic_component(instr);
   unsigned num_components = instr->num_components;
   enum brw_reg_type type = dest.type;
 
   /* Special case fields in the VUE header */
   if (base == VARYING_SLOT_LAYER)
- component = 1;
+ comp = 1;
   else if (base == VARYING_SLOT_VIEWPORT)
- component = 2;
+ comp = 2;
 
   if (nir_dest_bit_size(instr->dest) == 64) {
  /* const_index is in 32-bit type size units that could not be aligned
@@ -3392,7 +3392,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder ,
   }
 
   for (unsigned int i = 0; i < num_components; i++) {
- struct brw_reg interp = interp_reg(base, component + i);
+ struct brw_reg interp = interp_reg(base, comp + i);
  interp = suboffset(interp, 3);
  bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i),
   retype(fs_reg(interp), type));

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): intel/fs: Assert that the gen4-6 plane restrictions are followed

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: a1a850cd3411400ce832e77c4be1f0e14924ce9e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a1a850cd3411400ce832e77c4be1f0e14924ce9e

Author: Jason Ekstrand 
Date:   Wed May 16 17:30:04 2018 -0700

intel/fs: Assert that the gen4-6 plane restrictions are followed

The fall-back does not work correctly in SIMD16 mode and the register
allocator should ensure that we never hit this case anyway.

Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_fs_generator.cpp | 10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/intel/compiler/brw_fs_generator.cpp 
b/src/intel/compiler/brw_fs_generator.cpp
index 6d5306a0ee..0c050a73b4 100644
--- a/src/intel/compiler/brw_fs_generator.cpp
+++ b/src/intel/compiler/brw_fs_generator.cpp
@@ -817,8 +817,14 @@ fs_generator::generate_linterp(fs_inst *inst,
   }
 
   return true;
-   } else if (devinfo->has_pln &&
-  (devinfo->gen >= 7 || (delta_x.nr & 1) == 0)) {
+   } else if (devinfo->has_pln) {
+  /* From the Sandy Bridge PRM Vol. 4, Pt. 2, Section 8.3.53, "Plane":
+   *
+   *"[DevSNB]: must be even register aligned.
+   *
+   * This restriction is lifted on Ivy Bridge.
+   */
+  assert(devinfo->gen >= 7 || (delta_x.nr & 1) == 0);
   brw_PLN(p, dst, interp, delta_x);
 
   return false;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): intel/fs: Use the ATTR file for FS inputs

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: 39de901a96bd1048b2c0de32a469014b398f38ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=39de901a96bd1048b2c0de32a469014b398f38ae

Author: Francisco Jerez 
Date:   Mon Apr 25 18:33:22 2016 -0700

intel/fs: Use the ATTR file for FS inputs

This replaces the special magic opcodes which implicitly read inputs
with explicit use of the ATTR file.

v2 (Jason Ekstrand):
 - Break into multiple patches
 - Change the units of the FS ATTR to be in logical scalars

Reviewed-by: Jason Ekstrand 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_fs.cpp | 32 ++--
 src/intel/compiler/brw_fs.h   |  2 +-
 src/intel/compiler/brw_fs_nir.cpp |  8 +++-
 src/intel/compiler/brw_fs_visitor.cpp | 10 --
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp
index b21996c168..8d9278684f 100644
--- a/src/intel/compiler/brw_fs.cpp
+++ b/src/intel/compiler/brw_fs.cpp
@@ -1079,8 +1079,8 @@ fs_visitor::emit_fragcoord_interpolation(fs_reg wpos)
   bld.MOV(wpos, fs_reg(brw_vec8_grf(payload.source_depth_reg, 0)));
} else {
   bld.emit(FS_OPCODE_LINTERP, wpos,
-   this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL],
-   interp_reg(VARYING_SLOT_POS, 2));
+   this->delta_xy[BRW_BARYCENTRIC_PERSPECTIVE_PIXEL],
+   component(interp_reg(VARYING_SLOT_POS, 2), 0));
}
wpos = offset(wpos, bld, 1);
 
@@ -1609,14 +1609,26 @@ fs_visitor::assign_urb_setup()
 * setup regs, now that the location of the constants has been chosen.
 */
foreach_block_and_inst(block, fs_inst, inst, cfg) {
-  if (inst->opcode == FS_OPCODE_LINTERP) {
-assert(inst->src[1].file == FIXED_GRF);
- inst->src[1].nr += urb_start;
-  }
-
-  if (inst->opcode == FS_OPCODE_CINTERP) {
-assert(inst->src[0].file == FIXED_GRF);
- inst->src[0].nr += urb_start;
+  for (int i = 0; i < inst->sources; i++) {
+ if (inst->src[i].file == ATTR) {
+/* ATTR regs in the FS are in units of logical scalar inputs each
+ * of which consumes half of a GRF register.
+ */
+assert(inst->src[i].offset < REG_SIZE / 2);
+const unsigned grf = urb_start + inst->src[i].nr / 2;
+const unsigned offset = (inst->src[i].nr % 2) * (REG_SIZE / 2) +
+inst->src[i].offset;
+const unsigned width = inst->src[i].stride == 0 ?
+   1 : MIN2(inst->exec_size, 8);
+struct brw_reg reg = stride(
+   byte_offset(retype(brw_vec8_grf(grf, 0), inst->src[i].type),
+   offset),
+   width * inst->src[i].stride,
+   width, inst->src[i].stride);
+reg.abs = inst->src[i].abs;
+reg.negate = inst->src[i].negate;
+inst->src[i] = reg;
+ }
   }
}
 
diff --git a/src/intel/compiler/brw_fs.h b/src/intel/compiler/brw_fs.h
index e384db809d..faf5156863 100644
--- a/src/intel/compiler/brw_fs.h
+++ b/src/intel/compiler/brw_fs.h
@@ -276,7 +276,7 @@ public:
 
fs_reg get_timestamp(const brw::fs_builder );
 
-   struct brw_reg interp_reg(int location, int channel);
+   fs_reg interp_reg(int location, int channel);
 
int implied_mrf_writes(fs_inst *inst) const;
 
diff --git a/src/intel/compiler/brw_fs_nir.cpp 
b/src/intel/compiler/brw_fs_nir.cpp
index ad945b890c..282b3bb3b9 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -3392,10 +3392,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder ,
   }
 
   for (unsigned int i = 0; i < num_components; i++) {
- struct brw_reg interp = interp_reg(base, comp + i);
- interp = suboffset(interp, 3);
  bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i),
-  retype(fs_reg(interp), type));
+  retype(component(interp_reg(base, comp + i), 3), type));
   }
 
   if (nir_dest_bit_size(instr->dest) == 64) {
@@ -3568,8 +3566,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder ,
 
   for (unsigned int i = 0; i < instr->num_components; i++) {
  fs_reg interp =
-fs_reg(interp_reg(nir_intrinsic_base(instr),
-  nir_intrinsic_component(instr) + i));
+component(interp_reg(nir_intrinsic_base(instr),
+ nir_intrinsic_component(instr) + i), 0);
  interp.type = BRW_REGISTER_TYPE_F;
  dest.type = BRW_REGISTER_TYPE_F;
 
diff --git a/src/intel/compiler/brw_fs_visitor.cpp 
b/src/intel/compiler/brw_fs_visitor.cpp
index 7a5f6451f2..41dbd76106 100644
--- a/src/intel/compiler/brw_fs_visitor.cpp
+++ b/src/intel/compiler/brw_fs_visitor.cpp
@@ -135,17 +135,15 @@ fs_visitor::emit_dummy_fs()
  * data.  It will get adjusted to be a real location 

Mesa (master): intel/fs: Add explicit last_rt flag to fb writes orthogonal to eot.

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: 4bd2047deea31e877ae023a3845f925aab69cdc7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4bd2047deea31e877ae023a3845f925aab69cdc7

Author: Francisco Jerez 
Date:   Fri Jan 13 14:01:45 2017 -0800

intel/fs: Add explicit last_rt flag to fb writes orthogonal to eot.

When using multiple RT write messages to the same RT such as for
dual-source blending or all RT writes in SIMD32, we have to set the
"Last Render Target Select" bit on all write messages that target the
last RT but only set EOT on the last RT write in the shader.
Special-casing for dual-source blend works today because that is the
only case which requires multiple RT write messages per RT.  When we
start doing SIMD32, this will become much more common so we add a
dedicated bit for it.

Reviewed-by: Jason Ekstrand 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_fs.cpp   | 1 +
 src/intel/compiler/brw_fs_generator.cpp | 6 +-
 src/intel/compiler/brw_fs_visitor.cpp   | 2 ++
 src/intel/compiler/brw_ir_fs.h  | 1 +
 4 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp
index 8d9278684f..d67c0a4192 100644
--- a/src/intel/compiler/brw_fs.cpp
+++ b/src/intel/compiler/brw_fs.cpp
@@ -3246,6 +3246,7 @@ fs_visitor::emit_repclear_shader()
   }
}
write->eot = true;
+   write->last_rt = true;
 
calculate_cfg();
 
diff --git a/src/intel/compiler/brw_fs_generator.cpp 
b/src/intel/compiler/brw_fs_generator.cpp
index f310a84e25..f49ab442fb 100644
--- a/src/intel/compiler/brw_fs_generator.cpp
+++ b/src/intel/compiler/brw_fs_generator.cpp
@@ -289,10 +289,6 @@ fs_generator::fire_fb_write(fs_inst *inst,
 */
const uint32_t surf_index = inst->target;
 
-   bool last_render_target = inst->eot ||
- (prog_data->dual_src_blend && dispatch_width == 
16);
-
-
brw_fb_WRITE(p,
 payload,
 implied_header,
@@ -301,7 +297,7 @@ fs_generator::fire_fb_write(fs_inst *inst,
 nr,
 0,
 inst->eot,
-last_render_target,
+inst->last_rt,
 inst->header_size != 0);
 
brw_mark_surface_used(_data->base, surf_index);
diff --git a/src/intel/compiler/brw_fs_visitor.cpp 
b/src/intel/compiler/brw_fs_visitor.cpp
index 41dbd76106..a24808eac6 100644
--- a/src/intel/compiler/brw_fs_visitor.cpp
+++ b/src/intel/compiler/brw_fs_visitor.cpp
@@ -103,6 +103,7 @@ fs_visitor::emit_dummy_fs()
fs_inst *write;
write = bld.emit(FS_OPCODE_FB_WRITE);
write->eot = true;
+   write->last_rt = true;
if (devinfo->gen >= 6) {
   write->base_mrf = 2;
   write->mlen = 4 * reg_width;
@@ -459,6 +460,7 @@ fs_visitor::emit_fb_writes()
   inst->target = 0;
}
 
+   inst->last_rt = true;
inst->eot = true;
 }
 
diff --git a/src/intel/compiler/brw_ir_fs.h b/src/intel/compiler/brw_ir_fs.h
index f06a33c516..92dad269a3 100644
--- a/src/intel/compiler/brw_ir_fs.h
+++ b/src/intel/compiler/brw_ir_fs.h
@@ -374,6 +374,7 @@ public:
 
uint8_t sources; /**< Number of fs_reg sources. */
 
+   bool last_rt:1;
bool pi_noperspective:1;   /**< Pixel interpolator noperspective flag */
 };
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): intel/fs: Replace the CINTERP opcode with a simple MOV

2018-05-29 Thread Jason Ekstrand
Module: Mesa
Branch: master
Commit: d3cd6b7215c11054b587fb0fd621c53c6d62c64b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3cd6b7215c11054b587fb0fd621c53c6d62c64b

Author: Francisco Jerez 
Date:   Fri May 18 15:20:43 2018 -0700

intel/fs: Replace the CINTERP opcode with a simple MOV

The only reason it was it's own opcode was so that we could detect it
and adjust the source register based on the payload setup.  Now that
we're using the ATTR file for FS inputs, there's no point in having a
magic opcode for this.

v2 (Jason Ekstrand):
 - Break the bit which removes the CINTERP opcode into its own patch

Reviewed-by: Jason Ekstrand 
Reviewed-by: Matt Turner 

---

 src/intel/compiler/brw_eu_defines.h | 1 -
 src/intel/compiler/brw_fs_cse.cpp   | 1 -
 src/intel/compiler/brw_fs_generator.cpp | 3 ---
 src/intel/compiler/brw_fs_nir.cpp   | 4 ++--
 src/intel/compiler/brw_shader.cpp   | 6 +-
 5 files changed, 3 insertions(+), 12 deletions(-)

diff --git a/src/intel/compiler/brw_eu_defines.h 
b/src/intel/compiler/brw_eu_defines.h
index 332d627bc3..36519af63f 100644
--- a/src/intel/compiler/brw_eu_defines.h
+++ b/src/intel/compiler/brw_eu_defines.h
@@ -499,7 +499,6 @@ enum opcode {
 */
FS_OPCODE_DDY_COARSE,
FS_OPCODE_DDY_FINE,
-   FS_OPCODE_CINTERP,
FS_OPCODE_LINTERP,
FS_OPCODE_PIXEL_X,
FS_OPCODE_PIXEL_Y,
diff --git a/src/intel/compiler/brw_fs_cse.cpp 
b/src/intel/compiler/brw_fs_cse.cpp
index 48220efd73..6859733d58 100644
--- a/src/intel/compiler/brw_fs_cse.cpp
+++ b/src/intel/compiler/brw_fs_cse.cpp
@@ -75,7 +75,6 @@ is_expression(const fs_visitor *v, const fs_inst *const inst)
case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD:
case FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_LOGICAL:
case FS_OPCODE_VARYING_PULL_CONSTANT_LOAD_GEN7:
-   case FS_OPCODE_CINTERP:
case FS_OPCODE_LINTERP:
case SHADER_OPCODE_FIND_LIVE_CHANNEL:
case SHADER_OPCODE_BROADCAST:
diff --git a/src/intel/compiler/brw_fs_generator.cpp 
b/src/intel/compiler/brw_fs_generator.cpp
index 20e356e23e..f310a84e25 100644
--- a/src/intel/compiler/brw_fs_generator.cpp
+++ b/src/intel/compiler/brw_fs_generator.cpp
@@ -2112,9 +2112,6 @@ fs_generator::generate_code(const cfg_t *cfg, int 
dispatch_width)
   BRW_MATH_PRECISION_FULL);
 }
 break;
-  case FS_OPCODE_CINTERP:
-brw_MOV(p, dst, src[0]);
-break;
   case FS_OPCODE_LINTERP:
 multiple_instructions_emitted = generate_linterp(inst, dst, src);
 break;
diff --git a/src/intel/compiler/brw_fs_nir.cpp 
b/src/intel/compiler/brw_fs_nir.cpp
index 282b3bb3b9..e287f11e47 100644
--- a/src/intel/compiler/brw_fs_nir.cpp
+++ b/src/intel/compiler/brw_fs_nir.cpp
@@ -3392,8 +3392,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder ,
   }
 
   for (unsigned int i = 0; i < num_components; i++) {
- bld.emit(FS_OPCODE_CINTERP, offset(retype(dest, type), bld, i),
-  retype(component(interp_reg(base, comp + i), 3), type));
+ bld.MOV(offset(retype(dest, type), bld, i),
+ retype(component(interp_reg(base, comp + i), 3), type));
   }
 
   if (nir_dest_bit_size(instr->dest) == 64) {
diff --git a/src/intel/compiler/brw_shader.cpp 
b/src/intel/compiler/brw_shader.cpp
index 537defd05d..6e81db9c29 100644
--- a/src/intel/compiler/brw_shader.cpp
+++ b/src/intel/compiler/brw_shader.cpp
@@ -378,8 +378,6 @@ brw_instruction_name(const struct gen_device_info *devinfo, 
enum opcode op)
case FS_OPCODE_DDY_FINE:
   return "ddy_fine";
 
-   case FS_OPCODE_CINTERP:
-  return "cinterp";
case FS_OPCODE_LINTERP:
   return "linterp";
 
@@ -960,7 +958,6 @@ backend_instruction::can_do_cmod() const
case BRW_OPCODE_SHR:
case BRW_OPCODE_SUBB:
case BRW_OPCODE_XOR:
-   case FS_OPCODE_CINTERP:
case FS_OPCODE_LINTERP:
   return true;
default:
@@ -987,8 +984,7 @@ backend_instruction::writes_accumulator_implicitly(const 
struct gen_device_info
return writes_accumulator ||
   (devinfo->gen < 6 &&
((opcode >= BRW_OPCODE_ADD && opcode < BRW_OPCODE_NOP) ||
-(opcode >= FS_OPCODE_DDX_COARSE && opcode <= FS_OPCODE_LINTERP &&
- opcode != FS_OPCODE_CINTERP)));
+(opcode >= FS_OPCODE_DDX_COARSE && opcode <= FS_OPCODE_LINTERP)));
 }
 
 bool

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): clover: Fix build after llvm r332881.

2018-05-29 Thread Jan Vesely
Module: Mesa
Branch: master
Commit: d424be0feda503307692db8447f5989fa8e4a843
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d424be0feda503307692db8447f5989fa8e4a843

Author: Jan Vesely 
Date:   Tue May 22 17:52:30 2018 -0400

clover: Fix build after llvm r332881.

v2: fix whitespace and indentation

r332881 added an extra parameter to the emit function.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106619
Signed-off-by: Jan Vesely 
Reviewed-By: Aaron Watry 
Tested-By: Aaron Watry 
Tested-by: Kai Wasserbäch 

---

 src/gallium/state_trackers/clover/llvm/codegen/native.cpp |  3 +--
 src/gallium/state_trackers/clover/llvm/compat.hpp | 11 +++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp 
b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
index 409f8ac32f..21f6c8c88a 100644
--- a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
+++ b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
@@ -126,13 +126,12 @@ namespace {
   {
  compat::pass_manager pm;
  ::llvm::raw_svector_ostream os { data };
- compat::raw_ostream_to_emit_file fos(os);
 
  mod.setDataLayout(compat::get_data_layout(*tm));
  tm->Options.MCOptions.AsmVerbose =
 (ft == TargetMachine::CGFT_AssemblyFile);
 
- if (tm->addPassesToEmitFile(pm, fos, ft))
+ if (compat::add_passes_to_emit_file(*tm, pm, os, ft))
 fail(r_log, build_error(), "TargetMachine can't emit this file");
 
  pm.run(mod);
diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp 
b/src/gallium/state_trackers/clover/llvm/compat.hpp
index 2e070b2eef..42a671b7fa 100644
--- a/src/gallium/state_trackers/clover/llvm/compat.hpp
+++ b/src/gallium/state_trackers/clover/llvm/compat.hpp
@@ -247,6 +247,17 @@ namespace clover {
::llvm::WriteBitcodeToFile(, os);
 #endif
}
+
+   template
+   bool add_passes_to_emit_file(TM , PM , OS , FT )
+   {
+   compat::raw_ostream_to_emit_file fos(os);
+#if HAVE_LLVM >= 0x0700
+   return tm.addPassesToEmitFile(pm, fos, nullptr, ft);
+#else
+   return tm.addPassesToEmitFile(pm, fos, ft);
+#endif
+   }
   }
}
 }

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): travis: Add clover llvm-6.0 build

2018-05-29 Thread Jan Vesely
Module: Mesa
Branch: master
Commit: ed834aefa2dc078f1b73659934081d4214e2b338
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed834aefa2dc078f1b73659934081d4214e2b338

Author: Jan Vesely 
Date:   Tue May 22 18:36:32 2018 -0400

travis: Add clover llvm-6.0 build

v2: Don't force build using gcc-4.8
Signed-off-by: Jan Vesely 
Reviewed-By: Aaron Watry 

---

 .travis.yml | 33 +
 1 file changed, 33 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index e3471d47ac..d05c40bf9d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -291,6 +291,39 @@ matrix:
 - libelf-dev
 - libunwind8-dev
 - env:
+# NOTE: Analogous to SWR above, building Clover is quite slow.
+- LABEL="make Gallium ST Clover LLVM-6.0"
+- BUILD=make
+- MAKEFLAGS="-j4"
+- MAKE_CHECK_COMMAND="true"
+- LLVM_VERSION=6.0
+- LLVM_CONFIG="llvm-config-${LLVM_VERSION}"
+- DRI_LOADERS="--disable-glx --disable-gbm --disable-egl"
+- DRI_DRIVERS=""
+- GALLIUM_ST="--disable-dri --enable-opencl --enable-opencl-icd 
--enable-llvm --disable-xa --disable-nine --disable-xvmc --disable-vdpau 
--disable-va --disable-omx-bellagio --disable-gallium-osmesa"
+- GALLIUM_DRIVERS="r600,radeonsi"
+- VULKAN_DRIVERS=""
+- LIBUNWIND_FLAGS="--enable-libunwind"
+  addons:
+apt:
+  sources:
+- llvm-toolchain-trusty-6.0
+# llvm-6 depends on gcc-4.9 which is not in main repo
+- ubuntu-toolchain-r-test
+  packages:
+- libclc-dev
+# From sources above
+- llvm-6.0-dev
+- clang-6.0
+- libclang-6.0-dev
+# Common
+- xz-utils
+- x11proto-xf86vidmode-dev
+- libexpat1-dev
+- libx11-xcb-dev
+- libelf-dev
+- libunwind8-dev
+- env:
 - LABEL="make Gallium ST Other"
 - BUILD=make
 - MAKEFLAGS="-j4"

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): clover: Cleanup compat code for llvm < 3.9

2018-05-29 Thread Jan Vesely
Module: Mesa
Branch: master
Commit: 41b878e1bd9e6215f57722d61b158f6b428a0d78
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=41b878e1bd9e6215f57722d61b158f6b428a0d78

Author: Jan Vesely 
Date:   Tue May 22 18:27:39 2018 -0400

clover: Cleanup compat code for llvm < 3.9

Signed-off-by: Jan Vesely 
Reviewed-By: Aaron Watry 

---

 .../state_trackers/clover/llvm/codegen/native.cpp  |   7 +-
 src/gallium/state_trackers/clover/llvm/compat.hpp  | 109 +
 .../state_trackers/clover/llvm/invocation.cpp  |  25 ++---
 3 files changed, 20 insertions(+), 121 deletions(-)

diff --git a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp 
b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
index 21f6c8c88a..b8ed01c728 100644
--- a/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
+++ b/src/gallium/state_trackers/clover/llvm/codegen/native.cpp
@@ -114,8 +114,7 @@ namespace {
 
   std::unique_ptr tm {
  t->createTargetMachine(target.triple, target.cpu, "", {},
-compat::default_reloc_model,
-compat::default_code_model,
+::llvm::None, compat::default_code_model,
 ::llvm::CodeGenOpt::Default) };
   if (!tm)
  fail(r_log, build_error(),
@@ -124,10 +123,10 @@ namespace {
   ::llvm::SmallVector data;
 
   {
- compat::pass_manager pm;
+ ::llvm::legacy::PassManager pm;
  ::llvm::raw_svector_ostream os { data };
 
- mod.setDataLayout(compat::get_data_layout(*tm));
+ mod.setDataLayout(tm->createDataLayout());
  tm->Options.MCOptions.AsmVerbose =
 (ft == TargetMachine::CGFT_AssemblyFile);
 
diff --git a/src/gallium/state_trackers/clover/llvm/compat.hpp 
b/src/gallium/state_trackers/clover/llvm/compat.hpp
index 42a671b7fa..60270d1529 100644
--- a/src/gallium/state_trackers/clover/llvm/compat.hpp
+++ b/src/gallium/state_trackers/clover/llvm/compat.hpp
@@ -54,15 +54,8 @@
 #include 
 #endif
 
-#if HAVE_LLVM >= 0x0307
 #include 
 #include 
-#else
-#include 
-#include 
-#include 
-#include 
-#endif
 
 #include 
 #include 
@@ -71,12 +64,6 @@
 namespace clover {
namespace llvm {
   namespace compat {
-#if HAVE_LLVM >= 0x0307
- typedef ::llvm::TargetLibraryInfoImpl target_library_info;
-#else
- typedef ::llvm::TargetLibraryInfo target_library_info;
-#endif
-
  template
  unsigned target_address_space(const T , const AS lang_as) {
 const auto  = target.getAddressSpaceMap();
@@ -96,19 +83,6 @@ namespace clover {
 #endif
 
  inline void
- set_lang_defaults(clang::CompilerInvocation ,
-   clang::LangOptions , clang::InputKind ik,
-   const ::llvm::Triple ,
-   clang::PreprocessorOptions ,
-   clang::LangStandard::Kind std) {
-#if HAVE_LLVM >= 0x0309
-inv.setLangDefaults(lopts, ik, t, ppopts, std);
-#else
-inv.setLangDefaults(lopts, ik, std);
-#endif
- }
-
- inline void
  add_link_bitcode_file(clang::CodeGenOptions ,
const std::string ) {
 #if HAVE_LLVM >= 0x0500
@@ -118,78 +92,8 @@ namespace clover {
 F.PropagateAttrs = true;
 F.LinkFlags = ::llvm::Linker::Flags::None;
 opts.LinkBitcodeFiles.emplace_back(F);
-#elif HAVE_LLVM >= 0x0308
-opts.LinkBitcodeFiles.emplace_back(::llvm::Linker::Flags::None, 
path);
-#else
-opts.LinkBitcodeFile = path;
-#endif
- }
-
-#if HAVE_LLVM >= 0x0307
- typedef ::llvm::legacy::PassManager pass_manager;
-#else
- typedef ::llvm::PassManager pass_manager;
-#endif
-
- inline void
- add_data_layout_pass(pass_manager ) {
-#if HAVE_LLVM < 0x0307
-pm.add(new ::llvm::DataLayoutPass());
-#endif
- }
-
- inline void
- add_internalize_pass(pass_manager ,
-  const std::vector ) {
-#if HAVE_LLVM >= 0x0309
-pm.add(::llvm::createInternalizePass(
-  [=](const ::llvm::GlobalValue ) {
- return std::find(names.begin(), names.end(),
-  gv.getName()) != names.end();
-  }));
 #else
-pm.add(::llvm::createInternalizePass(std::vector(
-  map(std::mem_fn(::string::data), names;
-#endif
- }
-
- inline std::unique_ptr< ::llvm::Linker>
- create_linker(::llvm::Module ) {
-#if HAVE_LLVM >= 0x0308
-return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker(mod));
-#else
-return std::unique_ptr< ::llvm::Linker>(new ::llvm::Linker());
-#endif
- }
-
- inline bool
- link_in_module(::llvm::Linker ,
-std::unique_ptr< ::llvm::Module> mod) {

Mesa (master): i965: Only emit VF cache invalidations when the high bits changes

2018-05-29 Thread Kenneth Graunke
Module: Mesa
Branch: master
Commit: 3ac5fbadfd8644d30fce9ff267cb811ad157996a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3ac5fbadfd8644d30fce9ff267cb811ad157996a

Author: Chris Wilson 
Date:   Tue May 29 17:28:07 2018 +0100

i965: Only emit VF cache invalidations when the high bits changes

Commit 92f01fc5f914 ("i965: Emit VF cache invalidates for 48-bit
addressing bugs with softpin.") tried to only emit the VF invalidate if
the high bits changed, but it accidentally always set need_invalidate to
true; causing it to emit unconditionally emit the pipe control before
every primitive.

Fixes: 92f01fc5f914 ("i965: Emit VF cache invalidates for 48-bit addressing 
bugs with softpin.")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106708
Reviewed-by: Kenneth Graunke 

---

 src/mesa/drivers/dri/i965/genX_state_upload.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c 
b/src/mesa/drivers/dri/i965/genX_state_upload.c
index b485e2cf81..88fde9d12f 100644
--- a/src/mesa/drivers/dri/i965/genX_state_upload.c
+++ b/src/mesa/drivers/dri/i965/genX_state_upload.c
@@ -504,7 +504,7 @@ static void
 vf_invalidate_for_vb_48bit_transitions(struct brw_context *brw)
 {
 #if GEN_GEN >= 8
-   bool need_invalidate = true;
+   bool need_invalidate = false;
unsigned i;
 
for (i = 0; i < brw->vb.nr_buffers; i++) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): dri: replace two-way switch case with a table lookup

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 51a17e7feec4f9c693a070df1a957ca8a1f3ab1e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=51a17e7feec4f9c693a070df1a957ca8a1f3ab1e

Author: Eric Engestrom 
Date:   Fri May 18 15:58:58 2018 +0100

dri: replace two-way switch case with a table lookup

Signed-off-by: Eric Engestrom 
Reviewed-by: Marek Olšák 
---
v2: rebased on top of 432df741e0b85c021da0 "dri_util: Add
R10G10B10{A,X}2 translation between DRI and mesa_format."

---

 src/mesa/drivers/dri/common/dri_util.c | 158 ++---
 1 file changed, 84 insertions(+), 74 deletions(-)

diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index d7dff235f2..a591dfcd7d 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -864,88 +864,98 @@ driUpdateFramebufferSize(struct gl_context *ctx, const 
__DRIdrawable *dPriv)
}
 }
 
+/*
+ * Note: the first match is returned, which is important for formats like
+ * __DRI_IMAGE_FORMAT_R8 which maps to both MESA_FORMAT_{R,L}_UNORM8
+ */
+static const struct {
+   uint32_timage_format;
+   mesa_format mesa_format;
+} format_mapping[] = {
+   {
+  .image_format = __DRI_IMAGE_FORMAT_RGB565,
+  .mesa_format  =MESA_FORMAT_B5G6R5_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_ARGB1555,
+  .mesa_format  =MESA_FORMAT_B5G5R5A1_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_XRGB,
+  .mesa_format  =MESA_FORMAT_B8G8R8X8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_ARGB2101010,
+  .mesa_format  =MESA_FORMAT_B10G10R10A2_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_XRGB2101010,
+  .mesa_format  =MESA_FORMAT_B10G10R10X2_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_ABGR2101010,
+  .mesa_format  =MESA_FORMAT_R10G10B10A2_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_XBGR2101010,
+  .mesa_format  =MESA_FORMAT_R10G10B10X2_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_ARGB,
+  .mesa_format  =MESA_FORMAT_B8G8R8A8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_ABGR,
+  .mesa_format  =MESA_FORMAT_R8G8B8A8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_XBGR,
+  .mesa_format  =MESA_FORMAT_R8G8B8X8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_R8,
+  .mesa_format  =MESA_FORMAT_R_UNORM8,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_R8,
+  .mesa_format  =MESA_FORMAT_L_UNORM8,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_GR88,
+  .mesa_format  =MESA_FORMAT_R8G8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_GR88,
+  .mesa_format  =MESA_FORMAT_L8A8_UNORM,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_SABGR8,
+  .mesa_format  =MESA_FORMAT_R8G8B8A8_SRGB,
+   },
+   {
+  .image_format = __DRI_IMAGE_FORMAT_SARGB8,
+  .mesa_format  =MESA_FORMAT_B8G8R8A8_SRGB,
+   },
+};
+
 uint32_t
 driGLFormatToImageFormat(mesa_format format)
 {
-   switch (format) {
-   case MESA_FORMAT_B5G6R5_UNORM:
-  return __DRI_IMAGE_FORMAT_RGB565;
-   case MESA_FORMAT_B5G5R5A1_UNORM:
-  return __DRI_IMAGE_FORMAT_ARGB1555;
-   case MESA_FORMAT_B8G8R8X8_UNORM:
-  return __DRI_IMAGE_FORMAT_XRGB;
-   case MESA_FORMAT_B10G10R10A2_UNORM:
-  return __DRI_IMAGE_FORMAT_ARGB2101010;
-   case MESA_FORMAT_B10G10R10X2_UNORM:
-  return __DRI_IMAGE_FORMAT_XRGB2101010;
-   case MESA_FORMAT_R10G10B10A2_UNORM:
-  return __DRI_IMAGE_FORMAT_ABGR2101010;
-   case MESA_FORMAT_R10G10B10X2_UNORM:
-  return __DRI_IMAGE_FORMAT_XBGR2101010;
-   case MESA_FORMAT_B8G8R8A8_UNORM:
-  return __DRI_IMAGE_FORMAT_ARGB;
-   case MESA_FORMAT_R8G8B8A8_UNORM:
-  return __DRI_IMAGE_FORMAT_ABGR;
-   case MESA_FORMAT_R8G8B8X8_UNORM:
-  return __DRI_IMAGE_FORMAT_XBGR;
-   case MESA_FORMAT_L_UNORM8:
-   case MESA_FORMAT_R_UNORM8:
-  return __DRI_IMAGE_FORMAT_R8;
-   case MESA_FORMAT_L8A8_UNORM:
-   case MESA_FORMAT_R8G8_UNORM:
-  return __DRI_IMAGE_FORMAT_GR88;
-   case MESA_FORMAT_NONE:
-  return __DRI_IMAGE_FORMAT_NONE;
-   case MESA_FORMAT_R8G8B8A8_SRGB:
-  return __DRI_IMAGE_FORMAT_SABGR8;
-   case MESA_FORMAT_B8G8R8A8_SRGB:
-  return __DRI_IMAGE_FORMAT_SARGB8;
-   default:
-  return __DRI_IMAGE_FORMAT_NONE;
-   }
+   for (size_t i = 0; i < ARRAY_SIZE(format_mapping); i++)
+  if (format_mapping[i].mesa_format == format)
+ return format_mapping[i].image_format;
+
+   return __DRI_IMAGE_FORMAT_NONE;
 }
 
 mesa_format
 driImageFormatToGLFormat(uint32_t image_format)
 {
-   switch (image_format) {
-   case __DRI_IMAGE_FORMAT_RGB565:
-  return MESA_FORMAT_B5G6R5_UNORM;
-   case __DRI_IMAGE_FORMAT_ARGB1555:
-  return MESA_FORMAT_B5G5R5A1_UNORM;
-   case 

Mesa (master): dri: fix error value returned by driGLFormatToImageFormat()

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: d3ca7bd45223aefc60174ad7c5957d3d5792192a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3ca7bd45223aefc60174ad7c5957d3d5792192a

Author: Eric Engestrom 
Date:   Fri May 18 15:53:58 2018 +0100

dri: fix error value returned by driGLFormatToImageFormat()

0 is not a valid value for the __DRI_IMAGE_FORMAT_* enum.
It is, however, the value of MESA_FORMAT_NONE, which two of the callers
(i915 & i965) checked for.

The other callers (that check for errors, ie. st/dri) already check for
__DRI_IMAGE_FORMAT_NONE.

Signed-off-by: Eric Engestrom 
Reviewed-by: Marek Olšák 

---

 src/mesa/drivers/dri/common/dri_util.c   | 2 +-
 src/mesa/drivers/dri/i915/intel_screen.c | 2 +-
 src/mesa/drivers/dri/i965/intel_screen.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index c58650491d..d7dff235f2 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -901,7 +901,7 @@ driGLFormatToImageFormat(mesa_format format)
case MESA_FORMAT_B8G8R8A8_SRGB:
   return __DRI_IMAGE_FORMAT_SARGB8;
default:
-  return 0;
+  return __DRI_IMAGE_FORMAT_NONE;
}
 }
 
diff --git a/src/mesa/drivers/dri/i915/intel_screen.c 
b/src/mesa/drivers/dri/i915/intel_screen.c
index 5024a69bd4..882c498622 100644
--- a/src/mesa/drivers/dri/i915/intel_screen.c
+++ b/src/mesa/drivers/dri/i915/intel_screen.c
@@ -415,7 +415,7 @@ intel_create_image_from_texture(__DRIcontext *context, int 
target,
image->data = loaderPrivate;
intel_setup_image_from_mipmap_tree(intel, image, iobj->mt, level, zoffset);
image->dri_format = driGLFormatToImageFormat(image->format);
-   if (image->dri_format == MESA_FORMAT_NONE) {
+   if (image->dri_format == __DRI_IMAGE_FORMAT_NONE) {
   *error = __DRI_IMAGE_ERROR_BAD_PARAMETER;
   free(image);
   return NULL;
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
b/src/mesa/drivers/dri/i965/intel_screen.c
index ab6c003b0f..935711106c 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -591,7 +591,7 @@ intel_create_image_from_texture(__DRIcontext *context, int 
target,
image->dri_format = driGLFormatToImageFormat(image->format);
image->has_depthstencil = iobj->mt->stencil_mt? true : false;
image->planar_format = iobj->planar_format;
-   if (image->dri_format == MESA_FORMAT_NONE) {
+   if (image->dri_format == __DRI_IMAGE_FORMAT_NONE) {
   *error = __DRI_IMAGE_ERROR_BAD_PARAMETER;
   free(image);
   return NULL;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): vulkan: don't free uninitialised memory

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: e4fe2fd3bb26d52e64d98207692a4469f04fe1d5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e4fe2fd3bb26d52e64d98207692a4469f04fe1d5

Author: Eric Engestrom 
Date:   Fri May 18 17:12:53 2018 +0100

vulkan: don't free uninitialised memory

The modifiers array hasn't been initialised by then, much less with data
that would need freeing.
Move the label after the loop to fix this.

Fixes: c80c08e22603 ("vulkan/wsi/x11: Add support for DRI3 v1.2")
Signed-off-by: Eric Engestrom 
Reviewed-by: Lionel Landwerlin 

---

 src/vulkan/wsi/wsi_common_x11.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/vulkan/wsi/wsi_common_x11.c b/src/vulkan/wsi/wsi_common_x11.c
index 62739b9912..1bfbc7c300 100644
--- a/src/vulkan/wsi/wsi_common_x11.c
+++ b/src/vulkan/wsi/wsi_common_x11.c
@@ -1421,10 +1421,10 @@ fail_init_images:
for (uint32_t j = 0; j < image; j++)
   x11_image_finish(chain, pAllocator, >images[j]);
 
-fail_register:
for (int i = 0; i < ARRAY_SIZE(modifiers); i++)
   vk_free(pAllocator, modifiers[i]);
 
+fail_register:
xcb_unregister_for_special_event(chain->conn, chain->special_event);
 
wsi_swapchain_finish(>base);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): egl/x11: fix build with DRI3 disabled

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 1945231b48df8ffcfa2eb168f81c3f5984433b01
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1945231b48df8ffcfa2eb168f81c3f5984433b01

Author: Eric Engestrom 
Date:   Tue May 29 16:59:18 2018 +0100

egl/x11: fix build with DRI3 disabled

Fixes: 473af0b541b2583f4c72 "egl/x11: deduplicate depth-to-format logic"
Signed-off-by: Eric Engestrom 
Tested-by: Vinson Lee 
Reviewed-by: Yogesh Marathe 

---

 src/egl/drivers/dri2/platform_x11.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/egl/drivers/dri2/platform_x11.c 
b/src/egl/drivers/dri2/platform_x11.c
index b2a3000b25..ea9b0cc6d6 100644
--- a/src/egl/drivers/dri2/platform_x11.c
+++ b/src/egl/drivers/dri2/platform_x11.c
@@ -55,6 +55,9 @@ static EGLBoolean
 dri2_x11_swap_interval(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf,
EGLint interval);
 
+uint32_t
+dri2_format_for_depth(uint32_t depth);
+
 static void
 swrastCreateDrawable(struct dri2_egl_display * dri2_dpy,
  struct dri2_egl_surface * dri2_surf)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): meson: remove unreachable with_glx == 'auto' check

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 728d1da159e072e7ef9956ba5326cc02f4d2589b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=728d1da159e072e7ef9956ba5326cc02f4d2589b

Author: Emil Velikov 
Date:   Fri Feb 23 19:32:02 2018 +

meson: remove unreachable with_glx == 'auto' check

Cannot happen since, props to the autodetection further up.

Signed-off-by: Emil Velikov 
Reviewed-by: Dylan Baker 
Reviewed-by: Eric Engestrom 

---

 meson.build | 6 +-
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/meson.build b/meson.build
index d0cb896163..d4f460e0b6 100644
--- a/meson.build
+++ b/meson.build
@@ -344,11 +344,7 @@ endif
 pre_args += '-DGLX_USE_TLS'
 if with_glx != 'disabled'
   if not (with_platform_x11 and with_any_opengl)
-if with_glx == 'auto'
-  with_glx = 'disabled'
-else
-  error('Cannot build GLX support without X11 platform support and at 
least one OpenGL API')
-endif
+error('Cannot build GLX support without X11 platform support and at least 
one OpenGL API')
   elif with_glx == 'gallium-xlib' 
 if not with_gallium
   error('Gallium-xlib based GLX requires at least one gallium driver')

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): meson: require shared glapi when using DRI based libGL

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 63b95fb291d7978e300c496cedc0851261101332
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=63b95fb291d7978e300c496cedc0851261101332

Author: Emil Velikov 
Date:   Fri Feb 23 19:32:03 2018 +

meson: require shared glapi when using DRI based libGL

Just like we do in the autotools build.

Signed-off-by: Emil Velikov 
Reviewed-by: Dylan Baker 
Reviewed-by: Eric Engestrom 

---

 meson.build | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/meson.build b/meson.build
index d4f460e0b6..4aafba802a 100644
--- a/meson.build
+++ b/meson.build
@@ -357,8 +357,12 @@ if with_glx != 'disabled'
 if with_dri
   error('xlib conflicts with any dri driver')
 endif
-  elif with_glx == 'dri' and not with_dri
-error('dri based GLX requires at least one DRI driver')
+  elif with_glx == 'dri'
+if not with_dri
+  error('dri based GLX requires at least one DRI driver')
+elif not with_shared_glapi
+  error('dri based GLX requires shared-glapi')
+endif
   endif
 endif
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): tegra: Fix scanout resources without modifiers

2018-05-29 Thread Thierry Reding
Module: Mesa
Branch: master
Commit: 9603d81df05105857b676f20dff964ef3ab0ecff
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9603d81df05105857b676f20dff964ef3ab0ecff

Author: Thierry Reding 
Date:   Thu Mar 15 21:59:02 2018 +0100

tegra: Fix scanout resources without modifiers

Resources created for scanout but without modifiers need to be treated
as pitch-linear. This is because applications that don't use modifiers
to create resources must be assumed to not understand modifiers and in
turn won't be able to create a DRM framebuffer and passing along which
modifiers were picked by the implementation.

Tested-by: Daniel Kolesa 
Cc: mesa-sta...@lists.freedesktop.org
Signed-off-by: Thierry Reding 

---

 src/gallium/drivers/tegra/tegra_screen.c | 19 ++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/tegra/tegra_screen.c 
b/src/gallium/drivers/tegra/tegra_screen.c
index 41bf2052f9..8b61c09016 100644
--- a/src/gallium/drivers/tegra/tegra_screen.c
+++ b/src/gallium/drivers/tegra/tegra_screen.c
@@ -260,6 +260,7 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
  const struct pipe_resource *template)
 {
struct tegra_screen *screen = to_tegra_screen(pscreen);
+   uint64_t modifier = DRM_FORMAT_MOD_INVALID;
struct tegra_resource *resource;
int err;
 
@@ -267,7 +268,23 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
if (!resource)
   return NULL;
 
-   resource->gpu = screen->gpu->resource_create(screen->gpu, template);
+   /*
+* Applications that create scanout resources without modifiers are very
+* unlikely to support modifiers at all. In that case the resources need
+* to be created with a pitch-linear layout so that they can be properly
+* shared with scanout hardware.
+*
+* Technically it is possible for applications to create resources without
+* specifying a modifier but still query the modifier associated with the
+* resource (e.g. using gbm_bo_get_modifier()) before handing it to the
+* framebuffer creation API (such as the DRM_IOCTL_MODE_ADDFB2 IOCTL).
+*/
+   if (template->bind & PIPE_BIND_SCANOUT)
+  modifier = DRM_FORMAT_MOD_LINEAR;
+
+   resource->gpu = screen->gpu->resource_create_with_modifiers(screen->gpu,
+   template,
+   , 1);
if (!resource->gpu)
   goto free;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): tegra: Remove usage of non-stable UAPI

2018-05-29 Thread Thierry Reding
Module: Mesa
Branch: master
Commit: bd3e97e5aad7800b8e17ed10d34a070926691945
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=bd3e97e5aad7800b8e17ed10d34a070926691945

Author: Thierry Reding 
Date:   Mon Mar 12 17:53:51 2018 +0100

tegra: Remove usage of non-stable UAPI

This code path is no longer required with framebuffer modifier support.

Tested-by: Daniel Kolesa 
Cc: mesa-sta...@lists.freedesktop.org
Signed-off-by: Thierry Reding 

---

 src/gallium/drivers/tegra/tegra_screen.c | 69 ++--
 1 file changed, 3 insertions(+), 66 deletions(-)

diff --git a/src/gallium/drivers/tegra/tegra_screen.c 
b/src/gallium/drivers/tegra/tegra_screen.c
index 669f22a194..41bf2052f9 100644
--- a/src/gallium/drivers/tegra/tegra_screen.c
+++ b/src/gallium/drivers/tegra/tegra_screen.c
@@ -219,11 +219,9 @@ free:
 }
 
 static int tegra_screen_import_resource(struct tegra_screen *screen,
-struct tegra_resource *resource,
-bool has_modifiers)
+struct tegra_resource *resource)
 {
unsigned usage = PIPE_HANDLE_USAGE_READ;
-   struct drm_tegra_gem_set_tiling args;
struct winsys_handle handle;
boolean status;
int fd, err;
@@ -254,67 +252,6 @@ static int tegra_screen_import_resource(struct 
tegra_screen *screen,
 
close(fd);
 
-   if (!has_modifiers) {
-  memset(, 0, sizeof(args));
-  args.handle = resource->handle;
-
-  switch (handle.modifier) {
- case DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_TILED;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 0;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 1;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 2;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 3;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 4;
-break;
-
- case DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_BLOCK;
-args.value = 5;
-break;
-
- default:
-debug_printf("unsupported modifier %" PRIx64 ", assuming linear\n",
- handle.modifier);
-/* fall-through */
-
- case DRM_FORMAT_MOD_LINEAR:
-args.mode = DRM_TEGRA_GEM_TILING_MODE_PITCH;
-break;
-  }
-
-  err = drmIoctl(screen->fd, DRM_IOCTL_TEGRA_GEM_SET_TILING, );
-  if (err < 0) {
- fprintf(stderr, "failed to set tiling parameters: %s\n",
- strerror(errno));
- err = -errno;
- goto out;
-  }
-   }
-
-   return 0;
-
-out:
return err;
 }
 
@@ -336,7 +273,7 @@ tegra_screen_resource_create(struct pipe_screen *pscreen,
 
/* import scanout buffers for display */
if (template->bind & PIPE_BIND_SCANOUT) {
-  err = tegra_screen_import_resource(screen, resource, false);
+  err = tegra_screen_import_resource(screen, resource);
   if (err < 0)
  goto destroy;
}
@@ -575,7 +512,7 @@ tegra_screen_resource_create_with_modifiers(struct 
pipe_screen *pscreen,
if (!resource->gpu)
   goto free;
 
-   err = tegra_screen_import_resource(screen, resource, true);
+   err = tegra_screen_import_resource(screen, resource);
if (err < 0)
   goto destroy;
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): tegra: Treat resources with modifiers as scanout

2018-05-29 Thread Thierry Reding
Module: Mesa
Branch: master
Commit: 9e539012dfaa848fc4cfde83c3f3a83fee274ca4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9e539012dfaa848fc4cfde83c3f3a83fee274ca4

Author: Thierry Reding 
Date:   Wed Apr  4 16:04:25 2018 +0200

tegra: Treat resources with modifiers as scanout

Resources created with modifiers are treated as scanout because there is
no way for applications to specify the usage (though that capability may
be useful to have in the future). Currently all the resources created by
applications with modifiers are for scanout, so make sure they have bind
flags set accordingly.

This is necessary in order to properly export buffers for such resources
so that they can be shared with scanout hardware.

Tested-by: Daniel Kolesa 
Cc: mesa-sta...@lists.freedesktop.org
Signed-off-by: Thierry Reding 

---

 src/gallium/drivers/tegra/tegra_screen.c | 13 -
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/tegra/tegra_screen.c 
b/src/gallium/drivers/tegra/tegra_screen.c
index 8b61c09016..e03e71f81a 100644
--- a/src/gallium/drivers/tegra/tegra_screen.c
+++ b/src/gallium/drivers/tegra/tegra_screen.c
@@ -515,6 +515,7 @@ tegra_screen_resource_create_with_modifiers(struct 
pipe_screen *pscreen,
 int count)
 {
struct tegra_screen *screen = to_tegra_screen(pscreen);
+   struct pipe_resource tmpl = *template;
struct tegra_resource *resource;
int err;
 
@@ -522,8 +523,18 @@ tegra_screen_resource_create_with_modifiers(struct 
pipe_screen *pscreen,
if (!resource)
   return NULL;
 
+   /*
+* Assume that resources created with modifiers will always be used for
+* scanout. This is necessary because some of the APIs that are used to
+* create resources with modifiers (e.g. gbm_bo_create_with_modifiers())
+* can't pass along usage information. Adding that capability might be
+* worth adding to remove this ambiguity. Not all future use-cases that
+* involve modifiers may always be targetting scanout hardware.
+*/
+   tmpl.bind |= PIPE_BIND_SCANOUT;
+
resource->gpu = screen->gpu->resource_create_with_modifiers(screen->gpu,
-   template,
+   ,
modifiers,
count);
if (!resource->gpu)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: add favicon to the website

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: f736be86bbb4932e89e08f25d4430d96230b11f7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f736be86bbb4932e89e08f25d4430d96230b11f7

Author: Eric Engestrom 
Date:   Fri May  4 12:46:17 2018 +0100

docs: add favicon to the website

favicon.png is just gears.png resized to 64x64, and favicon.ico is
generated using this command, adapted from the ImageMagick example [1]:

  $ convert favicon.png -background black \
  \( -clone 0 -resize 16x16 \) \
  \( -clone 0 -resize 32x32 \) \
  \( -clone 0 -resize 48x48 \) \
  \( -clone 0 -resize 64x64 \) \
  -delete 0 -alpha off -colors 256 favicon.ico

We could edit every html page to add ``,
but there's not much point as pretty much every browser will pick it up
automatically if the file is named `favicon.ico` and is in the root folder.

[1] http://www.imagemagick.org/Usage/thumbnails/#favicon

Signed-off-by: Eric Engestrom 

---

 docs/favicon.ico | Bin 0 -> 13094 bytes
 docs/favicon.png | Bin 0 -> 2998 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100644
index 00..e7e244a161
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/favicon.png b/docs/favicon.png
new file mode 100644
index 00..19898ef742
Binary files /dev/null and b/docs/favicon.png differ

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: add missing html tag

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 3b5376330fb0dd7a4c1fe15160bf67e30b33cdc9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=3b5376330fb0dd7a4c1fe15160bf67e30b33cdc9

Author: Eric Engestrom 
Date:   Tue May 29 14:47:10 2018 +0100

docs: add missing html tag

Signed-off-by: Eric Engestrom 

---

 docs/release-calendar.html | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docs/release-calendar.html b/docs/release-calendar.html
index 754696200d..4fce25ea24 100644
--- a/docs/release-calendar.html
+++ b/docs/release-calendar.html
@@ -82,6 +82,7 @@ if you'd like to nominate a patch in the next stable release.
 Emil Velikov
 
 
+
 2018-08-24
 18.1.7
 Emil Velikov

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: add missing html closing tag

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: e6a1aca0b27305a718b8679dea10c432f1fa2fc8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e6a1aca0b27305a718b8679dea10c432f1fa2fc8

Author: Eric Engestrom 
Date:   Tue May 29 14:47:53 2018 +0100

docs: add missing html closing tag

Signed-off-by: Eric Engestrom 

---

 docs/relnotes/18.0.0.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/docs/relnotes/18.0.0.html b/docs/relnotes/18.0.0.html
index 6fa6370a06..9b7951bdf1 100644
--- a/docs/relnotes/18.0.0.html
+++ b/docs/relnotes/18.0.0.html
@@ -48,8 +48,8 @@ Note: some of the new features are only available with 
certain drivers.
 Disk shader cache support for i965 when MESA_GLSL_CACHE_DISABLE 
environment variable is set to "0" or "false"
 GL_ARB_shader_atomic_counters and GL_ARB_shader_atomic_counter_ops on 
r600/evergreen+
 GL_ARB_shader_image_load_store and GL_ARB_shader_image_size on 
r600/evergreen+
-GL_ARB_shader_storage_buffer_object on r600/evergreen+
-GL_ARB_compute_shader on r600/evergreen+
+GL_ARB_shader_storage_buffer_object on r600/evergreen+
+GL_ARB_compute_shader on r600/evergreen+
 GL_ARB_cull_distance on r600/evergreen+
 GL_ARB_enhanced_layouts on r600/evergreen+
 GL_ARB_bindless_texture on nvc0/kepler

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): nir/print: fix printing of 8/16 bit constant variables

2018-05-29 Thread Karol Herbst
Module: Mesa
Branch: master
Commit: 56792a0876ba088fa3d2ea63b2ab87f41ad52598
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56792a0876ba088fa3d2ea63b2ab87f41ad52598

Author: Karol Herbst 
Date:   Thu May 10 10:20:47 2018 +0200

nir/print: fix printing of 8/16 bit constant variables

v2 (Jose Maria Casanova Crespo ): add float16 support

Signed-off-by: Karol Herbst 
Reviewed-by: Jose Maria Casanova Crespo 

---

 src/compiler/nir/nir_print.c | 31 +++
 1 file changed, 31 insertions(+)

diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c
index 97b2d6164c..fad274e62f 100644
--- a/src/compiler/nir/nir_print.c
+++ b/src/compiler/nir/nir_print.c
@@ -299,6 +299,28 @@ print_constant(nir_constant *c, const struct glsl_type 
*type, print_state *state
unsigned i, j;
 
switch (glsl_get_base_type(type)) {
+   case GLSL_TYPE_UINT8:
+   case GLSL_TYPE_INT8:
+  /* Only float base types can be matrices. */
+  assert(cols == 1);
+
+  for (i = 0; i < rows; i++) {
+ if (i > 0) fprintf(fp, ", ");
+ fprintf(fp, "0x%02x", c->values[0].u8[i]);
+  }
+  break;
+
+   case GLSL_TYPE_UINT16:
+   case GLSL_TYPE_INT16:
+  /* Only float base types can be matrices. */
+  assert(cols == 1);
+
+  for (i = 0; i < rows; i++) {
+ if (i > 0) fprintf(fp, ", ");
+ fprintf(fp, "0x%04x", c->values[0].u16[i]);
+  }
+  break;
+
case GLSL_TYPE_UINT:
case GLSL_TYPE_INT:
case GLSL_TYPE_BOOL:
@@ -311,6 +333,15 @@ print_constant(nir_constant *c, const struct glsl_type 
*type, print_state *state
   }
   break;
 
+   case GLSL_TYPE_FLOAT16:
+  for (i = 0; i < cols; i++) {
+ for (j = 0; j < rows; j++) {
+if (i + j > 0) fprintf(fp, ", ");
+fprintf(fp, "%f", _mesa_half_to_float(c->values[i].u16[j]));
+ }
+  }
+  break;
+
case GLSL_TYPE_FLOAT:
   for (i = 0; i < cols; i++) {
  for (j = 0; j < rows; j++) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): util/u_math: Implement a logbase2 function for unsigned long

2018-05-29 Thread Karol Herbst
Module: Mesa
Branch: master
Commit: 03f592a164fa95abbc839dc9820d2ef9fdd21edd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=03f592a164fa95abbc839dc9820d2ef9fdd21edd

Author: Pierre Moreau 
Date:   Sat May  6 17:52:59 2017 +0200

util/u_math: Implement a logbase2 function for unsigned long

v2 (Karol Herbst ):
* removed unneeded ll
* ll -> ull

Signed-off-by: Karol Herbst 
Reviewed-by: Eric Engestrom 
Reviewed-by: Ilia Mirkin 

---

 src/gallium/auxiliary/util/u_math.h | 55 +
 src/util/bitscan.h  | 11 
 2 files changed, 66 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_math.h 
b/src/gallium/auxiliary/util/u_math.h
index 46d02978fd..79869a119a 100644
--- a/src/gallium/auxiliary/util/u_math.h
+++ b/src/gallium/auxiliary/util/u_math.h
@@ -421,6 +421,23 @@ util_logbase2(unsigned n)
 #endif
 }
 
+static inline uint64_t
+util_logbase2_64(uint64_t n)
+{
+#if defined(HAVE___BUILTIN_CLZLL)
+   return ((sizeof(uint64_t) * 8 - 1) - __builtin_clzll(n | 1));
+#else
+   uint64_t pos = 0ull;
+   if (n >= 1ull<<32) { n >>= 32; pos += 32; }
+   if (n >= 1ull<<16) { n >>= 16; pos += 16; }
+   if (n >= 1ull<< 8) { n >>=  8; pos +=  8; }
+   if (n >= 1ull<< 4) { n >>=  4; pos +=  4; }
+   if (n >= 1ull<< 2) { n >>=  2; pos +=  2; }
+   if (n >= 1ull<< 1) {   pos +=  1; }
+   return pos;
+#endif
+}
+
 /**
  * Returns the ceiling of log n base 2, and 0 when n == 0. Equivalently,
  * returns the smallest x such that n <= 2**x.
@@ -434,6 +451,15 @@ util_logbase2_ceil(unsigned n)
return 1 + util_logbase2(n - 1);
 }
 
+static inline uint64_t
+util_logbase2_ceil64(uint64_t n)
+{
+   if (n <= 1)
+  return 0;
+
+   return 1ull + util_logbase2_64(n - 1);
+}
+
 /**
  * Returns the smallest power of two >= x
  */
@@ -465,6 +491,35 @@ util_next_power_of_two(unsigned x)
 #endif
 }
 
+static inline uint64_t
+util_next_power_of_two64(uint64_t x)
+{
+#if defined(HAVE___BUILTIN_CLZLL)
+   if (x <= 1)
+   return 1;
+
+   return (1ull << ((sizeof(uint64_t) * 8) - __builtin_clzll(x - 1)));
+#else
+   uint64_t val = x;
+
+   if (x <= 1)
+  return 1;
+
+   if (util_is_power_of_two_or_zero64(x))
+  return x;
+
+   val--;
+   val = (val >> 1)  | val;
+   val = (val >> 2)  | val;
+   val = (val >> 4)  | val;
+   val = (val >> 8)  | val;
+   val = (val >> 16) | val;
+   val = (val >> 32) | val;
+   val++;
+   return val;
+#endif
+}
+
 
 /**
  * Return number of bits set in n.
diff --git a/src/util/bitscan.h b/src/util/bitscan.h
index 5cc75f0beb..dc89ac93f2 100644
--- a/src/util/bitscan.h
+++ b/src/util/bitscan.h
@@ -123,6 +123,17 @@ util_is_power_of_two_or_zero(unsigned v)
return (v & (v - 1)) == 0;
 }
 
+/* Determine if an uint64_t value is a power of two.
+ *
+ * \note
+ * Zero is treated as a power of two.
+ */
+static inline bool
+util_is_power_of_two_or_zero64(uint64_t v)
+{
+   return (v & (v - 1)) == 0;
+}
+
 /* Determine if an unsigned value is a power of two.
  *
  * \note

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): nv50/ir: Extend ImmediateValue::applyLog2 to 64-bit integers

2018-05-29 Thread Karol Herbst
Module: Mesa
Branch: master
Commit: f0e80e123c343f0c1e1163c72ead0d05ec117b0f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f0e80e123c343f0c1e1163c72ead0d05ec117b0f

Author: Pierre Moreau 
Date:   Sat May  6 17:55:43 2017 +0200

nv50/ir: Extend ImmediateValue::applyLog2 to 64-bit integers

Signed-off-by: Karol Herbst 
Reviewed-by: Karol Herbst 
Reviewed-by: Ilia Mirkin 

---

 src/gallium/drivers/nouveau/codegen/nv50_ir.cpp | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp 
b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
index c987da9908..49425b98b9 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp
@@ -423,7 +423,10 @@ ImmediateValue::isNegative() const
 bool
 ImmediateValue::isPow2() const
 {
-   return util_is_power_of_two_or_zero(reg.data.u32);
+   if (reg.type == TYPE_U64 || reg.type == TYPE_S64)
+  return util_is_power_of_two_or_zero64(reg.data.u64);
+   else
+  return util_is_power_of_two_or_zero(reg.data.u32);
 }
 
 void
@@ -440,6 +443,12 @@ ImmediateValue::applyLog2()
case TYPE_U32:
   reg.data.u32 = util_logbase2(reg.data.u32);
   break;
+   case TYPE_S64:
+  assert(!this->isNegative());
+  // fall through
+   case TYPE_U64:
+  reg.data.u64 = util_logbase2_64(reg.data.u64);
+  break;
case TYPE_F32:
   reg.data.f32 = log2f(reg.data.f32);
   break;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): docs: trivial typo fix

2018-05-29 Thread Eric Engeström
Module: Mesa
Branch: master
Commit: 539aa604a0bc565481d1d38b327879a294feeec6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=539aa604a0bc565481d1d38b327879a294feeec6

Author: Eric Engestrom 
Date:   Tue May 29 12:10:03 2018 +0100

docs: trivial typo fix

Signed-off-by: Eric Engestrom 

---

 docs/relnotes/18.2.0.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/relnotes/18.2.0.html b/docs/relnotes/18.2.0.html
index f3bdb6605c..00b253c076 100644
--- a/docs/relnotes/18.2.0.html
+++ b/docs/relnotes/18.2.0.html
@@ -50,7 +50,7 @@ Note: some of the new features are only available with 
certain drivers.
 Bug fixes
 
 
-TBD
+TBD
 
 
 Changes

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radv: split radv_emit_shader_pointer()

2018-05-29 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 288fe7ec714f0920e870d0551bdaccf277e12a59
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=288fe7ec714f0920e870d0551bdaccf277e12a59

Author: Samuel Pitoiset 
Date:   Fri May 25 14:59:19 2018 +0200

radv: split radv_emit_shader_pointer()

This will allow to emit consecutive shader pointers for
reducing the number of emitted SET_SH_REG packets, which
is recommended.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_private.h | 25 -
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index e2fa58d8d1..e554fc7acc 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1131,13 +1131,17 @@ bool radv_get_memory_fd(struct radv_device *device,
int *pFD);
 
 static inline void
-radv_emit_shader_pointer(struct radv_device *device,
-struct radeon_winsys_cs *cs,
-uint32_t sh_offset, uint64_t va, bool global)
+radv_emit_shader_pointer_head(struct radeon_winsys_cs *cs,
+ unsigned sh_offset, bool use_32bit_pointers)
 {
-   bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global;
-
radeon_set_sh_reg_seq(cs, sh_offset, use_32bit_pointers ? 1 : 2);
+}
+
+static inline void
+radv_emit_shader_pointer_body(struct radv_device *device,
+ struct radeon_winsys_cs *cs,
+ uint64_t va, bool use_32bit_pointers)
+{
radeon_emit(cs, va);
 
if (use_32bit_pointers) {
@@ -1148,6 +1152,17 @@ radv_emit_shader_pointer(struct radv_device *device,
}
 }
 
+static inline void
+radv_emit_shader_pointer(struct radv_device *device,
+struct radeon_winsys_cs *cs,
+uint32_t sh_offset, uint64_t va, bool global)
+{
+   bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global;
+
+   radv_emit_shader_pointer_head(cs, sh_offset, use_32bit_pointers);
+   radv_emit_shader_pointer_body(device, cs, va, use_32bit_pointers);
+}
+
 static inline struct radv_descriptor_state *
 radv_get_descriptors_state(struct radv_cmd_buffer *cmd_buffer,
   VkPipelineBindPoint bind_point)

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radv: allow radv_emit_shader_pointer_head() to emit more pointers

2018-05-29 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 21baf33a942fafaccfaf9c802d0148f31b1b36ef
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=21baf33a942fafaccfaf9c802d0148f31b1b36ef

Author: Samuel Pitoiset 
Date:   Fri May 25 14:59:20 2018 +0200

radv: allow radv_emit_shader_pointer_head() to emit more pointers

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_private.h | 8 +---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index e554fc7acc..708cacf770 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1132,9 +1132,11 @@ bool radv_get_memory_fd(struct radv_device *device,
 
 static inline void
 radv_emit_shader_pointer_head(struct radeon_winsys_cs *cs,
- unsigned sh_offset, bool use_32bit_pointers)
+ unsigned sh_offset, unsigned pointer_count,
+ bool use_32bit_pointers)
 {
-   radeon_set_sh_reg_seq(cs, sh_offset, use_32bit_pointers ? 1 : 2);
+   radeon_emit(cs, PKT3(PKT3_SET_SH_REG, pointer_count * 
(use_32bit_pointers ? 1 : 2), 0));
+   radeon_emit(cs, (sh_offset - SI_SH_REG_OFFSET) >> 2);
 }
 
 static inline void
@@ -1159,7 +1161,7 @@ radv_emit_shader_pointer(struct radv_device *device,
 {
bool use_32bit_pointers = HAVE_32BIT_POINTERS && !global;
 
-   radv_emit_shader_pointer_head(cs, sh_offset, use_32bit_pointers);
+   radv_emit_shader_pointer_head(cs, sh_offset, 1, use_32bit_pointers);
radv_emit_shader_pointer_body(device, cs, va, use_32bit_pointers);
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radv: emit shader descriptor pointers consecutively

2018-05-29 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 88d1ed0f818930fd37ea012893405f21ef1b78ea
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=88d1ed0f818930fd37ea012893405f21ef1b78ea

Author: Samuel Pitoiset 
Date:   Fri May 25 14:59:21 2018 +0200

radv: emit shader descriptor pointers consecutively

This reduces the number of SET_SH_REG packets which are emitted
for applications that use more than one descriptor set per stage.

We should be able to emit more SET_SH_REG packets consecutively
(like push constants and vertex buffers for the vertex stage),
but this will be improved later.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_cmd_buffer.c | 104 +--
 1 file changed, 57 insertions(+), 47 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 3e3dbf6a85..8f351b52c9 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -595,6 +595,46 @@ radv_emit_userdata_address(struct radv_cmd_buffer 
*cmd_buffer,
 }
 
 static void
+radv_emit_descriptor_pointers(struct radv_cmd_buffer *cmd_buffer,
+ struct radv_pipeline *pipeline,
+ struct radv_descriptor_state *descriptors_state,
+ gl_shader_stage stage)
+{
+   struct radv_device *device = cmd_buffer->device;
+   struct radeon_winsys_cs *cs = cmd_buffer->cs;
+   uint32_t sh_base = pipeline->user_data_0[stage];
+   struct radv_userdata_locations *locs =
+   >shaders[stage]->info.user_sgprs_locs;
+   unsigned mask;
+
+   mask = descriptors_state->dirty & descriptors_state->valid;
+
+   for (int i = 0; i < MAX_SETS; i++) {
+   struct radv_userdata_info *loc = >descriptor_sets[i];
+   if (loc->sgpr_idx != -1 && !loc->indirect)
+   continue;
+   mask &= ~(1 << i);
+   }
+
+   while (mask) {
+   int start, count;
+
+   u_bit_scan_consecutive_range(, , );
+
+   struct radv_userdata_info *loc = >descriptor_sets[start];
+   unsigned sh_offset = sh_base + loc->sgpr_idx * 4;
+
+   radv_emit_shader_pointer_head(cs, sh_offset, count, true);
+   for (int i = 0; i < count; i++) {
+   struct radv_descriptor_set *set =
+   descriptors_state->sets[start + i];
+
+   radv_emit_shader_pointer_body(device, cs, set->va, 
true);
+   }
+   }
+}
+
+static void
 radv_update_multisample_state(struct radv_cmd_buffer *cmd_buffer,
  struct radv_pipeline *pipeline)
 {
@@ -1423,47 +1463,6 @@ radv_cmd_buffer_flush_dynamic_state(struct 
radv_cmd_buffer *cmd_buffer)
 }
 
 static void
-emit_stage_descriptor_set_userdata(struct radv_cmd_buffer *cmd_buffer,
-  struct radv_pipeline *pipeline,
-  int idx,
-  uint64_t va,
-  gl_shader_stage stage)
-{
-   struct radv_userdata_info *desc_set_loc = 
>shaders[stage]->info.user_sgprs_locs.descriptor_sets[idx];
-   uint32_t base_reg = pipeline->user_data_0[stage];
-
-   if (desc_set_loc->sgpr_idx == -1 || desc_set_loc->indirect)
-   return;
-
-   assert(!desc_set_loc->indirect);
-   assert(desc_set_loc->num_sgprs == (HAVE_32BIT_POINTERS ? 1 : 2));
-
-   radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
-base_reg + desc_set_loc->sgpr_idx * 4, va, 
false);
-}
-
-static void
-radv_emit_descriptor_set_userdata(struct radv_cmd_buffer *cmd_buffer,
- VkShaderStageFlags stages,
- struct radv_descriptor_set *set,
- unsigned idx)
-{
-   if (cmd_buffer->state.pipeline) {
-   radv_foreach_stage(stage, stages) {
-   if (cmd_buffer->state.pipeline->shaders[stage])
-   emit_stage_descriptor_set_userdata(cmd_buffer, 
cmd_buffer->state.pipeline,
-  idx, set->va,
-  stage);
-   }
-   }
-
-   if (cmd_buffer->state.compute_pipeline && (stages & 
VK_SHADER_STAGE_COMPUTE_BIT))
-   emit_stage_descriptor_set_userdata(cmd_buffer, 
cmd_buffer->state.compute_pipeline,
-  idx, set->va,
-  MESA_SHADER_COMPUTE);
-}
-
-static void
 radv_flush_push_descriptors(struct radv_cmd_buffer *cmd_buffer,
VkPipelineBindPoint bind_point)
 {
@@ -1544,7 +1543,6 @@ radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer,