Mesa (master): nir: add opt_if_loop_terminator()

2018-06-06 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 2a74296f24ba15b14602286a680ca5f344a71059
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2a74296f24ba15b14602286a680ca5f344a71059

Author: Timothy Arceri 
Date:   Fri Jun  1 15:37:28 2018 +1000

nir: add opt_if_loop_terminator()

This pass detects potential loop terminators and moves intructions
from the non breaking branch after the if-statement.

This enables both the new opt_if_simplification() pass and loop
unrolling to potentially progress further.

Unexpectedly this change speed up shader-db run times by ~3%

Ivy Bridge shader-db results (all changes in dolphin/ubershaders):

total instructions in shared programs: 9995662 -> 9995338 (-0.00%)
instructions in affected programs: 87845 -> 87521 (-0.37%)
helped: 27
HURT: 0

total cycles in shared programs: 230931495 -> 230925015 (-0.00%)
cycles in affected programs: 56391385 -> 56384905 (-0.01%)
helped: 27
HURT: 0

Reviewed-by: Ian Romanick 

---

 src/compiler/nir/nir_opt_if.c | 68 +++
 1 file changed, 68 insertions(+)

diff --git a/src/compiler/nir/nir_opt_if.c b/src/compiler/nir/nir_opt_if.c
index b03657a424..863ca630fb 100644
--- a/src/compiler/nir/nir_opt_if.c
+++ b/src/compiler/nir/nir_opt_if.c
@@ -24,6 +24,7 @@
 #include "nir.h"
 #include "nir/nir_builder.h"
 #include "nir_control_flow.h"
+#include "nir_loop_analyze.h"
 
 /**
  * This optimization detects if statements at the tops of loops where the
@@ -283,6 +284,72 @@ opt_if_simplification(nir_builder *b, nir_if *nif)
return true;
 }
 
+/**
+ * This optimization simplifies potential loop terminators which then allows
+ * other passes such as opt_if_simplification() and loop unrolling to progress
+ * further:
+ *
+ * if (cond) {
+ *... then block instructions ...
+ * } else {
+ * ...
+ *break;
+ * }
+ *
+ * into:
+ *
+ * if (cond) {
+ * } else {
+ * ...
+ *break;
+ * }
+ * ... then block instructions ...
+ */
+static bool
+opt_if_loop_terminator(nir_if *nif)
+{
+   nir_block *break_blk = NULL;
+   nir_block *continue_from_blk = NULL;
+   bool continue_from_then = true;
+
+   nir_block *last_then = nir_if_last_then_block(nif);
+   nir_block *last_else = nir_if_last_else_block(nif);
+
+   if (nir_block_ends_in_break(last_then)) {
+  break_blk = last_then;
+  continue_from_blk = last_else;
+  continue_from_then = false;
+   } else if (nir_block_ends_in_break(last_else)) {
+  break_blk = last_else;
+  continue_from_blk = last_then;
+   }
+
+   /* Continue if the if-statement contained no jumps at all */
+   if (!break_blk)
+  return false;
+
+   /* If the continue from block is empty then return as there is nothing to
+* move.
+*/
+   nir_block *first_continue_from_blk = continue_from_then ?
+  nir_if_first_then_block(nif) :
+  nir_if_first_else_block(nif);
+   if (is_block_empty(first_continue_from_blk))
+  return false;
+
+   if (!nir_is_trivial_loop_if(nif, break_blk))
+  return false;
+
+   /* Finally, move the continue from branch after the if-statement. */
+   nir_cf_list tmp;
+   nir_cf_extract(, nir_before_block(first_continue_from_blk),
+nir_after_block(continue_from_blk));
+   nir_cf_reinsert(, nir_after_cf_node(>cf_node));
+   nir_cf_delete();
+
+   return true;
+}
+
 static bool
 opt_if_cf_list(nir_builder *b, struct exec_list *cf_list)
 {
@@ -296,6 +363,7 @@ opt_if_cf_list(nir_builder *b, struct exec_list *cf_list)
  nir_if *nif = nir_cf_node_as_if(cf_node);
  progress |= opt_if_cf_list(b, >then_list);
  progress |= opt_if_cf_list(b, >else_list);
+ progress |= opt_if_loop_terminator(nif);
  progress |= opt_if_simplification(b, nif);
  break;
   }

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


Mesa (master): radv: fix Coverity no effect control flow issue

2018-06-06 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 186988e28f9fe31ad4d08626586d5167051a14e7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=186988e28f9fe31ad4d08626586d5167051a14e7

Author: Timothy Arceri 
Date:   Thu Jun  7 09:49:37 2018 +1000

radv: fix Coverity no effect control flow issue

swizzle is unsigned so "desc->swizzle[c] < 0" is never true.
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c
index 50ec904d51..958f2a2c82 100644
--- a/src/amd/vulkan/radv_formats.c
+++ b/src/amd/vulkan/radv_formats.c
@@ -921,7 +921,7 @@ bool radv_format_pack_clear_color(VkFormat format,
uint64_t clear_val = 0;
 
for (unsigned c = 0; c < 4; ++c) {
-   if (desc->swizzle[c] < 0 || desc->swizzle[c] >= 4)
+   if (desc->swizzle[c] >= 4)
continue;
 
const struct vk_format_channel_description *channel = 
>channel[desc->swizzle[c]];

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


Mesa (master): nir: move ends_in_break() helper to nir_loop_analyze.h

2018-06-06 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 1098bc5e854a1253e050fa30d16eda6ca676d4b3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1098bc5e854a1253e050fa30d16eda6ca676d4b3

Author: Timothy Arceri 
Date:   Fri Jun  1 15:37:27 2018 +1000

nir: move ends_in_break() helper to nir_loop_analyze.h

We will use the helper while simplifying potential loop terminators
in the following patch.

Reviewed-by: Ian Romanick 

---

 src/compiler/nir/nir_loop_analyze.c | 15 ++-
 src/compiler/nir/nir_loop_analyze.h | 11 +++
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/src/compiler/nir/nir_loop_analyze.c 
b/src/compiler/nir/nir_loop_analyze.c
index 84da035052..d5281a5faa 100644
--- a/src/compiler/nir/nir_loop_analyze.c
+++ b/src/compiler/nir/nir_loop_analyze.c
@@ -290,17 +290,6 @@ initialize_ssa_def(nir_ssa_def *def, void *void_state)
return true;
 }
 
-static inline bool
-ends_in_break(nir_block *block)
-{
-   if (exec_list_is_empty(>instr_list))
-  return false;
-
-   nir_instr *instr = nir_block_last_instr(block);
-   return instr->type == nir_instr_type_jump &&
-  nir_instr_as_jump(instr)->type == nir_jump_break;
-}
-
 static bool
 find_loop_terminators(loop_info_state *state)
 {
@@ -315,11 +304,11 @@ find_loop_terminators(loop_info_state *state)
 
  nir_block *last_then = nir_if_last_then_block(nif);
  nir_block *last_else = nir_if_last_else_block(nif);
- if (ends_in_break(last_then)) {
+ if (nir_block_ends_in_break(last_then)) {
 break_blk = last_then;
 continue_from_blk = last_else;
 continue_from_then = false;
- } else if (ends_in_break(last_else)) {
+ } else if (nir_block_ends_in_break(last_else)) {
 break_blk = last_else;
 continue_from_blk = last_then;
  }
diff --git a/src/compiler/nir/nir_loop_analyze.h 
b/src/compiler/nir/nir_loop_analyze.h
index 18c2305171..7b4ed66ee5 100644
--- a/src/compiler/nir/nir_loop_analyze.h
+++ b/src/compiler/nir/nir_loop_analyze.h
@@ -92,4 +92,15 @@ nir_is_trivial_loop_if(nir_if *nif, nir_block *break_block)
return true;
 }
 
+static inline bool
+nir_block_ends_in_break(nir_block *block)
+{
+   if (exec_list_is_empty(>instr_list))
+  return false;
+
+   nir_instr *instr = nir_block_last_instr(block);
+   return instr->type == nir_instr_type_jump &&
+  nir_instr_as_jump(instr)->type == nir_jump_break;
+}
+
 #endif /* NIR_LOOP_ANALYZE_H */

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


Mesa (master): nir: add unsigned comparison simplifications

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

Author: Timothy Arceri 
Date:   Wed May 30 20:32:24 2018 +1000

nir: add unsigned comparison simplifications

This avoids loop unrolling regressions in Wolfenstein II on DXVK
with an upcoming optimisation series from Samuel.

Reviewed-by: Bas Nieuwenhuizen 

---

 src/compiler/nir/nir_opt_algebraic.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/compiler/nir/nir_opt_algebraic.py 
b/src/compiler/nir/nir_opt_algebraic.py
index 909ea3daf4..21b9acecbe 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -149,7 +149,9 @@ optimizations = [
(('~inot', ('feq', a, b)), ('fne', a, b)),
(('~inot', ('fne', a, b)), ('feq', a, b)),
(('inot', ('ilt', a, b)), ('ige', a, b)),
+   (('inot', ('ult', a, b)), ('uge', a, b)),
(('inot', ('ige', a, b)), ('ilt', a, b)),
+   (('inot', ('uge', a, b)), ('ult', a, b)),
(('inot', ('ieq', a, b)), ('ine', a, b)),
(('inot', ('ine', a, b)), ('ieq', a, b)),
 

___
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): Revert "st/nir: use NIR for asm programs"

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

Author: Eric Anholt <e...@anholt.net>
Date:   Thu May 17 15:53:40 2018 +0100

Revert "st/nir: use NIR for asm programs"

This reverts commit 5c33e8c7729edd5e16020ebb8703be96523e04f2.  It broke
fixed function vertex programs on vc4 and v3d, and apparently caused
trouble for radeonsi's NIR paths as well.

Acked-by: Timothy Arceri <tarc...@itsqueeze.com>
https://bugs.freedesktop.org/show_bug.cgi?id=106673

---

 src/mesa/state_tracker/st_program.c | 65 -
 1 file changed, 7 insertions(+), 58 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index a7671b7fd1..8117f4ff8d 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -37,7 +37,6 @@
 #include "main/mtypes.h"
 #include "program/prog_parameter.h"
 #include "program/prog_print.h"
-#include "program/prog_to_nir.h"
 #include "program/programopt.h"
 
 #include "compiler/nir/nir.h"
@@ -379,28 +378,6 @@ st_release_cp_variants(struct st_context *st, struct 
st_compute_program *stcp)
 }
 
 /**
- * Translate ARB (asm) program to NIR
- */
-static nir_shader *
-st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog,
- gl_shader_stage stage)
-{
-   const struct gl_shader_compiler_options *options =
-  >ctx->Const.ShaderCompilerOptions[stage];
-
-   /* Translate to NIR */
-   nir_shader *nir = prog_to_nir(prog, options->NirOptions);
-   NIR_PASS_V(nir, nir_lower_regs_to_ssa); /* turn registers into SSA */
-   nir_validate_shader(nir);
-
-   /* Optimise NIR */
-   st_nir_opts(nir);
-   nir_validate_shader(nir);
-
-   return nir;
-}
-
-/**
  * Translate a vertex program.
  */
 bool
@@ -481,28 +458,15 @@ st_translate_vertex_program(struct st_context *st,
   /* No samplers are allowed in ARB_vp. */
}
 
-   enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
-  st->pipe->screen->get_shader_param(st->pipe->screen, PIPE_SHADER_VERTEX,
- PIPE_SHADER_CAP_PREFERRED_IR);
-
-   if (preferred_ir == PIPE_SHADER_IR_NIR) {
-  if (stvp->shader_program) {
- struct gl_program *prog = stvp->shader_program->last_vert_prog;
- if (prog) {
-st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback,
- stvp->result_to_output,
- >tgsi.stream_output);
- }
-
- st_store_ir_in_disk_cache(st, >Base, true);
-  } else {
- nir_shader *nir = st_translate_prog_to_nir(st, >Base,
-MESA_SHADER_VERTEX);
-
- stvp->tgsi.type = PIPE_SHADER_IR_NIR;
- stvp->tgsi.ir.nir = nir;
+   if (stvp->shader_program) {
+  struct gl_program *prog = stvp->shader_program->last_vert_prog;
+  if (prog) {
+ st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback,
+  stvp->result_to_output,
+  >tgsi.stream_output);
   }
 
+  st_store_ir_in_disk_cache(st, >Base, true);
   return true;
}
 
@@ -742,21 +706,6 @@ st_translate_fragment_program(struct st_context *st,
   }
}
 
-   enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
-  st->pipe->screen->get_shader_param(st->pipe->screen,
- PIPE_SHADER_FRAGMENT,
- PIPE_SHADER_CAP_PREFERRED_IR);
-
-   if (preferred_ir == PIPE_SHADER_IR_NIR) {
-  nir_shader *nir = st_translate_prog_to_nir(st, >Base,
- MESA_SHADER_FRAGMENT);
-
-  stfp->tgsi.type = PIPE_SHADER_IR_NIR;
-  stfp->tgsi.ir.nir = nir;
-
-  return true;
-   }
-
/*
 * Convert Mesa program inputs to TGSI input register semantics.
 */

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


Mesa (master): mesa: do not leak ctx->Shader.ReferencedProgram references

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

Author: Jose Dapena Paz <jose.dap...@lge.com>
Date:   Thu May 24 19:56:24 2018 +0200

mesa: do not leak ctx->Shader.ReferencedProgram references

When glUseProgram is used, references to the included shaders are
added in ctx->Shader.ReferencedProgram. But those references are not
decreased when the shader data is deallocated. Thus, those shaders
are leaked.

Explicitely remove the pending references to these shaders.

Fixes: e6506b3cd23 ("mesa: retain gl_shader_programs after glDeleteProgram if 
they are in use")
Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

---

 src/mesa/main/shaderapi.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index caa42541ca..f7080847cc 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -159,6 +159,9 @@ _mesa_free_shader_state(struct gl_context *ctx)
 {
for (int i = 0; i < MESA_SHADER_STAGES; i++) {
   _mesa_reference_program(ctx, >Shader.CurrentProgram[i], NULL);
+  _mesa_reference_shader_program(ctx,
+ >Shader.ReferencedPrograms[i],
+ NULL);
}
_mesa_reference_shader_program(ctx, >Shader.ActiveProgram, NULL);
 

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


Mesa (master): mesa: stop hiding query parameters from OpenGL compat

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri May 18 12:36:05 2018 +1000

mesa: stop hiding query parameters from OpenGL compat

Just let the extension detection do its job as we will be adding
compat profile support in future, also we want these to work
with compat profile version overrides.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/get_hash_params.py | 21 +++--
 1 file changed, 7 insertions(+), 14 deletions(-)

diff --git a/src/mesa/main/get_hash_params.py b/src/mesa/main/get_hash_params.py
index 4bbda93b31..7e14cf51f5 100644
--- a/src/mesa/main/get_hash_params.py
+++ b/src/mesa/main/get_hash_params.py
@@ -451,6 +451,11 @@ descriptor=[
   [ "MAX_WINDOW_RECTANGLES_EXT", "CONTEXT_INT(Const.MaxWindowRectangles), 
extra_EXT_window_rectangles" ],
   [ "NUM_WINDOW_RECTANGLES_EXT", "CONTEXT_INT(Scissor.NumWindowRects), 
extra_EXT_window_rectangles" ],
   [ "WINDOW_RECTANGLE_MODE_EXT", "CONTEXT_ENUM16(Scissor.WindowRectMode), 
extra_EXT_window_rectangles" ],
+
+  # GL_ARB_gpu_shader5 / GL_OES_shader_multisample_interpolation
+  [ "MIN_FRAGMENT_INTERPOLATION_OFFSET", 
"CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
+  [ "MAX_FRAGMENT_INTERPOLATION_OFFSET", 
"CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
+  [ "FRAGMENT_INTERPOLATION_OFFSET_BITS", 
"CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
 ]},
 
 { "apis": ["GLES", "GLES2"], "params": [
@@ -558,18 +563,7 @@ descriptor=[
 
   # GL_NUM_SHADING_LANGUAGE_VERSIONS
   [ "NUM_SHADING_LANGUAGE_VERSIONS", "LOC_CUSTOM, TYPE_INT, 0, 
extra_version_43" ],
-]},
 
-# Enums in OpenGL Core profile and ES 3.0
-{ "apis": ["GL_CORE", "GLES3"], "params": [
-  # GL_ARB_gpu_shader5 / GL_OES_shader_multisample_interpolation
-  [ "MIN_FRAGMENT_INTERPOLATION_OFFSET", 
"CONTEXT_FLOAT(Const.MinFragmentInterpolationOffset), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
-  [ "MAX_FRAGMENT_INTERPOLATION_OFFSET", 
"CONTEXT_FLOAT(Const.MaxFragmentInterpolationOffset), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
-  [ "FRAGMENT_INTERPOLATION_OFFSET_BITS", 
"CONST(FRAGMENT_INTERPOLATION_OFFSET_BITS), 
extra_ARB_gpu_shader5_or_OES_sample_variables" ],
-]},
-
-# Enums in OpenGL Core profile and ES 3.1
-{ "apis": ["GL_CORE", "GLES31"], "params": [
 # GL_ARB_draw_indirect / GLES 3.1
   [ "DRAW_INDIRECT_BUFFER_BINDING", "LOC_CUSTOM, TYPE_INT, 0, 
extra_ARB_draw_indirect" ],
 
@@ -650,12 +644,11 @@ descriptor=[
   [ "CONSERVATIVE_RASTERIZATION_INTEL", 
"CONTEXT_BOOL(IntelConservativeRasterization), 
extra_INTEL_conservative_rasterization" ],
 ]},
 
-{ "apis": ["GL_CORE", "GLES32"], "params": [
+# Enums in OpenGL and ES 3.2
+{ "apis": ["GL", "GL_CORE", "GLES32"], "params": [
   [ "MULTISAMPLE_LINE_WIDTH_RANGE_ARB", "CONTEXT_FLOAT2(Const.MinLineWidthAA), 
extra_ES32" ],
   [ "MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB", 
"CONTEXT_FLOAT(Const.LineWidthGranularity), extra_ES32" ],
-]},
 
-{ "apis": ["GL", "GL_CORE", "GLES32"], "params": [
 # GL 3.0 or ES 3.2
   [ "CONTEXT_FLAGS", "CONTEXT_INT(Const.ContextFlags), extra_version_30" ],
 ]},

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


Mesa (master): mesa: drop GL_EXT_polygon_offset support

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri May 11 15:33:22 2018 +1000

mesa: drop GL_EXT_polygon_offset support

glPolygonOffset() has been part of the GL standard since 1.1. Also
niether AMD or Nvidia support this in their binary drivers.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=61761

---

 docs/relnotes/18.2.0.html   | 64 +
 src/mapi/glapi/gen/gl_API.xml   | 10 --
 src/mapi/glapi/tests/check_table.cpp|  1 -
 src/mesa/main/dlist.c   | 11 --
 src/mesa/main/extensions_table.h|  1 -
 src/mesa/main/get_hash_params.py|  1 -
 src/mesa/main/polygon.c |  8 -
 src/mesa/main/polygon.h |  3 --
 src/mesa/main/tests/dispatch_sanity.cpp |  1 -
 9 files changed, 64 insertions(+), 36 deletions(-)

diff --git a/docs/relnotes/18.2.0.html b/docs/relnotes/18.2.0.html
new file mode 100644
index 00..f3bdb6605c
--- /dev/null
+++ b/docs/relnotes/18.2.0.html
@@ -0,0 +1,64 @@
+http://www.w3.org/TR/html4/loose.dtd;>
+
+
+  
+  Mesa Release Notes
+  
+
+
+
+
+  The Mesa 3D Graphics Library
+
+
+
+
+
+Mesa 18.2.0 Release Notes / TBD
+
+
+Mesa 18.2.0 is a new development release. People who are concerned
+with stability and reliability should stick with a previous release or
+wait for Mesa 18.2.1.
+
+
+Mesa 18.2.0 implements the OpenGL 4.5 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.5.  OpenGL
+4.5 is only available if requested at context creation.
+Compatibility contexts may report a lower version depending on each driver.
+
+
+
+SHA256 checksums
+
+TBD.
+
+
+
+New features
+
+
+Note: some of the new features are only available with certain drivers.
+
+
+
+TBD
+
+
+Bug fixes
+
+
+TBD
+
+
+Changes
+
+
+Removed GL_EXT_polygon_offset applications should use glPolygonOffset 
instead.
+
+
+
+
+
diff --git a/src/mapi/glapi/gen/gl_API.xml b/src/mapi/glapi/gen/gl_API.xml
index db312370b1..8ad45970c9 100644
--- a/src/mapi/glapi/gen/gl_API.xml
+++ b/src/mapi/glapi/gen/gl_API.xml
@@ -8423,16 +8423,6 @@
 
 
 
-
-
-
-
-
-
-
-
-
-
 
 
 
diff --git a/src/mapi/glapi/tests/check_table.cpp 
b/src/mapi/glapi/tests/check_table.cpp
index 6230f1273f..761f2a24e0 100644
--- a/src/mapi/glapi/tests/check_table.cpp
+++ b/src/mapi/glapi/tests/check_table.cpp
@@ -1260,7 +1260,6 @@ const struct name_offset known_dispatch[] = {
{ "glTextureStorage1DEXT", _O(TextureStorage1DEXT) },
{ "glTextureStorage2DEXT", _O(TextureStorage2DEXT) },
{ "glTextureStorage3DEXT", _O(TextureStorage3DEXT) },
-   { "glPolygonOffsetEXT", _O(PolygonOffsetEXT) },
{ "glSampleMaskSGIS", _O(SampleMaskSGIS) },
{ "glSamplePatternSGIS", _O(SamplePatternSGIS) },
{ "glColorPointerEXT", _O(ColorPointerEXT) },
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 9e6cb725f5..8be223559a 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -3486,14 +3486,6 @@ save_PolygonOffset(GLfloat factor, GLfloat units)
 
 
 static void GLAPIENTRY
-save_PolygonOffsetEXT(GLfloat factor, GLfloat bias)
-{
-   GET_CURRENT_CONTEXT(ctx);
-   /* XXX mult by DepthMaxF here??? */
-   save_PolygonOffset(factor, ctx->DrawBuffer->_DepthMaxF * bias);
-}
-
-static void GLAPIENTRY
 save_PolygonOffsetClampEXT(GLfloat factor, GLfloat units, GLfloat clamp)
 {
GET_CURRENT_CONTEXT(ctx);
@@ -9839,9 +9831,6 @@ _mesa_initialize_save_table(const struct gl_context *ctx)
SET_BlendColorEXT(table, save_BlendColorEXT);
 #endif
 
-   /* 3. GL_EXT_polygon_offset */
-   SET_PolygonOffsetEXT(table, save_PolygonOffsetEXT);
-
/* 6. GL_EXT_texture3d */
 #if 0
SET_CopyTexSubImage3DEXT(table, save_CopyTexSubImage3D);
diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
index 945b462122..38d241db52 100644
--- a/src/mesa/main/extensions_table.h
+++ b/src/mesa/main/extensions_table.h
@@ -240,7 +240,6 @@ EXT(EXT_packed_float, 
EXT_packed_float
 EXT(EXT_packed_pixels   , dummy_true   
  , GLL,  x ,  x ,  x , 1997)
 EXT(EXT_pixel_buffer_object , EXT_pixel_buffer_object  
  , GLL, GLC,  x ,  x , 2004)
 EXT(EXT_point_parameters, EXT_point_parameters 
  , GLL,  x ,  x ,  x , 1997)
-EXT(EXT_polygon_offset  , dummy_true   
  , GLL,  x ,  x ,  x , 1995)
 EXT(EXT_polygon_offset_clam

Mesa (master): mesa: add glUniform*ui{v} support to display lists

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu May 10 13:42:16 2018 +1000

mesa: add glUniform*ui{v} support to display lists

Fixes: a017c7ecb7ae "mesa: display list support for uint uniforms"

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=78097

---

 src/mesa/main/dlist.c | 50 +-
 1 file changed, 17 insertions(+), 33 deletions(-)

diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 01df4693f9..9e6cb725f5 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -6596,7 +6596,7 @@ save_Uniform1ui(GLint location, GLuint x)
   n[2].i = x;
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform1ui(ctx->Exec, (location, x));*/
+  CALL_Uniform1ui(ctx->Exec, (location, x));
}
 }
 
@@ -6613,7 +6613,7 @@ save_Uniform2ui(GLint location, GLuint x, GLuint y)
   n[3].i = y;
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform2ui(ctx->Exec, (location, x, y));*/
+  CALL_Uniform2ui(ctx->Exec, (location, x, y));
}
 }
 
@@ -6631,7 +6631,7 @@ save_Uniform3ui(GLint location, GLuint x, GLuint y, 
GLuint z)
   n[4].i = z;
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform3ui(ctx->Exec, (location, x, y, z));*/
+  CALL_Uniform3ui(ctx->Exec, (location, x, y, z));
}
 }
 
@@ -6650,7 +6650,7 @@ save_Uniform4ui(GLint location, GLuint x, GLuint y, 
GLuint z, GLuint w)
   n[5].i = w;
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform4ui(ctx->Exec, (location, x, y, z, w));*/
+  CALL_Uniform4ui(ctx->Exec, (location, x, y, z, w));
}
 }
 
@@ -6669,7 +6669,7 @@ save_Uniform1uiv(GLint location, GLsizei count, const 
GLuint *v)
   save_pointer([3], memdup(v, count * 1 * sizeof(*v)));
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform1uiv(ctx->Exec, (location, count, v));*/
+  CALL_Uniform1uiv(ctx->Exec, (location, count, v));
}
 }
 
@@ -6686,7 +6686,7 @@ save_Uniform2uiv(GLint location, GLsizei count, const 
GLuint *v)
   save_pointer([3], memdup(v, count * 2 * sizeof(*v)));
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform2uiv(ctx->Exec, (location, count, v));*/
+  CALL_Uniform2uiv(ctx->Exec, (location, count, v));
}
 }
 
@@ -6703,7 +6703,7 @@ save_Uniform3uiv(GLint location, GLsizei count, const 
GLuint *v)
   save_pointer([3], memdup(v, count * 3 * sizeof(*v)));
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform3uiv(ctx->Exec, (location, count, v));*/
+  CALL_Uniform3uiv(ctx->Exec, (location, count, v));
}
 }
 
@@ -6720,7 +6720,7 @@ save_Uniform4uiv(GLint location, GLsizei count, const 
GLuint *v)
   save_pointer([3], memdup(v, count * 4 * sizeof(*v)));
}
if (ctx->ExecuteFlag) {
-  /*CALL_Uniform4uiv(ctx->Exec, (location, count, v));*/
+  CALL_Uniform4uiv(ctx->Exec, (location, count, v));
}
 }
 
@@ -8785,34 +8785,29 @@ execute_list(struct gl_context *ctx, GLuint list)
 CALL_Uniform4iv(ctx->Exec, (n[1].i, n[2].i, get_pointer([3])));
 break;
  case OPCODE_UNIFORM_1UI:
-/*CALL_Uniform1uiARB(ctx->Exec, (n[1].i, n[2].i));*/
+CALL_Uniform1ui(ctx->Exec, (n[1].i, n[2].i));
 break;
  case OPCODE_UNIFORM_2UI:
-/*CALL_Uniform2uiARB(ctx->Exec, (n[1].i, n[2].i, n[3].i));*/
+CALL_Uniform2ui(ctx->Exec, (n[1].i, n[2].i, n[3].i));
 break;
  case OPCODE_UNIFORM_3UI:
-/*CALL_Uniform3uiARB(ctx->Exec, (n[1].i, n[2].i, n[3].i, 
n[4].i));*/
+CALL_Uniform3ui(ctx->Exec, (n[1].i, n[2].i, n[3].i, n[4].i));
 break;
  case OPCODE_UNIFORM_4UI:
-/*CALL_Uniform4uiARB(ctx->Exec,
-  (n[1].i, n[2].i, n[3].i, n[4].i, n[5].i));
-*/
+CALL_Uniform4ui(ctx->Exec,
+(n[1].i, n[2].i, n[3].i, n[4].i, n[5].i));
 break;
  case OPCODE_UNIFORM_1UIV:
-/*CALL_Uniform1uivARB(ctx->Exec, (n[1].i, n[2].i,
-  get_pointer([3])));*/
+CALL_Uniform1uiv(ctx->Exec, (n[1].i, n[2].i, get_pointer([3])));
 break;
  case OPCODE_UNIFORM_2UIV:
-/*CALL_Uniform2uivARB(ctx->Exec, (n[1].i, n[2].i,
-  get_pointer([3])));*/
+CALL_Uniform2uiv(ctx->Exec, (n[1].i, n[2].i, get_pointer([3])));
 break;
  case OPCODE_UNIFORM_3UIV:
-/*CALL_Uniform3uivARB(ctx->Exec, (n[1].i, n[2].i,
-  get_pointer([3])));*/
+CALL_Uniform3uiv(ctx-&g

Mesa (master): radv: add initial support for VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue May  8 14:57:55 2018 +1000

radv: add initial support for VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT

When VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT is set we skip NIR
linking optimisations and only run over the NIR optimisation loop
once similar to the GLSLOptimizeConservatively constant used by
some GL drivers.

We need to run over the opts at least once to avoid errors in LLVM
(e.g. dead vars it can't handle) and also to reduce the time spent
compiling the IR in LLVM.

With this change the Blacksmith Unity demos compilation times
go from 329760 ms -> 299881 ms when using Wine and DXVK.

V2: add bit to radv_pipeline_key

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106246

---

 src/amd/vulkan/radv_pipeline.c | 26 +-
 src/amd/vulkan/radv_private.h  |  1 +
 src/amd/vulkan/radv_shader.c   | 12 +++-
 src/amd/vulkan/radv_shader.h   |  5 +++--
 4 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index b4e4f3211e..d443f8271e 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1724,13 +1724,13 @@ radv_link_shaders(struct radv_pipeline *pipeline, 
nir_shader **shaders)
ac_lower_indirect_derefs(ordered_shaders[i],
 
pipeline->device->physical_device->rad_info.chip_class);
}
-   radv_optimize_nir(ordered_shaders[i]);
+   radv_optimize_nir(ordered_shaders[i], false);
 
if (nir_lower_global_vars_to_local(ordered_shaders[i - 
1])) {
ac_lower_indirect_derefs(ordered_shaders[i - 1],
 
pipeline->device->physical_device->rad_info.chip_class);
}
-   radv_optimize_nir(ordered_shaders[i - 1]);
+   radv_optimize_nir(ordered_shaders[i - 1], false);
}
}
 }
@@ -1750,6 +1750,9 @@ radv_generate_graphics_pipeline_key(struct radv_pipeline 
*pipeline,
struct radv_pipeline_key key;
memset(, 0, sizeof(key));
 
+   if (pCreateInfo->flags & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
+   key.optimisations_disabled = 1;
+
key.has_multiview_view_index = has_view_index;
 
uint32_t binding_input_rate = 0;
@@ -1878,7 +1881,8 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
  struct radv_device *device,
  struct radv_pipeline_cache *cache,
  struct radv_pipeline_key key,
- const VkPipelineShaderStageCreateInfo **pStages)
+ const VkPipelineShaderStageCreateInfo **pStages,
+ const VkPipelineCreateFlags flags)
 {
struct radv_shader_module fs_m = {0};
struct radv_shader_module *modules[MESA_SHADER_STAGES] = { 0, };
@@ -1944,7 +1948,8 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
 
nir[i] = radv_shader_compile_to_nir(device, modules[i],
stage ? stage->pName : 
"main", i,
-   stage ? 
stage->pSpecializationInfo : NULL);
+   stage ? 
stage->pSpecializationInfo : NULL,
+   flags);
pipeline->active_stages |= mesa_to_vk_shader_stage(i);
 
/* We don't want to alter meta shaders IR directly so clone it
@@ -1963,8 +1968,10 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
if (i != last)
mask = mask | nir_var_shader_out;
 
-   nir_lower_io_to_scalar_early(nir[i], mask);
-   radv_optimize_nir(nir[i]);
+   if (!(flags & 
VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)) {
+   nir_lower_io_to_scalar_early(nir[i], mask);
+   radv_optimize_nir(nir[i], false);
+   }
}
}
 
@@ -1973,7 +1980,8 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
merge_tess_info([MESA_SHADER_TESS_EVAL]->info, 
[MESA_SHADER_TESS_CTRL]->info);
}
 
-   radv_link_shaders(pipeline, nir);
+   if (!(flags & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT))
+   radv_link_s

Mesa (master): st/nir: make st_nir_opts() available externally

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed May  9 13:25:46 2018 +1000

st/nir: make st_nir_opts() available externally

The following patch will make use of this for asm style programs.

Reviewed-by: Eric Anholt <e...@anholt.net>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 2 +-
 src/mesa/state_tracker/st_nir.h   | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 3b261cf1b2..de906e60c3 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -314,7 +314,7 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
*size = max;
 }
 
-static void
+void
 st_nir_opts(nir_shader *nir)
 {
bool progress;
diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index 1c2e32a5e6..15f1ce93e5 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -42,6 +42,8 @@ void st_finalize_nir(struct st_context *st, struct gl_program 
*prog,
  struct gl_shader_program *shader_program,
  struct nir_shader *nir);
 
+void st_nir_opts(struct nir_shader *nir);
+
 bool
 st_link_nir(struct gl_context *ctx,
 struct gl_shader_program *shader_program);

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


Mesa (master): st/nir: use NIR for asm programs

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed May  9 13:28:05 2018 +1000

st/nir: use NIR for asm programs

Reviewed-by: Eric Anholt <e...@anholt.net>

---

 src/mesa/state_tracker/st_program.c | 65 +
 1 file changed, 58 insertions(+), 7 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index f256e2e862..a52c9f8256 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -37,6 +37,7 @@
 #include "main/mtypes.h"
 #include "program/prog_parameter.h"
 #include "program/prog_print.h"
+#include "program/prog_to_nir.h"
 #include "program/programopt.h"
 
 #include "compiler/nir/nir.h"
@@ -378,6 +379,28 @@ st_release_cp_variants(struct st_context *st, struct 
st_compute_program *stcp)
 }
 
 /**
+ * Translate ARB (asm) program to NIR
+ */
+static nir_shader *
+st_translate_prog_to_nir(struct st_context *st, struct gl_program *prog,
+ gl_shader_stage stage)
+{
+   const struct gl_shader_compiler_options *options =
+  >ctx->Const.ShaderCompilerOptions[stage];
+
+   /* Translate to NIR */
+   nir_shader *nir = prog_to_nir(prog, options->NirOptions);
+   NIR_PASS_V(nir, nir_lower_regs_to_ssa); /* turn registers into SSA */
+   nir_validate_shader(nir);
+
+   /* Optimise NIR */
+   st_nir_opts(nir);
+   nir_validate_shader(nir);
+
+   return nir;
+}
+
+/**
  * Translate a vertex program.
  */
 bool
@@ -458,15 +481,28 @@ st_translate_vertex_program(struct st_context *st,
   /* No samplers are allowed in ARB_vp. */
}
 
-   if (stvp->shader_program) {
-  struct gl_program *prog = stvp->shader_program->last_vert_prog;
-  if (prog) {
- st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback,
-  stvp->result_to_output,
-  >tgsi.stream_output);
+   enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
+  st->pipe->screen->get_shader_param(st->pipe->screen, PIPE_SHADER_VERTEX,
+ PIPE_SHADER_CAP_PREFERRED_IR);
+
+   if (preferred_ir == PIPE_SHADER_IR_NIR) {
+  if (stvp->shader_program) {
+ struct gl_program *prog = stvp->shader_program->last_vert_prog;
+ if (prog) {
+st_translate_stream_output_info2(prog->sh.LinkedTransformFeedback,
+ stvp->result_to_output,
+ >tgsi.stream_output);
+ }
+
+ st_store_ir_in_disk_cache(st, >Base, true);
+  } else {
+ nir_shader *nir = st_translate_prog_to_nir(st, >Base,
+MESA_SHADER_VERTEX);
+
+ stvp->tgsi.type = PIPE_SHADER_IR_NIR;
+ stvp->tgsi.ir.nir = nir;
   }
 
-  st_store_ir_in_disk_cache(st, >Base, true);
   return true;
}
 
@@ -706,6 +742,21 @@ st_translate_fragment_program(struct st_context *st,
   }
}
 
+   enum pipe_shader_ir preferred_ir = (enum pipe_shader_ir)
+  st->pipe->screen->get_shader_param(st->pipe->screen,
+ PIPE_SHADER_FRAGMENT,
+ PIPE_SHADER_CAP_PREFERRED_IR);
+
+   if (preferred_ir == PIPE_SHADER_IR_NIR) {
+  nir_shader *nir = st_translate_prog_to_nir(st, >Base,
+ MESA_SHADER_FRAGMENT);
+
+  stfp->tgsi.type = PIPE_SHADER_IR_NIR;
+  stfp->tgsi.ir.nir = nir;
+
+  return true;
+   }
+
/*
 * Convert Mesa program inputs to TGSI input register semantics.
 */

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


Mesa (master): main: return 0 length when the queried program object's not linked

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

Author: Xiong, James <james.xi...@intel.com>
Date:   Thu Apr 26 18:39:57 2018 -0700

main: return 0 length when the queried program object's not linked

Signed-off-by: Xiong, James <james.xi...@intel.com>
Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

---

 src/mesa/main/shaderapi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mesa/main/shaderapi.c b/src/mesa/main/shaderapi.c
index 44b18af492..caa42541ca 100644
--- a/src/mesa/main/shaderapi.c
+++ b/src/mesa/main/shaderapi.c
@@ -837,7 +837,7 @@ get_programiv(struct gl_context *ctx, GLuint program, 
GLenum pname,
   *params = shProg->BinaryRetreivableHint;
   return;
case GL_PROGRAM_BINARY_LENGTH:
-  if (ctx->Const.NumProgramBinaryFormats == 0) {
+  if (ctx->Const.NumProgramBinaryFormats == 0 || 
!shProg->data->LinkStatus) {
  *params = 0;
   } else {
  _mesa_get_program_binary_length(ctx, shProg, params);

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


Mesa (master): main: fail texture_storage() call if the size is not okay

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

Author: Xiong, James 
Date:   Fri Apr 27 08:34:47 2018 -0700

main: fail texture_storage() call if the size is not okay

Signed-off-by: Xiong, James 
Reviewed-by: Nicolai Hähnle 

---

 src/mesa/main/texstorage.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mesa/main/texstorage.c b/src/mesa/main/texstorage.c
index 44edba3323..9cb8b90065 100644
--- a/src/mesa/main/texstorage.c
+++ b/src/mesa/main/texstorage.c
@@ -445,6 +445,7 @@ texture_storage(struct gl_context *ctx, GLuint dims,
 _mesa_error(ctx, GL_OUT_OF_MEMORY,
 "glTex%sStorage%uD(texture too large)",
 suffix, dims);
+return;
  }
   }
 

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


Mesa (master): mesa: remove hard-coded OpenGL 3.2 compat limit

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue May  8 10:35:40 2018 +1000

mesa: remove hard-coded OpenGL 3.2 compat limit

Just let validate_context_version() do it instead. This fixes
MESA_GL_VERSION_OVERRIDE for compat, it will also allow us to
enable new compat versions on a per driver bases in future.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/drivers/dri/common/dri_util.c | 8 
 1 file changed, 8 deletions(-)

diff --git a/src/mesa/drivers/dri/common/dri_util.c 
b/src/mesa/drivers/dri/common/dri_util.c
index 7cb6248b13..75d124097b 100644
--- a/src/mesa/drivers/dri/common/dri_util.c
+++ b/src/mesa/drivers/dri/common/dri_util.c
@@ -389,14 +389,6 @@ driCreateContextAttribs(__DRIscreen *screen, int api,
 screen->max_gl_compat_version < 31)
mesa_api = API_OPENGL_CORE;
 
-if (mesa_api == API_OPENGL_COMPAT
-&& ((ctx_config.major_version > 3)
-|| (ctx_config.major_version == 3 &&
-ctx_config.minor_version >= 2))) {
-   *error = __DRI_CTX_ERROR_BAD_API;
-   return NULL;
-}
-
 /* The latest version of EGL_KHR_create_context spec says:
  *
  * "If the EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR flag bit is set in

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


Mesa (master): mesa: dont call _mesa_override_glsl_version() in _mesa_init_constants()

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue May  8 09:22:41 2018 +1000

mesa: dont call _mesa_override_glsl_version() in _mesa_init_constants()

All drivers that support GLSL will later set their default GLSL versions
overriding this override call. They currently all call
 _mesa_override_glsl_version() again later in order to support overrides.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/context.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 9bd4661bd8..4243e03c5c 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -638,9 +638,6 @@ _mesa_init_constants(struct gl_constants *consts, gl_api 
api)
consts->MaxGeometryOutputVertices = MAX_GEOMETRY_OUTPUT_VERTICES;
consts->MaxGeometryTotalOutputComponents = 
MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS;
 
-   /* Shading language version */
-   _mesa_override_glsl_version(consts);
-
 #ifdef DEBUG
consts->GenerateTemporaryNames = true;
 #else

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


Mesa (master): mesa: add GLSLVersionCompat constant

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue May  8 10:10:39 2018 +1000

mesa: add GLSLVersionCompat constant

This allows drivers to define what version of GLSL they support
in compat. This will be needed in order to support compat 3.2
without breaking drivers that wont support it.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/drivers/dri/i915/intel_extensions.c | 1 +
 src/mesa/drivers/dri/i965/intel_extensions.c | 6 ++
 src/mesa/main/mtypes.h   | 1 +
 src/mesa/main/version.c  | 4 +---
 src/mesa/state_tracker/st_extensions.c   | 1 +
 5 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/intel_extensions.c 
b/src/mesa/drivers/dri/i915/intel_extensions.c
index c85bd787fe..c385153013 100644
--- a/src/mesa/drivers/dri/i915/intel_extensions.c
+++ b/src/mesa/drivers/dri/i915/intel_extensions.c
@@ -78,6 +78,7 @@ intelInitExtensions(struct gl_context *ctx)
ctx->Extensions.OES_draw_texture = true;
 
ctx->Const.GLSLVersion = 120;
+   ctx->Const.GLSLVersionCompat = 120;
_mesa_override_glsl_version(>Const);
 
if (intel->gen >= 3) {
diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c 
b/src/mesa/drivers/dri/i965/intel_extensions.c
index e1e19217bc..b5860f13cb 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -148,6 +148,12 @@ intelInitExtensions(struct gl_context *ctx)
   ctx->Const.GLSLVersion = 330;
else
   ctx->Const.GLSLVersion = 120;
+
+   if (devinfo->gen >= 6)
+  ctx->Const.GLSLVersionCompat = 130;
+   else
+  ctx->Const.GLSLVersionCompat = 120;
+
_mesa_override_glsl_version(>Const);
 
ctx->Extensions.EXT_shader_integer_mix = ctx->Const.GLSLVersion >= 130;
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 2d3eb457f9..2c87308dd7 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3649,6 +3649,7 @@ struct gl_constants
GLuint MaxGeometryTotalOutputComponents;
 
GLuint GLSLVersion;  /**< Desktop GLSL version supported (ex: 120 = 1.20) */
+   GLuint GLSLVersionCompat;  /**< Desktop compat GLSL version supported  */
 
/**
 * Changes default GLSL extension behavior from "error" to "warn".  It's out
diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 84babd69e2..3f3dff0bde 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -588,9 +588,7 @@ _mesa_get_version(const struct gl_extensions *extensions,
   /* Disable higher GLSL versions for legacy contexts.
* This disallows creation of higher compatibility contexts. */
   if (!consts->AllowHigherCompatVersion) {
- if (consts->GLSLVersion > 140) {
-consts->GLSLVersion = 140;
- }
+ consts->GLSLVersion = consts->GLSLVersionCompat;
   }
   /* fall through */
case API_OPENGL_CORE:
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index 5479e637af..19ef736e5b 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -936,6 +936,7 @@ 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 = 140;
 
_mesa_override_glsl_version(consts);
 

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


Mesa (master): mesa: dont set GLSLVersion in _mesa_init_constants()

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue May  8 09:19:04 2018 +1000

mesa: dont set GLSLVersion in _mesa_init_constants()

Just leave it as 0 and let the drivers set it (as they already do)
to avoid redundantly initialising it.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/context.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 9a4bf8d394..9bd4661bd8 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -639,7 +639,6 @@ _mesa_init_constants(struct gl_constants *consts, gl_api 
api)
consts->MaxGeometryTotalOutputComponents = 
MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS;
 
/* Shading language version */
-   consts->GLSLVersion = 120;
_mesa_override_glsl_version(consts);
 
 #ifdef DEBUG

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


Mesa (master): mesa: enable geom shaders in OpenGL 3.2 Compat profile

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed May  2 19:55:59 2018 +1000

mesa: enable geom shaders in OpenGL 3.2 Compat profile

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mapi/glapi/gen/apiexec.py | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/mapi/glapi/gen/apiexec.py b/src/mapi/glapi/gen/apiexec.py
index b5e0ad4a17..20d6239ba1 100644
--- a/src/mapi/glapi/gen/apiexec.py
+++ b/src/mapi/glapi/gen/apiexec.py
@@ -46,7 +46,6 @@ class exec_info():
 if compatibility is not None:
 assert isinstance(compatibility, int)
 assert compatibility >= 10
-assert compatibility <= 30
 
 if core is not None:
 assert isinstance(core, int)
@@ -70,7 +69,7 @@ functions = {
 "TexBuffer": exec_info(compatibility=20, core=31, es2=31),
 
 # OpenGL 3.2 / GL_OES_geometry_shader.
-"FramebufferTexture": exec_info(core=32, es2=31),
+"FramebufferTexture": exec_info(compatibility=32, core=32, es2=31),
 
 # OpenGL 4.0 / GL_ARB_shader_subroutines. Mesa only exposes this
 # extension with core profile.

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


Mesa (master): nir: move GL specific passes to src/compiler/glsl

2018-04-30 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 6487e7a30c9e4c2a417ddfe632d5f68e065e21eb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6487e7a30c9e4c2a417ddfe632d5f68e065e21eb

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Apr 30 20:39:43 2018 +1000

nir: move GL specific passes to src/compiler/glsl

With this we should have no passes in src/compiler/nir with any
dependencies on headers from core GL Mesa.

Reviewed-by: Alejandro Piñeiro <apinhe...@igalia.com>

---

 src/compiler/Makefile.sources  |  7 ++--
 src/compiler/glsl/gl_nir.h | 47 ++
 .../gl_nir_lower_atomics.c}| 12 +++---
 .../gl_nir_lower_samplers.c}   | 11 ++---
 .../gl_nir_lower_samplers_as_deref.c}  | 11 ++---
 src/compiler/glsl/meson.build  |  4 ++
 src/compiler/nir/meson.build   |  3 --
 src/compiler/nir/nir.h | 11 -
 src/gallium/drivers/freedreno/ir3/ir3_cmdline.c|  2 +-
 src/mesa/drivers/dri/i965/brw_link.cpp |  5 ++-
 src/mesa/main/glspirv.h|  1 +
 src/mesa/state_tracker/st_glsl_to_nir.cpp  |  7 ++--
 12 files changed, 83 insertions(+), 38 deletions(-)

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index aca9dab476..b98ea67370 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -25,6 +25,10 @@ LIBGLSL_FILES = \
glsl/builtin_types.cpp \
glsl/builtin_variables.cpp \
glsl/generate_ir.cpp \
+   glsl/gl_nir_lower_atomics.c \
+   glsl/gl_nir_lower_samplers.c \
+   glsl/gl_nir_lower_samplers_as_deref.c \
+   glsl/gl_nir.h \
glsl/glsl_parser_extras.cpp \
glsl/glsl_parser_extras.h \
glsl/glsl_symbol_table.cpp \
@@ -211,7 +215,6 @@ NIR_FILES = \
nir/nir_lower_64bit_packing.c \
nir/nir_lower_alpha_test.c \
nir/nir_lower_alu_to_scalar.c \
-   nir/nir_lower_atomics.c \
nir/nir_lower_atomics_to_ssbo.c \
nir/nir_lower_bitmap.c \
nir/nir_lower_clamp_color_outputs.c \
@@ -237,8 +240,6 @@ NIR_FILES = \
nir/nir_lower_phis_to_scalar.c \
nir/nir_lower_regs_to_ssa.c \
nir/nir_lower_returns.c \
-   nir/nir_lower_samplers.c \
-   nir/nir_lower_samplers_as_deref.c \
nir/nir_lower_subgroups.c \
nir/nir_lower_system_values.c \
nir/nir_lower_tex.c \
diff --git a/src/compiler/glsl/gl_nir.h b/src/compiler/glsl/gl_nir.h
new file mode 100644
index 00..59d5f65e65
--- /dev/null
+++ b/src/compiler/glsl/gl_nir.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright © 2018 Timothy Arceri
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
THE
+ * SOFTWARE.
+ */
+
+#ifndef GL_NIR_H
+#define GL_NIR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct nir_shader;
+struct gl_shader_program;
+
+bool gl_nir_lower_atomics(nir_shader *shader,
+  const struct gl_shader_program *shader_program,
+  bool use_binding_as_idx);
+
+bool gl_nir_lower_samplers(nir_shader *shader,
+   const struct gl_shader_program *shader_program);
+bool gl_nir_lower_samplers_as_deref(nir_shader *shader,
+const struct gl_shader_program 
*shader_program);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GL_NIR_H */
diff --git a/src/compiler/nir/nir_lower_atomics.c 
b/src/compiler/glsl/gl_nir_lower_atomics.c
similarity index 96%
rename from src/compiler/nir/nir_lower_atomics.c
rename to src/compiler/glsl/gl_nir_lower_atomics.c
index 383e323610..e203b390b4 100644
--- a/src/compiler/nir/nir_lower_atomics.c
+++ b/src/compiler/glsl/gl_nir_lower_atomics.c
@@ -25,8 +25,10 @@
  *
  */
 
-#include "compiler/glsl/ir_uniform.h"
-#include "nir.h"

Mesa (master): glsl: replace some asserts with unreachable when processing the ast

2018-04-26 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 79b0556f292b813c4c7139f75cf0c9c6e2d3e7bb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=79b0556f292b813c4c7139f75cf0c9c6e2d3e7bb

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Apr 10 14:34:26 2018 +1000

glsl: replace some asserts with unreachable when processing the ast

Reviewed-by: Matt Turner <matts...@gmail.com>

---

 src/compiler/glsl/ast_to_hir.cpp | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 94ce3c45d0..3bf581571e 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -1397,8 +1397,7 @@ ast_expression::do_hir(exec_list *instructions,
 
switch (this->oper) {
case ast_aggregate:
-  assert(!"ast_aggregate: Should never get here.");
-  break;
+  unreachable("ast_aggregate: Should never get here.");
 
case ast_assign: {
   this->subexpressions[0]->set_is_lhs(true);
@@ -1974,15 +1973,13 @@ ast_expression::do_hir(exec_list *instructions,
}
 
case ast_unsized_array_dim:
-  assert(!"ast_unsized_array_dim: Should never get here.");
-  break;
+  unreachable("ast_unsized_array_dim: Should never get here.");
 
case ast_function_call:
   /* Should *NEVER* get here.  ast_function_call should always be handled
* by ast_function_expression::hir.
*/
-  assert(0);
-  break;
+  unreachable("ast_function_call: handled elsewhere ");
 
case ast_identifier: {
   /* ast_identifier can appear several places in a full abstract syntax

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


Mesa (master): mesa: drop the buffer mode param from the DrawBuffer driver function

2018-04-26 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 410f901beed8f6f041716396b1f27fd61518e231
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=410f901beed8f6f041716396b1f27fd61518e231

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Apr 27 10:03:56 2018 +1000

mesa: drop the buffer mode param from the DrawBuffer driver function

No drivers used it.

Reviewed-by: Brian Paul <bri...@vmware.com>

---

 src/mesa/drivers/common/driverfuncs.c| 2 +-
 src/mesa/drivers/dri/i915/intel_buffers.c| 2 +-
 src/mesa/drivers/dri/i965/intel_buffers.c| 2 +-
 src/mesa/drivers/dri/nouveau/nouveau_state.c | 2 +-
 src/mesa/drivers/dri/radeon/radeon_common.c  | 5 ++---
 src/mesa/drivers/dri/radeon/radeon_common.h  | 2 +-
 src/mesa/main/buffers.c  | 4 ++--
 src/mesa/main/dd.h   | 2 +-
 8 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/mesa/drivers/common/driverfuncs.c 
b/src/mesa/drivers/common/driverfuncs.c
index b7ac2b5b43..e783262773 100644
--- a/src/mesa/drivers/common/driverfuncs.c
+++ b/src/mesa/drivers/common/driverfuncs.c
@@ -306,5 +306,5 @@ _mesa_init_driver_state(struct gl_context *ctx)
  ctx->Stencil.ZPassFunc[1]);
 
 
-   ctx->Driver.DrawBuffer(ctx, ctx->Color.DrawBuffer[0]);
+   ctx->Driver.DrawBuffer(ctx);
 }
diff --git a/src/mesa/drivers/dri/i915/intel_buffers.c 
b/src/mesa/drivers/dri/i915/intel_buffers.c
index 386e032443..83d59edb6f 100644
--- a/src/mesa/drivers/dri/i915/intel_buffers.c
+++ b/src/mesa/drivers/dri/i915/intel_buffers.c
@@ -53,7 +53,7 @@ intel_check_front_buffer_rendering(struct intel_context 
*intel)
 }
 
 static void
-intelDrawBuffer(struct gl_context * ctx, GLenum mode)
+intelDrawBuffer(struct gl_context * ctx)
 {
if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
   struct intel_context *const intel = intel_context(ctx);
diff --git a/src/mesa/drivers/dri/i965/intel_buffers.c 
b/src/mesa/drivers/dri/i965/intel_buffers.c
index fd522cc4f4..dae56e3362 100644
--- a/src/mesa/drivers/dri/i965/intel_buffers.c
+++ b/src/mesa/drivers/dri/i965/intel_buffers.c
@@ -33,7 +33,7 @@
 #include "main/renderbuffer.h"
 
 static void
-intelDrawBuffer(struct gl_context * ctx, GLenum mode)
+intelDrawBuffer(struct gl_context *ctx)
 {
if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
   struct brw_context *const brw = brw_context(ctx);
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c 
b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index debbd38080..a05c8be854 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -115,7 +115,7 @@ nouveau_read_buffer(struct gl_context *ctx, GLenum buffer)
 }
 
 static void
-nouveau_draw_buffer(struct gl_context *ctx, GLenum buffer)
+nouveau_draw_buffer(struct gl_context *ctx)
 {
nouveau_validate_framebuffer(ctx);
context_dirty(ctx, FRAMEBUFFER);
diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c 
b/src/mesa/drivers/dri/radeon/radeon_common.c
index 61cbf599f8..a3bf00b09f 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -317,11 +317,10 @@ void radeon_draw_buffer(struct gl_context *ctx, struct 
gl_framebuffer *fb)
 /**
  * Called via glDrawBuffer.
  */
-void radeonDrawBuffer( struct gl_context *ctx, GLenum mode )
+void radeonDrawBuffer(struct gl_context *ctx)
 {
if (RADEON_DEBUG & RADEON_DRI)
-   fprintf(stderr, "%s %s\n", __func__,
-   _mesa_enum_to_string( mode ));
+   fprintf(stderr, "%s\n", __func__);
 
if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
radeonContextPtr radeon = RADEON_CONTEXT(ctx);
diff --git a/src/mesa/drivers/dri/radeon/radeon_common.h 
b/src/mesa/drivers/dri/radeon/radeon_common.h
index ada4956066..a39b9360ef 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common.h
@@ -21,7 +21,7 @@ void radeon_clear_tris(struct gl_context *ctx, GLbitfield 
mask);
 
 void radeon_window_moved(radeonContextPtr radeon);
 void radeon_draw_buffer(struct gl_context *ctx, struct gl_framebuffer *fb);
-void radeonDrawBuffer( struct gl_context *ctx, GLenum mode );
+void radeonDrawBuffer(struct gl_context *ctx);
 void radeonReadBuffer( struct gl_context *ctx, GLenum mode );
 void radeon_viewport(struct gl_context *ctx);
 void radeon_fbo_init(struct radeon_context *radeon);
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index ba970d87da..bb856882da 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -305,7 +305,7 @@ draw_buffer(struct gl_context *ctx, struct gl_framebuffer 
*fb,
/* Call device driver function only if fb is the bound draw buffer */
if (fb == ctx->DrawBuffer) {
   if (ctx->Driver.DrawBuffer)
- ctx->Driver.DrawBuffer(ctx, buffer);
+   

Mesa (master): mesa: call DrawBufferAllocate driver hook in update_framebuffer for windows-system FB

2018-04-24 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 6695f9d5c5c94df080efc720ed532217618a28c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6695f9d5c5c94df080efc720ed532217618a28c3

Author: Boyan Ding <boyan.j.d...@gmail.com>
Date:   Sat Apr 14 14:45:23 2018 +1000

mesa: call DrawBufferAllocate driver hook in update_framebuffer for 
windows-system FB

When draw buffers are changed on a bound framebuffer, DrawBufferAllocate()
hook should be called. However, it is missing in update_framebuffer with
window-system framebuffer, in which FB's draw buffer state should match
context state, potentially resulting in a change.

Note: This is needed because gallium delays creating the front buffer,
  i965 works fine without this change.

V2 (Timothy Arceri):
 - Rebased on merged/simplified DrawBuffer driver function
 - Move DrawBuffer call outside fb->ColorDrawBuffer[0] !=
   ctx->Color.DrawBuffer[0] check to make piglit pass.

v3 (Timothy Arceri):
 - Call new DrawBuffaerAllocate() driver function.

Tested-by: Dieter Nützel <die...@nuetzel-hh.de> (v2)
Reviewed-by: Brian Paul <bri...@vmware.com> (v2)
Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99116

---

 src/mesa/main/framebuffer.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 211e97c33b..4ea18f6858 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -617,6 +617,12 @@ update_framebuffer(struct gl_context *ctx, struct 
gl_framebuffer *fb)
  _mesa_drawbuffers(ctx, fb, ctx->Const.MaxDrawBuffers,
ctx->Color.DrawBuffer, NULL);
   }
+
+  /* Call device driver function if fb is the bound draw buffer. */
+  if (fb == ctx->DrawBuffer) {
+ if (ctx->Driver.DrawBufferAllocate)
+ctx->Driver.DrawBufferAllocate(ctx);
+  }
}
else {
   /* This is a user-created framebuffer.

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


Mesa (master): mesa: some C99 tidy ups for framebuffer.c

2018-04-24 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 2554b8cb006d5466736333ab7b75aa34501278bb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2554b8cb006d5466736333ab7b75aa34501278bb

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Apr 24 14:06:00 2018 +1000

mesa: some C99 tidy ups for framebuffer.c

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>

---

 src/mesa/main/framebuffer.c | 18 +-
 1 file changed, 5 insertions(+), 13 deletions(-)

diff --git a/src/mesa/main/framebuffer.c b/src/mesa/main/framebuffer.c
index 249e775f8c..211e97c33b 100644
--- a/src/mesa/main/framebuffer.c
+++ b/src/mesa/main/framebuffer.c
@@ -210,14 +210,12 @@ _mesa_destroy_framebuffer(struct gl_framebuffer *fb)
 void
 _mesa_free_framebuffer_data(struct gl_framebuffer *fb)
 {
-   GLuint i;
-
assert(fb);
assert(fb->RefCount == 0);
 
simple_mtx_destroy(>Mutex);
 
-   for (i = 0; i < BUFFER_COUNT; i++) {
+   for (unsigned i = 0; i < BUFFER_COUNT; i++) {
   struct gl_renderbuffer_attachment *att = >Attachment[i];
   if (att->Renderbuffer) {
  _mesa_reference_renderbuffer(>Renderbuffer, NULL);
@@ -280,8 +278,6 @@ void
 _mesa_resize_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb,
  GLuint width, GLuint height)
 {
-   GLuint i;
-
/* XXX I think we could check if the size is not changing
 * and return early.
 */
@@ -289,7 +285,7 @@ _mesa_resize_framebuffer(struct gl_context *ctx, struct 
gl_framebuffer *fb,
/* Can only resize win-sys framebuffer objects */
assert(_mesa_is_winsys_fbo(fb));
 
-   for (i = 0; i < BUFFER_COUNT; i++) {
+   for (unsigned i = 0; i < BUFFER_COUNT; i++) {
   struct gl_renderbuffer_attachment *att = >Attachment[i];
   if (att->Type == GL_RENDERBUFFER_EXT && att->Renderbuffer) {
  struct gl_renderbuffer *rb = att->Renderbuffer;
@@ -427,13 +423,11 @@ void
 _mesa_update_framebuffer_visual(struct gl_context *ctx,
struct gl_framebuffer *fb)
 {
-   GLuint i;
-
memset(>Visual, 0, sizeof(fb->Visual));
fb->Visual.rgbMode = GL_TRUE; /* assume this */
 
/* find first RGB renderbuffer */
-   for (i = 0; i < BUFFER_COUNT; i++) {
+   for (unsigned i = 0; i < BUFFER_COUNT; i++) {
   if (fb->Attachment[i].Renderbuffer) {
  const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
  const GLenum baseFormat = _mesa_get_format_base_format(rb->Format);
@@ -461,7 +455,7 @@ _mesa_update_framebuffer_visual(struct gl_context *ctx,
}
 
fb->Visual.floatMode = GL_FALSE;
-   for (i = 0; i < BUFFER_COUNT; i++) {
+   for (unsigned i = 0; i < BUFFER_COUNT; i++) {
   if (fb->Attachment[i].Renderbuffer) {
  const struct gl_renderbuffer *rb = fb->Attachment[i].Renderbuffer;
  const mesa_format fmt = rb->Format;
@@ -936,14 +930,12 @@ _mesa_get_read_renderbuffer_for_format(const struct 
gl_context *ctx,
 void
 _mesa_print_framebuffer(const struct gl_framebuffer *fb)
 {
-   GLuint i;
-
fprintf(stderr, "Mesa Framebuffer %u at %p\n", fb->Name, (void *) fb);
fprintf(stderr, "  Size: %u x %u  Status: %s\n", fb->Width, fb->Height,
_mesa_enum_to_string(fb->_Status));
fprintf(stderr, "  Attachments:\n");
 
-   for (i = 0; i < BUFFER_COUNT; i++) {
+   for (unsigned i = 0; i < BUFFER_COUNT; i++) {
   const struct gl_renderbuffer_attachment *att = >Attachment[i];
   if (att->Type == GL_TEXTURE) {
  const struct gl_texture_image *texImage = att->Renderbuffer->TexImage;

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


Mesa (master): st/mesa: add new driver function DrawBufferAllocate

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Apr 24 14:19:48 2018 +1000

st/mesa: add new driver function DrawBufferAllocate

Unlike some of the classic drivers the st was only using DrawBuffer()
to allocated some buffers on-demand. Creating a separate function
will allow us to call it from update_framebuffer() in the following
patch without regressing some of the older classic drivers.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/buffers.c|  4 
 src/mesa/main/dd.h |  4 +++-
 src/mesa/state_tracker/st_cb_fbo.c | 10 --
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 7bb5725d08..ba970d87da 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -306,6 +306,8 @@ draw_buffer(struct gl_context *ctx, struct gl_framebuffer 
*fb,
if (fb == ctx->DrawBuffer) {
   if (ctx->Driver.DrawBuffer)
  ctx->Driver.DrawBuffer(ctx, buffer);
+  if (ctx->Driver.DrawBufferAllocate)
+ ctx->Driver.DrawBufferAllocate(ctx);
}
 }
 
@@ -587,6 +589,8 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer 
*fb, GLsizei n,
if (fb == ctx->DrawBuffer) {
   if (ctx->Driver.DrawBuffer)
  ctx->Driver.DrawBuffer(ctx, n > 0 ? buffers[0] : GL_NONE);
+  if (ctx->Driver.DrawBufferAllocate)
+ ctx->Driver.DrawBufferAllocate(ctx);
}
 }
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index d85d89ef50..5ee6902d3f 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -611,7 +611,9 @@ struct dd_function_table {
/** Specify mapping of depth values from NDC to window coordinates */
void (*DepthRange)(struct gl_context *ctx);
/** Specify the current buffer for writing */
-   void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
+   void (*DrawBuffer)(struct gl_context *ctx, GLenum buffer);
+   /** Used to allocated any buffers with on-demand creation */
+   void (*DrawBufferAllocate)(struct gl_context *ctx);
/** Enable or disable server-side gl capabilities */
void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
/** Specify fog parameters */
diff --git a/src/mesa/state_tracker/st_cb_fbo.c 
b/src/mesa/state_tracker/st_cb_fbo.c
index 696a08fd65..5eeec08655 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -714,13 +714,11 @@ st_validate_framebuffer(struct gl_context *ctx, struct 
gl_framebuffer *fb)
  * created FBOs.
  */
 static void
-st_DrawBuffer(struct gl_context *ctx, GLenum buffer)
+st_DrawBufferAllocate(struct gl_context *ctx)
 {
struct st_context *st = st_context(ctx);
struct gl_framebuffer *fb = ctx->DrawBuffer;
 
-   (void) buffer;
-
if (_mesa_is_winsys_fbo(fb)) {
   GLuint i;
   /* add the renderbuffers on demand */
@@ -736,8 +734,8 @@ st_DrawBuffer(struct gl_context *ctx, GLenum buffer)
 
 
 /**
- * Called via glReadBuffer.  As with st_DrawBuffer, we use this function
- * to check if we need to allocate a renderbuffer on demand.
+ * Called via glReadBuffer.  As with st_DrawBufferAllocate, we use this
+ * function to check if we need to allocate a renderbuffer on demand.
  */
 static void
 st_ReadBuffer(struct gl_context *ctx, GLenum buffer)
@@ -868,7 +866,7 @@ st_init_fbo_functions(struct dd_function_table *functions)
functions->FinishRenderTexture = st_finish_render_texture;
functions->ValidateFramebuffer = st_validate_framebuffer;
 
-   functions->DrawBuffer = st_DrawBuffer;
+   functions->DrawBufferAllocate = st_DrawBufferAllocate;
functions->ReadBuffer = st_ReadBuffer;
 
functions->MapRenderbuffer = st_MapRenderbuffer;

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


Mesa (master): glsl/glcpp: Handle hex constants with 0X prefix

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

Author: Vlad Golovkin <vlad.golovkin.m...@gmail.com>
Date:   Thu Apr 19 23:08:01 2018 +0300

glsl/glcpp: Handle hex constants with 0X prefix

GLSL 4.6 spec describes hex constant as:

hexadecimal-constant:
0x hexadecimal-digit
0X hexadecimal-digit
hexadecimal-constant hexadecimal-digit

Right now if you have a shader with the following structure:

#if 0X1 // or any hex number with the 0X prefix
// some code
#endif

the code between #if and #endif gets removed because the checking is performed
only for "0x" prefix which results in strtoll being called with the base 8 and
after encountering the 'X' char the strtoll returns 0. Letting strtoll detect
the base makes this limitation go away and also makes code easier to read.

From the strtoll Linux man page:

"If base is zero or 16, the string may then include a "0x" prefix, and the
number will be read in base 16; otherwise, a zero base is taken as 10 (decimal)
unless the next character is '0', in which case it is taken as 8 (octal)."

This matches the behaviour in the GLSL spec.

This patch also adds a test for uppercase hex prefix.

Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

---

 src/compiler/glsl/glcpp/glcpp-parse.y| 9 ++---
 src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c   | 5 +
 .../glsl/glcpp/tests/149-hex-const-uppercase-prefix.c.expected   | 5 +
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y 
b/src/compiler/glsl/glcpp/glcpp-parse.y
index ccb3aa18d3..d83f99f1c7 100644
--- a/src/compiler/glsl/glcpp/glcpp-parse.y
+++ b/src/compiler/glsl/glcpp/glcpp-parse.y
@@ -462,13 +462,8 @@ control_line_error:
 
 integer_constant:
INTEGER_STRING {
-   if (strlen ($1) >= 3 && strncmp ($1, "0x", 2) == 0) {
-   $$ = strtoll ($1 + 2, NULL, 16);
-   } else if ($1[0] == '0') {
-   $$ = strtoll ($1, NULL, 8);
-   } else {
-   $$ = strtoll ($1, NULL, 10);
-   }
+   /* let strtoll detect the base */
+   $$ = strtoll ($1, NULL, 0);
}
 |  INTEGER {
$$ = $1;
diff --git a/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c 
b/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c
new file mode 100644
index 00..1be9b28eb7
--- /dev/null
+++ b/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c
@@ -0,0 +1,5 @@
+#if 0x1234abcd == 0X1234abcd
+success
+#else
+failure
+#endif
diff --git 
a/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c.expected 
b/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c.expected
new file mode 100644
index 00..4cf250f6bb
--- /dev/null
+++ b/src/compiler/glsl/glcpp/tests/149-hex-const-uppercase-prefix.c.expected
@@ -0,0 +1,5 @@
+
+success
+
+
+

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


Mesa (master): mesa: rename api_validate.{c,h} -> draw_validate.{c,h}

2018-04-23 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 295f57e09a8b67da07dd96609591dc5144031a62
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=295f57e09a8b67da07dd96609591dc5144031a62

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Apr 23 13:46:15 2018 +1000

mesa: rename api_validate.{c,h} -> draw_validate.{c,h}

Reviewed-by: Mathias Fröhlich <mathias.froehl...@web.de>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65422

---

 src/mesa/Makefile.sources | 4 ++--
 src/mesa/main/dlist.c | 2 +-
 src/mesa/main/{api_validate.c => draw_validate.c} | 2 +-
 src/mesa/main/{api_validate.h => draw_validate.h} | 0
 src/mesa/main/drawpix.c   | 2 +-
 src/mesa/meson.build  | 4 ++--
 src/mesa/vbo/vbo_exec_api.c   | 2 +-
 src/mesa/vbo/vbo_exec_array.c | 2 +-
 src/mesa/vbo/vbo_save_api.c   | 2 +-
 9 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
index d78493ed9d..f910b41d0a 100644
--- a/src/mesa/Makefile.sources
+++ b/src/mesa/Makefile.sources
@@ -14,8 +14,6 @@ MAIN_FILES = \
main/api_exec.h \
main/api_loopback.c \
main/api_loopback.h \
-   main/api_validate.c \
-   main/api_validate.h \
main/arbprogram.c \
main/arbprogram.h \
main/arrayobj.c \
@@ -70,6 +68,8 @@ MAIN_FILES = \
main/drawpix.h \
main/drawtex.c \
main/drawtex.h \
+   main/draw_validate.c \
+   main/draw_validate.h \
main/enable.c \
main/enable.h \
main/enums.c \
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 2086611aa3..1b003c81a6 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -35,7 +35,7 @@
 #include "api_arrayelt.h"
 #include "api_exec.h"
 #include "api_loopback.h"
-#include "api_validate.h"
+#include "draw_validate.h"
 #include "atifragshader.h"
 #include "config.h"
 #include "bufferobj.h"
diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/draw_validate.c
similarity index 99%
rename from src/mesa/main/api_validate.c
rename to src/mesa/main/draw_validate.c
index 7b91fdff55..bcb2d91306 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/draw_validate.c
@@ -24,7 +24,7 @@
 
 #include 
 #include "glheader.h"
-#include "api_validate.h"
+#include "draw_validate.h"
 #include "arrayobj.h"
 #include "bufferobj.h"
 #include "context.h"
diff --git a/src/mesa/main/api_validate.h b/src/mesa/main/draw_validate.h
similarity index 100%
rename from src/mesa/main/api_validate.h
rename to src/mesa/main/draw_validate.h
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index 4bf14fc4f2..2f55dde7b8 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -24,7 +24,7 @@
 
 #include "glheader.h"
 #include "imports.h"
-#include "api_validate.h"
+#include "draw_validate.h"
 #include "bufferobj.h"
 #include "context.h"
 #include "drawpix.h"
diff --git a/src/mesa/meson.build b/src/mesa/meson.build
index 30954beac5..c1334c9637 100644
--- a/src/mesa/meson.build
+++ b/src/mesa/meson.build
@@ -63,8 +63,6 @@ files_libmesa_common = files(
   'main/api_exec.h',
   'main/api_loopback.c',
   'main/api_loopback.h',
-  'main/api_validate.c',
-  'main/api_validate.h',
   'main/arbprogram.c',
   'main/arbprogram.h',
   'main/arrayobj.c',
@@ -119,6 +117,8 @@ files_libmesa_common = files(
   'main/drawpix.h',
   'main/drawtex.c',
   'main/drawtex.h',
+  'main/draw_validate.c',
+  'main/draw_validate.h',
   'main/enable.c',
   'main/enable.h',
   'main/enums.h',
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index b3971715b5..20148acce3 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -40,7 +40,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #include "main/state.h"
 #include "main/light.h"
 #include "main/api_arrayelt.h"
-#include "main/api_validate.h"
+#include "main/draw_validate.h"
 #include "main/dispatch.h"
 #include "util/bitscan.h"
 
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index b3ce138a09..e74e1bd458 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -31,7 +31,7 @@
 #include "main/glheader.h"
 #include "main/context.h"
 #include "main/state.h"
-#include "main/api_validate.h"
+#include "main/draw_validate.h"
 #include "main/dispatch.h"
 #include "main/varray.h"
 #include "main/bufferobj.h"
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c
inde

Mesa (master): mesa: merge the driver functions DrawBuffers and DrawBuffer

2018-04-16 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: d3cafc18fced872ce60060e792f6faf2b97cc3a9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d3cafc18fced872ce60060e792f6faf2b97cc3a9

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Sat Apr 14 13:42:31 2018 +1000

mesa: merge the driver functions DrawBuffers and DrawBuffer

The extra params we unused by the drivers that used DrawBuffers.

Tested-by: Dieter Nützel <die...@nuetzel-hh.de>
Reviewed-by: Brian Paul <bri...@vmware.com>

---

 src/mesa/drivers/common/driverfuncs.c| 1 -
 src/mesa/drivers/dri/nouveau/nouveau_state.c | 4 ++--
 src/mesa/main/buffers.c  | 8 ++--
 src/mesa/main/dd.h   | 2 --
 src/mesa/state_tracker/st_cb_fbo.c   | 9 -
 5 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/src/mesa/drivers/common/driverfuncs.c 
b/src/mesa/drivers/common/driverfuncs.c
index 11134b69e9..b7ac2b5b43 100644
--- a/src/mesa/drivers/common/driverfuncs.c
+++ b/src/mesa/drivers/common/driverfuncs.c
@@ -134,7 +134,6 @@ _mesa_init_driver_functions(struct dd_function_table 
*driver)
driver->ColorMaterial = NULL;
driver->CullFace = NULL;
driver->DrawBuffer = NULL;
-   driver->DrawBuffers = NULL;
driver->FrontFace = NULL;
driver->DepthFunc = NULL;
driver->DepthMask = NULL;
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_state.c 
b/src/mesa/drivers/dri/nouveau/nouveau_state.c
index e2b0104367..debbd38080 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_state.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_state.c
@@ -115,7 +115,7 @@ nouveau_read_buffer(struct gl_context *ctx, GLenum buffer)
 }
 
 static void
-nouveau_draw_buffers(struct gl_context *ctx, GLsizei n, const GLenum *buffers)
+nouveau_draw_buffer(struct gl_context *ctx, GLenum buffer)
 {
nouveau_validate_framebuffer(ctx);
context_dirty(ctx, FRAMEBUFFER);
@@ -519,7 +519,7 @@ nouveau_state_init(struct gl_context *ctx)
ctx->Driver.DepthFunc = nouveau_depth_func;
ctx->Driver.DepthMask = nouveau_depth_mask;
ctx->Driver.ReadBuffer = nouveau_read_buffer;
-   ctx->Driver.DrawBuffers = nouveau_draw_buffers;
+   ctx->Driver.DrawBuffer = nouveau_draw_buffer;
ctx->Driver.Enable = nouveau_enable;
ctx->Driver.Fogfv = nouveau_fog;
ctx->Driver.Lightfv = nouveau_light;
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 5492227de0..7bb5725d08 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -304,9 +304,7 @@ draw_buffer(struct gl_context *ctx, struct gl_framebuffer 
*fb,
 
/* Call device driver function only if fb is the bound draw buffer */
if (fb == ctx->DrawBuffer) {
-  if (ctx->Driver.DrawBuffers)
- ctx->Driver.DrawBuffers(ctx, 1, );
-  else if (ctx->Driver.DrawBuffer)
+  if (ctx->Driver.DrawBuffer)
  ctx->Driver.DrawBuffer(ctx, buffer);
}
 }
@@ -587,9 +585,7 @@ draw_buffers(struct gl_context *ctx, struct gl_framebuffer 
*fb, GLsizei n,
 * may not be valid.
 */
if (fb == ctx->DrawBuffer) {
-  if (ctx->Driver.DrawBuffers)
- ctx->Driver.DrawBuffers(ctx, n, buffers);
-  else if (ctx->Driver.DrawBuffer)
+  if (ctx->Driver.DrawBuffer)
  ctx->Driver.DrawBuffer(ctx, n > 0 ? buffers[0] : GL_NONE);
}
 }
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 64ddd81883..d85d89ef50 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -612,8 +612,6 @@ struct dd_function_table {
void (*DepthRange)(struct gl_context *ctx);
/** Specify the current buffer for writing */
void (*DrawBuffer)( struct gl_context *ctx, GLenum buffer );
-   /** Specify the buffers for writing for fragment programs*/
-   void (*DrawBuffers)(struct gl_context *ctx, GLsizei n, const GLenum 
*buffers);
/** Enable or disable server-side gl capabilities */
void (*Enable)(struct gl_context *ctx, GLenum cap, GLboolean state);
/** Specify fog parameters */
diff --git a/src/mesa/state_tracker/st_cb_fbo.c 
b/src/mesa/state_tracker/st_cb_fbo.c
index f859133e39..696a08fd65 100644
--- a/src/mesa/state_tracker/st_cb_fbo.c
+++ b/src/mesa/state_tracker/st_cb_fbo.c
@@ -714,13 +714,12 @@ st_validate_framebuffer(struct gl_context *ctx, struct 
gl_framebuffer *fb)
  * created FBOs.
  */
 static void
-st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers)
+st_DrawBuffer(struct gl_context *ctx, GLenum buffer)
 {
struct st_context *st = st_context(ctx);
struct gl_framebuffer *fb = ctx->DrawBuffer;
 
-   (void) count;
-   (void) buffers;
+   (void) buffer;
 
if (_mesa_is_winsys_fbo(fb)) {
   GLuint i;
@@ -737,7 +736,7 @@ st_DrawBuffers(struct gl_context *ctx, GLsizei count, const 
GLenum *buffers)
 
 
 /**
- * Called via glReadBuffer.  As with st_DrawBuffers, we use this function
+ * Called via glReadBuffer. 

Mesa (master): nir: return early when lowering a return at the end of a function

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Sun Apr  8 21:47:32 2018 +1000

nir: return early when lowering a return at the end of a function

Otherwise we create unused conditional return flags and things
get unnecessarily ugly fast when lowering nested functions.

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>

---

 src/compiler/nir/nir_lower_returns.c | 6 ++
 1 file changed, 6 insertions(+)

diff --git a/src/compiler/nir/nir_lower_returns.c 
b/src/compiler/nir/nir_lower_returns.c
index 423192adb8..3ea69e2520 100644
--- a/src/compiler/nir/nir_lower_returns.c
+++ b/src/compiler/nir/nir_lower_returns.c
@@ -180,6 +180,12 @@ lower_returns_in_block(nir_block *block, struct 
lower_returns_state *state)
 
nir_instr_remove(>instr);
 
+   /* If this is a return in the last block of the function there is nothing
+* more to do once its removed.
+*/
+   if (block == nir_impl_last_block(state->builder.impl))
+  return true;
+
nir_builder *b = >builder;
 
/* Set the return flag */

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


Mesa (master): glsl: fix gcc 8 parenthesis warning

2018-04-16 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 268d8f244b3450461de5448f3f9a2ed2aa05e223
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=268d8f244b3450461de5448f3f9a2ed2aa05e223

Author: Marc Dietrich <marvi...@gmx.de>
Date:   Fri Mar 23 11:01:23 2018 +0100

glsl: fix gcc 8 parenthesis warning

fixes warnings like this:
[184/1137] Compiling C++ object 'src/compiler/glsl/glsl@sta/lower_jumps.cpp.o'.
In file included from ../src/mesa/main/mtypes.h:48,
 from ../src/compiler/glsl_types.h:149,
 from ../src/compiler/glsl/lower_jumps.cpp:59:
../src/compiler/glsl/lower_jumps.cpp: In member function 
'{anonymous}::block_record 
{anonymous}::ir_lower_jumps_visitor::visit_block(exec_list*)':
../src/compiler/glsl/list.h:650:17: warning: unnecessary parentheses in 
declaration of 'node' [-Wparentheses]
for (__type *(__inst) = (__type *)(__list)->head_sentinel.next; \
 ^
../src/compiler/glsl/lower_jumps.cpp:510:7: note: in expansion of macro 
'foreach_in_list'
   foreach_in_list(ir_instruction, node, list) {
   ^~~

Signed-off-by: Marc Dietrich <marvi...@gmx.de>
Reviewed-by: Emil Velikov <emil.veli...@collabora.com>
Reviewed-by: Timothy Arceri <tarc...@itsqueeze.com>

---

 src/compiler/glsl/list.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/compiler/glsl/list.h b/src/compiler/glsl/list.h
index f77fe12991..2bfa273554 100644
--- a/src/compiler/glsl/list.h
+++ b/src/compiler/glsl/list.h
@@ -647,12 +647,12 @@ inline void exec_node::insert_before(exec_list *before)
 #endif
 
 #define foreach_in_list(__type, __inst, __list)  \
-   for (__type *(__inst) = (__type *)(__list)->head_sentinel.next; \
+   for (__type *__inst = (__type *)(__list)->head_sentinel.next; \
 !(__inst)->is_tail_sentinel();   \
 (__inst) = (__type *)(__inst)->next)
 
 #define foreach_in_list_reverse(__type, __inst, __list)   \
-   for (__type *(__inst) = (__type *)(__list)->tail_sentinel.prev; \
+   for (__type *__inst = (__type *)(__list)->tail_sentinel.prev; \
 !(__inst)->is_head_sentinel();\
 (__inst) = (__type *)(__inst)->prev)
 

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


Mesa (master): mesa: free debug messages when destroying the debug state

2018-04-13 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: a63e69f5f0b4d960bd106068d8c7d13b82fea759
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a63e69f5f0b4d960bd106068d8c7d13b82fea759

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Apr 13 15:23:57 2018 +1000

mesa: free debug messages when destroying the debug state

Fixes: 04a8baad3721 "mesa: refactor _mesa_PopDebugGroup and 
_mesa_free_errors_data"

Reviewed-by: Iago Toral Quiroga <ito...@igalia.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98281

---

 src/mesa/main/debug_output.c | 45 ++--
 1 file changed, 23 insertions(+), 22 deletions(-)

diff --git a/src/mesa/main/debug_output.c b/src/mesa/main/debug_output.c
index 3d6cc18c2f..b2a4fb5c2d 100644
--- a/src/mesa/main/debug_output.c
+++ b/src/mesa/main/debug_output.c
@@ -501,6 +501,28 @@ debug_clear_group(struct gl_debug_state *debug)
 }
 
 /**
+ * Delete the oldest debug messages out of the log.
+ */
+static void
+debug_delete_messages(struct gl_debug_state *debug, int count)
+{
+   struct gl_debug_log *log = >Log;
+
+   if (count > log->NumMessages)
+  count = log->NumMessages;
+
+   while (count--) {
+  struct gl_debug_message *msg = >Messages[log->NextMessage];
+
+  debug_message_clear(msg);
+
+  log->NumMessages--;
+  log->NextMessage++;
+  log->NextMessage %= MAX_DEBUG_LOGGED_MESSAGES;
+   }
+}
+
+/**
  * Loop through debug group stack tearing down states for
  * filtering debug messages.  Then free debug output state.
  */
@@ -513,6 +535,7 @@ debug_destroy(struct gl_debug_state *debug)
}
 
debug_clear_group(debug);
+   debug_delete_messages(debug, debug->Log.NumMessages);
free(debug);
 }
 
@@ -647,28 +670,6 @@ debug_fetch_message(const struct gl_debug_state *debug)
return (log->NumMessages) ? >Messages[log->NextMessage] : NULL;
 }
 
-/**
- * Delete the oldest debug messages out of the log.
- */
-static void
-debug_delete_messages(struct gl_debug_state *debug, int count)
-{
-   struct gl_debug_log *log = >Log;
-
-   if (count > log->NumMessages)
-  count = log->NumMessages;
-
-   while (count--) {
-  struct gl_debug_message *msg = >Messages[log->NextMessage];
-
-  debug_message_clear(msg);
-
-  log->NumMessages--;
-  log->NextMessage++;
-  log->NextMessage %= MAX_DEBUG_LOGGED_MESSAGES;
-   }
-}
-
 static struct gl_debug_message *
 debug_get_group_message(struct gl_debug_state *debug)
 {

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


Mesa (master): mesa: fix x86 builds

2018-04-13 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: c500ab2735df0b7020b44d24449ffb1d2e29275b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c500ab2735df0b7020b44d24449ffb1d2e29275b

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Apr 13 22:11:13 2018 +1000

mesa: fix x86 builds

Fixes: 43d66c8c2d4d "mesa: include mtypes.h less"

---

 src/mesa/x86/common_x86.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/mesa/x86/common_x86.c b/src/mesa/x86/common_x86.c
index 5cf919fd59..36b2e82fb6 100644
--- a/src/mesa/x86/common_x86.c
+++ b/src/mesa/x86/common_x86.c
@@ -54,6 +54,7 @@
 #endif
 #endif
 
+#include "main/errors.h"
 #include "main/imports.h"
 #include "common_x86_asm.h"
 

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


Mesa (master): glsl: fix compat shaders in GLSL 1.40

2018-04-11 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: c7e3d31b0b5f22299a6bd72655502ce8427b40bf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c7e3d31b0b5f22299a6bd72655502ce8427b40bf

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Apr 12 09:23:02 2018 +1000

glsl: fix compat shaders in GLSL 1.40

The compatibility and core tokens were not added until GLSL 1.50,
for GLSL 1.40 just assume all shaders built with a compat profile
are compat shaders.

Fixes rendering issues in Dawn of War II on radeonsi which has
enabled OpenGL 3.1 compat support.

Fixes: a0c8b49284ef "mesa: enable OpenGL 3.1 with ARB_compatibility"

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105807

---

 src/compiler/glsl/glsl_parser_extras.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/compiler/glsl/glsl_parser_extras.cpp 
b/src/compiler/glsl/glsl_parser_extras.cpp
index 0cc57f5a88..5dd362b3e3 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -429,6 +429,8 @@ _mesa_glsl_parse_state::process_version_directive(YYLTYPE 
*locp, int version,
   this->language_version = version;
 
this->compat_shader = compat_token_present ||
+ (this->ctx->API == API_OPENGL_COMPAT &&
+  this->language_version == 140) ||
  (!this->es_shader && this->language_version < 140);
 
bool supported = false;

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


Mesa (master): mesa: fix glsl version mismatch in compat profile

2018-04-10 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: a05faf80c380a03347604e79136627267ff9f893
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a05faf80c380a03347604e79136627267ff9f893

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Apr 10 21:40:11 2018 +1000

mesa: fix glsl version mismatch in compat profile

Drivers that only support compat 3.0 were reporting GLSL 1.40
support. This fixes issues with the menu of Dawn of War II.

Fixes: a0c8b49284ef "mesa: enable OpenGL 3.1 with ARB_compatibility"

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105807

---

 src/mesa/main/version.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 0a4e7630da..84babd69e2 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -620,8 +620,11 @@ _mesa_compute_version(struct gl_context *ctx)
/* Make sure that the GLSL version lines up with the GL version. In some
 * cases it can be too high, e.g. if an extension is missing.
 */
-   if (_mesa_is_desktop_gl(ctx) && ctx->Version >= 31) {
+   if (_mesa_is_desktop_gl(ctx)) {
   switch (ctx->Version) {
+  case 30:
+ ctx->Const.GLSLVersion = 130;
+ break;
   case 31:
  ctx->Const.GLSLVersion = 140;
  break;
@@ -629,7 +632,8 @@ _mesa_compute_version(struct gl_context *ctx)
  ctx->Const.GLSLVersion = 150;
  break;
   default:
- ctx->Const.GLSLVersion = ctx->Version * 10;
+ if (ctx->Version >= 33)
+ctx->Const.GLSLVersion = ctx->Version * 10;
  break;
   }
}

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


Mesa (master): st/mesa: exit st_translate_fragment_program() earlier for NIR path

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Apr  5 16:20:23 2018 +1000

st/mesa: exit st_translate_fragment_program() earlier for NIR path

This avoids a bunch of scanning that is only used by the TGSI path.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_program.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index 5bf76e1b88..a740c874c9 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -645,6 +645,12 @@ bool
 st_translate_fragment_program(struct st_context *st,
   struct st_fragment_program *stfp)
 {
+   /* We have already compiled to NIR so just return */
+   if (stfp->shader_program) {
+  st_store_ir_in_disk_cache(st, >Base, true);
+  return true;
+   }
+
ubyte outputMapping[2 * FRAG_RESULT_MAX];
ubyte inputMapping[VARYING_SLOT_MAX];
ubyte inputSlotToAttr[VARYING_SLOT_MAX];
@@ -900,12 +906,6 @@ st_translate_fragment_program(struct st_context *st,
   }
}
 
-   /* We have already compiled to NIR so just return */
-   if (stfp->shader_program) {
-  st_store_ir_in_disk_cache(st, >Base, true);
-  return true;
-   }
-
ureg = ureg_create_with_screen(PIPE_SHADER_FRAGMENT, st->pipe->screen);
if (ureg == NULL)
   return false;

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


Mesa (master): st/mesa: finalise tcs/tes/geom NIR before storing it to the cache

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Apr  5 16:36:09 2018 +1000

st/mesa: finalise tcs/tes/geom NIR before storing it to the cache

We don't create variants of the NIR so here we finalise it before
caching to avoid unnecessary processing when restoring it.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_program.c | 11 +--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index a740c874c9..3f8df31da1 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -1473,6 +1473,9 @@ st_translate_geometry_program(struct st_context *st,
 
/* We have already compiled to NIR so just return */
if (stgp->shader_program) {
+  /* No variants */
+  st_finalize_nir(st, >Base, stgp->shader_program,
+  stgp->tgsi.ir.nir);
   st_translate_program_stream_output(>Base, 
>tgsi.stream_output);
   st_store_ir_in_disk_cache(st, >Base, true);
   return true;
@@ -1530,8 +1533,6 @@ st_get_basic_variant(struct st_context *st,
 if (prog->tgsi.type == PIPE_SHADER_IR_NIR) {
tgsi.type = PIPE_SHADER_IR_NIR;
tgsi.ir.nir = nir_shader_clone(NULL, prog->tgsi.ir.nir);
-   st_finalize_nir(st, >Base, prog->shader_program,
-tgsi.ir.nir);
 tgsi.stream_output = prog->tgsi.stream_output;
 } else
tgsi = prog->tgsi;
@@ -1575,6 +1576,9 @@ st_translate_tessctrl_program(struct st_context *st,
 
/* We have already compiled to NIR so just return */
if (sttcp->shader_program) {
+  /* No variants */
+  st_finalize_nir(st, >Base, sttcp->shader_program,
+  sttcp->tgsi.ir.nir);
   st_store_ir_in_disk_cache(st, >Base, true);
   return true;
}
@@ -1606,6 +1610,9 @@ st_translate_tesseval_program(struct st_context *st,
 
/* We have already compiled to NIR so just return */
if (sttep->shader_program) {
+  /* No variants */
+  st_finalize_nir(st, >Base, sttep->shader_program,
+  sttep->tgsi.ir.nir);
   st_translate_program_stream_output(>Base, 
>tgsi.stream_output);
   st_store_ir_in_disk_cache(st, >Base, true);
   return true;

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


Mesa (master): st/mesa: stop calling _mesa_init_shader_object_functions()

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Apr  4 16:29:59 2018 +1000

st/mesa: stop calling _mesa_init_shader_object_functions()

This sets the LinkShader function for the driver, but for the st we
set it properly with the following call to st_init_program_functions().

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_context.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_context.c 
b/src/mesa/state_tracker/st_context.c
index a3da0f8f1f..b0266bef8b 100644
--- a/src/mesa/state_tracker/st_context.c
+++ b/src/mesa/state_tracker/st_context.c
@@ -714,7 +714,6 @@ void
 st_init_driver_functions(struct pipe_screen *screen,
  struct dd_function_table *functions)
 {
-   _mesa_init_shader_object_functions(functions);
_mesa_init_sampler_object_functions(functions);
 
st_init_draw_functions(functions);

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


Mesa (master): nir: dont lower bindless samplers

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar 22 14:28:22 2018 +1100

nir: dont lower bindless samplers

We neeed to skip the var if its not a uniform here as well as checking
the bindless flag since UBOs can contain bindless samplers.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/compiler/nir/nir_lower_samplers_as_deref.c | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_lower_samplers_as_deref.c 
b/src/compiler/nir/nir_lower_samplers_as_deref.c
index b1272e25a9..2a2fb5b093 100644
--- a/src/compiler/nir/nir_lower_samplers_as_deref.c
+++ b/src/compiler/nir/nir_lower_samplers_as_deref.c
@@ -157,7 +157,8 @@ static bool
 lower_sampler(nir_tex_instr *instr, struct lower_samplers_as_deref_state 
*state,
   nir_builder *b)
 {
-   if (!instr->texture)
+   if (!instr->texture || instr->texture->var->data.bindless ||
+   instr->texture->var->data.mode != nir_var_uniform)
   return false;
 
/* In GLSL, we only fill out the texture field.  The sampler is inferred */
@@ -195,6 +196,11 @@ lower_intrinsic(nir_intrinsic_instr *instr,
instr->intrinsic == nir_intrinsic_image_var_atomic_comp_swap ||
instr->intrinsic == nir_intrinsic_image_var_size) {
   b->cursor = nir_before_instr(>instr);
+
+  if (instr->variables[0]->var->data.bindless ||
+  instr->variables[0]->var->data.mode != nir_var_uniform)
+ return false;
+
   lower_deref(instr->variables[0], state, b);
   return true;
}

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


Mesa (master): radeonsi/nir: don't add bindless samplers/images to declared bitmasks

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar 28 12:31:01 2018 +1100

radeonsi/nir: don't add bindless samplers/images to declared bitmasks

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 47f9ef2945..80c436247c 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -657,22 +657,22 @@ void si_nir_scan_shader(const struct nir_shader *nir,
 * eliminated struct dereferences.
 */
if (base_type == GLSL_TYPE_SAMPLER) {
-   info->samplers_declared |=
-   u_bit_consecutive(variable->data.binding, 
aoa_size);
-
if (variable->data.bindless) {
info->const_buffers_declared |= 1;
info->const_file_max[0] +=
glsl_count_attribute_slots(type, false);
+   } else {
+   info->samplers_declared |=
+   
u_bit_consecutive(variable->data.binding, aoa_size);
}
} else if (base_type == GLSL_TYPE_IMAGE) {
-   info->images_declared |=
-   u_bit_consecutive(variable->data.binding, 
aoa_size);
-
if (variable->data.bindless) {
info->const_buffers_declared |= 1;
info->const_file_max[0] +=
glsl_count_attribute_slots(type, false);
+   } else {
+   info->images_declared |=
+   
u_bit_consecutive(variable->data.binding, aoa_size);
}
} else if (base_type != GLSL_TYPE_ATOMIC_UINT) {
if (strncmp(variable->name, "state.", 6) == 0 ||

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


Mesa (master): radeonsi/nir: set uses_bindless_images for images

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 19 08:44:50 2018 +1100

radeonsi/nir: set uses_bindless_images for images

V2: add missing intrinsics (Spotted-by: Samuel Pitoiset)

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 17 -
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 80c436247c..45cbf1ce7f 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -124,6 +124,15 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_load_tess_level_outer:
info->reads_tess_factors = true;
break;
+   case nir_intrinsic_image_var_load:
+   case nir_intrinsic_image_var_size:
+   case nir_intrinsic_image_var_samples: {
+   nir_variable *var = intr->variables[0]->var;
+   if (var->data.bindless)
+   info->uses_bindless_images = true;
+
+   break;
+   }
case nir_intrinsic_image_var_store:
case nir_intrinsic_image_var_atomic_add:
case nir_intrinsic_image_var_atomic_min:
@@ -132,7 +141,13 @@ static void scan_instruction(struct tgsi_shader_info *info,
case nir_intrinsic_image_var_atomic_or:
case nir_intrinsic_image_var_atomic_xor:
case nir_intrinsic_image_var_atomic_exchange:
-   case nir_intrinsic_image_var_atomic_comp_swap:
+   case nir_intrinsic_image_var_atomic_comp_swap: {
+   nir_variable *var = intr->variables[0]->var;
+   if (var->data.bindless)
+   info->uses_bindless_images = true;
+
+   /* fall-through */
+   }
case nir_intrinsic_store_ssbo:
case nir_intrinsic_ssbo_atomic_add:
case nir_intrinsic_ssbo_atomic_imin:

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


Mesa (master): st/glsl_to_nir: set paramater value offset as driver location for packed uniforms

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar 22 11:52:19 2018 +1100

st/glsl_to_nir: set paramater value offset as driver location for packed 
uniforms

This allows us to simplify the code and will also be useful for supporting
bindless textures.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp |  7 ++-
 src/mesa/state_tracker/st_nir.h   |  3 +--
 src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c | 12 
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index a5a284fb22..bcf6a7ceb6 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -294,11 +294,16 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
  if (ctx->Const.PackedDriverUniformStorage) {
 loc = _mesa_add_sized_state_reference(prog->Parameters,
   stateTokens, comps, false);
+loc = prog->Parameters->ParameterValueOffset[loc];
  } else {
 loc = _mesa_add_state_reference(prog->Parameters, stateTokens);
  }
   } else {
  loc = st_nir_lookup_parameter_index(prog->Parameters, uniform->name);
+
+ if (ctx->Const.PackedDriverUniformStorage) {
+loc = prog->Parameters->ParameterValueOffset[loc];
+ }
   }
 
   uniform->data.driver_location = loc;
@@ -804,7 +809,7 @@ st_finalize_nir(struct st_context *st, struct gl_program 
*prog,
if (st->ctx->Const.PackedDriverUniformStorage) {
   NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
  (nir_lower_io_options)0);
-  NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo, prog->Parameters);
+  NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo);
}
 
if (screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF))
diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index 3dd78fb115..1c2e32a5e6 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -36,8 +36,7 @@ struct nir_shader;
 void st_nir_lower_builtin(struct nir_shader *shader);
 void st_nir_lower_tex_src_plane(struct nir_shader *shader, unsigned free_slots,
 unsigned lower_2plane, unsigned lower_3plane);
-bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader,
-  const struct gl_program_parameter_list 
*params);
+bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader);
 
 void st_finalize_nir(struct st_context *st, struct gl_program *prog,
  struct gl_shader_program *shader_program,
diff --git a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c 
b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
index b2f8f833bb..1727f8214a 100644
--- a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
+++ b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
@@ -36,8 +36,7 @@
 #include "program/prog_parameter.h"
 
 static bool
-lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
-const struct gl_program_parameter_list *params)
+lower_instr(nir_intrinsic_instr *instr, nir_builder *b)
 {
b->cursor = nir_before_instr(>instr);
 
@@ -50,11 +49,9 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
}
 
if (instr->intrinsic == nir_intrinsic_load_uniform) {
-  unsigned pvo = params->ParameterValueOffset[nir_intrinsic_base(instr)];
-
   nir_ssa_def *ubo_idx = nir_imm_int(b, 0);
   nir_ssa_def *ubo_offset =
- nir_iadd(b, nir_imm_int(b, 4 * pvo),
+ nir_iadd(b, nir_imm_int(b, 4 * nir_intrinsic_base(instr)),
   nir_imul(b, nir_imm_int(b, 4),
nir_ssa_for_src(b, instr->src[0], 1)));
 
@@ -77,8 +74,7 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
 }
 
 bool
-st_nir_lower_uniforms_to_ubo(nir_shader *shader,
- const struct gl_program_parameter_list *params)
+st_nir_lower_uniforms_to_ubo(nir_shader *shader)
 {
bool progress = false;
 
@@ -90,7 +86,7 @@ st_nir_lower_uniforms_to_ubo(nir_shader *shader,
 nir_foreach_instr_safe(instr, block) {
if (instr->type == nir_instr_type_intrinsic)
   progress |= lower_instr(nir_instr_as_intrinsic(instr),
-  , params);
+  );
 }
  }
 

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


Mesa (master): radeonsi/nir: tidy up si_nir_load_sampler_desc()

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar 22 11:55:20 2018 +1100

radeonsi/nir: tidy up si_nir_load_sampler_desc()

This makes it easier to follow the code, and also initialises
dynamic_index which will be useful for adding bindless textures
support.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 45cbf1ce7f..c0e08c79a5 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -885,14 +885,12 @@ si_nir_load_sampler_desc(struct ac_shader_abi *abi,
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
LLVMBuilderRef builder = ctx->ac.builder;
LLVMValueRef list = LLVMGetParam(ctx->main_fn, 
ctx->param_samplers_and_images);
-   LLVMValueRef index = dynamic_index;
+   LLVMValueRef index;
 
assert(!descriptor_set);
 
-   if (!index)
-   index = ctx->ac.i32_0;
-
-   index = LLVMBuildAdd(builder, index,
+   dynamic_index = dynamic_index ? dynamic_index : ctx->ac.i32_0;
+   index = LLVMBuildAdd(builder, dynamic_index,
 LLVMConstInt(ctx->ac.i32, base_index + 
constant_index, false),
 "");
 

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


Mesa (master): glsl: always call do_lower_jumps() after loop unrolling

2018-04-03 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: b42633db8e3711e54a5bd10495b1436b8e362801
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b42633db8e3711e54a5bd10495b1436b8e362801

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Apr  3 11:38:13 2018 +1000

glsl: always call do_lower_jumps() after loop unrolling

This fixes a bug in radeonsi where LLVM cannot handle the case where
a break exists but its not the last instruction in the block.

LLVM would fail with:
Terminator found in the middle of a basic block!
LLVM ERROR: Broken function found, compilation aborted!

Fixes: 96fe8834f539 "glsl_to_tgsi: do fewer optimizations with 
GLSLOptimizeConservatively"

Reviewed-by: Matt Turner <matts...@gmail.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105317

---

 src/compiler/glsl/glsl_parser_extras.cpp | 18 ++
 1 file changed, 18 insertions(+)

diff --git a/src/compiler/glsl/glsl_parser_extras.cpp 
b/src/compiler/glsl/glsl_parser_extras.cpp
index 275c4d7571..0cc57f5a88 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -2242,6 +2242,24 @@ do_common_optimization(exec_list *ir, bool linked,
 loop_progress = false;
 loop_progress |= do_constant_propagation(ir);
 loop_progress |= do_if_simplification(ir);
+
+/* Some drivers only call do_common_optimization() once rather
+ * than in a loop. So we must call do_lower_jumps() after
+ * unrolling a loop because for drivers that use LLVM validation
+ * will fail if a jump is not the last instruction in the block.
+ * For example the following will fail LLVM validation:
+ *
+ *   (loop (
+ *  ...
+ *   break
+ *   (assign  (x) (var_ref v124)  (expression int + (var_ref v124)
+ *  (constant int (1)) ) )
+ *   ))
+ */
+loop_progress |= do_lower_jumps(ir, true, true,
+options->EmitNoMainReturn,
+options->EmitNoCont,
+options->EmitNoLoops);
  }
  progress |= loop_progress;
   }

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


Mesa (master): gallium/pipebuffer: fix parenthesis location

2018-04-03 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 7e9b7ec094500f1245eed518592f99244e54a753
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e9b7ec094500f1245eed518592f99244e54a753

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Sun Apr  1 09:32:28 2018 +1000

gallium/pipebuffer: fix parenthesis location

Without this the return value will never get set to -1. This
was first added in 49866c8f3457 and copied in 2b396eeed983.

Fixes: 2b396eeed983 "gallium/pb_cache: add a copy of cache bufmgr independent 
of pb_manager"

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102342

---

 src/gallium/auxiliary/pipebuffer/pb_cache.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/auxiliary/pipebuffer/pb_cache.c 
b/src/gallium/auxiliary/pipebuffer/pb_cache.c
index 0aaedbfae4..2b9ad49804 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_cache.c
@@ -169,7 +169,7 @@ pb_cache_reclaim_buffer(struct pb_cache *mgr, pb_size size,
   cur_entry = LIST_ENTRY(struct pb_cache_entry, cur, head);
 
   if (!entry && (ret = pb_cache_is_buffer_compat(cur_entry, size,
- alignment, usage) > 0))
+ alignment, usage)) > 0)
  entry = cur_entry;
   else if (os_time_timeout(cur_entry->start, cur_entry->end, now))
  destroy_buffer_locked(cur_entry);

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


Mesa (master): radeonsi: create load_const_buffer_desc_fast_path() helper

2018-04-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 56017d81004072fd00979f3a987ff2e94e3b6315
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56017d81004072fd00979f3a987ff2e94e3b6315

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 27 10:26:16 2018 +1100

radeonsi: create load_const_buffer_desc_fast_path() helper

This will be shared by the TGSI and NIR backends. For simplicity
we leave the SI LLVM 5.0 and lower work around only in the TGSI
backend.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c | 88 ++--
 1 file changed, 49 insertions(+), 39 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 00ebbb9b0f..1661b54d05 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2319,6 +2319,49 @@ void si_tgsi_declare_compute_memory(struct 
si_shader_context *ctx,
si_declare_compute_memory(ctx);
 }
 
+static LLVMValueRef load_const_buffer_desc_fast_path(struct si_shader_context 
*ctx)
+{
+   LLVMValueRef ptr =
+   LLVMGetParam(ctx->main_fn, ctx->param_const_and_shader_buffers);
+   struct si_shader_selector *sel = ctx->shader->selector;
+
+   /* Do the bounds checking with a descriptor, because
+* doing computation and manual bounds checking of 64-bit
+* addresses generates horrible VALU code with very high
+* VGPR usage and very low SIMD occupancy.
+*/
+   ptr = LLVMBuildPtrToInt(ctx->ac.builder, ptr, ctx->ac.intptr, "");
+
+   LLVMValueRef desc0, desc1;
+   if (HAVE_32BIT_POINTERS) {
+   desc0 = ptr;
+   desc1 = LLVMConstInt(ctx->i32,
+
S_008F04_BASE_ADDRESS_HI(ctx->screen->info.address32_hi), 0);
+   } else {
+   ptr = LLVMBuildBitCast(ctx->ac.builder, ptr, ctx->v2i32, "");
+   desc0 = LLVMBuildExtractElement(ctx->ac.builder, ptr, 
ctx->i32_0, "");
+   desc1 = LLVMBuildExtractElement(ctx->ac.builder, ptr, 
ctx->i32_1, "");
+   /* Mask out all bits except BASE_ADDRESS_HI. */
+   desc1 = LLVMBuildAnd(ctx->ac.builder, desc1,
+LLVMConstInt(ctx->i32, 
~C_008F04_BASE_ADDRESS_HI, 0), "");
+   }
+
+   LLVMValueRef desc_elems[] = {
+   desc0,
+   desc1,
+   LLVMConstInt(ctx->i32, (sel->info.const_file_max[0] + 1) * 16, 
0),
+   LLVMConstInt(ctx->i32,
+   S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) |
+   S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
+   S_008F0C_DST_SEL_Z(V_008F0C_SQ_SEL_Z) |
+   S_008F0C_DST_SEL_W(V_008F0C_SQ_SEL_W) |
+   S_008F0C_NUM_FORMAT(V_008F0C_BUF_NUM_FORMAT_FLOAT) |
+   S_008F0C_DATA_FORMAT(V_008F0C_BUF_DATA_FORMAT_32), 0)
+   };
+
+   return ac_build_gather_values(>ac, desc_elems, 4);
+}
+
 static LLVMValueRef load_const_buffer_desc(struct si_shader_context *ctx, int 
i)
 {
LLVMValueRef list_ptr = LLVMGetParam(ctx->main_fn,
@@ -2397,8 +2440,6 @@ static LLVMValueRef fetch_constant(
/* Fast path when user data SGPRs point to constant buffer 0 directly. 
*/
if (sel->info.const_buffers_declared == 1 &&
sel->info.shader_buffers_declared == 0) {
-   LLVMValueRef ptr =
-   LLVMGetParam(ctx->main_fn, 
ctx->param_const_and_shader_buffers);
 
/* This enables use of s_load_dword and flat_load_dword for 
const buffer 0
 * loads, and up to x4 load opcode merging. However, it leads 
to horrible
@@ -2413,48 +2454,17 @@ static LLVMValueRef fetch_constant(
 * s_buffer_load_dword (that we have to prevent) is when we use 
use
 * a literal offset where we don't need bounds checking.
 */
-   if (ctx->screen->info.chip_class == SI &&
-HAVE_LLVM < 0x0600 &&
-!reg->Register.Indirect) {
+   if (ctx->screen->info.chip_class == SI && HAVE_LLVM < 0x0600 &&
+   !reg->Register.Indirect) {
+   LLVMValueRef ptr =
+   LLVMGetParam(ctx->main_fn, 
ctx->param_const_and_shader_buffers);
+
addr = LLVMBuildLShr(ctx->ac.builder, addr, 
LLVMConstInt(ctx->i32, 2, 0), "");
LLVMValueRef result = ac_build_load_invariant(>ac, 
ptr, addr);
return bitcast(bld_base, type, result);
}
 
-   /* Do the bounds checking wi

Mesa (master): radeonsi/nir: gather buffers declared more accurately and use const fast path

2018-04-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: dd3d3cc877423027562087261a6e47226b69df84
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd3d3cc877423027562087261a6e47226b69df84

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 27 10:39:49 2018 +1100

radeonsi/nir: gather buffers declared more accurately and use const fast path

For now we skip SI && HAVE_LLVM < 0x0600 for simplicity. We also skip
setting the more accurate masks for builtin uniforms for now as it
causes some piglit regressions.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c |  7 +++
 src/gallium/drivers/radeonsi/si_shader_nir.c | 89 ++--
 2 files changed, 90 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 1661b54d05..18d5afe6ff 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2374,8 +2374,15 @@ static LLVMValueRef load_const_buffer_desc(struct 
si_shader_context *ctx, int i)
 static LLVMValueRef load_ubo(struct ac_shader_abi *abi, LLVMValueRef index)
 {
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+   struct si_shader_selector *sel = ctx->shader->selector;
+
LLVMValueRef ptr = LLVMGetParam(ctx->main_fn, 
ctx->param_const_and_shader_buffers);
 
+   if (sel->info.const_buffers_declared == 1 &&
+   sel->info.shader_buffers_declared == 0) {
+   return load_const_buffer_desc_fast_path(ctx);
+   }
+
index = si_llvm_bound_index(ctx, index, ctx->num_const_buffers);
index = LLVMBuildAdd(ctx->ac.builder, index,
 LLVMConstInt(ctx->i32, SI_NUM_SHADER_BUFFERS, 0), 
"");
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 437eefc54d..7dd8314d4b 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -600,23 +600,97 @@ void si_nir_scan_shader(const struct nir_shader *nir,
 
info->num_outputs = num_outputs;
 
+   struct set *ubo_set = _mesa_set_create(NULL, _mesa_hash_pointer,
+  _mesa_key_pointer_equal);
+
+   /* Intialise const_file_max[0] */
+   info->const_file_max[0] = -1;
+
+   unsigned ubo_idx = 1;
nir_foreach_variable(variable, >uniforms) {
const struct glsl_type *type = variable->type;
enum glsl_base_type base_type =
glsl_get_base_type(glsl_without_array(type));
unsigned aoa_size = MAX2(1, glsl_get_aoa_size(type));
 
+   /* Gather buffers declared bitmasks. Note: radeonsi doesn't
+* really use the mask (other than ubo_idx == 1 for regular
+* uniforms) its really only used for getting the buffer count
+* so we don't need to worry about the ordering.
+*/
+   if (variable->interface_type != NULL) {
+   if (variable->data.mode == nir_var_uniform) {
+
+   unsigned block_count;
+   if (base_type != GLSL_TYPE_INTERFACE) {
+   struct set_entry *entry =
+   _mesa_set_search(ubo_set, 
variable->interface_type);
+
+   /* Check if we have already processed
+* a member from this ubo.
+*/
+   if (entry)
+   continue;
+
+   block_count = 1;
+   } else {
+   block_count = aoa_size;
+   }
+
+   info->const_buffers_declared |= 
u_bit_consecutive(ubo_idx, block_count);
+   ubo_idx += block_count;
+
+   _mesa_set_add(ubo_set, 
variable->interface_type);
+   }
+
+   if (variable->data.mode == nir_var_shader_storage) {
+   /* TODO: make this more accurate */
+   info->shader_buffers_declared =
+   u_bit_consecutive(0, 
SI_NUM_SHADER_BUFFERS);
+   }
+
+   continue;
+   }
+
/* We rely on the fact that nir_lower_samplers_as_deref has
 * eliminated struct dereferences.
 */
-   if (base_type == GLSL_TYPE_SAMPLER)
+   if (base_type == GLSL_TYPE_SAMPLER) {
  

Mesa (master): radeonsi/nir: set TGSI_PROPERTY_NEXT_SHADER

2018-04-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 7aad5e15f61b20d994919ae5fc0aab4999ad4045
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7aad5e15f61b20d994919ae5fc0aab4999ad4045

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 26 20:42:35 2018 +1100

radeonsi/nir: set TGSI_PROPERTY_NEXT_SHADER

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 994fee0b02..437eefc54d 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -244,6 +244,9 @@ void si_nir_scan_shader(const struct nir_shader *nir,
info->num_tokens = 2; /* indicate that the shader is non-empty */
info->num_instructions = 2;
 
+   info->properties[TGSI_PROPERTY_NEXT_SHADER] =
+   pipe_shader_type_from_mesa(nir->info.next_stage);
+
if (nir->info.stage == MESA_SHADER_TESS_CTRL) {
info->properties[TGSI_PROPERTY_TCS_VERTICES_OUT] =
nir->info.tess.tcs_vertices_out;

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


Mesa (master): st/glsl_to_nir: gather next_stage in shader_info

2018-04-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 2ca5d9548fc42bfb19c21dd119845b941ada63a6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2ca5d9548fc42bfb19c21dd119845b941ada63a6

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 26 20:40:38 2018 +1100

st/glsl_to_nir: gather next_stage in shader_info

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/compiler/shader_info.h|  5 +
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 15 +++
 2 files changed, 20 insertions(+)

diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index 737e9cffa8..ababe520b2 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -64,6 +64,11 @@ typedef struct shader_info {
/** The shader stage, such as MESA_SHADER_VERTEX. */
gl_shader_stage stage;
 
+   /** The shader stage in a non SSO linked program that follows this stage,
+ * such as MESA_SHADER_FRAGMENT.
+ */
+   gl_shader_stage next_stage;
+
/* Number of textures used by this shader */
unsigned num_textures;
/* Number of uniform buffers used by this shader */
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 2cd1d97bae..f2d4b184d6 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -362,6 +362,21 @@ st_glsl_to_nir(struct st_context *st, struct gl_program 
*prog,
 
nir_shader *nir = glsl_to_nir(shader_program, stage, options);
 
+   /* Set the next shader stage hint for VS and TES. */
+   if (!nir->info.separate_shader &&
+   (nir->info.stage == MESA_SHADER_VERTEX ||
+nir->info.stage == MESA_SHADER_TESS_EVAL)) {
+
+  unsigned prev_stages = (1 << (prog->info.stage + 1)) - 1;
+  unsigned stages_mask =
+ ~prev_stages & shader_program->data->linked_stages;
+
+  nir->info.next_stage = stages_mask ?
+ (gl_shader_stage) ffs(stages_mask) : MESA_SHADER_FRAGMENT;
+   } else {
+  nir->info.next_stage = MESA_SHADER_FRAGMENT;
+   }
+
nir_variable_mode mask =
   (nir_variable_mode) (nir_var_shader_in | nir_var_shader_out);
nir_remove_dead_variables(nir, mask);

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


Mesa (master): radeonsi/nir: fix explicit component packing for geom/tess doubles

2018-04-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: c88e7fe29ec7ddab5dc26664b9770066c790ceb5
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c88e7fe29ec7ddab5dc26664b9770066c790ceb5

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar 21 13:22:52 2018 +1100

radeonsi/nir: fix explicit component packing for geom/tess doubles

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c | 19 +++
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 18d5afe6ff..e261d74b72 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1290,12 +1290,13 @@ static LLVMValueRef si_nir_load_tcs_varyings(struct 
ac_shader_abi *abi,
  is_patch);
 
LLVMValueRef value[4];
-   for (unsigned i = 0; i < num_components + component; i++) {
+   for (unsigned i = 0; i < num_components; i++) {
unsigned offset = i;
if (llvm_type_is_64bit(ctx, type))
offset *= 2;
 
-   value[i] = lds_load(bld_base, type, offset, dw_addr);
+   offset += component;
+   value[i + component] = lds_load(bld_base, type, offset, 
dw_addr);
}
 
return ac_build_varying_gather_values(>ac, value, num_components, 
component);
@@ -1377,13 +1378,14 @@ LLVMValueRef si_nir_load_input_tes(struct ac_shader_abi 
*abi,
 * between the NIR and TGSI backends.
 */
LLVMValueRef value[4];
-   for (unsigned i = component; i < num_components + component; i++) {
+   for (unsigned i = 0; i < num_components; i++) {
unsigned offset = i;
if (llvm_type_is_64bit(ctx, type))
offset *= 2;
 
-   value[i] = buffer_load(>bld_base, type, offset,
-  ctx->tess_offchip_ring, base, addr, 
true);
+   offset += component;
+   value[i + component] = buffer_load(>bld_base, type, offset,
+  ctx->tess_offchip_ring, 
base, addr, true);
}
 
return ac_build_varying_gather_values(>ac, value, num_components, 
component);
@@ -1693,13 +1695,14 @@ static LLVMValueRef si_nir_load_input_gs(struct 
ac_shader_abi *abi,
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
 
LLVMValueRef value[4];
-   for (unsigned i = component; i < num_components + component; i++) {
+   for (unsigned i = 0; i < num_components; i++) {
unsigned offset = i;
if (llvm_type_is_64bit(ctx, type))
offset *= 2;
 
-   value[i] = si_llvm_load_input_gs(>abi, driver_location  / 
4,
-vertex_index, type, offset);
+   offset += component;
+   value[i + component] = si_llvm_load_input_gs(>abi, 
driver_location  / 4,
+vertex_index, 
type, offset);
}
 
return ac_build_varying_gather_values(>ac, value, num_components, 
component);

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


Mesa (master): radeonsi/nir: set uses_bindless_samplers for samplers

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: f94b6b79be8e86be6908c7e7b93380b082433277
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f94b6b79be8e86be6908c7e7b93380b082433277

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Feb 20 14:06:27 2018 +1100

radeonsi/nir: set uses_bindless_samplers for samplers

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 6444a8b5dd..2245b39fe0 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -56,6 +56,9 @@ static void scan_instruction(struct tgsi_shader_info *info,
if (!tex->texture) {
info->samplers_declared |=
u_bit_consecutive(tex->sampler_index, 1);
+   } else {
+   if (tex->texture->var->data.bindless)
+   info->uses_bindless_samplers = true;
}
 
switch (tex->op) {

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


Mesa (master): ac/radeonsi: pass bindless bool to load_sampler_desc()

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 92fa89a08d1e9905897dfb5cd30b8d572f83e941
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=92fa89a08d1e9905897dfb5cd30b8d572f83e941

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Feb 20 11:08:11 2018 +1100

ac/radeonsi: pass bindless bool to load_sampler_desc()

We also fix the base_index for bindless by using the driver
location.

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_nir_to_llvm.c  | 11 +--
 src/amd/common/ac_shader_abi.h   |  3 ++-
 src/amd/vulkan/radv_nir_to_llvm.c|  3 ++-
 src/gallium/drivers/radeonsi/si_shader_nir.c |  2 +-
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 0d85d047cd..7de59efcff 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3030,6 +3030,7 @@ static LLVMValueRef get_sampler_desc(struct 
ac_nir_context *ctx,
unsigned constant_index = 0;
unsigned descriptor_set;
unsigned base_index;
+   bool bindless = false;
 
if (!deref) {
assert(tex_instr && !image);
@@ -3063,14 +3064,20 @@ static LLVMValueRef get_sampler_desc(struct 
ac_nir_context *ctx,
tail = >deref;
}
descriptor_set = deref->var->data.descriptor_set;
-   base_index = deref->var->data.binding;
+
+   if (deref->var->data.bindless) {
+   bindless = deref->var->data.bindless;
+   base_index = deref->var->data.driver_location;
+   } else {
+   base_index = deref->var->data.binding;
+   }
}
 
return ctx->abi->load_sampler_desc(ctx->abi,
  descriptor_set,
  base_index,
  constant_index, index,
- desc_type, image, write);
+ desc_type, image, write, bindless);
 }
 
 static void set_tex_fetch_args(struct ac_llvm_context *ctx,
diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index 0737d697ff..2f222cf8d6 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -157,7 +157,8 @@ struct ac_shader_abi {
  unsigned constant_index,
  LLVMValueRef index,
  enum ac_descriptor_type desc_type,
- bool image, bool write);
+ bool image, bool write,
+ bool bindless);
 
/**
 * Load a Vulkan-specific resource.
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index c8d383e021..23b58c37b2 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -1699,7 +1699,8 @@ static LLVMValueRef radv_get_sampler_desc(struct 
ac_shader_abi *abi,
  unsigned constant_index,
  LLVMValueRef index,
  enum ac_descriptor_type desc_type,
- bool image, bool write)
+ bool image, bool write,
+ bool bindless)
 {
struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
LLVMValueRef list = ctx->descriptor_sets[descriptor_set];
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 2245b39fe0..994fee0b02 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -784,7 +784,7 @@ si_nir_load_sampler_desc(struct ac_shader_abi *abi,
 unsigned descriptor_set, unsigned base_index,
 unsigned constant_index, LLVMValueRef dynamic_index,
 enum ac_descriptor_type desc_type, bool image,
-bool write)
+bool write, bool bindless)
 {
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
LLVMBuilderRef builder = ctx->ac.builder;

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


Mesa (master): st/glsl_to_nir: set driver location for bindless images and samplers

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 5411b98d5249e6ceb79f0b9923dd142fbbce8852
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5411b98d5249e6ceb79f0b9923dd142fbbce8852

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Feb 20 11:06:27 2018 +1100

st/glsl_to_nir: set driver location for bindless images and samplers

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

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

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index d80b8318c1..2cd1d97bae 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -271,7 +271,8 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
   uniform->interface_type != NULL)
  continue;
 
-  if (uniform->type->is_sampler() || uniform->type->is_image()) {
+  if (!uniform->data.bindless &&
+  (uniform->type->is_sampler() || uniform->type->is_image())) {
  if (uniform->type->is_sampler())
 loc = shaderidx++;
  else

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


Mesa (master): radeonsi/nir: fix scanning of multi-slot output varyings

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 47eee04556c75075145fbdd0ec50844dcf080d17
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=47eee04556c75075145fbdd0ec50844dcf080d17

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Feb 21 16:53:54 2018 +1100

radeonsi/nir: fix scanning of multi-slot output varyings

This fixes tcs/tes varying arrays where we dont lower indirects and
therefore don't split arrays. Here we also fix useagemask for dual
slot doubles.

Fixes a number of arb_tessellation_shader piglit tests.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 236 ++-
 1 file changed, 127 insertions(+), 109 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 8b5cc13f31..82b2440d0b 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -426,32 +426,48 @@ void si_nir_scan_shader(const struct nir_shader *nir,
nir_foreach_variable(variable, >outputs) {
unsigned semantic_name, semantic_index;
 
-   if (nir->info.stage == MESA_SHADER_FRAGMENT) {
-   
tgsi_get_gl_frag_result_semantic(variable->data.location,
-   _name, _index);
+   i = variable->data.driver_location;
 
-   /* Adjust for dual source blending */
-   if (variable->data.index > 0) {
-   semantic_index++;
-   }
-   } else {
-   tgsi_get_gl_varying_semantic(variable->data.location, 
true,
-_name, 
_index);
+   const struct glsl_type *type = variable->type;
+   if (nir_is_per_vertex_io(variable, nir->info.stage)) {
+   assert(glsl_type_is_array(type));
+   type = glsl_get_array_element(type);
}
 
-   i = variable->data.driver_location;
+   unsigned attrib_count = glsl_count_attribute_slots(type, false);
+   for (unsigned k = 0; k < attrib_count; k++, i++) {
 
-   unsigned num_components = 4;
-   unsigned vector_elements = 
glsl_get_vector_elements(glsl_without_array(variable->type));
-   if (vector_elements)
-   num_components = vector_elements;
+   if (nir->info.stage == MESA_SHADER_FRAGMENT) {
+   
tgsi_get_gl_frag_result_semantic(variable->data.location + k,
+   _name, _index);
 
-   if (glsl_type_is_64bit(glsl_without_array(variable->type)))
-   num_components = MIN2(num_components * 2, 4);
+   /* Adjust for dual source blending */
+   if (variable->data.index > 0) {
+   semantic_index++;
+   }
+   } else {
+   
tgsi_get_gl_varying_semantic(variable->data.location + k, true,
+_name, 
_index);
+   }
+
+   unsigned num_components = 4;
+   unsigned vector_elements = 
glsl_get_vector_elements(glsl_without_array(variable->type));
+   if (vector_elements)
+   num_components = vector_elements;
+
+   unsigned component = variable->data.location_frac;
+   if 
(glsl_type_is_64bit(glsl_without_array(variable->type))) {
+   if 
(glsl_type_is_dual_slot(glsl_without_array(variable->type)) && k % 2) {
+   num_components = (num_components * 2) - 
4;
+   component = 0;
+   } else {
+   num_components = MIN2(num_components * 
2, 4);
+   }
+   }
 
-   ubyte usagemask = 0;
-   for (unsigned j = 0; j < num_components; j++) {
-   switch (j + variable->data.location_frac) {
+   ubyte usagemask = 0;
+   for (unsigned j = component; j < num_components + 
component; j++) {
+   switch (j) {
case 0:
usagemask |= TGSI_WRITEMASK_X;
break;
@@ -466,110 +482,112 @@ void si_nir_scan_shader(const struct nir_shader *nir,
break;
d

Mesa (master): st/glsl_to_nir: fix driver location for dual-slot packed doubles

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: fc51fdbcdec60f96b9bf593d74beb42e465cc277
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fc51fdbcdec60f96b9bf593d74beb42e465cc277

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar 21 11:27:19 2018 +1100

st/glsl_to_nir: fix driver location for dual-slot packed doubles

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 22 --
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 9bb99f3061..acc8942bfe 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -141,16 +141,23 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
  type = glsl_get_array_element(type);
   }
 
+  unsigned var_size = type_size(type);
+
   /* Builtins don't allow component packing so we only need to worry about
* user defined varyings sharing the same location.
*/
   bool processed = false;
   if (var->data.location >= base) {
  unsigned glsl_location = var->data.location - base;
- if (processed_locs[var->data.index] & ((uint64_t)1 << glsl_location))
-processed = true;
- else
-processed_locs[var->data.index] |= ((uint64_t)1 << glsl_location);
+
+ for (unsigned i = 0; i < var_size; i++) {
+if (processed_locs[var->data.index] &
+((uint64_t)1 << (glsl_location + i)))
+   processed = true;
+else
+   processed_locs[var->data.index] |=
+  ((uint64_t)1 << (glsl_location + i));
+ }
   }
 
   /* Because component packing allows varyings to share the same location
@@ -162,9 +169,12 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
  continue;
   }
 
-  assigned_locations[var->data.location] = location;
+  for (unsigned i = 0; i < var_size; i++) {
+ assigned_locations[var->data.location + i] = location + i;
+  }
+
   var->data.driver_location = location;
-  location += type_size(type);
+  location += var_size;
}
 
*size += location;

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


Mesa (master): st/glsl_to_nir: correctly handle arrays packed across multiple vars

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 48f6014903454dcb0e8e05afb41cabf2dbac0585
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=48f6014903454dcb0e8e05afb41cabf2dbac0585

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Mar 23 12:17:07 2018 +1100

st/glsl_to_nir: correctly handle arrays packed across multiple vars

Fixes piglit test:
tests/spec/arb_enhanced_layouts/execution/component-layout/vs-fs-array-interleave-range.shader_test

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 24 +++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index acc8942bfe..d80b8318c1 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -133,6 +133,7 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
const int base = stage == MESA_SHADER_FRAGMENT ?
   (int) FRAG_RESULT_DATA0 : (int) VARYING_SLOT_VAR0;
 
+   int UNUSED last_loc = 0;
nir_foreach_variable(var, var_list) {
 
   const struct glsl_type *type = var->type;
@@ -164,8 +165,29 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
* we may have already have processed this location.
*/
   if (processed) {
- var->data.driver_location = assigned_locations[var->data.location];
+ unsigned driver_location = assigned_locations[var->data.location];
+ var->data.driver_location = driver_location;
  *size += type_size(type);
+
+ /* An array may be packed such that is crosses multiple other arrays
+  * or variables, we need to make sure we have allocated the elements
+  * consecutively if the previously proccessed var was shorter than
+  * the current array we are processing.
+  *
+  * NOTE: The code below assumes the var list is ordered in ascending
+  * location order.
+  */
+ assert(last_loc <= var->data.location);
+ last_loc = var->data.location;
+ unsigned last_slot_location = driver_location + var_size;
+ if (last_slot_location > location) {
+unsigned num_unallocated_slots = last_slot_location - location;
+unsigned first_unallocated_slot = var_size - num_unallocated_slots;
+for (unsigned i = first_unallocated_slot; i < 
num_unallocated_slots; i++) {
+   assigned_locations[var->data.location + i] = location;
+   location++;
+}
+ }
  continue;
   }
 

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


Mesa (master): nir: fix crash in loop unroll corner case

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 629ee690addad9b3dc8f68cfff5ae09858f31caf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=629ee690addad9b3dc8f68cfff5ae09858f31caf

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar 26 11:41:51 2018 +1100

nir: fix crash in loop unroll corner case

When an if nesting inside anouther if is optimised away we can
end up with a loop terminator and following block that looks like
this:

if ssa_596 {
block block_5:
/* preds: block_4 */
vec1 32 ssa_601 = load_const (0x /* -nan */)
break
/* succs: block_8 */
} else {
block block_6:
/* preds: block_4 */
/* succs: block_7 */
}
block block_7:
/* preds: block_6 */
vec1 32 ssa_602 = phi block_6: ssa_552
vec1 32 ssa_603 = phi block_6: ssa_553
vec1 32 ssa_604 = iadd ssa_551, ssa_66

The problem is the phis. Loop unrolling expects the last block in
the loop to be empty once we splice the instructions in the last
block into the continue branch. The problem is we cant move phis
so here we lower the phis to regs when preparing the loop for
unrolling. As it could be possible to have multiple additional
blocks/ifs following the terminator we just convert all phis at
the top level of the loop body for simplicity.

We also add some comments to loop_prepare_for_unroll() while we
are here.

Fixes: 51daccb289eb "nir: add a loop unrolling pass"

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105670

---

 src/compiler/nir/nir_opt_loop_unroll.c | 17 -
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/compiler/nir/nir_opt_loop_unroll.c 
b/src/compiler/nir/nir_opt_loop_unroll.c
index 79d04f978b..ff27c06cc0 100644
--- a/src/compiler/nir/nir_opt_loop_unroll.c
+++ b/src/compiler/nir/nir_opt_loop_unroll.c
@@ -37,10 +37,10 @@
 #define LOOP_UNROLL_LIMIT 26
 
 /* Prepare this loop for unrolling by first converting to lcssa and then
- * converting the phis from the loops first block and the block that follows
- * the loop into regs.  Partially converting out of SSA allows us to unroll
- * the loop without having to keep track of and update phis along the way
- * which gets tricky and doesn't add much value over conveting to regs.
+ * converting the phis from the top level of the loop body to regs.
+ * Partially converting out of SSA allows us to unroll the loop without having
+ * to keep track of and update phis along the way which gets tricky and
+ * doesn't add much value over converting to regs.
  *
  * The loop may have a continue instruction at the end of the loop which does
  * nothing.  Once we're out of SSA, we can safely delete it so we don't have
@@ -51,13 +51,20 @@ loop_prepare_for_unroll(nir_loop *loop)
 {
nir_convert_loop_to_lcssa(loop);
 
-   nir_lower_phis_to_regs_block(nir_loop_first_block(loop));
+   /* Lower phis at the top level of the loop body */
+   foreach_list_typed_safe(nir_cf_node, node, node, >body) {
+  if (nir_cf_node_block == node->type) {
+ nir_lower_phis_to_regs_block(nir_cf_node_as_block(node));
+  }
+   }
 
+   /* Lower phis after the loop */
nir_block *block_after_loop =
   nir_cf_node_as_block(nir_cf_node_next(>cf_node));
 
nir_lower_phis_to_regs_block(block_after_loop);
 
+   /* Remove continue if its the last instruction in the loop */
nir_instr *last_instr = nir_block_last_instr(nir_loop_last_block(loop));
if (last_instr && last_instr->type == nir_instr_type_jump) {
   assert(nir_instr_as_jump(last_instr)->type == nir_jump_continue);

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


Mesa (master): ac/nir_to_llvm: fix component packing for double outputs

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar 21 12:23:08 2018 +1100

ac/nir_to_llvm: fix component packing for double outputs

We need to wait until after the writemask is widened before we
adjust it for component packing.

Together with the previous patch this fixes a number of
arb_enhanced_layouts component layout piglit tests.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_nir_to_llvm.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index b7d29ef0b5..0d85d047cd 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1793,7 +1793,7 @@ visit_store_var(struct ac_nir_context *ctx,
int idx = instr->variables[0]->var->data.driver_location;
unsigned comp = instr->variables[0]->var->data.location_frac;
LLVMValueRef src = ac_to_float(>ac, get_src(ctx, instr->src[0]));
-   int writemask = instr->const_index[0] << comp;
+   int writemask = instr->const_index[0];
LLVMValueRef indir_index;
unsigned const_index;
get_deref_offset(ctx, instr->variables[0], false,
@@ -1808,6 +1808,8 @@ visit_store_var(struct ac_nir_context *ctx,
writemask = widen_mask(writemask, 2);
}
 
+   writemask = writemask << comp;
+
switch (instr->variables[0]->var->data.mode) {
case nir_var_shader_out:
 

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


Mesa (master): radeonsi/nir: fix input processing for packed varyings

2018-03-27 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: b260efbd5eed4fd89e7928cfc2103f058a1e86d2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b260efbd5eed4fd89e7928cfc2103f058a1e86d2

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Mar 23 12:10:42 2018 +1100

radeonsi/nir: fix input processing for packed varyings

The location was only being incremented the first time we processed a
location. This meant we would incorrectly skip some elements of
an array if the first element was packed and proccessed previously
but other elements were not.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_nir.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 82b2440d0b..6444a8b5dd 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -852,7 +852,7 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, 
struct nir_shader *nir)
/* Packed components share the same location so 
skip
 * them if we have already processed the 
location.
 */
-   if (processed_inputs & ((uint64_t)1 << loc)) {
+   if (processed_inputs & ((uint64_t)1 << (loc + 
i))) {
input_idx += 4;
continue;
}
@@ -870,8 +870,7 @@ bool si_nir_build_llvm(struct si_shader_context *ctx, 
struct nir_shader *nir)
bitcast_inputs(ctx, data, input_idx);
}
 
-   processed_inputs |= ((uint64_t)1 << loc);
-   loc++;
+   processed_inputs |= ((uint64_t)1 << (loc + i));
input_idx += 4;
}
}

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


Mesa (master): glsl: fix infinite loop caused by bug in loop unrolling pass

2018-03-26 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 56b867395dee1a48594b27987d3bf68a4e745dda
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56b867395dee1a48594b27987d3bf68a4e745dda

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar 26 10:31:26 2018 +1100

glsl: fix infinite loop caused by bug in loop unrolling pass

Just checking for 2 jumps is not enough to be sure we can do a
complex loop unroll. We need to make sure we also have also found
2 loop terminators.

Without this we were attempting to unroll a loop where the second
jump was nested inside multiple ifs which loop analysis is unable
to detect as a terminator. We ended up splicing out the first
terminator but failed to actually unroll the loop, this resulted
in the creation of a possible infinite loop.

Fixes: 646621c66da9 "glsl: make loop unrolling more like the nir unrolling path"

Tested-by: Gert Wollny <gw.foss...@gmail.com>
Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105670

---

 src/compiler/glsl/loop_unroll.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compiler/glsl/loop_unroll.cpp 
b/src/compiler/glsl/loop_unroll.cpp
index 6e06a30fb9..f6efe6475a 100644
--- a/src/compiler/glsl/loop_unroll.cpp
+++ b/src/compiler/glsl/loop_unroll.cpp
@@ -519,7 +519,7 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
 * isn't any additional unknown terminators, or any other jumps nested
 * inside futher ifs.
 */
-   if (ls->num_loop_jumps != 2)
+   if (ls->num_loop_jumps != 2 || ls->terminators.length() != 2)
   return visit_continue;
 
ir_instruction *first_ir =

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


Mesa (master): nir: add frexp_exp and frexp_sig opcodes

2018-03-21 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: cca214174549af3d608e252d8642c2e194c910ed
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=cca214174549af3d608e252d8642c2e194c910ed

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 20 13:06:23 2018 +1100

nir: add frexp_exp and frexp_sig opcodes

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/compiler/glsl/glsl_to_nir.cpp | 2 ++
 src/compiler/nir/nir_opcodes.py   | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/src/compiler/glsl/glsl_to_nir.cpp 
b/src/compiler/glsl/glsl_to_nir.cpp
index 80eb15f1ab..be8cc33e06 100644
--- a/src/compiler/glsl/glsl_to_nir.cpp
+++ b/src/compiler/glsl/glsl_to_nir.cpp
@@ -1612,6 +1612,8 @@ nir_visitor::visit(ir_expression *ir)
case ir_unop_ceil:  result = nir_fceil(, srcs[0]); break;
case ir_unop_floor: result = nir_ffloor(, srcs[0]); break;
case ir_unop_fract: result = nir_ffract(, srcs[0]); break;
+   case ir_unop_frexp_exp: result = nir_frexp_exp(, srcs[0]); break;
+   case ir_unop_frexp_sig: result = nir_frexp_sig(, srcs[0]); break;
case ir_unop_round_even: result = nir_fround_even(, srcs[0]); break;
case ir_unop_sin:   result = nir_fsin(, srcs[0]); break;
case ir_unop_cos:   result = nir_fcos(, srcs[0]); break;
diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py
index 65d1320062..04edffc6c0 100644
--- a/src/compiler/nir/nir_opcodes.py
+++ b/src/compiler/nir/nir_opcodes.py
@@ -214,6 +214,9 @@ unop("fquantize2f16", tfloat, "(fabs(src0) < ldexpf(1.0, 
-14)) ? copysignf(0.0f,
 unop("fsin", tfloat, "bit_size == 64 ? sin(src0) : sinf(src0)")
 unop("fcos", tfloat, "bit_size == 64 ? cos(src0) : cosf(src0)")
 
+# dfrexp
+unop_convert("frexp_exp", tint32, tfloat64, "frexp(src0, );")
+unop_convert("frexp_sig", tfloat64, tfloat64, "int n; dst = frexp(src0, );")
 
 # Partial derivatives.
 

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


Mesa (master): ac/nir_to_llvm: add frexp support

2018-03-21 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: c135316555ccd052da544e79166f81dece55cebb
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c135316555ccd052da544e79166f81dece55cebb

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 20 13:07:22 2018 +1100

ac/nir_to_llvm: add frexp support

Fixes CTS tests:
KHR-GL40.gpu_shader_fp64.builtin.frexp_double
KHR-GL40.gpu_shader_fp64.builtin.frexp_dvec2
KHR-GL40.gpu_shader_fp64.builtin.frexp_dvec3
KHR-GL40.gpu_shader_fp64.builtin.frexp_dvec4

And piglit test:
tests/spec/arb_gpu_shader_fp64/execution/built-in-functions/fs-frexp-dvec4.shader_test

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_nir_to_llvm.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index b0c0d76b47..d23f4fc1e8 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -728,6 +728,17 @@ static void visit_alu(struct ac_nir_context *ctx, const 
nir_alu_instr *instr)
result = ac_build_fdiv(>ac, instr->dest.dest.ssa.bit_size 
== 32 ? ctx->ac.f32_1 : ctx->ac.f64_1,
   result);
break;
+   case nir_op_frexp_exp:
+   src[0] = ac_to_float(>ac, src[0]);
+   result = ac_build_intrinsic(>ac, 
"llvm.amdgcn.frexp.exp.i32.f64",
+   ctx->ac.i32, src, 1, 
AC_FUNC_ATTR_READNONE);
+
+   break;
+   case nir_op_frexp_sig:
+   src[0] = ac_to_float(>ac, src[0]);
+   result = ac_build_intrinsic(>ac, 
"llvm.amdgcn.frexp.mant.f64",
+   ctx->ac.f64, src, 1, 
AC_FUNC_ATTR_READNONE);
+   break;
case nir_op_fmax:
result = emit_intrin_2f_param(>ac, "llvm.maxnum",
  ac_to_float_type(>ac, 
def_type), src[0], src[1]);

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


Mesa (master): radv: don't lower indirects until after opts have run

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 9a243eccae618e85aa7af762a4c40ecd8a2e4882
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9a243eccae618e85aa7af762a4c40ecd8a2e4882

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  8 16:20:48 2018 +1100

radv: don't lower indirects until after opts have run

Noticed while passing by. Not sure if it impacts anything, but
likely to impact GFX9 more than anything else since we lower
inputs, outputs and locals there.

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_shader.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index ac577c36e9..c6935805c7 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -275,7 +275,6 @@ radv_shader_compile_to_nir(struct radv_device *device,
nir_lower_var_copies(nir);
nir_lower_global_vars_to_local(nir);
nir_remove_dead_variables(nir, nir_var_local);
-   ac_lower_indirect_derefs(nir, 
device->physical_device->rad_info.chip_class);
nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) {
.subgroup_size = 64,
.ballot_bit_size = 64,
@@ -287,6 +286,14 @@ radv_shader_compile_to_nir(struct radv_device *device,
 
radv_optimize_nir(nir);
 
+   /* Indirect lowering must be called after the radv_optimize_nir() loop
+* has been called at least once. Otherwise indirect lowering can
+* bloat the instruction count of the loop and cause it to be
+* considered too large for unrolling.
+*/
+   ac_lower_indirect_derefs(nir, 
device->physical_device->rad_info.chip_class);
+   radv_optimize_nir(nir);
+
return nir;
 }
 

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


Mesa (master): st/nir: fix atomic lowering for gallium drivers

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: dfe2f198550b262186e2882d7e573f1f3759deb7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dfe2f198550b262186e2882d7e573f1f3759deb7

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar 19 22:23:55 2018 +1100

st/nir: fix atomic lowering for gallium drivers

i965 and gallium handle the atomic buffer index differently. It was
just by luck that the single piglit test for this was passing.

For gallium we use the atomic binding so that we match the handling
in st_bind_atomics().

On radeonsi this fixes the CTS test:
KHR-GL43.shader_storage_buffer_object.advanced-write-fragment

It also fixes tressfx hair rendering in Tomb Raider.

Reviewed-by: Marek Olšák  <marek.ol...@amd.com>

---

 src/compiler/nir/nir.h|  3 ++-
 src/compiler/nir/nir_lower_atomics.c  | 15 ++-
 src/mesa/drivers/dri/i965/brw_link.cpp|  2 +-
 src/mesa/state_tracker/st_glsl_to_nir.cpp |  2 +-
 4 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index d7baabd6f6..0d207d0ea5 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2710,7 +2710,8 @@ typedef struct nir_lower_bitmap_options {
 void nir_lower_bitmap(nir_shader *shader, const nir_lower_bitmap_options 
*options);
 
 bool nir_lower_atomics(nir_shader *shader,
-   const struct gl_shader_program *shader_program);
+   const struct gl_shader_program *shader_program,
+   bool use_binding_as_idx);
 bool nir_lower_atomics_to_ssbo(nir_shader *shader, unsigned ssbo_offset);
 bool nir_lower_to_source_mods(nir_shader *shader);
 
diff --git a/src/compiler/nir/nir_lower_atomics.c 
b/src/compiler/nir/nir_lower_atomics.c
index bdab4b8737..6b046bc426 100644
--- a/src/compiler/nir/nir_lower_atomics.c
+++ b/src/compiler/nir/nir_lower_atomics.c
@@ -38,7 +38,7 @@
 static bool
 lower_instr(nir_intrinsic_instr *instr,
 const struct gl_shader_program *shader_program,
-nir_shader *shader)
+nir_shader *shader, bool use_binding_as_idx)
 {
nir_intrinsic_op op;
switch (instr->intrinsic) {
@@ -98,9 +98,12 @@ lower_instr(nir_intrinsic_instr *instr,
void *mem_ctx = ralloc_parent(instr);
unsigned uniform_loc = instr->variables[0]->var->data.location;
 
+   unsigned idx = use_binding_as_idx ?
+  instr->variables[0]->var->data.binding :
+  
shader_program->data->UniformStorage[uniform_loc].opaque[shader->info.stage].index;
+
nir_intrinsic_instr *new_instr = nir_intrinsic_instr_create(mem_ctx, op);
-   nir_intrinsic_set_base(new_instr,
-  
shader_program->data->UniformStorage[uniform_loc].opaque[shader->info.stage].index);
+   nir_intrinsic_set_base(new_instr, idx);
 
nir_load_const_instr *offset_const =
   nir_load_const_instr_create(mem_ctx, 1, 32);
@@ -174,7 +177,8 @@ lower_instr(nir_intrinsic_instr *instr,
 
 bool
 nir_lower_atomics(nir_shader *shader,
-  const struct gl_shader_program *shader_program)
+  const struct gl_shader_program *shader_program,
+  bool use_binding_as_idx)
 {
bool progress = false;
 
@@ -184,7 +188,8 @@ nir_lower_atomics(nir_shader *shader,
 nir_foreach_instr_safe(instr, block) {
if (instr->type == nir_instr_type_intrinsic)
   progress |= lower_instr(nir_instr_as_intrinsic(instr),
-  shader_program, shader);
+  shader_program, shader,
+  use_binding_as_idx);
 }
  }
 
diff --git a/src/mesa/drivers/dri/i965/brw_link.cpp 
b/src/mesa/drivers/dri/i965/brw_link.cpp
index b08b56a935..274a738cbb 100644
--- a/src/mesa/drivers/dri/i965/brw_link.cpp
+++ b/src/mesa/drivers/dri/i965/brw_link.cpp
@@ -299,7 +299,7 @@ brw_link_shader(struct gl_context *ctx, struct 
gl_shader_program *shProg)
   brw_shader_gather_info(prog->nir, prog);
 
   NIR_PASS_V(prog->nir, nir_lower_samplers, shProg);
-  NIR_PASS_V(prog->nir, nir_lower_atomics, shProg);
+  NIR_PASS_V(prog->nir, nir_lower_atomics, shProg, false);
   NIR_PASS_V(prog->nir, nir_lower_atomics_to_ssbo,
  prog->nir->info.num_abos);
 
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 2eb2ece5b1..9bb99f3061 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -414,7 +414,7 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct 
gl_program *prog,
st_set_prog_affected_state_flags(prog);
 
NIR_PASS_V(nir, st_nir_lower_builtin);
-   NIR_PASS_V(nir, nir_lower_atomics, shader_program);
+   NIR_PASS_V(nir, nir_lower_atomics, shader_program, true);
 
if (st->ctx->_Shader->Flags & GLSL_DUMP) {

Mesa (master): mesa: rework ParameterList to allow packing

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: edded1237607348683f492db313e823dc2e380c3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=edded1237607348683f492db313e823dc2e380c3

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Jun 16 10:17:56 2017 +1000

mesa: rework ParameterList to allow packing

Currently everything is padded to 4 components. Making the list
more flexible will allow us to do uniform packing.

V2 (suggestions from Nicolai):
- always pass existing calls to _mesa_add_parameter() true for padd_and_align
- fix bindless param value offsets
- remove left over wip logic from pad and align code
- zero out param value padding
- whitespace fix

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/compiler/glsl/serialize.cpp | 14 +--
 src/mesa/drivers/dri/i915/i915_fragprog.c   |  9 +++--
 src/mesa/drivers/dri/i965/gen6_constant_state.c |  3 +-
 src/mesa/drivers/dri/r200/r200_vertprog.c   | 10 +++--
 src/mesa/main/uniform_query.cpp | 14 ---
 src/mesa/program/ir_to_mesa.cpp |  9 +++--
 src/mesa/program/prog_execute.c |  6 ++-
 src/mesa/program/prog_opt_constant_fold.c   |  3 +-
 src/mesa/program/prog_parameter.c   | 52 ++---
 src/mesa/program/prog_parameter.h   |  9 +++--
 src/mesa/program/prog_parameter_layout.c| 21 +++---
 src/mesa/program/prog_print.c   |  4 +-
 src/mesa/program/prog_statevars.c   |  3 +-
 src/mesa/program/prog_to_nir.c  |  3 +-
 src/mesa/program/program_parse.y|  2 +-
 src/mesa/state_tracker/st_atifs_to_tgsi.c   |  6 ++-
 src/mesa/state_tracker/st_atom_constbuf.c   |  5 ++-
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp  |  4 +-
 src/mesa/state_tracker/st_mesa_to_tgsi.c|  8 ++--
 19 files changed, 125 insertions(+), 60 deletions(-)

diff --git a/src/compiler/glsl/serialize.cpp b/src/compiler/glsl/serialize.cpp
index 1fdbaa990f..727822633d 100644
--- a/src/compiler/glsl/serialize.cpp
+++ b/src/compiler/glsl/serialize.cpp
@@ -950,6 +950,7 @@ write_shader_parameters(struct blob *metadata,
 struct gl_program_parameter_list *params)
 {
blob_write_uint32(metadata, params->NumParameters);
+   blob_write_uint32(metadata, params->NumParameterValues);
uint32_t i = 0;
 
while (i < params->NumParameters) {
@@ -966,7 +967,10 @@ write_shader_parameters(struct blob *metadata,
}
 
blob_write_bytes(metadata, params->ParameterValues,
-sizeof(gl_constant_value) * 4 * params->NumParameters);
+sizeof(gl_constant_value) * params->NumParameterValues);
+
+   blob_write_bytes(metadata, params->ParameterValueOffset,
+sizeof(uint32_t) * params->NumParameters);
 
blob_write_uint32(metadata, params->StateFlags);
 }
@@ -978,6 +982,7 @@ read_shader_parameters(struct blob_reader *metadata,
gl_state_index16 state_indexes[STATE_LENGTH];
uint32_t i = 0;
uint32_t num_parameters = blob_read_uint32(metadata);
+   uint32_t num_parameters_values = blob_read_uint32(metadata);
 
_mesa_reserve_parameter_storage(params, num_parameters);
while (i < num_parameters) {
@@ -989,13 +994,16 @@ read_shader_parameters(struct blob_reader *metadata,
   sizeof(state_indexes));
 
   _mesa_add_parameter(params, type, name, size, data_type,
-  NULL, state_indexes);
+  NULL, state_indexes, false);
 
   i++;
}
 
blob_copy_bytes(metadata, (uint8_t *) params->ParameterValues,
-sizeof(gl_constant_value) * 4 * params->NumParameters);
+   sizeof(gl_constant_value) * num_parameters_values);
+
+   blob_copy_bytes(metadata, (uint8_t *) params->ParameterValueOffset,
+   sizeof(uint32_t) * num_parameters);
 
params->StateFlags = blob_read_uint32(metadata);
 }
diff --git a/src/mesa/drivers/dri/i915/i915_fragprog.c 
b/src/mesa/drivers/dri/i915/i915_fragprog.c
index 2e04319512..6493ab99b1 100644
--- a/src/mesa/drivers/dri/i915/i915_fragprog.c
+++ b/src/mesa/drivers/dri/i915/i915_fragprog.c
@@ -184,11 +184,12 @@ src_vector(struct i915_fragment_program *p,
*/
case PROGRAM_CONSTANT:
case PROGRAM_STATE_VAR:
-   case PROGRAM_UNIFORM:
-  src = i915_emit_param4fv(p,
->Parameters->ParameterValues[source->Index][0].f);
+   case PROGRAM_UNIFORM: {
+  struct gl_program_parameter_list *params = program->Parameters;
+  unsigned offset = params->ParameterValueOffset[source->Index];
+  src = i915_emit_param4fv(p, >ParameterValues[offset].f);
   break;
-
+   }
default:
   i915_program_error(p, "Bad source->File: %d", source->File);
   return 0;
diff --git a/src/mesa/drivers/dri/i965/gen6_constant_state.c 
b/src/mesa/drivers/dri/

Mesa (master): mesa: add packing support for setting uniform handles

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: a2198d4fdb7d93568ba0792a326971abb6d6b3a9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a2198d4fdb7d93568ba0792a326971abb6d6b3a9

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Jun 20 10:31:32 2017 +1000

mesa: add packing support for setting uniform handles

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

---

 src/mesa/main/uniform_query.cpp | 16 +---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index 14ecfdca2f..f901fcb3e5 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -1523,10 +1523,20 @@ _mesa_uniform_handle(GLint location, GLsizei count, 
const GLvoid *values,
 
/* Store the data in the "actual type" backing storage for the uniform.
 */
-   memcpy(>storage[size_mul * components * offset], values,
-  sizeof(uni->storage[0]) * components * count * size_mul);
+   gl_constant_value *storage;
+   if (ctx->Const.PackedDriverUniformStorage) {
+  for (unsigned s = 0; s < uni->num_driver_storage; s++) {
+ storage = (gl_constant_value *)
+uni->driver_storage[s].data + (size_mul * offset * components);
+ memcpy(storage, values,
+sizeof(uni->storage[0]) * components * count * size_mul);
+  }
+   } else {
+  memcpy(>storage[size_mul * components * offset], values,
+ sizeof(uni->storage[0]) * components * count * size_mul);
 
-   _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+  _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+   }
 
if (uni->type->is_sampler()) {
   /* Mark this bindless sampler as not bound to a texture unit because

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


Mesa (master): st: add st_glsl_type_dword_size() helper

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: a80cf442d939212da40951a0a57a0978de6f39a6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a80cf442d939212da40951a0a57a0978de6f39a6

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 13 12:34:50 2018 +1100

st: add st_glsl_type_dword_size() helper

This will be used to support uniform packing.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_types.cpp | 43 
 src/mesa/state_tracker/st_glsl_types.h   |  1 +
 2 files changed, 44 insertions(+)

diff --git a/src/mesa/state_tracker/st_glsl_types.cpp 
b/src/mesa/state_tracker/st_glsl_types.cpp
index d4d2139d9d..ef7b7fa777 100644
--- a/src/mesa/state_tracker/st_glsl_types.cpp
+++ b/src/mesa/state_tracker/st_glsl_types.cpp
@@ -108,3 +108,46 @@ st_glsl_storage_type_size(const struct glsl_type *type, 
bool is_bindless)
}
return 0;
 }
+
+int
+st_glsl_type_dword_size(const struct glsl_type *type)
+{
+   unsigned int size, i;
+
+   switch (type->base_type) {
+   case GLSL_TYPE_UINT:
+   case GLSL_TYPE_INT:
+   case GLSL_TYPE_FLOAT:
+   case GLSL_TYPE_BOOL:
+  return type->components();
+   case GLSL_TYPE_UINT16:
+   case GLSL_TYPE_INT16:
+   case GLSL_TYPE_FLOAT16:
+  return DIV_ROUND_UP(type->components(), 2);
+   case GLSL_TYPE_DOUBLE:
+   case GLSL_TYPE_UINT64:
+   case GLSL_TYPE_INT64:
+  return type->components() * 2;
+   case GLSL_TYPE_ARRAY:
+  return st_glsl_type_dword_size(type->fields.array) * type->length;
+   case GLSL_TYPE_STRUCT:
+  size = 0;
+  for (i = 0; i < type->length; i++) {
+ size += st_glsl_type_dword_size(type->fields.structure[i].type);
+  }
+  return size;
+   case GLSL_TYPE_IMAGE:
+   case GLSL_TYPE_SAMPLER:
+   case GLSL_TYPE_ATOMIC_UINT:
+  return 0;
+   case GLSL_TYPE_SUBROUTINE:
+  return 1;
+   case GLSL_TYPE_VOID:
+   case GLSL_TYPE_ERROR:
+   case GLSL_TYPE_INTERFACE:
+   case GLSL_TYPE_FUNCTION:
+  unreachable("not reached");
+   }
+
+   return 0;
+}
diff --git a/src/mesa/state_tracker/st_glsl_types.h 
b/src/mesa/state_tracker/st_glsl_types.h
index 915816d1fa..16b31b684f 100644
--- a/src/mesa/state_tracker/st_glsl_types.h
+++ b/src/mesa/state_tracker/st_glsl_types.h
@@ -36,6 +36,7 @@ extern "C" {
 int st_glsl_storage_type_size(const struct glsl_type *type,
   bool is_bindless);
 
+int st_glsl_type_dword_size(const struct glsl_type *type);
 
 #ifdef __cplusplus
 }

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


Mesa (master): mesa: allow for uniform packing when adding uniforms to param list

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 40711a7a6063eb6b5069c5f7849fe3cefb70526a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=40711a7a6063eb6b5069c5f7849fe3cefb70526a

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Jun 20 10:44:08 2017 +1000

mesa: allow for uniform packing when adding uniforms to param list

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

---

 src/mesa/program/ir_to_mesa.cpp | 32 +++-
 1 file changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index f26eddc900..0dad6f9c71 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2449,10 +2449,26 @@ add_uniform_to_shader::visit_field(const glsl_type 
*type, const char *name,
 
_mesa_reserve_parameter_storage(params, num_params);
index = params->NumParameters;
-   for (unsigned i = 0; i < num_params; i++) {
-  unsigned comps = 4;
-  _mesa_add_parameter(params, PROGRAM_UNIFORM, name, comps,
-  type->gl_type, NULL, NULL, true);
+
+   if (ctx->Const.PackedDriverUniformStorage) {
+  for (unsigned i = 0; i < num_params; i++) {
+ unsigned dmul = type->without_array()->is_64bit() ? 2 : 1;
+ unsigned comps = type->without_array()->vector_elements * dmul;
+ if (is_dual_slot) {
+if (i & 0x1)
+   comps -= 4;
+else
+   comps = 4;
+ }
+
+ _mesa_add_parameter(params, PROGRAM_UNIFORM, name, comps,
+ type->gl_type, NULL, NULL, false);
+  }
+   } else {
+  for (unsigned i = 0; i < num_params; i++) {
+ _mesa_add_parameter(params, PROGRAM_UNIFORM, name, 4,
+ type->gl_type, NULL, NULL, true);
+  }
}
 
/* The first part of the uniform that's processed determines the base
@@ -2527,7 +2543,13 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
   if (location != last_location) {
  enum gl_uniform_driver_format format = uniform_native;
  unsigned columns = 0;
- int dmul = 4 * sizeof(float);
+
+ int dmul;
+ if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm) {
+dmul = storage->type->vector_elements * sizeof(float);
+ } else {
+dmul = 4 * sizeof(float);
+ }
 
  switch (storage->type->base_type) {
  case GLSL_TYPE_UINT64:

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


Mesa (master): st/radeonsi: enable uniform packing in NIR backend

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 632d5e97efa3d38155d290fa397af7a729de8682
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=632d5e97efa3d38155d290fa397af7a729de8682

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar 14 09:51:23 2018 +1100

st/radeonsi: enable uniform packing in NIR backend

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_get.c |  6 +-
 src/mesa/state_tracker/st_glsl_to_nir.cpp | 10 ++
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_get.c 
b/src/gallium/drivers/radeonsi/si_get.c
index 323700d425..b4ca5bea94 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -251,6 +251,11 @@ static int si_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
return RADEON_SPARSE_PAGE_SIZE;
return 0;
 
+   case PIPE_CAP_PACKED_UNIFORMS:
+   if (sscreen->debug_flags & DBG(NIR))
+   return 1;
+   return 0;
+
/* Unsupported features. */
case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
@@ -269,7 +274,6 @@ static int si_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_TILE_RASTER_ORDER:
case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
-   case PIPE_CAP_PACKED_UNIFORMS:
return 0;
 
case PIPE_CAP_FENCE_SIGNAL:
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 9006650517..2eb2ece5b1 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -753,14 +753,8 @@ st_finalize_nir(struct st_context *st, struct gl_program 
*prog,
st_nir_assign_uniform_locations(st->ctx, prog, shader_program,
>uniforms, >num_uniforms);
 
-   /* Below is a quick hack so that uniform lowering only runs on radeonsi
-* (the only NIR backend that currently supports tess) once we enable
-* uniform packing support we will just use
-* ctx->Const.PackedDriverUniformStorage for this check.
-*/
-   if (screen->get_shader_param(screen, PIPE_SHADER_TESS_CTRL,
-PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) {
-  NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, type_size,
+   if (st->ctx->Const.PackedDriverUniformStorage) {
+  NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, st_glsl_type_dword_size,
  (nir_lower_io_options)0);
   NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo, prog->Parameters);
}

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


Mesa (master): mesa: add _mesa_add_sized_state_reference() helper

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 57ebab64c0dd1abd646f4f274d01f19c8e0e7293
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=57ebab64c0dd1abd646f4f274d01f19c8e0e7293

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 13 20:47:48 2018 +1100

mesa: add _mesa_add_sized_state_reference() helper

This will be used for adding packed builtin uniforms.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/program/prog_parameter.c | 36 ++--
 src/mesa/program/prog_parameter.h |  5 +
 2 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/src/mesa/program/prog_parameter.c 
b/src/mesa/program/prog_parameter.c
index af9bb37cd5..88821cfba1 100644
--- a/src/mesa/program/prog_parameter.c
+++ b/src/mesa/program/prog_parameter.c
@@ -362,21 +362,11 @@ _mesa_add_typed_unnamed_constant(struct 
gl_program_parameter_list *paramList,
return pos;
 }
 
-
-/**
- * Add a new state reference to the parameter list.
- * This will be used when the program contains something like this:
- *PARAM ambient = state.material.front.ambient;
- *
- * \param paramList  the parameter list
- * \param stateTokens  an array of 5 (STATE_LENGTH) state tokens
- * \return index of the new parameter.
- */
 GLint
-_mesa_add_state_reference(struct gl_program_parameter_list *paramList,
-  const gl_state_index16 stateTokens[STATE_LENGTH])
+_mesa_add_sized_state_reference(struct gl_program_parameter_list *paramList,
+const gl_state_index16 
stateTokens[STATE_LENGTH],
+const unsigned size, bool pad_and_align)
 {
-   const GLuint size = 4; /* XXX fix */
char *name;
GLint index;
 
@@ -391,7 +381,8 @@ _mesa_add_state_reference(struct gl_program_parameter_list 
*paramList,
 
name = _mesa_program_state_string(stateTokens);
index = _mesa_add_parameter(paramList, PROGRAM_STATE_VAR, name,
-   size, GL_NONE, NULL, stateTokens, true);
+   size, GL_NONE, NULL, stateTokens,
+   pad_and_align);
paramList->StateFlags |= _mesa_program_state_flags(stateTokens);
 
/* free name string here since we duplicated it in add_parameter() */
@@ -399,3 +390,20 @@ _mesa_add_state_reference(struct gl_program_parameter_list 
*paramList,
 
return index;
 }
+
+
+/**
+ * Add a new state reference to the parameter list.
+ * This will be used when the program contains something like this:
+ *PARAM ambient = state.material.front.ambient;
+ *
+ * \param paramList  the parameter list
+ * \param stateTokens  an array of 5 (STATE_LENGTH) state tokens
+ * \return index of the new parameter.
+ */
+GLint
+_mesa_add_state_reference(struct gl_program_parameter_list *paramList,
+  const gl_state_index16 stateTokens[STATE_LENGTH])
+{
+   return _mesa_add_sized_state_reference(paramList, stateTokens, 4, true);
+}
diff --git a/src/mesa/program/prog_parameter.h 
b/src/mesa/program/prog_parameter.h
index 83eb0c5613..8e36a1c590 100644
--- a/src/mesa/program/prog_parameter.h
+++ b/src/mesa/program/prog_parameter.h
@@ -128,6 +128,11 @@ _mesa_add_unnamed_constant(struct 
gl_program_parameter_list *paramList,
 }
 
 extern GLint
+_mesa_add_sized_state_reference(struct gl_program_parameter_list *paramList,
+const gl_state_index16 
stateTokens[STATE_LENGTH],
+const unsigned size, bool pad_and_align);
+
+extern GLint
 _mesa_add_state_reference(struct gl_program_parameter_list *paramList,
   const gl_state_index16 stateTokens[]);
 

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


Mesa (master): mesa: create copy uniform to storage helpers

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 4a7c5c079b8b9df3ed28ba8fc10aa64e13d17413
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a7c5c079b8b9df3ed28ba8fc10aa64e13d17413

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Jun 16 15:45:00 2017 +1000

mesa: create copy uniform to storage helpers

These will be used in the following patch to allow copying directly
to the param list when packing is enabled.

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/uniform_query.cpp | 154 
 1 file changed, 91 insertions(+), 63 deletions(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index 52b04c9243..eaed536f68 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -1029,6 +1029,42 @@ _mesa_flush_vertices_for_uniforms(struct gl_context *ctx,
ctx->NewDriverState |= new_driver_state;
 }
 
+static void
+copy_uniforms_to_storage(struct gl_uniform_storage *uni,
+ struct gl_context *ctx, GLsizei count,
+ const GLvoid *values, const int size_mul,
+ const unsigned offset, const unsigned components,
+ enum glsl_base_type basicType)
+{
+   if (!uni->type->is_boolean() && !uni->is_bindless) {
+  memcpy(>storage[size_mul * components * offset], values,
+ sizeof(uni->storage[0]) * components * count * size_mul);
+   } else if (uni->is_bindless) {
+  const union gl_constant_value *src =
+ (const union gl_constant_value *) values;
+  GLuint64 *dst = (GLuint64 *)>storage[components * offset].i;
+  const unsigned elems = components * count;
+
+  for (unsigned i = 0; i < elems; i++) {
+ dst[i] = src[i].i;
+  }
+   } else {
+  const union gl_constant_value *src =
+ (const union gl_constant_value *) values;
+  union gl_constant_value *dst = >storage[components * offset];
+  const unsigned elems = components * count;
+
+  for (unsigned i = 0; i < elems; i++) {
+ if (basicType == GLSL_TYPE_FLOAT) {
+dst[i].i = src[i].f != 0.0f ? ctx->Const.UniformBooleanTrue : 0;
+ } else {
+dst[i].i = src[i].i != 0? ctx->Const.UniformBooleanTrue : 0;
+ }
+  }
+   }
+}
+
+
 /**
  * Called via glUniform*() functions.
  */
@@ -1091,32 +1127,8 @@ _mesa_uniform(GLint location, GLsizei count, const 
GLvoid *values,
 
/* Store the data in the "actual type" backing storage for the uniform.
 */
-   if (!uni->type->is_boolean() && !uni->is_bindless) {
-  memcpy(>storage[size_mul * components * offset], values,
- sizeof(uni->storage[0]) * components * count * size_mul);
-   } else if (uni->is_bindless) {
-  const union gl_constant_value *src =
- (const union gl_constant_value *) values;
-  GLuint64 *dst = (GLuint64 *)>storage[components * offset].i;
-  const unsigned elems = components * count;
-
-  for (unsigned i = 0; i < elems; i++) {
- dst[i] = src[i].i;
-  }
-   } else {
-  const union gl_constant_value *src =
- (const union gl_constant_value *) values;
-  union gl_constant_value *dst = >storage[components * offset];
-  const unsigned elems = components * count;
-
-  for (unsigned i = 0; i < elems; i++) {
- if (basicType == GLSL_TYPE_FLOAT) {
-dst[i].i = src[i].f != 0.0f ? ctx->Const.UniformBooleanTrue : 0;
- } else {
-dst[i].i = src[i].i != 0? ctx->Const.UniformBooleanTrue : 0;
- }
-  }
-   }
+   copy_uniforms_to_storage(uni, ctx, count, values, size_mul, offset,
+components, basicType);
 
_mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
 
@@ -1208,6 +1220,56 @@ _mesa_uniform(GLint location, GLsizei count, const 
GLvoid *values,
}
 }
 
+
+static void
+copy_uniform_matrix_to_storage(struct gl_uniform_storage *const uni,
+   GLsizei count, const void *values,
+   const unsigned size_mul, const unsigned offset,
+   const unsigned components,
+   const unsigned vectors, bool transpose,
+   unsigned cols, unsigned rows,
+   enum glsl_base_type basicType)
+{
+   const unsigned elements = components * vectors;
+
+   if (!transpose) {
+  memcpy(>storage[size_mul * elements * offset], values,
+ sizeof(uni->storage[0]) * elements * count * size_mul);
+   } else if (basicType == GLSL_TYPE_FLOAT) {
+  /* Copy and transpose the matrix.
+   */
+  const float *src = (const float *)values;
+  float *dst = >storage[elements * offset].f;
+
+ 

Mesa (master): mesa: add support propagate uniform support for packed uniforms

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 23777543290b9dfa17bfecb5b389ad3fc8e75820
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=23777543290b9dfa17bfecb5b389ad3fc8e75820

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 13 16:44:06 2018 +1100

mesa: add support propagate uniform support for packed uniforms

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/program/ir_to_mesa.cpp | 20 ++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 0dad6f9c71..b0b322865b 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2639,8 +2639,24 @@ _mesa_associate_uniform_storage(struct gl_context *ctx,
   */
  if (propagate_to_storage) {
 unsigned array_elements = MAX2(1, storage->array_elements);
-_mesa_propagate_uniforms_to_driver_storage(storage, 0,
-   array_elements);
+if (ctx->Const.PackedDriverUniformStorage && !prog->is_arb_asm &&
+(storage->is_bindless || !storage->type->contains_opaque())) {
+   const int dmul = storage->type->is_64bit() ? 2 : 1;
+   const unsigned components =
+  storage->type->vector_elements *
+  storage->type->matrix_columns;
+
+   for (unsigned s = 0; s < storage->num_driver_storage; s++) {
+  gl_constant_value *uni_storage = (gl_constant_value *)
+ storage->driver_storage[s].data;
+  memcpy(uni_storage, storage->storage,
+ sizeof(storage->storage[0]) * components *
+ array_elements * dmul);
+   }
+} else {
+   _mesa_propagate_uniforms_to_driver_storage(storage, 0,
+  array_elements);
+}
  }
 
  last_location = location;

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


Mesa (master): mesa: add packing support for setting uniforms

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Jun 20 10:38:05 2017 +1000

mesa: add packing support for setting uniforms

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>

---

 src/mesa/main/uniform_query.cpp | 72 ++---
 1 file changed, 53 insertions(+), 19 deletions(-)

diff --git a/src/mesa/main/uniform_query.cpp b/src/mesa/main/uniform_query.cpp
index eaed536f68..14ecfdca2f 100644
--- a/src/mesa/main/uniform_query.cpp
+++ b/src/mesa/main/uniform_query.cpp
@@ -336,8 +336,14 @@ _mesa_get_uniform(struct gl_context *ctx, GLuint program, 
GLint location,
   /* Calculate the source base address *BEFORE* modifying elements to
* account for the size of the user's buffer.
*/
-  const union gl_constant_value *const src =
- >storage[offset * elements * dmul];
+  const union gl_constant_value *src;
+  if (ctx->Const.PackedDriverUniformStorage &&
+  (uni->is_bindless || !uni->type->contains_opaque())) {
+ src = (gl_constant_value *) uni->driver_storage[0].data +
+(offset * elements * dmul);
+  } else {
+ src = >storage[offset * elements * dmul];
+  }
 
   assert(returnType == GLSL_TYPE_FLOAT || returnType == GLSL_TYPE_INT ||
  returnType == GLSL_TYPE_UINT || returnType == GLSL_TYPE_DOUBLE ||
@@ -1030,19 +1036,20 @@ _mesa_flush_vertices_for_uniforms(struct gl_context 
*ctx,
 }
 
 static void
-copy_uniforms_to_storage(struct gl_uniform_storage *uni,
+copy_uniforms_to_storage(gl_constant_value *storage,
+ struct gl_uniform_storage *uni,
  struct gl_context *ctx, GLsizei count,
  const GLvoid *values, const int size_mul,
  const unsigned offset, const unsigned components,
  enum glsl_base_type basicType)
 {
if (!uni->type->is_boolean() && !uni->is_bindless) {
-  memcpy(>storage[size_mul * components * offset], values,
- sizeof(uni->storage[0]) * components * count * size_mul);
+  memcpy(storage, values,
+ sizeof(storage[0]) * components * count * size_mul);
} else if (uni->is_bindless) {
   const union gl_constant_value *src =
  (const union gl_constant_value *) values;
-  GLuint64 *dst = (GLuint64 *)>storage[components * offset].i;
+  GLuint64 *dst = (GLuint64 *)>i;
   const unsigned elems = components * count;
 
   for (unsigned i = 0; i < elems; i++) {
@@ -1051,7 +1058,7 @@ copy_uniforms_to_storage(struct gl_uniform_storage *uni,
} else {
   const union gl_constant_value *src =
  (const union gl_constant_value *) values;
-  union gl_constant_value *dst = >storage[components * offset];
+  union gl_constant_value *dst = storage;
   const unsigned elems = components * count;
 
   for (unsigned i = 0; i < elems; i++) {
@@ -1127,10 +1134,23 @@ _mesa_uniform(GLint location, GLsizei count, const 
GLvoid *values,
 
/* Store the data in the "actual type" backing storage for the uniform.
 */
-   copy_uniforms_to_storage(uni, ctx, count, values, size_mul, offset,
-components, basicType);
+   gl_constant_value *storage;
+   if (ctx->Const.PackedDriverUniformStorage &&
+   (uni->is_bindless || !uni->type->contains_opaque())) {
+  for (unsigned s = 0; s < uni->num_driver_storage; s++) {
+ storage = (gl_constant_value *)
+uni->driver_storage[s].data + (size_mul * offset * components);
+
+ copy_uniforms_to_storage(storage, uni, ctx, count, values, size_mul,
+  offset, components, basicType);
+  }
+   } else {
+  storage = >storage[size_mul * components * offset];
+  copy_uniforms_to_storage(storage, uni, ctx, count, values, size_mul,
+   offset, components, basicType);
 
-   _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+  _mesa_propagate_uniforms_to_driver_storage(uni, offset, count);
+   }
 
/* If the uniform is a sampler, do the extra magic necessary to propagate
 * the changes through.
@@ -1222,7 +1242,7 @@ _mesa_uniform(GLint location, GLsizei count, const GLvoid 
*values,
 
 
 static void
-copy_uniform_matrix_to_storage(struct gl_uniform_storage *const uni,
+copy_uniform_matrix_to_storage(gl_constant_value *storage,
GLsizei count, const void *values,
const unsigned size_mul, const unsigned offset,
const unsigned components,
@@ -1233,13 +1253,13 @@ copy_uniform_matrix_to_storage(struct 
gl_un

Mesa (master): st/nir/radeonsi: move nir_lower_uniforms_to_ubo() to the state tracker

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: ffa4bbe4665f95bab7779ded57d6a4de13cb8ffc
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ffa4bbe4665f95bab7779ded57d6a4de13cb8ffc

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Mar  9 11:57:52 2018 +1100

st/nir/radeonsi: move nir_lower_uniforms_to_ubo() to the state tracker

This will only ever be used by gallium drivers so it probably doesn't
belong in the nir toolkit. Also we want to pass it some non NIR
things in the following patch.

To avoid regressions we wrap the lowering calls that have been moved
to st_glsl_to_nir with a quick hack so that they are only called for
radeonsi, we will replace the hack with a check for uniform packing
in a following patch.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/compiler/Makefile.sources   |  1 -
 src/compiler/nir/meson.build|  1 -
 src/compiler/nir/nir.h  |  1 -
 src/gallium/drivers/radeonsi/si_shader_nir.c| 10 --
 src/mesa/Makefile.sources   |  1 +
 src/mesa/meson.build|  1 +
 src/mesa/state_tracker/st_glsl_to_nir.cpp   | 13 +
 src/mesa/state_tracker/st_nir.h |  1 +
 .../state_tracker/st_nir_lower_uniforms_to_ubo.c}   |  3 ++-
 9 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index 55143dbc66..b231f2fa97 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -244,7 +244,6 @@ NIR_FILES = \
nir/nir_lower_tex.c \
nir/nir_lower_to_source_mods.c \
nir/nir_lower_two_sided_color.c \
-   nir/nir_lower_uniforms_to_ubo.c \
nir/nir_lower_vars_to_ssa.c \
nir/nir_lower_var_copies.c \
nir/nir_lower_vec_to_movs.c \
diff --git a/src/compiler/nir/meson.build b/src/compiler/nir/meson.build
index 289bb9ea78..e97ce0d1e2 100644
--- a/src/compiler/nir/meson.build
+++ b/src/compiler/nir/meson.build
@@ -138,7 +138,6 @@ files_libnir = files(
   'nir_lower_tex.c',
   'nir_lower_to_source_mods.c',
   'nir_lower_two_sided_color.c',
-  'nir_lower_uniforms_to_ubo.c',
   'nir_lower_vars_to_ssa.c',
   'nir_lower_var_copies.c',
   'nir_lower_vec_to_movs.c',
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 7ad19b42c1..d7baabd6f6 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -2712,7 +2712,6 @@ void nir_lower_bitmap(nir_shader *shader, const 
nir_lower_bitmap_options *option
 bool nir_lower_atomics(nir_shader *shader,
const struct gl_shader_program *shader_program);
 bool nir_lower_atomics_to_ssbo(nir_shader *shader, unsigned ssbo_offset);
-bool nir_lower_uniforms_to_ubo(nir_shader *shader);
 bool nir_lower_to_source_mods(nir_shader *shader);
 
 bool nir_lower_gs_intrinsics(nir_shader *shader);
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index acb796b331..7f17affa4d 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -32,12 +32,6 @@
 #include "compiler/nir_types.h"
 
 
-static int
-type_size(const struct glsl_type *type)
-{
-   return glsl_count_attribute_slots(type, false);
-}
-
 static void scan_instruction(struct tgsi_shader_info *info,
 nir_instr *instr)
 {
@@ -650,10 +644,6 @@ si_lower_nir(struct si_shader_selector* sel)
 * - ensure constant offsets for texture instructions are folded
 *   and copy-propagated
 */
-   NIR_PASS_V(sel->nir, nir_lower_io, nir_var_uniform, type_size,
-  (nir_lower_io_options)0);
-   NIR_PASS_V(sel->nir, nir_lower_uniforms_to_ubo);
-
NIR_PASS_V(sel->nir, nir_lower_returns);
NIR_PASS_V(sel->nir, nir_lower_vars_to_ssa);
NIR_PASS_V(sel->nir, nir_lower_alu_to_scalar);
diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources
index 0a9aad52d0..0446078136 100644
--- a/src/mesa/Makefile.sources
+++ b/src/mesa/Makefile.sources
@@ -532,6 +532,7 @@ STATETRACKER_FILES = \
state_tracker/st_nir.h \
state_tracker/st_nir_lower_builtin.c \
state_tracker/st_nir_lower_tex_src_plane.c \
+   state_tracker/st_nir_lower_uniforms_to_ubo.c \
state_tracker/st_pbo.c \
state_tracker/st_pbo.h \
state_tracker/st_program.c \
diff --git a/src/mesa/meson.build b/src/mesa/meson.build
index aa27d59264..b74d169377 100644
--- a/src/mesa/meson.build
+++ b/src/mesa/meson.build
@@ -579,6 +579,7 @@ files_libmesa_gallium = files(
   'state_tracker/st_nir.h',
   'state_tracker/st_nir_lower_builtin.c',
   'state_tracker/st_nir_lower_tex_src_plane.c',
+  'state_tracker/st_nir_lower_uniforms_to_ubo.c',
   'state_tracker/st_pbo.c',
   'state_tracker/st_p

Mesa (master): st: add uniform packing support to lower_uniforms_to_ubo()

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 231333a20d88336cd0474c573b46a2509b43245e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=231333a20d88336cd0474c573b46a2509b43245e

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Mar  9 12:30:01 2018 +1100

st: add uniform packing support to lower_uniforms_to_ubo()

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp |  2 +-
 src/mesa/state_tracker/st_nir.h   |  3 ++-
 src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c | 16 +++-
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 2ca64231e0..9006650517 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -762,7 +762,7 @@ st_finalize_nir(struct st_context *st, struct gl_program 
*prog,
 PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) {
   NIR_PASS_V(nir, nir_lower_io, nir_var_uniform, type_size,
  (nir_lower_io_options)0);
-  NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo);
+  NIR_PASS_V(nir, st_nir_lower_uniforms_to_ubo, prog->Parameters);
}
 
if (screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF))
diff --git a/src/mesa/state_tracker/st_nir.h b/src/mesa/state_tracker/st_nir.h
index 1c2e32a5e6..3dd78fb115 100644
--- a/src/mesa/state_tracker/st_nir.h
+++ b/src/mesa/state_tracker/st_nir.h
@@ -36,7 +36,8 @@ struct nir_shader;
 void st_nir_lower_builtin(struct nir_shader *shader);
 void st_nir_lower_tex_src_plane(struct nir_shader *shader, unsigned free_slots,
 unsigned lower_2plane, unsigned lower_3plane);
-bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader);
+bool st_nir_lower_uniforms_to_ubo(struct nir_shader *shader,
+  const struct gl_program_parameter_list 
*params);
 
 void st_finalize_nir(struct st_context *st, struct gl_program *prog,
  struct gl_shader_program *shader_program,
diff --git a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c 
b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
index 1d2cca065b..e2a477ecc7 100644
--- a/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
+++ b/src/mesa/state_tracker/st_nir_lower_uniforms_to_ubo.c
@@ -33,8 +33,11 @@
 #include "nir_builder.h"
 #include "st_nir.h"
 
+#include "program/prog_parameter.h"
+
 static bool
-lower_instr(nir_intrinsic_instr *instr, nir_builder *b)
+lower_instr(nir_intrinsic_instr *instr, nir_builder *b,
+const struct gl_program_parameter_list *params)
 {
b->cursor = nir_before_instr(>instr);
 
@@ -47,10 +50,12 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b)
}
 
if (instr->intrinsic == nir_intrinsic_load_uniform) {
+  unsigned pvo = params->ParameterValueOffset[nir_intrinsic_base(instr)];
+
   nir_ssa_def *ubo_idx = nir_imm_int(b, 0);
   nir_ssa_def *ubo_offset =
- nir_imul(b, nir_imm_int(b, 16),
-  nir_iadd(b, nir_imm_int(b, nir_intrinsic_base(instr)),
+ nir_iadd(b, nir_imm_int(b, 4 * pvo),
+  nir_imul(b, nir_imm_int(b, 4),
nir_ssa_for_src(b, instr->src[0], 1)));
 
   nir_intrinsic_instr *load =
@@ -72,7 +77,8 @@ lower_instr(nir_intrinsic_instr *instr, nir_builder *b)
 }
 
 bool
-st_nir_lower_uniforms_to_ubo(nir_shader *shader)
+st_nir_lower_uniforms_to_ubo(nir_shader *shader,
+ const struct gl_program_parameter_list *params)
 {
bool progress = false;
 
@@ -84,7 +90,7 @@ st_nir_lower_uniforms_to_ubo(nir_shader *shader)
 nir_foreach_instr_safe(instr, block) {
if (instr->type == nir_instr_type_intrinsic)
   progress |= lower_instr(nir_instr_as_intrinsic(instr),
-  );
+  , params);
 }
  }
 

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


Mesa (master): mesa: add PackedDriverUniformStorage const

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: b13b9eb432a3b67efb29ca25c3e244b467c3c4af
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b13b9eb432a3b67efb29ca25c3e244b467c3c4af

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Jun 14 15:48:45 2017 +1000

mesa: add PackedDriverUniformStorage const

Will be used to determine whether to take packing code paths or not.

Reviewed-by: Nicolai Hähnle <nicolai.haeh...@amd.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/main/mtypes.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 5ee27d9977..08db8062ec 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -4132,6 +4132,9 @@ struct gl_constants
 
/** GL_ARB_get_program_binary */
GLuint NumProgramBinaryFormats;
+
+   /** Is the drivers uniform storage packed or padded to 16 bytes. */
+   bool PackedDriverUniformStorage;
 };
 
 

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


Mesa (master): st/glsl_to_nir: add support for packed builtin uniforms

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 54881667308aea17f7f21720f5e8b41cf45f2020
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=54881667308aea17f7f21720f5e8b41cf45f2020

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar 13 20:50:27 2018 +1100

st/glsl_to_nir: add support for packed builtin uniforms

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 42 +++
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 0bd9c4e4e3..1fd553fdf8 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -218,7 +218,8 @@ st_nir_lookup_parameter_index(const struct 
gl_program_parameter_list *params,
 }
 
 static void
-st_nir_assign_uniform_locations(struct gl_program *prog,
+st_nir_assign_uniform_locations(struct gl_context *ctx,
+struct gl_program *prog,
 struct gl_shader_program *shader_program,
 struct exec_list *uniform_list, unsigned *size)
 {
@@ -247,7 +248,21 @@ st_nir_assign_uniform_locations(struct gl_program *prog,
  /* This state reference has already been setup by ir_to_mesa, but 
we'll
   * get the same index back here.
   */
- loc = _mesa_add_state_reference(prog->Parameters, stateTokens);
+
+ unsigned comps;
+ const struct glsl_type *type = glsl_without_array(uniform->type);
+ if (glsl_type_is_struct(type)) {
+comps = 4;
+ } else {
+comps = glsl_get_vector_elements(type);
+ }
+
+ if (ctx->Const.PackedDriverUniformStorage) {
+loc = _mesa_add_sized_state_reference(prog->Parameters,
+  stateTokens, comps, false);
+ } else {
+loc = _mesa_add_state_reference(prog->Parameters, stateTokens);
+ }
   } else {
  loc = st_nir_lookup_parameter_index(prog->Parameters, uniform->name);
   }
@@ -359,9 +374,26 @@ st_glsl_to_nir_post_opts(struct st_context *st, struct 
gl_program *prog,
  const nir_state_slot *const slots = var->state_slots;
  assert(var->state_slots != NULL);
 
+ const struct glsl_type *type = glsl_without_array(var->type);
  for (unsigned int i = 0; i < var->num_state_slots; i++) {
-_mesa_add_state_reference(prog->Parameters,
-  slots[i].tokens);
+unsigned comps;
+if (glsl_type_is_struct(type)) {
+   /* Builtin struct require specical handling for now we just
+* make all members vec4. See st_nir_lower_builtin.
+*/
+   comps = 4;
+} else {
+   comps = glsl_get_vector_elements(type);
+}
+
+if (st->ctx->Const.PackedDriverUniformStorage) {
+   _mesa_add_sized_state_reference(prog->Parameters,
+   slots[i].tokens,
+   comps, false);
+} else {
+   _mesa_add_state_reference(prog->Parameters,
+ slots[i].tokens);
+}
  }
   }
}
@@ -717,7 +749,7 @@ st_finalize_nir(struct st_context *st, struct gl_program 
*prog,
NIR_PASS_V(nir, nir_lower_atomics_to_ssbo,
  st->ctx->Const.Program[nir->info.stage].MaxAtomicBuffers);
 
-   st_nir_assign_uniform_locations(prog, shader_program,
+   st_nir_assign_uniform_locations(st->ctx, prog, shader_program,
>uniforms, >num_uniforms);
 
if (screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF))

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


Mesa (master): gallium: add packed uniform CAP

2018-03-19 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 9c51a7ea2956495fd15d0ee6fc47fe99e14b9f36
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9c51a7ea2956495fd15d0ee6fc47fe99e14b9f36

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Aug 18 15:51:48 2017 +1000

gallium: add packed uniform CAP

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/docs/source/screen.rst   | 2 ++
 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 | 1 +
 src/gallium/drivers/nouveau/nv30/nv30_screen.c   | 1 +
 src/gallium/drivers/nouveau/nv50/nv50_screen.c   | 1 +
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c   | 1 +
 src/gallium/drivers/r300/r300_screen.c   | 1 +
 src/gallium/drivers/r600/r600_pipe.c | 1 +
 src/gallium/drivers/radeonsi/si_get.c| 1 +
 src/gallium/drivers/softpipe/sp_screen.c | 1 +
 src/gallium/drivers/svga/svga_screen.c   | 1 +
 src/gallium/drivers/swr/swr_screen.cpp   | 1 +
 src/gallium/drivers/vc4/vc4_screen.c | 1 +
 src/gallium/drivers/vc5/vc5_screen.c | 1 +
 src/gallium/drivers/virgl/virgl_screen.c | 1 +
 src/gallium/include/pipe/p_defines.h | 1 +
 src/mesa/state_tracker/st_context.c  | 3 +++
 19 files changed, 22 insertions(+)

diff --git a/src/gallium/docs/source/screen.rst 
b/src/gallium/docs/source/screen.rst
index e375d67a4b..3837360fb4 100644
--- a/src/gallium/docs/source/screen.rst
+++ b/src/gallium/docs/source/screen.rst
@@ -418,6 +418,8 @@ The integer capabilities:
   set when binding that buffer as constant buffer 0. If the buffer doesn't have
   those bits set, pipe_context::set_constant_buffer(.., 0, ..) is ignored
   by the driver, and the driver can throw assertion failures.
+* ``PIPE_CAP_PACKED_UNIFORMS``: True if the driver supports packed uniforms
+  as opposed to padding to vec4s.
 
 
 .. _pipe_capf:
diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c 
b/src/gallium/drivers/etnaviv/etnaviv_screen.c
index 6c5c00bf2d..2ae4e86c63 100644
--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
+++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
@@ -269,6 +269,7 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_CONSTBUF0_FLAGS:
+   case PIPE_CAP_PACKED_UNIFORMS:
   return 0;
 
/* Stream output. */
diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c 
b/src/gallium/drivers/freedreno/freedreno_screen.c
index f9cafbabeb..f338d756df 100644
--- a/src/gallium/drivers/freedreno/freedreno_screen.c
+++ b/src/gallium/drivers/freedreno/freedreno_screen.c
@@ -339,6 +339,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_CONSTBUF0_FLAGS:
+   case PIPE_CAP_PACKED_UNIFORMS:
return 0;
 
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
diff --git a/src/gallium/drivers/i915/i915_screen.c 
b/src/gallium/drivers/i915/i915_screen.c
index 345e82b573..59d2ec6628 100644
--- a/src/gallium/drivers/i915/i915_screen.c
+++ b/src/gallium/drivers/i915/i915_screen.c
@@ -326,6 +326,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap 
cap)
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_CONSTBUF0_FLAGS:
+   case PIPE_CAP_PACKED_UNIFORMS:
   return 0;
 
case PIPE_CAP_MAX_VIEWPORTS:
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c 
b/src/gallium/drivers/llvmpipe/lp_screen.c
index 01ef348e3b..3f5d0327bf 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -361,6 +361,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum 
pipe_cap param)
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_CONSTBUF0_FLAGS:
+   case PIPE_CAP_PACKED_UNIFORMS:
   return 0;
}
/* should only get here on unhandled cases */
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c 
b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index d7fcff16fb..1d1fbaad60 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -228,6 +228,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum 
pipe_cap param)
case PIPE_CAP_CONTEXT_PRIORITY_MASK:
case PIPE_CAP_FENCE_SIGNAL:
case PIPE_CAP_CONSTBUF0_FLAGS:
+   case PIPE_CAP_PACKED_UNIFORMS:
   return 0;
 
case PIPE_CAP_VENDOR_ID:
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index a9a4dde508..6fd2982e3c 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen

Mesa (master): gallium: silence __builtin_frame_address nonzero argument is unsafe warning

2018-03-12 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 370e356ebab4885fc19b2b1d1de2816b6cd4dfc8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=370e356ebab4885fc19b2b1d1de2816b6cd4dfc8

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Mar  9 11:00:55 2018 +1100

gallium: silence __builtin_frame_address nonzero argument is unsafe warning

Calling __builtin_frame_address with a nonzero argument is unsafe
but is sometimes done for debugging purposes. Since this code is
part of some debug util code I'm assuming that is the case here
and using GCC pragma to silence the warning.

Reviewed-by: Jose Fonseca <jfons...@vmware.com>

---

 src/gallium/auxiliary/util/u_debug_stack.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/auxiliary/util/u_debug_stack.c 
b/src/gallium/auxiliary/util/u_debug_stack.c
index 6ddacdb362..974e639e89 100644
--- a/src/gallium/auxiliary/util/u_debug_stack.c
+++ b/src/gallium/auxiliary/util/u_debug_stack.c
@@ -265,7 +265,10 @@ debug_backtrace_capture(struct debug_stack_frame 
*backtrace,
 #endif
 
 #if defined(PIPE_CC_GCC)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wframe-address"
frame_pointer = ((const void **)__builtin_frame_address(1));
+#pragma GCC diagnostic pop
 #elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86)
__asm {
   mov frame_pointer, ebp

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


Mesa (master): radeonsi: add si_llvm_emit_kill() helper

2018-03-07 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 50cc97d98a5365b65988b2e6a827d744404f93ab
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=50cc97d98a5365b65988b2e6a827d744404f93ab

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  8 09:37:10 2018 +1100

radeonsi: add si_llvm_emit_kill() helper

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_internal.h |  2 ++
 src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c | 31 ++-
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h 
b/src/gallium/drivers/radeonsi/si_shader_internal.h
index 8decd062c3..1730a1fef1 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -258,6 +258,8 @@ LLVMValueRef si_llvm_emit_fetch(struct 
lp_build_tgsi_context *bld_base,
enum tgsi_opcode_type type,
unsigned swizzle);
 
+void si_llvm_emit_kill(struct ac_shader_abi *abi, LLVMValueRef visible);
+
 LLVMValueRef si_nir_load_input_tes(struct ac_shader_abi *abi,
   LLVMTypeRef type,
   LLVMValueRef vertex_index,
diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c 
b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
index 201e4988fa..854f7ec8a6 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_alu.c
@@ -53,20 +53,10 @@ static void kill_if_fetch_args(struct lp_build_tgsi_context 
*bld_base,
emit_data->args[0] = conds[0];
 }
 
-static void kil_emit(const struct lp_build_tgsi_action *action,
-struct lp_build_tgsi_context *bld_base,
-struct lp_build_emit_data *emit_data)
+void si_llvm_emit_kill(struct ac_shader_abi *abi, LLVMValueRef visible)
 {
-   struct si_shader_context *ctx = si_shader_context(bld_base);
+   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
LLVMBuilderRef builder = ctx->ac.builder;
-   LLVMValueRef visible;
-
-   if (emit_data->inst->Instruction.Opcode == TGSI_OPCODE_KILL_IF) {
-   visible = emit_data->args[0];
-   } else {
-   assert(emit_data->inst->Instruction.Opcode == TGSI_OPCODE_KILL);
-   visible = LLVMConstInt(ctx->i1, false, 0);
-   }
 
if (ctx->shader->selector->force_correct_derivs_after_kill) {
/* LLVM 6.0 can kill immediately while maintaining WQM. */
@@ -84,6 +74,23 @@ static void kil_emit(const struct lp_build_tgsi_action 
*action,
ac_build_kill_if_false(>ac, visible);
 }
 
+static void kil_emit(const struct lp_build_tgsi_action *action,
+struct lp_build_tgsi_context *bld_base,
+struct lp_build_emit_data *emit_data)
+{
+   struct si_shader_context *ctx = si_shader_context(bld_base);
+   LLVMValueRef visible;
+
+   if (emit_data->inst->Instruction.Opcode == TGSI_OPCODE_KILL_IF) {
+   visible = emit_data->args[0];
+   } else {
+   assert(emit_data->inst->Instruction.Opcode == TGSI_OPCODE_KILL);
+   visible = LLVMConstInt(ctx->i1, false, 0);
+   }
+
+   si_llvm_emit_kill(>abi, visible);
+}
+
 static void emit_icmp(const struct lp_build_tgsi_action *action,
  struct lp_build_tgsi_context *bld_base,
  struct lp_build_emit_data *emit_data)

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


Mesa (master): ac/radeonsi: add emit_kill to the abi

2018-03-07 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 0c90264da4139805d34f530485a678c53809932e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c90264da4139805d34f530485a678c53809932e

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  8 09:46:42 2018 +1100

ac/radeonsi: add emit_kill to the abi

This should fix a regression with Rocket League grass rendering
on the NIR backend.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104717

---

 src/amd/common/ac_nir_to_llvm.c  | 9 -
 src/amd/common/ac_shader_abi.h   | 2 ++
 src/gallium/drivers/radeonsi/si_shader.c | 1 +
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 29bffefd79..c785244dcc 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3872,6 +3872,12 @@ static void emit_barrier(struct ac_llvm_context *ac, 
gl_shader_stage stage)
   ac->voidt, NULL, 0, AC_FUNC_ATTR_CONVERGENT);
 }
 
+static void radv_emit_kill(struct ac_shader_abi *abi, LLVMValueRef visible)
+{
+   struct radv_shader_context *ctx = radv_shader_context_from_abi(abi);
+   ac_build_kill_if_false(>ac, visible);
+}
+
 static void emit_discard(struct ac_nir_context *ctx,
 const nir_intrinsic_instr *instr)
 {
@@ -3886,7 +3892,7 @@ static void emit_discard(struct ac_nir_context *ctx,
cond = LLVMConstInt(ctx->ac.i1, false, 0);
}
 
-   ac_build_kill_if_false(>ac, cond);
+   ctx->abi->emit_kill(ctx->abi, cond);
 }
 
 static LLVMValueRef
@@ -6955,6 +6961,7 @@ LLVMModuleRef 
ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
ctx.abi.lookup_interp_param = lookup_interp_param;
ctx.abi.load_sample_position = load_sample_position;
ctx.abi.load_sample_mask_in = load_sample_mask_in;
+   ctx.abi.emit_kill = radv_emit_kill;
}
 
if (i)
diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index 09fe32c136..901e49b1f9 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -86,6 +86,8 @@ struct ac_shader_abi {
void (*emit_primitive)(struct ac_shader_abi *abi,
   unsigned stream);
 
+   void (*emit_kill)(struct ac_shader_abi *abi, LLVMValueRef visible);
+
LLVMValueRef (*load_inputs)(struct ac_shader_abi *abi,
unsigned location,
unsigned driver_location,
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 343a5d57bf..fa7a19cb3a 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -6062,6 +6062,7 @@ static bool si_compile_tgsi_main(struct si_shader_context 
*ctx,
ctx->abi.lookup_interp_param = si_nir_lookup_interp_param;
ctx->abi.load_sample_position = load_sample_position;
ctx->abi.load_sample_mask_in = load_sample_mask_in;
+   ctx->abi.emit_kill = si_llvm_emit_kill;
break;
case PIPE_SHADER_COMPUTE:
ctx->abi.load_local_group_size = get_block_size;

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


Mesa (master): spirv: fix autotools builds

2018-03-07 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: f4b877631ec292ea18217706ab69ab0a2315e454
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f4b877631ec292ea18217706ab69ab0a2315e454

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  8 10:37:52 2018 +1100

spirv: fix autotools builds

Fixes: 68a6a3b51acc "spirv: handle AMD_gcn_shader extended instructions"

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/compiler/Makefile.sources | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/compiler/Makefile.sources b/src/compiler/Makefile.sources
index 841bc8fec9..37340ba809 100644
--- a/src/compiler/Makefile.sources
+++ b/src/compiler/Makefile.sources
@@ -301,6 +301,7 @@ SPIRV_FILES = \
spirv/spirv_info.h \
spirv/spirv_to_nir.c \
spirv/vtn_alu.c \
+   spirv/vtn_amd.c \
spirv/vtn_cfg.c \
spirv/vtn_glsl450.c \
spirv/vtn_private.h \

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


Mesa (master): ac: add if/loop build helpers

2018-03-07 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 42627dabb4db3011825a022325be7ae9b51103d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=42627dabb4db3011825a022325be7ae9b51103d6

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar  7 10:53:34 2018 +1100

ac: add if/loop build helpers

These have been ported over from radeonsi.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_llvm_build.c  | 189 
 src/amd/common/ac_llvm_build.h  |  20 +
 src/amd/common/ac_nir_to_llvm.c |   2 +
 3 files changed, 211 insertions(+)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index da2213d40b..9851cafb7f 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -41,6 +41,16 @@
 
 #include "shader_enums.h"
 
+#define AC_LLVM_INITIAL_CF_DEPTH 4
+
+/* Data for if/else/endif and bgnloop/endloop control flow structures.
+ */
+struct ac_llvm_flow {
+   /* Loop exit or next part of if/else/endif. */
+   LLVMBasicBlockRef next_block;
+   LLVMBasicBlockRef loop_entry_block;
+};
+
 /* Initialize module-independent parts of the context.
  *
  * The caller is responsible for initializing ctx::module and ctx::builder.
@@ -105,6 +115,14 @@ ac_llvm_context_init(struct ac_llvm_context *ctx, 
LLVMContextRef context,
ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0);
 }
 
+void
+ac_llvm_context_dispose(struct ac_llvm_context *ctx)
+{
+   free(ctx->flow);
+   ctx->flow = NULL;
+   ctx->flow_depth_max = 0;
+}
+
 int
 ac_get_llvm_num_components(LLVMValueRef value)
 {
@@ -2146,3 +2164,174 @@ LLVMTypeRef ac_array_in_const32_addr_space(LLVMTypeRef 
elem_type)
return LLVMPointerType(LLVMArrayType(elem_type, 0),
   AC_CONST_32BIT_ADDR_SPACE);
 }
+
+static struct ac_llvm_flow *
+get_current_flow(struct ac_llvm_context *ctx)
+{
+   if (ctx->flow_depth > 0)
+   return >flow[ctx->flow_depth - 1];
+   return NULL;
+}
+
+static struct ac_llvm_flow *
+get_innermost_loop(struct ac_llvm_context *ctx)
+{
+   for (unsigned i = ctx->flow_depth; i > 0; --i) {
+   if (ctx->flow[i - 1].loop_entry_block)
+   return >flow[i - 1];
+   }
+   return NULL;
+}
+
+static struct ac_llvm_flow *
+push_flow(struct ac_llvm_context *ctx)
+{
+   struct ac_llvm_flow *flow;
+
+   if (ctx->flow_depth >= ctx->flow_depth_max) {
+   unsigned new_max = MAX2(ctx->flow_depth << 1,
+   AC_LLVM_INITIAL_CF_DEPTH);
+
+   ctx->flow = realloc(ctx->flow, new_max * sizeof(*ctx->flow));
+   ctx->flow_depth_max = new_max;
+   }
+
+   flow = >flow[ctx->flow_depth];
+   ctx->flow_depth++;
+
+   flow->next_block = NULL;
+   flow->loop_entry_block = NULL;
+   return flow;
+}
+
+static void set_basicblock_name(LLVMBasicBlockRef bb, const char *base,
+   int label_id)
+{
+   char buf[32];
+   snprintf(buf, sizeof(buf), "%s%d", base, label_id);
+   LLVMSetValueName(LLVMBasicBlockAsValue(bb), buf);
+}
+
+/* Append a basic block at the level of the parent flow.
+ */
+static LLVMBasicBlockRef append_basic_block(struct ac_llvm_context *ctx,
+   const char *name)
+{
+   assert(ctx->flow_depth >= 1);
+
+   if (ctx->flow_depth >= 2) {
+   struct ac_llvm_flow *flow = >flow[ctx->flow_depth - 2];
+
+   return LLVMInsertBasicBlockInContext(ctx->context,
+flow->next_block, name);
+   }
+
+   LLVMValueRef main_fn =
+   LLVMGetBasicBlockParent(LLVMGetInsertBlock(ctx->builder));
+   return LLVMAppendBasicBlockInContext(ctx->context, main_fn, name);
+}
+
+/* Emit a branch to the given default target for the current block if
+ * applicable -- that is, if the current block does not already contain a
+ * branch from a break or continue.
+ */
+static void emit_default_branch(LLVMBuilderRef builder,
+   LLVMBasicBlockRef target)
+{
+   if (!LLVMGetBasicBlockTerminator(LLVMGetInsertBlock(builder)))
+LLVMBuildBr(builder, target);
+}
+
+void ac_build_bgnloop(struct ac_llvm_context *ctx, int label_id)
+{
+   struct ac_llvm_flow *flow = push_flow(ctx);
+   flow->loop_entry_block = append_basic_block(ctx, "LOOP");
+   flow->next_block = append_basic_block(ctx, "ENDLOOP");
+   set_basicblock_name(flow->loop_entry_block, "loop", label_id);
+   LLVMBuildBr(ctx->builder, flow->loop_entry_block);
+   LLVMPositionBuilderAtEnd(ctx->builder, flow->loop_entry_block);
+}
+
+void ac_build_break(struct ac_llvm_context *

Mesa (master): ac: make use of if/loop build helpers

2018-03-07 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 99cdc019bf6fe11c135b7544ef6daf4ac964fa24
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=99cdc019bf6fe11c135b7544ef6daf4ac964fa24

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Mar  7 11:10:54 2018 +1100

ac: make use of if/loop build helpers

These helpers insert the basic block in the same order as they
appear in NIR making it easier to follow LLVM IR dumps. The helpers
also insert more useful labels onto the blocks.

TGSI use the line number of the corresponding opcode in the TGSI
dump as the label id, here we use the corresponding block index
from NIR.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_nir_to_llvm.c | 60 +
 1 file changed, 18 insertions(+), 42 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 9a3ce94af7..29bffefd79 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -5300,17 +5300,15 @@ static void visit_ssa_undef(struct ac_nir_context *ctx,
_mesa_hash_table_insert(ctx->defs, >def, undef);
 }
 
-static void visit_jump(struct ac_nir_context *ctx,
+static void visit_jump(struct ac_llvm_context *ctx,
   const nir_jump_instr *instr)
 {
switch (instr->type) {
case nir_jump_break:
-   LLVMBuildBr(ctx->ac.builder, ctx->break_block);
-   LLVMClearInsertionPosition(ctx->ac.builder);
+   ac_build_break(ctx);
break;
case nir_jump_continue:
-   LLVMBuildBr(ctx->ac.builder, ctx->continue_block);
-   LLVMClearInsertionPosition(ctx->ac.builder);
+   ac_build_continue(ctx);
break;
default:
fprintf(stderr, "Unknown NIR jump instr: ");
@@ -5348,7 +5346,7 @@ static void visit_block(struct ac_nir_context *ctx, 
nir_block *block)
visit_ssa_undef(ctx, nir_instr_as_ssa_undef(instr));
break;
case nir_instr_type_jump:
-   visit_jump(ctx, nir_instr_as_jump(instr));
+   visit_jump(>ac, nir_instr_as_jump(instr));
break;
default:
fprintf(stderr, "Unknown NIR instr type: ");
@@ -5365,56 +5363,34 @@ static void visit_if(struct ac_nir_context *ctx, nir_if 
*if_stmt)
 {
LLVMValueRef value = get_src(ctx, if_stmt->condition);
 
-   LLVMValueRef fn = 
LLVMGetBasicBlockParent(LLVMGetInsertBlock(ctx->ac.builder));
-   LLVMBasicBlockRef merge_block =
-   LLVMAppendBasicBlockInContext(ctx->ac.context, fn, "");
-   LLVMBasicBlockRef if_block =
-   LLVMAppendBasicBlockInContext(ctx->ac.context, fn, "");
-   LLVMBasicBlockRef else_block = merge_block;
-   if (!exec_list_is_empty(_stmt->else_list))
-   else_block = LLVMAppendBasicBlockInContext(
-   ctx->ac.context, fn, "");
-
-   LLVMValueRef cond = LLVMBuildICmp(ctx->ac.builder, LLVMIntNE, value,
- ctx->ac.i32_0, "");
-   LLVMBuildCondBr(ctx->ac.builder, cond, if_block, else_block);
-
-   LLVMPositionBuilderAtEnd(ctx->ac.builder, if_block);
+   nir_block *then_block =
+   (nir_block *) exec_list_get_head(_stmt->then_list);
+
+   ac_build_uif(>ac, value, then_block->index);
+
visit_cf_list(ctx, _stmt->then_list);
-   if (LLVMGetInsertBlock(ctx->ac.builder))
-   LLVMBuildBr(ctx->ac.builder, merge_block);
 
if (!exec_list_is_empty(_stmt->else_list)) {
-   LLVMPositionBuilderAtEnd(ctx->ac.builder, else_block);
+   nir_block *else_block =
+   (nir_block *) exec_list_get_head(_stmt->else_list);
+
+   ac_build_else(>ac, else_block->index);
visit_cf_list(ctx, _stmt->else_list);
-   if (LLVMGetInsertBlock(ctx->ac.builder))
-   LLVMBuildBr(ctx->ac.builder, merge_block);
}
 
-   LLVMPositionBuilderAtEnd(ctx->ac.builder, merge_block);
+   ac_build_endif(>ac, then_block->index);
 }
 
 static void visit_loop(struct ac_nir_context *ctx, nir_loop *loop)
 {
-   LLVMValueRef fn = 
LLVMGetBasicBlockParent(LLVMGetInsertBlock(ctx->ac.builder));
-   LLVMBasicBlockRef continue_parent = ctx->continue_block;
-   LLVMBasicBlockRef break_parent = ctx->break_block;
+   nir_block *first_loop_block =
+   (nir_block *) exec_list_get_head(>body);
 
-   ctx->continue_block =
-   LLVMAppendBasicBlockInContext(ctx->ac.context, fn, "");
-   ctx->break_block =
-   LLVMAppendBasicBlockInContext(ctx->ac.context, fn, &q

Mesa (master): Revert "nir: bump loop unroll limit to 96."

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Mar  6 14:48:07 2018 +1100

Revert "nir: bump loop unroll limit to 96."

This reverts commit 2d36efdb7f18f061c519dbb93f6058bf161aad33.

This raised limit turns out to harmful for more complex shaders,
it causes excessive spilling in some Bioshock Infinite shaders.

The fps for the ssao demo on radv remains unchanged when reverting
this.

Reviewed-by: Dave Airlie <airl...@redhat.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>

---

 src/compiler/nir/nir_opt_loop_unroll.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/compiler/nir/nir_opt_loop_unroll.c 
b/src/compiler/nir/nir_opt_loop_unroll.c
index dae5bfc902..79d04f978b 100644
--- a/src/compiler/nir/nir_opt_loop_unroll.c
+++ b/src/compiler/nir/nir_opt_loop_unroll.c
@@ -33,10 +33,8 @@
  * to give about the same results. Around 5 instructions per node.  But some
  * loops that would unroll with GLSL IR fail to unroll if we set this to 25 so
  * we set it to 26.
- * This was bumped to 96 because it unrolled more loops with a positive
- * effect (vulkan ssao demo).
  */
-#define LOOP_UNROLL_LIMIT 96
+#define LOOP_UNROLL_LIMIT 26
 
 /* Prepare this loop for unrolling by first converting to lcssa and then
  * converting the phis from the loops first block and the block that follows

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


Mesa (master): radeonsi/nir: fix handling of doubles for gs inputs

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  1 15:21:52 2018 +1100

radeonsi/nir: fix handling of doubles for gs inputs

Fixes piglit test:
tests/spec/arb_gpu_shader_fp64/execution/explicit-location-gs-fs-vs.shader_test

Reviewed-by: Dave Airlie <airl...@redhat.com>

---

 src/gallium/drivers/radeonsi/si_shader.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index f3a37d71a0..2ae2544e3f 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1693,10 +1693,14 @@ static LLVMValueRef si_nir_load_input_gs(struct 
ac_shader_abi *abi,
 {
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
 
-   LLVMValueRef value[8];
+   LLVMValueRef value[4];
for (unsigned i = component; i < num_components + component; i++) {
+   unsigned offset = i;
+   if (llvm_type_is_64bit(ctx, type))
+   offset *= 2;
+
value[i] = si_llvm_load_input_gs(>abi, driver_location  / 
4,
-vertex_index, type, i);
+vertex_index, type, offset);
}
 
return ac_build_varying_gather_values(>ac, value, num_components, 
component);

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


Mesa (master): ac: pass the unmodified number of components to load gs inputs

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  1 15:37:25 2018 +1100

ac: pass the unmodified number of components to load gs inputs

Currently both users of this would overflow an array when the
input was a dual slot double as they expected the number of
components to be a max of 4.

Since we pass the type we can just let the functions handle
doubles in a way they choose.

Reviewed-by: Dave Airlie <airl...@redhat.com>

---

 src/amd/common/ac_nir_to_llvm.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index d2df2837c8..1fe09de484 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3136,8 +3136,8 @@ static LLVMValueRef visit_load_var(struct ac_nir_context 
*ctx,
 
return ctx->abi->load_inputs(ctx->abi, 
instr->variables[0]->var->data.location,
 
instr->variables[0]->var->data.driver_location,
-
instr->variables[0]->var->data.location_frac, ve,
-vertex_index, const_index, 
type);
+
instr->variables[0]->var->data.location_frac,
+instr->num_components, 
vertex_index, const_index, type);
}
 
for (unsigned chan = comp; chan < ve + comp; chan++) {

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


Mesa (master): radeonsi: move si_nir_load_input_gs() to si_shader.c

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  1 15:17:34 2018 +1100

radeonsi: move si_nir_load_input_gs() to si_shader.c

All the tess shader and tgsi equivalents are here and it allows
use to use llvm_type_is_64bit() in the following patch without
exposing it externally.

Reviewed-by: Dave Airlie <airl...@redhat.com>

---

 src/gallium/drivers/radeonsi/si_shader.c  | 20 
 src/gallium/drivers/radeonsi/si_shader_internal.h |  9 -
 src/gallium/drivers/radeonsi/si_shader_nir.c  | 20 
 3 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index 2a50b266f6..f3a37d71a0 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1682,6 +1682,26 @@ LLVMValueRef si_llvm_load_input_gs(struct ac_shader_abi 
*abi,
return LLVMBuildBitCast(ctx->ac.builder, value, type, "");
 }
 
+static LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi *abi,
+unsigned location,
+unsigned driver_location,
+unsigned component,
+unsigned num_components,
+unsigned vertex_index,
+unsigned const_index,
+LLVMTypeRef type)
+{
+   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+
+   LLVMValueRef value[8];
+   for (unsigned i = component; i < num_components + component; i++) {
+   value[i] = si_llvm_load_input_gs(>abi, driver_location  / 
4,
+vertex_index, type, i);
+   }
+
+   return ac_build_varying_gather_values(>ac, value, num_components, 
component);
+}
+
 static LLVMValueRef fetch_input_gs(
struct lp_build_tgsi_context *bld_base,
const struct tgsi_full_src_register *reg,
diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h 
b/src/gallium/drivers/radeonsi/si_shader_internal.h
index dbe4f2e969..dc73517018 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -337,13 +337,4 @@ void si_llvm_load_input_fs(
 
 bool si_nir_build_llvm(struct si_shader_context *ctx, struct nir_shader *nir);
 
-LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi *abi,
- unsigned location,
- unsigned driver_location,
- unsigned component,
- unsigned num_components,
- unsigned vertex_index,
- unsigned const_index,
- LLVMTypeRef type);
-
 #endif
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 05e00d016e..54ab0afca6 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -731,26 +731,6 @@ static void declare_nir_input_fs(struct si_shader_context 
*ctx,
si_llvm_load_input_fs(ctx, input_index, out);
 }
 
-LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi *abi,
- unsigned location,
- unsigned driver_location,
- unsigned component,
- unsigned num_components,
- unsigned vertex_index,
- unsigned const_index,
- LLVMTypeRef type)
-{
-   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
-
-   LLVMValueRef value[8];
-   for (unsigned i = component; i < num_components + component; i++) {
-   value[i] = si_llvm_load_input_gs(>abi, driver_location  / 
4,
-vertex_index, type, i);
-   }
-
-   return ac_build_varying_gather_values(>ac, value, num_components, 
component);
-}
-
 LLVMValueRef
 si_nir_lookup_interp_param(struct ac_shader_abi *abi,
   enum glsl_interp_mode interp, unsigned location)

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


Mesa (master): ac/radv: move lower_indirect_derefs() to ac_nir_to_llvm.c

2018-03-04 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 0f2c7341e8fc0ea5bb219a24a7120bd4c79bd3d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0f2c7341e8fc0ea5bb219a24a7120bd4c79bd3d6

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar  5 11:13:11 2018 +1100

ac/radv: move lower_indirect_derefs() to ac_nir_to_llvm.c

Until llvm handles indirects better we will need to use these
workarounds in the radeonsi backend also.

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/amd/common/ac_nir_to_llvm.c | 37 +
 src/amd/common/ac_nir_to_llvm.h |  2 ++
 src/amd/vulkan/radv_pipeline.c  |  8 
 src/amd/vulkan/radv_shader.c| 41 +
 src/amd/vulkan/radv_shader.h|  4 
 5 files changed, 44 insertions(+), 48 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 0ffcd75c3a..40ddf28974 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -7312,3 +7312,40 @@ void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
   MESA_SHADER_VERTEX,
   dump_shader, options->supports_spill);
 }
+
+void
+ac_lower_indirect_derefs(struct nir_shader *nir, enum chip_class chip_class)
+{
+   /* While it would be nice not to have this flag, we are constrained
+* by the reality that LLVM 5.0 doesn't have working VGPR indexing
+* on GFX9.
+*/
+   bool llvm_has_working_vgpr_indexing = chip_class <= VI;
+
+   /* TODO: Indirect indexing of GS inputs is unimplemented.
+*
+* TCS and TES load inputs directly from LDS or offchip memory, so
+* indirect indexing is trivial.
+*/
+   nir_variable_mode indirect_mask = 0;
+   if (nir->info.stage == MESA_SHADER_GEOMETRY ||
+   (nir->info.stage != MESA_SHADER_TESS_CTRL &&
+nir->info.stage != MESA_SHADER_TESS_EVAL &&
+!llvm_has_working_vgpr_indexing)) {
+   indirect_mask |= nir_var_shader_in;
+   }
+   if (!llvm_has_working_vgpr_indexing &&
+   nir->info.stage != MESA_SHADER_TESS_CTRL)
+   indirect_mask |= nir_var_shader_out;
+
+   /* TODO: We shouldn't need to do this, however LLVM isn't currently
+* smart enough to handle indirects without causing excess spilling
+* causing the gpu to hang.
+*
+* See the following thread for more details of the problem:
+* https://lists.freedesktop.org/archives/mesa-dev/2017-July/162106.html
+*/
+   indirect_mask |= nir_var_local;
+
+   nir_lower_indirect_derefs(nir, indirect_mask);
+}
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
index 766acec6ed..eea393a9c2 100644
--- a/src/amd/common/ac_nir_to_llvm.h
+++ b/src/amd/common/ac_nir_to_llvm.h
@@ -229,6 +229,8 @@ void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
  const struct ac_nir_compiler_options *options,
  bool dump_shader);
 
+void ac_lower_indirect_derefs(struct nir_shader *nir, enum chip_class);
+
 void ac_nir_translate(struct ac_llvm_context *ac, struct ac_shader_abi *abi,
  struct nir_shader *nir);
 
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 6ad0b486f1..f8f09a7e16 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1527,14 +1527,14 @@ radv_link_shaders(struct radv_pipeline *pipeline, 
nir_shader **shaders)
 
if (progress) {
if (nir_lower_global_vars_to_local(ordered_shaders[i])) 
{
-   radv_lower_indirect_derefs(ordered_shaders[i],
-  
pipeline->device->physical_device);
+   ac_lower_indirect_derefs(ordered_shaders[i],
+
pipeline->device->physical_device->rad_info.chip_class);
}
radv_optimize_nir(ordered_shaders[i]);
 
if (nir_lower_global_vars_to_local(ordered_shaders[i - 
1])) {
-   radv_lower_indirect_derefs(ordered_shaders[i - 
1],
-  
pipeline->device->physical_device);
+   ac_lower_indirect_derefs(ordered_shaders[i - 1],
+
pipeline->device->physical_device->rad_info.chip_class);
}
radv_optimize_nir(ordered_shaders[i - 1]);
}
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 171802eede..e1de01f551 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_

Mesa (master): radeonsi: add chip class to compiler_ctx_state

2018-03-04 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 561503e3bd9fb800765b694092fecb97de92e192
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=561503e3bd9fb800765b694092fecb97de92e192

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar  5 12:04:47 2018 +1100

radeonsi: add chip class to compiler_ctx_state

This will be used in the following patch.

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/gallium/drivers/radeonsi/si_compute.c   | 1 +
 src/gallium/drivers/radeonsi/si_shader.h| 2 ++
 src/gallium/drivers/radeonsi/si_state_shaders.c | 1 +
 3 files changed, 4 insertions(+)

diff --git a/src/gallium/drivers/radeonsi/si_compute.c 
b/src/gallium/drivers/radeonsi/si_compute.c
index 41927988cf..e9b6127115 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -186,6 +186,7 @@ static void *si_create_compute_state(
program->ir.nir = (struct nir_shader *) cso->prog;
}
 
+   program->compiler_ctx_state.chip_class = sctx->b.chip_class;
program->compiler_ctx_state.debug = sctx->debug;
program->compiler_ctx_state.is_debug_context = sctx->is_debug;
p_atomic_inc(>num_shaders_created);
diff --git a/src/gallium/drivers/radeonsi/si_shader.h 
b/src/gallium/drivers/radeonsi/si_shader.h
index f58978989d..28f6e6bc4e 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -307,6 +307,8 @@ struct si_shader;
 
 /* State of the context creating the shader object. */
 struct si_compiler_ctx_state {
+   enum chip_class chip_class;
+
/* Should only be used by si_init_shader_selector_async and
 * si_build_shader_variant if thread_index == -1 (non-threaded). */
LLVMTargetMachineReftm;
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index b28352951a..98a3dfe242 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -3121,6 +3121,7 @@ bool si_update_shaders(struct si_context *sctx)
old_ps ? old_ps->key.part.ps.epilog.spi_shader_col_format : 0;
int r;
 
+   compiler_state.chip_class = sctx->b.chip_class;
compiler_state.tm = sctx->tm;
compiler_state.debug = sctx->debug;
compiler_state.is_debug_context = sctx->is_debug;

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


Mesa (master): radeonsi/nir: call ac_lower_indirect_derefs()

2018-03-04 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 70190a656766019107d82aa5404ffa1cad9fb6e4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=70190a656766019107d82aa5404ffa1cad9fb6e4

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Mar  5 12:06:01 2018 +1100

radeonsi/nir: call ac_lower_indirect_derefs()

Fixes piglit tests:
tests/spec/glsl-1.50/execution/variable-indexing/gs-input-array-vec3-index-rd.shader_test
tests/spec/glsl-1.50/execution/geometry/max-input-components.shader_test

Reviewed-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl>

---

 src/gallium/drivers/radeonsi/si_compute.c   | 2 +-
 src/gallium/drivers/radeonsi/si_shader.h| 2 +-
 src/gallium/drivers/radeonsi/si_shader_nir.c| 4 +++-
 src/gallium/drivers/radeonsi/si_state_shaders.c | 2 +-
 4 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_compute.c 
b/src/gallium/drivers/radeonsi/si_compute.c
index e9b6127115..d135a09add 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -107,7 +107,7 @@ static void si_create_compute_state_async(void *job, int 
thread_index)
sel.nir = program->ir.nir;
 
si_nir_scan_shader(sel.nir, );
-   si_lower_nir();
+   si_lower_nir(, program->compiler_ctx_state.chip_class);
}
 
 
diff --git a/src/gallium/drivers/radeonsi/si_shader.h 
b/src/gallium/drivers/radeonsi/si_shader.h
index 28f6e6bc4e..23f9d20e19 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -674,7 +674,7 @@ void si_nir_scan_shader(const struct nir_shader *nir,
 void si_nir_scan_tess_ctrl(const struct nir_shader *nir,
   const struct tgsi_shader_info *info,
   struct tgsi_tessctrl_info *out);
-void si_lower_nir(struct si_shader_selector *sel);
+void si_lower_nir(struct si_shader_selector *sel, enum chip_class chip_class);
 
 /* Inline helpers. */
 
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 147bd9511d..05e00d016e 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -623,7 +623,7 @@ void si_nir_scan_shader(const struct nir_shader *nir,
  * selector is created.
  */
 void
-si_lower_nir(struct si_shader_selector* sel)
+si_lower_nir(struct si_shader_selector* sel, enum chip_class chip_class)
 {
/* Adjust the driver location of inputs and outputs. The state tracker
 * interprets them as slots, while the ac/nir backend interprets them
@@ -673,6 +673,8 @@ si_lower_nir(struct si_shader_selector* sel)
};
NIR_PASS_V(sel->nir, nir_lower_subgroups, _options);
 
+   ac_lower_indirect_derefs(sel->nir, chip_class);
+
bool progress;
do {
progress = false;
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 98a3dfe242..2893135242 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1999,7 +1999,7 @@ static void *si_create_shader_selector(struct 
pipe_context *ctx,
si_nir_scan_shader(sel->nir, >info);
si_nir_scan_tess_ctrl(sel->nir, >info, >tcs_info);
 
-   si_lower_nir(sel);
+   si_lower_nir(sel, sctx->b.chip_class);
}
 
sel->type = sel->info.processor;

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


Mesa (master): ac: fix nir_intrinsic_shared_atomic_comp_swap handling

2018-03-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: f5305c1b44a81d8e022997e0f2f5bd7556be7dea
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5305c1b44a81d8e022997e0f2f5bd7556be7dea

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  1 20:17:38 2018 +1100

ac: fix nir_intrinsic_shared_atomic_comp_swap handling

Following on from 49879f377870 this makes sure we use the correct
src index.

Fixes cts test:
KHR-GL46.compute_shader.atomic-case3

Reviewed-by: Dave Airlie <airl...@redhat.com>

---

 src/amd/common/ac_nir_to_llvm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index afe17a8f11..0ffcd75c3a 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3998,7 +3998,7 @@ static LLVMValueRef visit_var_atomic(struct 
ac_nir_context *ctx,
 
if (instr->intrinsic == nir_intrinsic_var_atomic_comp_swap ||
instr->intrinsic == nir_intrinsic_shared_atomic_comp_swap) {
-   LLVMValueRef src1 = get_src(ctx, instr->src[1]);
+   LLVMValueRef src1 = get_src(ctx, instr->src[src_idx + 1]);
result = LLVMBuildAtomicCmpXchg(ctx->ac.builder,
ptr, src, src1,

LLVMAtomicOrderingSequentiallyConsistent,

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


Mesa (master): st/glsl_to_nir: simplify st_nir_assign_var_locations() and fix for fs outputs

2018-03-01 Thread Timothy Arceri
Module: Mesa
Branch: master
Commit: 13cdf4e5906f2ac7ec39d0b06abc6b5671c0693d
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=13cdf4e5906f2ac7ec39d0b06abc6b5671c0693d

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Thu Mar  1 13:39:20 2018 +1100

st/glsl_to_nir: simplify st_nir_assign_var_locations() and fix for fs outputs

We only need to check for previously processed location on user
defined varyings as they are the only ones that support component
packing. Therefore a single instance of processed_locs can be
shared by regular varyings and patches.

For simplicity we make processed_locs an array in order to handle
dual source bleanding.

Fixes the follow piglit test on radeonsi:
tests/spec/arb_enhanced_layouts/execution/component-layout/fs-output.shader_test

Reviewed-by: Dave Airlie <airl...@redhat.com>

---

 src/mesa/state_tracker/st_glsl_to_nir.cpp | 30 +-
 1 file changed, 13 insertions(+), 17 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp 
b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 765c827d93..0bd9c4e4e3 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -127,8 +127,10 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
 {
unsigned location = 0;
unsigned assigned_locations[VARYING_SLOT_TESS_MAX];
-   uint64_t processed_locs = 0;
-   uint32_t processed_patch_locs = 0;
+   uint64_t processed_locs[2] = {0};
+
+   const int base = stage == MESA_SHADER_FRAGMENT ?
+  (int) FRAG_RESULT_DATA0 : (int) VARYING_SLOT_VAR0;
 
nir_foreach_variable(var, var_list) {
 
@@ -138,28 +140,22 @@ st_nir_assign_var_locations(struct exec_list *var_list, 
unsigned *size,
  type = glsl_get_array_element(type);
   }
 
+  /* Builtins don't allow component packing so we only need to worry about
+   * user defined varyings sharing the same location.
+   */
   bool processed = false;
-  if (var->data.patch &&
-  var->data.location != VARYING_SLOT_TESS_LEVEL_INNER &&
-  var->data.location != VARYING_SLOT_TESS_LEVEL_OUTER &&
-  var->data.location != VARYING_SLOT_BOUNDING_BOX0 &&
-  var->data.location != VARYING_SLOT_BOUNDING_BOX1) {
- unsigned patch_loc = var->data.location - VARYING_SLOT_PATCH0;
- if (processed_patch_locs & (1 << patch_loc))
+  if (var->data.location >= base) {
+ unsigned glsl_location = var->data.location - base;
+ if (processed_locs[var->data.index] & ((uint64_t)1 << glsl_location))
 processed = true;
-
- processed_patch_locs |= (1 << patch_loc);
-  } else {
- if (processed_locs & ((uint64_t)1 << var->data.location))
-processed = true;
-
- processed_locs |= ((uint64_t)1 << var->data.location);
+ else
+processed_locs[var->data.index] |= ((uint64_t)1 << glsl_location);
   }
 
   /* Because component packing allows varyings to share the same location
* we may have already have processed this location.
*/
-  if (processed && var->data.location >= VARYING_SLOT_VAR0) {
+  if (processed) {
  var->data.driver_location = assigned_locations[var->data.location];
  *size += type_size(type);
  continue;

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


Mesa (master): gallium: remove llvm from ir struct

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Fri Feb  2 08:50:09 2018 +1100

gallium: remove llvm from ir struct

This was added in 425dc4c4b366 but never used. Also since
100796c15c3a native has superseded llvm.

Acked-by: Dave Airlie <airl...@redhat.com>

---

 src/gallium/include/pipe/p_state.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/gallium/include/pipe/p_state.h 
b/src/gallium/include/pipe/p_state.h
index 2b56d60b5e..640e6ed26d 100644
--- a/src/gallium/include/pipe/p_state.h
+++ b/src/gallium/include/pipe/p_state.h
@@ -267,7 +267,6 @@ struct pipe_shader_state
/* TODO move tokens into union. */
const struct tgsi_token *tokens;
union {
-  void *llvm;
   void *native;
   void *nir;
} ir;

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


Mesa (master): radeonsi: set some context vars for nir path

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Feb 13 13:06:51 2018 +1100

radeonsi: set some context vars for nir path

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c | 16 ++--
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c 
b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
index 8707be504e..4a027d8659 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
@@ -1253,7 +1253,16 @@ void si_llvm_context_set_tgsi(struct si_shader_context 
*ctx,
ctx->temps = NULL;
ctx->temps_count = 0;
 
-   if (!info || !tokens)
+   if (!info)
+   return;
+
+   ctx->num_const_buffers = util_last_bit(info->const_buffers_declared);
+   ctx->num_shader_buffers = util_last_bit(info->shader_buffers_declared);
+
+   ctx->num_samplers = util_last_bit(info->samplers_declared);
+   ctx->num_images = util_last_bit(info->images_declared);
+
+   if (!tokens)
return;
 
if (info->array_max[TGSI_FILE_TEMPORARY] > 0) {
@@ -1281,11 +1290,6 @@ void si_llvm_context_set_tgsi(struct si_shader_context 
*ctx,
ctx->bld_base.emit_fetch_funcs[TGSI_FILE_TEMPORARY] = 
si_llvm_emit_fetch;
ctx->bld_base.emit_fetch_funcs[TGSI_FILE_OUTPUT] = si_llvm_emit_fetch;
ctx->bld_base.emit_fetch_funcs[TGSI_FILE_SYSTEM_VALUE] = 
fetch_system_value;
-
-   ctx->num_const_buffers = util_last_bit(info->const_buffers_declared);
-   ctx->num_shader_buffers = util_last_bit(info->shader_buffers_declared);
-   ctx->num_samplers = util_last_bit(info->samplers_declared);
-   ctx->num_images = util_last_bit(info->images_declared);
 }
 
 void si_llvm_create_func(struct si_shader_context *ctx,

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


Mesa (master): nir: fix interger divide by zero crash during constant folding

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Wed Feb 28 14:33:55 2018 +1100

nir: fix interger divide by zero crash during constant folding

From the GLSL 4.60 spec Section 5.9 (Expressions):

   "Dividing by zero does not cause an exception but does result in
an unspecified value."

Fixes: 89285e4d47a6 "nir: add new constant folding infrastructure"

Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105271

---

 src/compiler/nir/nir_opcodes.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/compiler/nir/nir_opcodes.py b/src/compiler/nir/nir_opcodes.py
index 278562b2bd..97da4db28f 100644
--- a/src/compiler/nir/nir_opcodes.py
+++ b/src/compiler/nir/nir_opcodes.py
@@ -404,8 +404,8 @@ binop("umul_high", tuint32, commutative,
   "(uint32_t)(((uint64_t) src0 * (uint64_t) src1) >> 32)")
 
 binop("fdiv", tfloat, "", "src0 / src1")
-binop("idiv", tint, "", "src0 / src1")
-binop("udiv", tuint, "", "src0 / src1")
+binop("idiv", tint, "", "src1 == 0 ? 0 : (src0 / src1)")
+binop("udiv", tuint, "", "src1 == 0 ? 0 : (src0 / src1)")
 
 # returns a boolean representing the carry resulting from the addition of
 # the two unsigned arguments.

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


Mesa (master): ac: fix f2b and i2b for doubles

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 26 16:12:41 2018 +1100

ac: fix f2b and i2b for doubles

Without this llvm was asserting in debug builds.

V2: use LLVMConstNull()

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>

---

 src/amd/common/ac_nir_to_llvm.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 3f0bfedfa7..96bbecd110 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1437,8 +1437,9 @@ static LLVMValueRef emit_f2b(struct ac_llvm_context *ctx,
 LLVMValueRef src0)
 {
src0 = ac_to_float(ctx, src0);
+   LLVMValueRef zero = LLVMConstNull(LLVMTypeOf(src0));
return LLVMBuildSExt(ctx->builder,
-LLVMBuildFCmp(ctx->builder, LLVMRealUNE, src0, 
ctx->f32_0, ""),
+LLVMBuildFCmp(ctx->builder, LLVMRealUNE, src0, 
zero, ""),
 ctx->i32, "");
 }
 
@@ -1457,8 +1458,9 @@ static LLVMValueRef emit_b2i(struct ac_llvm_context *ctx,
 static LLVMValueRef emit_i2b(struct ac_llvm_context *ctx,
 LLVMValueRef src0)
 {
+   LLVMValueRef zero = LLVMConstNull(LLVMTypeOf(src0));
return LLVMBuildSExt(ctx->builder,
-LLVMBuildICmp(ctx->builder, LLVMIntNE, src0, 
ctx->i32_0, ""),
+LLVMBuildICmp(ctx->builder, LLVMIntNE, src0, zero, 
""),
 ctx->i32, "");
 }
 

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


Mesa (master): nir: add lower_ldexp to nir compiler options

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Feb 27 19:19:21 2018 +1100

nir: add lower_ldexp to nir compiler options

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/broadcom/compiler/nir_to_vir.c  | 1 +
 src/compiler/nir/nir.h  | 2 ++
 src/compiler/nir/nir_opt_algebraic.py   | 4 ++--
 src/gallium/drivers/freedreno/ir3/ir3_nir.c | 1 +
 src/gallium/drivers/vc4/vc4_program.c   | 1 +
 src/intel/compiler/brw_compiler.c   | 1 +
 6 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/broadcom/compiler/nir_to_vir.c 
b/src/broadcom/compiler/nir_to_vir.c
index 6bb2774143..595689d244 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -1893,6 +1893,7 @@ const nir_shader_compiler_options v3d_nir_options = {
 .lower_fpow = true,
 .lower_fsat = true,
 .lower_fsqrt = true,
+.lower_ldexp = true,
 .native_integers = true,
 };
 
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 2acd9511f5..c676331000 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1859,6 +1859,8 @@ typedef struct nir_shader_compiler_options {
/** lowers ffract to fsub+ffloor: */
bool lower_ffract;
 
+   bool lower_ldexp;
+
bool lower_pack_half_2x16;
bool lower_pack_unorm_2x16;
bool lower_pack_snorm_2x16;
diff --git a/src/compiler/nir/nir_opt_algebraic.py 
b/src/compiler/nir/nir_opt_algebraic.py
index d40d59b5cd..296f067138 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -560,8 +560,8 @@ def ldexp(f, exp, bits):
return ('fmul', ('fmul', f, pow2_1), pow2_2)
 
 optimizations += [
-   (('ldexp@32', 'x', 'exp'), ldexp('x', 'exp', 32)),
-   (('ldexp@64', 'x', 'exp'), ldexp('x', 'exp', 64)),
+   (('ldexp@32', 'x', 'exp'), ldexp('x', 'exp', 32), 'options->lower_ldexp'),
+   (('ldexp@64', 'x', 'exp'), ldexp('x', 'exp', 64), 'options->lower_ldexp'),
 ]
 
 # Unreal Engine 4 demo applications open-codes bitfieldReverse()
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_nir.c 
b/src/gallium/drivers/freedreno/ir3/ir3_nir.c
index 6edb0e4574..0b637bb99b 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_nir.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_nir.c
@@ -44,6 +44,7 @@ static const nir_shader_compiler_options options = {
.lower_fmod32 = true,
.lower_fmod64 = true,
.lower_fdiv = true,
+   .lower_ldexp = true,
.fuse_ffma = true,
.native_integers = true,
.vertex_id_zero_based = true,
diff --git a/src/gallium/drivers/vc4/vc4_program.c 
b/src/gallium/drivers/vc4/vc4_program.c
index 706982c4a1..be80a851d2 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -2188,6 +2188,7 @@ static const nir_shader_compiler_options nir_options = {
 .lower_fpow = true,
 .lower_fsat = true,
 .lower_fsqrt = true,
+.lower_ldexp = true,
 .lower_negate = true,
 .native_integers = true,
 .max_unroll_iterations = 32,
diff --git a/src/intel/compiler/brw_compiler.c 
b/src/intel/compiler/brw_compiler.c
index e515559acb..bb9df5e701 100644
--- a/src/intel/compiler/brw_compiler.c
+++ b/src/intel/compiler/brw_compiler.c
@@ -41,6 +41,7 @@
.lower_usub_borrow = true, \
.lower_fdiv = true,\
.lower_flrp64 = true,  \
+   .lower_ldexp = true,   \
.native_integers = true,   \
.use_interpolated_input_intrinsics = true, \
.vertex_id_zero_based = true

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


Mesa (master): ac/radeonsi: add load_base_vertex() to the abi

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 26 22:11:53 2018 +1100

ac/radeonsi: add load_base_vertex() to the abi

Fixes the following piglit tests:

./bin/arb_shader_draw_parameters-basevertex basevertex -auto -fbo
./bin/arb_shader_draw_parameters-basevertex basevertex-baseinstance -auto -fbo

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/amd/common/ac_nir_to_llvm.c  | 8 +++-
 src/amd/common/ac_shader_abi.h   | 2 ++
 src/gallium/drivers/radeonsi/si_shader.c | 1 +
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 253c440a32..fabecb1786 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -4389,7 +4389,7 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
break;
}
case nir_intrinsic_load_base_vertex: {
-   result = ctx->abi->base_vertex;
+   result = ctx->abi->load_base_vertex(ctx->abi);
break;
}
case nir_intrinsic_load_local_group_size:
@@ -4634,6 +4634,11 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
}
 }
 
+static LLVMValueRef radv_load_base_vertex(struct ac_shader_abi *abi)
+{
+   return abi->base_vertex;
+}
+
 static LLVMValueRef radv_load_ssbo(struct ac_shader_abi *abi,
   LLVMValueRef buffer_ptr, bool write)
 {
@@ -6908,6 +6913,7 @@ LLVMModuleRef 
ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
ctx.gs_max_out_vertices = 
shaders[i]->info.gs.vertices_out;
ctx.abi.load_inputs = load_gs_input;
ctx.abi.emit_primitive = visit_end_primitive;
+   ctx.abi.load_base_vertex = radv_load_base_vertex;
} else if (shaders[i]->info.stage == MESA_SHADER_TESS_CTRL) {
ctx.tcs_outputs_read = shaders[i]->info.outputs_read;
ctx.tcs_patch_outputs_read = 
shaders[i]->info.patch_outputs_read;
diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index 10d41ef997..09fe32c136 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -182,6 +182,8 @@ struct ac_shader_abi {
 
LLVMValueRef (*load_sample_mask_in)(struct ac_shader_abi *abi);
 
+   LLVMValueRef (*load_base_vertex)(struct ac_shader_abi *abi);
+
/* Whether to clamp the shadow reference value to [0,1]on VI. Radeonsi 
currently
 * uses it due to promoting D16 to D32, but radv needs it off. */
bool clamp_shadow_reference;
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index aa9b50a7a2..2a50b266f6 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -6021,6 +6021,7 @@ static bool si_compile_tgsi_main(struct si_shader_context 
*ctx,
else
ctx->abi.emit_outputs = si_llvm_emit_vs_epilogue;
bld_base->emit_epilogue = si_tgsi_emit_epilogue;
+   ctx->abi.load_base_vertex = get_base_vertex;
break;
case PIPE_SHADER_TESS_CTRL:
bld_base->emit_fetch_funcs[TGSI_FILE_INPUT] = fetch_input_tcs;

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


Mesa (master): radeonsi: create get_base_vertex() helper

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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Mon Feb 26 21:59:43 2018 +1100

radeonsi: create get_base_vertex() helper

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_shader.c | 34 +++-
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index b69c1bbb24..aa9b50a7a2 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -1908,6 +1908,25 @@ static LLVMValueRef get_sample_id(struct 
si_shader_context *ctx)
return unpack_param(ctx, SI_PARAM_ANCILLARY, 8, 4);
 }
 
+static LLVMValueRef get_base_vertex(struct ac_shader_abi *abi)
+{
+   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+
+   /* For non-indexed draws, the base vertex set by the driver
+* (for direct draws) or the CP (for indirect draws) is the
+* first vertex ID, but GLSL expects 0 to be returned.
+*/
+   LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn,
+ctx->param_vs_state_bits);
+   LLVMValueRef indexed;
+
+   indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, "");
+   indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
+
+   return LLVMBuildSelect(ctx->ac.builder, indexed, ctx->abi.base_vertex,
+  ctx->i32_0, "");
+}
+
 static LLVMValueRef get_block_size(struct ac_shader_abi *abi)
 {
struct si_shader_context *ctx = si_shader_context_from_abi(abi);
@@ -2068,21 +2087,8 @@ void si_load_system_value(struct si_shader_context *ctx,
break;
 
case TGSI_SEMANTIC_BASEVERTEX:
-   {
-   /* For non-indexed draws, the base vertex set by the driver
-* (for direct draws) or the CP (for indirect draws) is the
-* first vertex ID, but GLSL expects 0 to be returned.
-*/
-   LLVMValueRef vs_state = LLVMGetParam(ctx->main_fn, 
ctx->param_vs_state_bits);
-   LLVMValueRef indexed;
-
-   indexed = LLVMBuildLShr(ctx->ac.builder, vs_state, ctx->i32_1, 
"");
-   indexed = LLVMBuildTrunc(ctx->ac.builder, indexed, ctx->i1, "");
-
-   value = LLVMBuildSelect(ctx->ac.builder, indexed,
-   ctx->abi.base_vertex, ctx->i32_0, "");
+   value = get_base_vertex(>abi);
break;
-   }
 
case TGSI_SEMANTIC_BASEINSTANCE:
value = ctx->abi.start_instance;

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


  1   2   3   4   5   6   7   8   9   10   >