Mesa (master): radv: fix a GPU hang when MRTs are sparse

2018-06-04 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 06d3c65098097675a34035da3043a71061fad17b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=06d3c65098097675a34035da3043a71061fad17b

Author: Samuel Pitoiset 
Date:   Fri Jun  1 16:22:32 2018 +0200

radv: fix a GPU hang when MRTs are sparse

When the i-th target format is set, all previous target formats
must be non-zero to avoid hangs. In other words, without this
if a fragment shader exports mrt0, mrt2 and mrt3, the GPU hangs
because the target format of mrt1 is zero.

This fixes DXVK GPU hangs with "Seven: The Days Long Gone",
"GTA V" and probably more games.

Cc: "18.0" 18.1" 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_pipeline.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 375f7c357d..b8b425aca9 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -504,6 +504,7 @@ radv_pipeline_compute_spi_color_formats(struct 
radv_pipeline *pipeline,
RADV_FROM_HANDLE(radv_render_pass, pass, pCreateInfo->renderPass);
struct radv_subpass *subpass = pass->subpasses + pCreateInfo->subpass;
unsigned col_format = 0;
+   unsigned num_targets;
 
for (unsigned i = 0; i < (blend->single_cb_enable ? 1 : 
subpass->color_count); ++i) {
unsigned cf;
@@ -528,6 +529,15 @@ radv_pipeline_compute_spi_color_formats(struct 
radv_pipeline *pipeline,
if (blend->mrt0_is_dual_src)
col_format |= (col_format & 0xf) << 4;
blend->spi_shader_col_format = col_format;
+
+   /* If the i-th target format is set, all previous target formats must
+* be non-zero to avoid hangs.
+*/
+   num_targets = (util_last_bit(blend->spi_shader_col_format) + 3) / 4;
+   for (unsigned i = 0; i < num_targets; i++) {
+   if (!(blend->spi_shader_col_format & (0xf << (i * 4
+   blend->spi_shader_col_format |= 
V_028714_SPI_SHADER_32_R << (i * 4);
+   }
 }
 
 static bool

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


Mesa (master): nir: make is_comparison() a non-static helper function

2018-06-04 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: e44f90eccfaec2a1b1e813f93497bb498181dd2f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e44f90eccfaec2a1b1e813f93497bb498181dd2f

Author: Samuel Pitoiset 
Date:   Wed May 30 14:21:41 2018 +0200

nir: make is_comparison() a non-static helper function

Rename and change the prototype for consistency regarding
nir_tex_instr_is_query(). This function will be used in the
following patch.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Ian Romanick 

---

 src/compiler/nir/nir.h  | 24 
 src/compiler/nir/nir_opt_move_comparisons.c | 26 +-
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index f6086bd6c0..5a1f79515a 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -1374,6 +1374,30 @@ nir_tex_instr_is_query(const nir_tex_instr *instr)
}
 }
 
+static inline bool
+nir_alu_instr_is_comparison(const nir_alu_instr *instr)
+{
+   switch (instr->op) {
+   case nir_op_flt:
+   case nir_op_fge:
+   case nir_op_feq:
+   case nir_op_fne:
+   case nir_op_ilt:
+   case nir_op_ult:
+   case nir_op_ige:
+   case nir_op_uge:
+   case nir_op_ieq:
+   case nir_op_ine:
+   case nir_op_i2b:
+   case nir_op_f2b:
+   case nir_op_inot:
+   case nir_op_fnot:
+  return true;
+   default:
+  return false;
+   }
+}
+
 static inline nir_alu_type
 nir_tex_instr_src_type(const nir_tex_instr *instr, unsigned src)
 {
diff --git a/src/compiler/nir/nir_opt_move_comparisons.c 
b/src/compiler/nir/nir_opt_move_comparisons.c
index 617c2ca998..5da57dc921 100644
--- a/src/compiler/nir/nir_opt_move_comparisons.c
+++ b/src/compiler/nir/nir_opt_move_comparisons.c
@@ -51,30 +51,6 @@
  */
 
 static bool
-is_comparison(nir_op op)
-{
-   switch (op) {
-   case nir_op_flt:
-   case nir_op_fge:
-   case nir_op_feq:
-   case nir_op_fne:
-   case nir_op_ilt:
-   case nir_op_ult:
-   case nir_op_ige:
-   case nir_op_uge:
-   case nir_op_ieq:
-   case nir_op_ine:
-   case nir_op_i2b:
-   case nir_op_f2b:
-   case nir_op_inot:
-   case nir_op_fnot:
-  return true;
-   default:
-  return false;
-   }
-}
-
-static bool
 move_comparison_source(nir_src *src, nir_block *block, nir_instr *before)
 {
if (!src->is_ssa)
@@ -84,7 +60,7 @@ move_comparison_source(nir_src *src, nir_block *block, 
nir_instr *before)
 
if (src_instr->block == block &&
src_instr->type == nir_instr_type_alu &&
-   is_comparison(nir_instr_as_alu(src_instr)->op)) {
+   nir_alu_instr_is_comparison(nir_instr_as_alu(src_instr))) {
 
   exec_node_remove(&src_instr->node);
 

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


Mesa (master): nir: implement the GLSL equivalent of if simplication in nir_opt_if

2018-06-04 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: e3e929f8c342b32dc8f5296adf8fb337866fa40a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e3e929f8c342b32dc8f5296adf8fb337866fa40a

Author: Samuel Pitoiset 
Date:   Wed May 30 14:21:42 2018 +0200

nir: implement the GLSL equivalent of if simplication in nir_opt_if

This pass turns:

   if (cond) {
   } else {
  do_work();
   }

into:

   if (!cond) {
  do_work();
   } else {
   }

Here's the vkpipeline-db stats (from affected shaders) on Polaris10:

Totals from affected shaders:
SGPRS: 17272 -> 17296 (0.14 %)
VGPRS: 18712 -> 18740 (0.15 %)
Spilled SGPRs: 1179 -> 1142 (-3.14 %)
Code Size: 1503364 -> 1515176 (0.79 %) bytes
Max Waves: 916 -> 911 (-0.55 %)

This pass only affects Serious Sam 2017 (Vulkan) on my side. The
stats are not really good for now. Some shaders look quite dumb
but this will be improved with further NIR passes, like ifs
combination.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 
Reviewed-by: Ian Romanick 

---

 src/compiler/nir/nir_opt_if.c | 97 ---
 1 file changed, 92 insertions(+), 5 deletions(-)

diff --git a/src/compiler/nir/nir_opt_if.c b/src/compiler/nir/nir_opt_if.c
index 68dacea770..b03657a424 100644
--- a/src/compiler/nir/nir_opt_if.c
+++ b/src/compiler/nir/nir_opt_if.c
@@ -22,6 +22,7 @@
  */
 
 #include "nir.h"
+#include "nir/nir_builder.h"
 #include "nir_control_flow.h"
 
 /**
@@ -201,7 +202,89 @@ opt_peel_loop_initial_if(nir_loop *loop)
 }
 
 static bool
-opt_if_cf_list(struct exec_list *cf_list)
+is_block_empty(nir_block *block)
+{
+   return nir_cf_node_is_last(&block->cf_node) &&
+  exec_list_is_empty(&block->instr_list);
+}
+
+/**
+ * This optimization turns:
+ *
+ * if (cond) {
+ * } else {
+ * do_work();
+ * }
+ *
+ * into:
+ *
+ * if (!cond) {
+ * do_work();
+ * } else {
+ * }
+ */
+static bool
+opt_if_simplification(nir_builder *b, nir_if *nif)
+{
+   /* Only simplify if the then block is empty and the else block is not. */
+   if (!is_block_empty(nir_if_first_then_block(nif)) ||
+   is_block_empty(nir_if_first_else_block(nif)))
+  return false;
+
+   /* Make sure the condition is a comparison operation. */
+   nir_instr *src_instr = nif->condition.ssa->parent_instr;
+   if (src_instr->type != nir_instr_type_alu)
+  return false;
+
+   nir_alu_instr *alu_instr = nir_instr_as_alu(src_instr);
+   if (!nir_alu_instr_is_comparison(alu_instr))
+  return false;
+
+   /* Insert the inverted instruction and rewrite the condition. */
+   b->cursor = nir_after_instr(&alu_instr->instr);
+
+   nir_ssa_def *new_condition =
+  nir_inot(b, &alu_instr->dest.dest.ssa);
+
+   nir_if_rewrite_condition(nif, nir_src_for_ssa(new_condition));
+
+   /* Grab pointers to the last then/else blocks for fixing up the phis. */
+   nir_block *then_block = nir_if_last_then_block(nif);
+   nir_block *else_block = nir_if_last_else_block(nif);
+
+   /* Walk all the phis in the block immediately following the if statement and
+* swap the blocks.
+*/
+   nir_block *after_if_block =
+  nir_cf_node_as_block(nir_cf_node_next(&nif->cf_node));
+
+   nir_foreach_instr(instr, after_if_block) {
+  if (instr->type != nir_instr_type_phi)
+ continue;
+
+  nir_phi_instr *phi = nir_instr_as_phi(instr);
+
+  foreach_list_typed(nir_phi_src, src, node, &phi->srcs) {
+ if (src->pred == else_block) {
+src->pred = then_block;
+ } else if (src->pred == then_block) {
+src->pred = else_block;
+ }
+  }
+   }
+
+   /* Finally, move the else block to the then block. */
+   nir_cf_list tmp;
+   nir_cf_extract(&tmp, nir_before_cf_list(&nif->else_list),
+nir_after_cf_list(&nif->else_list));
+   nir_cf_reinsert(&tmp, nir_before_cf_list(&nif->then_list));
+   nir_cf_delete(&tmp);
+
+   return true;
+}
+
+static bool
+opt_if_cf_list(nir_builder *b, struct exec_list *cf_list)
 {
bool progress = false;
foreach_list_typed(nir_cf_node, cf_node, node, cf_list) {
@@ -211,14 +294,15 @@ opt_if_cf_list(struct exec_list *cf_list)
 
   case nir_cf_node_if: {
  nir_if *nif = nir_cf_node_as_if(cf_node);
- progress |= opt_if_cf_list(&nif->then_list);
- progress |= opt_if_cf_list(&nif->else_list);
+ progress |= opt_if_cf_list(b, &nif->then_list);
+ progress |= opt_if_cf_list(b, &nif->else_list);
+ progress |= opt_if_simplification(b, nif);
  break;
   }
 
   case nir_cf_node_loop: {
  nir_loop *loop = nir_cf_node_as_loop(cf_node);
- progress |= opt_if_cf_list(&loop->body);
+ progress |= opt_if_cf_list(b, &loop->body);
  progress |= opt_peel_loo

Mesa (master): nir: optimize iand(ieq(a, 0), ieq(b, 0)) to ieq(ior(a, b), 0)

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

Author: Samuel Pitoiset 
Date:   Wed May 30 10:48:31 2018 +0200

nir: optimize iand(ieq(a, 0), ieq(b, 0)) to ieq(ior(a, b), 0)

Totals from affected shaders:
SGPRS: 80 -> 80 (0.00 %)
VGPRS: 48 -> 48 (0.00 %)
Code Size: 2120 -> 2096 (-1.13 %) bytes
Max Waves: 16 -> 16 (0.00 %)

Only two Rise of Tomb Raider shaders are affected on my side.

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

---

 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 21b9acecbe..ba788f221a 100644
--- a/src/compiler/nir/nir_opt_algebraic.py
+++ b/src/compiler/nir/nir_opt_algebraic.py
@@ -282,6 +282,8 @@ optimizations = [
(('iand', ('uge(is_used_once)', a, b), ('uge', a, c)), ('uge', a, ('umax', 
b, c))),
(('iand', ('uge(is_used_once)', a, c), ('uge', b, c)), ('uge', ('umin', a, 
b), c)),
 
+   (('iand', ('ieq', 'a@32', 0), ('ieq', 'b@32', 0)), ('ieq', ('ior', 'a@32', 
'b@32'), 0)),
+
# These patterns can result when (a < b || a < c) => (a < min(b, c))
# transformations occur before constant propagation and loop-unrolling.
(('~flt', a, ('fmax', b, a)), ('flt', a, b)),

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


Mesa (master): radv: fix emitting descriptor pointers with LLVM < 7

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

Author: Samuel Pitoiset 
Date:   Wed May 30 11:15:12 2018 +0200

radv: fix emitting descriptor pointers with LLVM < 7

This was terribly wrong, I forced use of 32-bit pointers when
emitting shader descriptor pointers. This fixes GPU hangs with
LLVM 5&6 because 32-bit pointers are only supported with LLVM 7.

Fixes: 88d1ed0f81 ("radv: emit shader descriptor pointers consecutively")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 8f351b52c9..6ff1f1a6cb 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -624,12 +624,14 @@ radv_emit_descriptor_pointers(struct radv_cmd_buffer 
*cmd_buffer,
struct radv_userdata_info *loc = &locs->descriptor_sets[start];
unsigned sh_offset = sh_base + loc->sgpr_idx * 4;
 
-   radv_emit_shader_pointer_head(cs, sh_offset, count, true);
+   radv_emit_shader_pointer_head(cs, sh_offset, count,
+ HAVE_32BIT_POINTERS);
for (int i = 0; i < count; i++) {
struct radv_descriptor_set *set =
descriptors_state->sets[start + i];
 
-   radv_emit_shader_pointer_body(device, cs, set->va, 
true);
+   radv_emit_shader_pointer_body(device, cs, set->va,
+ HAVE_32BIT_POINTERS);
}
}
 }

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


Mesa (master): radv: split radv_emit_shader_pointer()

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

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

radv: split radv_emit_shader_pointer()

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

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

---

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

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

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


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

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

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

radv: allow radv_emit_shader_pointer_head() to emit more pointers

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

---

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

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

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


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

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

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

radv: emit shader descriptor pointers consecutively

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

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

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

---

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

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

Mesa (master): radv: run the EarlyCSEMemSSA LLVM pass

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

Author: Samuel Pitoiset 
Date:   Thu May 24 22:55:54 2018 +0200

radv: run the EarlyCSEMemSSA LLVM pass

It's recommended by the instruction combining pass, and
RadeonSI also runs it.

This pass used to segfault with one shader of F12017 in the
past, but it no longer crashes. Maybe the LLVM IR generated
by RADV has changed.

Polaris10:
Totals from affected shaders:
SGPRS: 441352 -> 441648 (0.07 %)
VGPRS: 310888 -> 300784 (-3.25 %)
Spilled SGPRs: 13576 -> 12983 (-4.37 %)
Code Size: 22560328 -> 22420544 (-0.62 %) bytes
Max Waves: 40755 -> 41366 (1.50 %)

Vega10:
Totals from affected shaders:
SGPRS: 442848 -> 442000 (-0.19 %)
VGPRS: 310396 -> 300460 (-3.20 %)
Spilled SGPRs: 13708 -> 12906 (-5.85 %)
Code Size: 22479428 -> 22336216 (-0.64 %) bytes
Max Waves: 45783 -> 46506 (1.58 %)

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index b174c027d9..a56f017e25 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2982,6 +2982,8 @@ static void ac_llvm_finalize_module(struct 
radv_shader_context *ctx)
LLVMAddLICMPass(passmgr);
LLVMAddAggressiveDCEPass(passmgr);
LLVMAddCFGSimplificationPass(passmgr);
+   /* This is recommended by the instruction combining pass. */
+   LLVMAddEarlyCSEMemSSAPass(passmgr);
LLVMAddInstructionCombiningPass(passmgr);
 
/* Run the pass */

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


Mesa (master): radv: add radv_dump_pipeline_state() helper

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

Author: Samuel Pitoiset 
Date:   Thu May 24 13:09:13 2018 +0200

radv: add radv_dump_pipeline_state() helper

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

---

 src/amd/vulkan/radv_debug.c | 17 +++--
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index 5cdbf5bea9..c84e3be25b 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -526,6 +526,15 @@ radv_dump_shaders(struct radv_pipeline *pipeline,
 }
 
 static void
+radv_dump_pipeline_state(struct radv_pipeline *pipeline,
+VkShaderStageFlagBits active_stages, FILE *f)
+{
+   radv_dump_shaders(pipeline, active_stages, f);
+   radv_dump_annotated_shaders(pipeline, active_stages, f);
+   radv_dump_descriptors(pipeline, f);
+}
+
+static void
 radv_dump_graphics_state(struct radv_pipeline *graphics_pipeline,
 struct radv_pipeline *compute_pipeline, FILE *f)
 {
@@ -536,9 +545,7 @@ radv_dump_graphics_state(struct radv_pipeline 
*graphics_pipeline,
 
active_stages = graphics_pipeline->active_stages;
 
-   radv_dump_shaders(graphics_pipeline, active_stages, f);
-   radv_dump_annotated_shaders(graphics_pipeline, active_stages, f);
-   radv_dump_descriptors(graphics_pipeline, f);
+   radv_dump_pipeline_state(graphics_pipeline, active_stages, f);
 }
 
 static void
@@ -549,9 +556,7 @@ radv_dump_compute_state(struct radv_pipeline 
*compute_pipeline, FILE *f)
if (!compute_pipeline)
return;
 
-   radv_dump_shaders(compute_pipeline, active_stages, f);
-   radv_dump_annotated_shaders(compute_pipeline, active_stages, f);
-   radv_dump_descriptors(compute_pipeline, f);
+   radv_dump_pipeline_state(compute_pipeline, active_stages, f);
 }
 
 static struct radv_pipeline *

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


Mesa (master): radv: fix dumping compute shader on the graphics queue

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

Author: Samuel Pitoiset 
Date:   Thu May 24 13:09:14 2018 +0200

radv: fix dumping compute shader on the graphics queue

The graphics pipeline can be NULL.

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

---

 src/amd/vulkan/radv_debug.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index c84e3be25b..5a9b43644e 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -540,12 +540,15 @@ radv_dump_graphics_state(struct radv_pipeline 
*graphics_pipeline,
 {
VkShaderStageFlagBits active_stages;
 
-   if (!graphics_pipeline)
-   return;
-
-   active_stages = graphics_pipeline->active_stages;
+   if (graphics_pipeline) {
+   active_stages = graphics_pipeline->active_stages;
+   radv_dump_pipeline_state(graphics_pipeline, active_stages, f);
+   }
 
-   radv_dump_pipeline_state(graphics_pipeline, active_stages, f);
+   if (compute_pipeline) {
+   active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
+   radv_dump_pipeline_state(compute_pipeline, active_stages, f);
+   }
 }
 
 static void

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


Mesa (master): radv: rework how shaders are dumped when generating a hang report

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

Author: Samuel Pitoiset 
Date:   Thu May 24 13:09:12 2018 +0200

radv: rework how shaders are dumped when generating a hang report

Use a flag for the active stages instead.

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

---

 src/amd/vulkan/radv_debug.c | 41 +++--
 1 file changed, 15 insertions(+), 26 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index 72c7c39fcb..5cdbf5bea9 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -442,28 +442,22 @@ radv_dump_annotated_shader(struct radv_shader_variant 
*shader,
 
 static void
 radv_dump_annotated_shaders(struct radv_pipeline *pipeline,
-   struct radv_shader_variant *compute_shader,
-   FILE *f)
+   VkShaderStageFlagBits active_stages, FILE *f)
 {
struct ac_wave_info waves[AC_MAX_WAVES_PER_CHIP];
unsigned num_waves = ac_get_wave_info(waves);
-   unsigned mask;
 
fprintf(f, COLOR_CYAN "The number of active waves = %u" COLOR_RESET
"\n\n", num_waves);
 
/* Dump annotated active graphics shaders. */
-   mask = pipeline->active_stages;
-   while (mask) {
-   int stage = u_bit_scan(&mask);
+   while (active_stages) {
+   int stage = u_bit_scan(&active_stages);
 
radv_dump_annotated_shader(pipeline->shaders[stage],
   stage, waves, num_waves, f);
}
 
-   radv_dump_annotated_shader(compute_shader, MESA_SHADER_COMPUTE, waves,
-  num_waves, f);
-
/* Print waves executing shaders that are not currently bound. */
unsigned i;
bool found = false;
@@ -521,47 +515,42 @@ radv_dump_shader(struct radv_pipeline *pipeline,
 
 static void
 radv_dump_shaders(struct radv_pipeline *pipeline,
- struct radv_shader_variant *compute_shader, FILE *f)
+ VkShaderStageFlagBits active_stages, FILE *f)
 {
-   unsigned mask;
-
/* Dump active graphics shaders. */
-   mask = pipeline->active_stages;
-   while (mask) {
-   int stage = u_bit_scan(&mask);
+   while (active_stages) {
+   int stage = u_bit_scan(&active_stages);
 
radv_dump_shader(pipeline, pipeline->shaders[stage], stage, f);
}
-
-   radv_dump_shader(pipeline, compute_shader, MESA_SHADER_COMPUTE, f);
 }
 
 static void
 radv_dump_graphics_state(struct radv_pipeline *graphics_pipeline,
 struct radv_pipeline *compute_pipeline, FILE *f)
 {
-   struct radv_shader_variant *compute_shader =
-   compute_pipeline ? 
compute_pipeline->shaders[MESA_SHADER_COMPUTE] : NULL;
+   VkShaderStageFlagBits active_stages;
 
if (!graphics_pipeline)
return;
 
-   radv_dump_shaders(graphics_pipeline, compute_shader, f);
-   radv_dump_annotated_shaders(graphics_pipeline, compute_shader, f);
+   active_stages = graphics_pipeline->active_stages;
+
+   radv_dump_shaders(graphics_pipeline, active_stages, f);
+   radv_dump_annotated_shaders(graphics_pipeline, active_stages, f);
radv_dump_descriptors(graphics_pipeline, f);
 }
 
 static void
 radv_dump_compute_state(struct radv_pipeline *compute_pipeline, FILE *f)
 {
+   VkShaderStageFlagBits active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
+
if (!compute_pipeline)
return;
 
-   radv_dump_shaders(compute_pipeline,
- compute_pipeline->shaders[MESA_SHADER_COMPUTE], f);
-   radv_dump_annotated_shaders(compute_pipeline,
-   
compute_pipeline->shaders[MESA_SHADER_COMPUTE],
-   f);
+   radv_dump_shaders(compute_pipeline, active_stages, f);
+   radv_dump_annotated_shaders(compute_pipeline, active_stages, f);
radv_dump_descriptors(compute_pipeline, f);
 }
 

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


Mesa (master): radv: remove unused parameter in radv_dump_annotated_shader()

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

Author: Samuel Pitoiset 
Date:   Thu May 24 13:09:11 2018 +0200

radv: remove unused parameter in radv_dump_annotated_shader()

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

---

 src/amd/vulkan/radv_debug.c | 14 ++
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index e55489d71d..72c7c39fcb 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -369,11 +369,9 @@ static void si_add_split_disasm(const char *disasm,
 }
 
 static void
-radv_dump_annotated_shader(struct radv_pipeline *pipeline,
-  struct radv_shader_variant *shader,
-  gl_shader_stage stage,
-  struct ac_wave_info *waves, unsigned num_waves,
-  FILE *f)
+radv_dump_annotated_shader(struct radv_shader_variant *shader,
+  gl_shader_stage stage, struct ac_wave_info *waves,
+  unsigned num_waves, FILE *f)
 {
uint64_t start_addr, end_addr;
unsigned i;
@@ -459,12 +457,12 @@ radv_dump_annotated_shaders(struct radv_pipeline 
*pipeline,
while (mask) {
int stage = u_bit_scan(&mask);
 
-   radv_dump_annotated_shader(pipeline, pipeline->shaders[stage],
+   radv_dump_annotated_shader(pipeline->shaders[stage],
   stage, waves, num_waves, f);
}
 
-   radv_dump_annotated_shader(pipeline, compute_shader,
-  MESA_SHADER_COMPUTE, waves, num_waves, f);
+   radv_dump_annotated_shader(compute_shader, MESA_SHADER_COMPUTE, waves,
+  num_waves, f);
 
/* Print waves executing shaders that are not currently bound. */
unsigned i;

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


Mesa (master): radv: call nir_lower_io_to_temporaries for VS, GS, TES and FS

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

Author: Samuel Pitoiset 
Date:   Wed May 23 14:31:56 2018 +0200

radv: call nir_lower_io_to_temporaries for VS, GS, TES and FS

Do not lower FS inputs because this moves all load_var
instructions at beginning of shaders and because
interp_var_at_sample (and friends) seem broken. That might
be eventually enabled later on if we really want to preload
all FS inputs at beginning.

Polaris10:
Totals from affected shaders:
SGPRS: 54072 -> 54264 (0.36 %)
VGPRS: 38580 -> 38124 (-1.18 %)
Spilled SGPRs: 652 -> 652 (0.00 %)
Spilled VGPRs: 0 -> 0 (0.00 %)
Code Size: 2128116 -> 2127380 (-0.03 %) bytes
Max Waves: 8048 -> 8086 (0.47 %)

Vega10:
Totals from affected shaders:
SGPRS: 52616 -> 52656 (0.08 %)
VGPRS: 37536 -> 37116 (-1.12 %)
Spilled SGPRs: 828 -> 828 (0.00 %)
Code Size: 2043756 -> 2042672 (-0.05 %) bytes
Max Waves: 9176 -> 9254 (0.85 %)

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

---

 src/amd/vulkan/radv_shader.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 7ed5d2a421..84ad215ccb 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -278,6 +278,16 @@ radv_shader_compile_to_nir(struct radv_device *device,
 
nir_lower_vars_to_ssa(nir);
 
+   if (nir->info.stage == MESA_SHADER_VERTEX ||
+   nir->info.stage == MESA_SHADER_GEOMETRY) {
+   NIR_PASS_V(nir, nir_lower_io_to_temporaries,
+  nir_shader_get_entrypoint(nir), true, true);
+   } else if (nir->info.stage == MESA_SHADER_TESS_EVAL||
+  nir->info.stage == MESA_SHADER_FRAGMENT) {
+   NIR_PASS_V(nir, nir_lower_io_to_temporaries,
+  nir_shader_get_entrypoint(nir), true, false);
+   }
+
nir_split_var_copies(nir);
nir_lower_var_copies(nir);
 

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


Mesa (master): radv: call nir_split_var_copies() before nir_lower_var_copies()

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

Author: Samuel Pitoiset 
Date:   Wed May 23 14:31:55 2018 +0200

radv: call nir_split_var_copies() before nir_lower_var_copies()

This doesn't nothing special currently because we don't create
any copy_var instructions, but this is needed for the next patch.

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

---

 src/amd/vulkan/radv_shader.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 6ccbe81eff..7ed5d2a421 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -277,7 +277,10 @@ radv_shader_compile_to_nir(struct radv_device *device,
nir_lower_tex(nir, &tex_options);
 
nir_lower_vars_to_ssa(nir);
+
+   nir_split_var_copies(nir);
nir_lower_var_copies(nir);
+
nir_lower_global_vars_to_local(nir);
nir_remove_dead_variables(nir, nir_var_local);
nir_lower_subgroups(nir, &(struct nir_lower_subgroups_options) {

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


Mesa (master): radv: set amdgpu-32bit-address-high-bits LLVM attribute

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

Author: Samuel Pitoiset 
Date:   Wed May 16 16:02:04 2018 +0200

radv: set amdgpu-32bit-address-high-bits LLVM attribute

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 6 ++
 src/amd/vulkan/radv_shader.c  | 1 +
 src/amd/vulkan/radv_shader.h  | 1 +
 3 files changed, 8 insertions(+)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 2d91ded7fe..3f32f62cdc 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -511,6 +511,12 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef 
module,
}
}
 
+   if (options->address32_hi) {
+   ac_llvm_add_target_dep_function_attr(main_function,
+
"amdgpu-32bit-address-high-bits",
+options->address32_hi);
+   }
+
if (max_workgroup_size) {
ac_llvm_add_target_dep_function_attr(main_function,
 
"amdgpu-max-work-group-size",
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 7589d9c88a..6ccbe81eff 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -482,6 +482,7 @@ shader_variant_create(struct radv_device *device,
 device->instance->debug_flags & 
RADV_DEBUG_PREOPTIR;
options->record_llvm_ir = device->keep_shader_info;
options->tess_offchip_block_dw_size = 
device->tess_offchip_block_dw_size;
+   options->address32_hi = device->physical_device->rad_info.address32_hi;
 
if (options->supports_spill)
tm_options |= AC_TM_SUPPORTS_SPILL;
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 679fa44279..05de188e3f 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -123,6 +123,7 @@ struct radv_nir_compiler_options {
enum radeon_family family;
enum chip_class chip_class;
uint32_t tess_offchip_block_dw_size;
+   uint32_t address32_hi;
 };
 
 enum radv_ud_index {

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


Mesa (master): radv/winsys: allow to allocate BOs in the 32-bit addr space

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

Author: Samuel Pitoiset 
Date:   Wed May 16 15:34:52 2018 +0200

radv/winsys: allow to allocate BOs in the 32-bit addr space

This introduces a new flag called RADEON_FLAG_32BIT.

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

---

 src/amd/vulkan/radv_radeon_winsys.h   | 1 +
 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 3 ++-
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_radeon_winsys.h 
b/src/amd/vulkan/radv_radeon_winsys.h
index 7f19934ab8..2ebd18cf90 100644
--- a/src/amd/vulkan/radv_radeon_winsys.h
+++ b/src/amd/vulkan/radv_radeon_winsys.h
@@ -57,6 +57,7 @@ enum radeon_bo_flag { /* bitfield */
RADEON_FLAG_IMPLICIT_SYNC = (1 << 5),
RADEON_FLAG_NO_INTERPROCESS_SHARING = (1 << 6),
RADEON_FLAG_READ_ONLY = (1 << 7),
+   RADEON_FLAG_32BIT = (1 << 8),
 };
 
 enum radeon_bo_usage { /* bitfield */
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index f33cf02815..25764d93f6 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -306,7 +306,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
 
r = amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
  size, alignment, 0, &va, &va_handle,
- AMDGPU_VA_RANGE_HIGH);
+ (flags & RADEON_FLAG_32BIT ? 
AMDGPU_VA_RANGE_32_BIT : 0) |
+  AMDGPU_VA_RANGE_HIGH);
if (r)
goto error_va_alloc;
 

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


Mesa (master): radv: add set_loc_shader_ptr() helper

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

Author: Samuel Pitoiset 
Date:   Fri May 18 10:57:02 2018 +0200

radv: add set_loc_shader_ptr() helper

This helper will hep for switching to 32-bit GPU pointers.

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 20 +---
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 3f32f62cdc..9e42983cd1 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -567,6 +567,12 @@ set_loc_shader(struct radv_shader_context *ctx, int idx, 
uint8_t *sgpr_idx,
 }
 
 static void
+set_loc_shader_ptr(struct radv_shader_context *ctx, int idx, uint8_t *sgpr_idx)
+{
+   set_loc_shader(ctx, idx, sgpr_idx, 2);
+}
+
+static void
 set_loc_desc(struct radv_shader_context *ctx, int idx,  uint8_t *sgpr_idx,
 uint32_t indirect_offset)
 {
@@ -797,8 +803,8 @@ set_global_input_locs(struct radv_shader_context *ctx, 
gl_shader_stage stage,
ctx->descriptor_sets[i] = NULL;
}
} else {
-   set_loc_shader(ctx, AC_UD_INDIRECT_DESCRIPTOR_SETS,
-  user_sgpr_idx, 2);
+   set_loc_shader_ptr(ctx, AC_UD_INDIRECT_DESCRIPTOR_SETS,
+  user_sgpr_idx);
 
for (unsigned i = 0; i < num_sets; ++i) {
if ((ctx->shader_info->info.desc_set_used_mask & (1 << 
i)) &&
@@ -816,7 +822,7 @@ set_global_input_locs(struct radv_shader_context *ctx, 
gl_shader_stage stage,
}
 
if (ctx->shader_info->info.loads_push_constants) {
-   set_loc_shader(ctx, AC_UD_PUSH_CONSTANTS, user_sgpr_idx, 2);
+   set_loc_shader_ptr(ctx, AC_UD_PUSH_CONSTANTS, user_sgpr_idx);
}
 }
 
@@ -830,8 +836,8 @@ set_vs_specific_input_locs(struct radv_shader_context *ctx,
(stage == MESA_SHADER_VERTEX ||
 (has_previous_stage && previous_stage == MESA_SHADER_VERTEX))) {
if (ctx->shader_info->info.vs.has_vertex_buffers) {
-   set_loc_shader(ctx, AC_UD_VS_VERTEX_BUFFERS,
-  user_sgpr_idx, 2);
+   set_loc_shader_ptr(ctx, AC_UD_VS_VERTEX_BUFFERS,
+  user_sgpr_idx);
}
 
unsigned vs_num = 2;
@@ -1129,8 +1135,8 @@ static void create_function(struct radv_shader_context 
*ctx,
user_sgpr_idx = 0;
 
if (ctx->options->supports_spill || user_sgpr_info.need_ring_offsets) {
-   set_loc_shader(ctx, AC_UD_SCRATCH_RING_OFFSETS,
-  &user_sgpr_idx, 2);
+   set_loc_shader_ptr(ctx, AC_UD_SCRATCH_RING_OFFSETS,
+  &user_sgpr_idx);
if (ctx->options->supports_spill) {
ctx->ring_offsets = ac_build_intrinsic(&ctx->ac, 
"llvm.amdgcn.implicit.buffer.ptr",
   
LLVMPointerType(ctx->ac.i8, AC_CONST_ADDR_SPACE),

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


Mesa (master): radv: add support for 32-bit pointers in user data SGPRs

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

Author: Samuel Pitoiset 
Date:   Wed May 16 17:40:47 2018 +0200

radv: add support for 32-bit pointers in user data SGPRs

We still use 64-bit GPU pointers for all ring buffers because
llvm.amdgcn.implicit.buffer.ptr doesn't seem to support 32-bit
GPU pointers for now. This can be improved later anyways.

Vega10:
Totals from affected shaders:
SGPRS: 1008722 -> 1026710 (1.78 %)
VGPRS: 706580 -> 707136 (0.08 %)
Spilled SGPRs: 22555 -> 22209 (-1.53 %)
Spilled VGPRs: 75 -> 75 (0.00 %)
Code Size: 34819208 -> 35202140 (1.10 %) bytes
Max Waves: 175423 -> 175086 (-0.19 %)

Polaris10:
Totals from affected shaders:
SGPRS: 1029849 -> 1036517 (0.65 %)
VGPRS: 709984 -> 708872 (-0.16 %)
Spilled SGPRs: 22672 -> 22309 (-1.60 %)
Spilled VGPRs: 82 -> 66 (-19.51 %)
Scratch size: 76 -> 60 (-21.05 %) dwords per thread
Code Size: 34915336 -> 35309752 (1.13 %) bytes
Max Waves: 151221 -> 151677 (0.30 %)

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

---

 src/amd/vulkan/radv_cmd_buffer.c  | 13 +++--
 src/amd/vulkan/radv_device.c  |  6 --
 src/amd/vulkan/radv_nir_to_llvm.c | 24 +++-
 src/amd/vulkan/radv_private.h | 18 ++
 4 files changed, 40 insertions(+), 21 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 3636b2c8d9..5ab577b4c5 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -586,11 +586,12 @@ radv_emit_userdata_address(struct radv_cmd_buffer 
*cmd_buffer,
uint32_t base_reg = pipeline->user_data_0[stage];
if (loc->sgpr_idx == -1)
return;
-   assert(loc->num_sgprs == 2);
+
+   assert(loc->num_sgprs == (HAVE_32BIT_POINTERS ? 1 : 2));
assert(!loc->indirect);
 
-   radv_emit_shader_pointer(cmd_buffer->cs,
-base_reg + loc->sgpr_idx * 4, va);
+   radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
+base_reg + loc->sgpr_idx * 4, va, false);
 }
 
 static void
@@ -1442,10 +1443,10 @@ emit_stage_descriptor_set_userdata(struct 
radv_cmd_buffer *cmd_buffer,
return;
 
assert(!desc_set_loc->indirect);
-   assert(desc_set_loc->num_sgprs == 2);
+   assert(desc_set_loc->num_sgprs == (HAVE_32BIT_POINTERS ? 1 : 2));
 
-   radv_emit_shader_pointer(cmd_buffer->cs,
-base_reg + desc_set_loc->sgpr_idx * 4, va);
+   radv_emit_shader_pointer(cmd_buffer->device, cmd_buffer->cs,
+base_reg + desc_set_loc->sgpr_idx * 4, va, 
false);
 }
 
 static void
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index d6abab338e..61b4fba23f 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1963,7 +1963,8 @@ radv_emit_global_shader_pointers(struct radv_queue *queue,
   R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS};
 
for (int i = 0; i < ARRAY_SIZE(regs); ++i) {
-   radv_emit_shader_pointer(cs, regs[i], va);
+   radv_emit_shader_pointer(queue->device, cs, regs[i],
+va, true);
}
} else {
uint32_t regs[] = {R_00B030_SPI_SHADER_USER_DATA_PS_0,
@@ -1974,7 +1975,8 @@ radv_emit_global_shader_pointers(struct radv_queue *queue,
   R_00B530_SPI_SHADER_USER_DATA_LS_0};
 
for (int i = 0; i < ARRAY_SIZE(regs); ++i) {
-   radv_emit_shader_pointer(cs, regs[i], va);
+   radv_emit_shader_pointer(queue->device, cs, regs[i],
+va, true);
}
}
 }
diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 9e42983cd1..c2cc5038b8 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -569,7 +569,10 @@ set_loc_shader(struct radv_shader_context *ctx, int idx, 
uint8_t *sgpr_idx,
 static void
 set_loc_shader_ptr(struct radv_shader_context *ctx, int idx, uint8_t *sgpr_idx)
 {
-   set_loc_shader(ctx, idx, sgpr_idx, 2);
+   bool use_32bit_pointers = HAVE_32BIT_POINTERS &&
+ idx != AC_UD_SCRATCH_RING_OFFSETS;
+
+   set_loc_shader(ctx, idx, sgpr_idx, use_32bit_pointers ? 1 : 2);
 }
 
 static void
@@ -580,7 +583,7 @@ set_loc_desc(struct radv_shader_context *ctx, int idx,  
uint8_t *sgpr_idx,
&ctx->shader_info->user_sgprs_locs.descriptor_sets[idx];
assert(ud_info);
 
-   set_loc(ud_info

Mesa (master): radv: allocate the upload BO in the 32-bit addr space

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

Author: Samuel Pitoiset 
Date:   Wed May 16 17:32:38 2018 +0200

radv: allocate the upload BO in the 32-bit addr space

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index a8359ac092..3636b2c8d9 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -347,7 +347,8 @@ radv_cmd_buffer_resize_upload_buf(struct radv_cmd_buffer 
*cmd_buffer,
   new_size, 4096,
   RADEON_DOMAIN_GTT,
   RADEON_FLAG_CPU_ACCESS|
-  RADEON_FLAG_NO_INTERPROCESS_SHARING);
+  RADEON_FLAG_NO_INTERPROCESS_SHARING |
+  RADEON_FLAG_32BIT);
 
if (!bo) {
cmd_buffer->record_result = VK_ERROR_OUT_OF_DEVICE_MEMORY;

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


Mesa (master): radv/winsys: request high address

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

Author: Samuel Pitoiset 
Date:   Fri May 18 13:59:46 2018 +0200

radv/winsys: request high address

This is needed for 32-bit GPU pointers. Ported from RadeonSI.

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

---

 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index 8ed3e53e2d..f33cf02815 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -38,7 +38,6 @@
 
 #include "util/u_atomic.h"
 
-
 static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo);
 
 static int
@@ -306,7 +305,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
}
 
r = amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
- size, alignment, 0, &va, &va_handle, 0);
+ size, alignment, 0, &va, &va_handle,
+ AMDGPU_VA_RANGE_HIGH);
if (r)
goto error_va_alloc;
 
@@ -424,7 +424,8 @@ radv_amdgpu_winsys_bo_from_ptr(struct radeon_winsys *_ws,
goto error;
 
if (amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
- size, 1 << 12, 0, &va, &va_handle, 0))
+ size, 1 << 12, 0, &va, &va_handle,
+ AMDGPU_VA_RANGE_HIGH))
goto error_va_alloc;
 
if (amdgpu_bo_va_op(buf_handle, 0, size, va, 0, AMDGPU_VA_OP_MAP))
@@ -480,7 +481,8 @@ radv_amdgpu_winsys_bo_from_fd(struct radeon_winsys *_ws,
goto error_query;
 
r = amdgpu_va_range_alloc(ws->dev, amdgpu_gpu_va_range_general,
- result.alloc_size, 1 << 20, 0, &va, 
&va_handle, 0);
+ result.alloc_size, 1 << 20, 0, &va, 
&va_handle,
+ AMDGPU_VA_RANGE_HIGH);
if (r)
goto error_query;
 

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


Mesa (master): radv: fix computation of user sgprs for 32-bit pointers

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

Author: Samuel Pitoiset 
Date:   Mon May 21 16:57:54 2018 +0200

radv: fix computation of user sgprs for 32-bit pointers

With 32-bit pointers we only need one user SGPR per desc set.

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

---

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

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 39692e99fd..b174c027d9 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -694,8 +694,10 @@ static void allocate_user_sgprs(struct radv_shader_context 
*ctx,
 
uint32_t available_sgprs = ctx->options->chip_class >= GFX9 ? 32 : 16;
uint32_t remaining_sgprs = available_sgprs - user_sgpr_count;
+   uint32_t num_desc_set =
+   util_bitcount(ctx->shader_info->info.desc_set_used_mask);
 
-   if (remaining_sgprs / 2 < 
util_bitcount(ctx->shader_info->info.desc_set_used_mask)) {
+   if (remaining_sgprs / (HAVE_32BIT_POINTERS ? 1 : 2) < num_desc_set) {
user_sgpr_info->indirect_all_descriptor_sets = true;
}
 }

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


Mesa (master): radv: drop user_sgpr_info::sgpr_count

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

Author: Samuel Pitoiset 
Date:   Mon May 21 16:57:53 2018 +0200

radv: drop user_sgpr_info::sgpr_count

It's only used inside allocate_user_sgprs().

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 24 +++-
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index c2cc5038b8..39692e99fd 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -588,7 +588,6 @@ set_loc_desc(struct radv_shader_context *ctx, int idx,  
uint8_t *sgpr_idx,
 
 struct user_sgpr_info {
bool need_ring_offsets;
-   uint8_t sgpr_count;
bool indirect_all_descriptor_sets;
 };
 
@@ -635,6 +634,8 @@ static void allocate_user_sgprs(struct radv_shader_context 
*ctx,
bool needs_view_index,
struct user_sgpr_info *user_sgpr_info)
 {
+   uint8_t user_sgpr_count = 0;
+
memset(user_sgpr_info, 0, sizeof(struct user_sgpr_info));
 
/* until we sort out scratch/global buffers always assign ring offsets 
for gs/vs/es */
@@ -651,25 +652,25 @@ static void allocate_user_sgprs(struct 
radv_shader_context *ctx,
 
/* 2 user sgprs will nearly always be allocated for scratch/rings */
if (ctx->options->supports_spill || user_sgpr_info->need_ring_offsets) {
-   user_sgpr_info->sgpr_count += 2;
+   user_sgpr_count += 2;
}
 
switch (stage) {
case MESA_SHADER_COMPUTE:
if (ctx->shader_info->info.cs.uses_grid_size)
-   user_sgpr_info->sgpr_count += 3;
+   user_sgpr_count += 3;
break;
case MESA_SHADER_FRAGMENT:
-   user_sgpr_info->sgpr_count += 
ctx->shader_info->info.ps.needs_sample_positions;
+   user_sgpr_count += 
ctx->shader_info->info.ps.needs_sample_positions;
break;
case MESA_SHADER_VERTEX:
if (!ctx->is_gs_copy_shader)
-   user_sgpr_info->sgpr_count += count_vs_user_sgprs(ctx);
+   user_sgpr_count += count_vs_user_sgprs(ctx);
break;
case MESA_SHADER_TESS_CTRL:
if (has_previous_stage) {
if (previous_stage == MESA_SHADER_VERTEX)
-   user_sgpr_info->sgpr_count += 
count_vs_user_sgprs(ctx);
+   user_sgpr_count += count_vs_user_sgprs(ctx);
}
break;
case MESA_SHADER_TESS_EVAL:
@@ -677,7 +678,7 @@ static void allocate_user_sgprs(struct radv_shader_context 
*ctx,
case MESA_SHADER_GEOMETRY:
if (has_previous_stage) {
if (previous_stage == MESA_SHADER_VERTEX) {
-   user_sgpr_info->sgpr_count += 
count_vs_user_sgprs(ctx);
+   user_sgpr_count += count_vs_user_sgprs(ctx);
}
}
break;
@@ -686,19 +687,16 @@ static void allocate_user_sgprs(struct 
radv_shader_context *ctx,
}
 
if (needs_view_index)
-   user_sgpr_info->sgpr_count++;
+   user_sgpr_count++;
 
if (ctx->shader_info->info.loads_push_constants)
-   user_sgpr_info->sgpr_count += HAVE_32BIT_POINTERS ? 1 : 2;
+   user_sgpr_count += HAVE_32BIT_POINTERS ? 1 : 2;
 
uint32_t available_sgprs = ctx->options->chip_class >= GFX9 ? 32 : 16;
-   uint32_t remaining_sgprs = available_sgprs - user_sgpr_info->sgpr_count;
+   uint32_t remaining_sgprs = available_sgprs - user_sgpr_count;
 
if (remaining_sgprs / 2 < 
util_bitcount(ctx->shader_info->info.desc_set_used_mask)) {
-   user_sgpr_info->sgpr_count += HAVE_32BIT_POINTERS ? 1 : 2;
user_sgpr_info->indirect_all_descriptor_sets = true;
-   } else {
-   user_sgpr_info->sgpr_count += 
util_bitcount(ctx->shader_info->info.desc_set_used_mask) * 2;
}
 }
 

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


Mesa (master): radv: allocate descriptor BOs in the 32-bit addr space

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

Author: Samuel Pitoiset 
Date:   Wed May 16 17:32:57 2018 +0200

radv: allocate descriptor BOs in the 32-bit addr space

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

---

 src/amd/vulkan/radv_descriptor_set.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_descriptor_set.c 
b/src/amd/vulkan/radv_descriptor_set.c
index 9d783b8b6d..27dd5b08e2 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -594,7 +594,8 @@ VkResult radv_CreateDescriptorPool(
pool->bo = device->ws->buffer_create(device->ws, bo_size, 32,
 RADEON_DOMAIN_VRAM,
 
RADEON_FLAG_NO_INTERPROCESS_SHARING |
-RADEON_FLAG_READ_ONLY);
+RADEON_FLAG_READ_ONLY |
+RADEON_FLAG_32BIT);
pool->mapped_ptr = (uint8_t*)device->ws->buffer_map(pool->bo);
}
pool->size = bo_size;

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


Mesa (master): radv: fix centroid interpolation

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

Author: Samuel Pitoiset 
Date:   Mon May 21 11:15:51 2018 +0200

radv: fix centroid interpolation

It's legal to set the centroid and sample interpolation modes
when MSAA disabled. So, we have to initialize the centroid
inputs because the hardware doesn't.

This fixes rendering issues with DXVK and The Witness, World of
Warcraft, Trackmania and probably more games.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106315
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102390
CC: 18.0 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_nir_to_llvm.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 9b9619b877..2d91ded7fe 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2075,9 +2075,6 @@ static void
 prepare_interp_optimize(struct radv_shader_context *ctx,
 struct nir_shader *nir)
 {
-   if (!ctx->options->key.fs.multisample)
-   return;
-
bool uses_center = false;
bool uses_centroid = false;
nir_foreach_variable(variable, &nir->inputs) {

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


Mesa (master): radv: pass radv_nir_compiler_options directly to create_llvm_function()

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

Author: Samuel Pitoiset 
Date:   Fri May 18 10:43:06 2018 +0200

radv: pass radv_nir_compiler_options directly to create_llvm_function()

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

 src/amd/vulkan/radv_nir_to_llvm.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 1384bf0bdb..9b9619b877 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -480,7 +480,7 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef 
module,
  unsigned num_return_elems,
 struct arg_info *args,
 unsigned max_workgroup_size,
-bool unsafe_math)
+const struct radv_nir_compiler_options *options)
 {
LLVMTypeRef main_function_type, ret_type;
LLVMBasicBlockRef main_function_body;
@@ -516,7 +516,7 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef 
module,
 
"amdgpu-max-work-group-size",
 max_workgroup_size);
}
-   if (unsafe_math) {
+   if (options->unsafe_math) {
/* These were copied from some LLVM test. */
LLVMAddTargetDependentFunctionAttr(main_function,
   "less-precise-fpmad",
@@ -1106,8 +1106,7 @@ static void create_function(struct radv_shader_context 
*ctx,
 
ctx->main_function = create_llvm_function(
ctx->context, ctx->ac.module, ctx->ac.builder, NULL, 0, &args,
-   ctx->max_workgroup_size,
-   ctx->options->unsafe_math);
+   ctx->max_workgroup_size, ctx->options);
set_llvm_calling_convention(ctx->main_function, stage);
 
 

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


Mesa (master): radv: add radv_emit_shader_pointer() helper

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

Author: Samuel Pitoiset 
Date:   Thu May 17 14:08:43 2018 +0200

radv: add radv_emit_shader_pointer() helper

For future work (support for 32-bit GPU pointers).

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 13 ++---
 src/amd/vulkan/radv_device.c |  8 ++--
 src/amd/vulkan/radv_private.h| 10 ++
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 1ca687494a..a8359ac092 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -587,9 +587,9 @@ radv_emit_userdata_address(struct radv_cmd_buffer 
*cmd_buffer,
return;
assert(loc->num_sgprs == 2);
assert(!loc->indirect);
-   radeon_set_sh_reg_seq(cmd_buffer->cs, base_reg + loc->sgpr_idx * 4, 2);
-   radeon_emit(cmd_buffer->cs, va);
-   radeon_emit(cmd_buffer->cs, va >> 32);
+
+   radv_emit_shader_pointer(cmd_buffer->cs,
+base_reg + loc->sgpr_idx * 4, va);
 }
 
 static void
@@ -1442,10 +1442,9 @@ emit_stage_descriptor_set_userdata(struct 
radv_cmd_buffer *cmd_buffer,
 
assert(!desc_set_loc->indirect);
assert(desc_set_loc->num_sgprs == 2);
-   radeon_set_sh_reg_seq(cmd_buffer->cs,
- base_reg + desc_set_loc->sgpr_idx * 4, 2);
-   radeon_emit(cmd_buffer->cs, va);
-   radeon_emit(cmd_buffer->cs, va >> 32);
+
+   radv_emit_shader_pointer(cmd_buffer->cs,
+base_reg + desc_set_loc->sgpr_idx * 4, va);
 }
 
 static void
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 7067f5b01d..c52b3a591f 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1963,9 +1963,7 @@ radv_emit_global_shader_pointers(struct radv_queue *queue,
   R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS};
 
for (int i = 0; i < ARRAY_SIZE(regs); ++i) {
-   radeon_set_sh_reg_seq(cs, regs[i], 2);
-   radeon_emit(cs, va);
-   radeon_emit(cs, va >> 32);
+   radv_emit_shader_pointer(cs, regs[i], va);
}
} else {
uint32_t regs[] = {R_00B030_SPI_SHADER_USER_DATA_PS_0,
@@ -1976,9 +1974,7 @@ radv_emit_global_shader_pointers(struct radv_queue *queue,
   R_00B530_SPI_SHADER_USER_DATA_LS_0};
 
for (int i = 0; i < ARRAY_SIZE(regs); ++i) {
-   radeon_set_sh_reg_seq(cs, regs[i], 2);
-   radeon_emit(cs, va);
-   radeon_emit(cs, va >> 32);
+   radv_emit_shader_pointer(cs, regs[i], va);
}
}
 }
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index 304ed17f01..adfd75c2a8 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -59,6 +59,7 @@
 #include "ac_surface.h"
 #include "radv_descriptor_set.h"
 #include "radv_extensions.h"
+#include "radv_cs.h"
 
 #include 
 
@@ -1128,6 +1129,15 @@ bool radv_get_memory_fd(struct radv_device *device,
struct radv_device_memory *memory,
int *pFD);
 
+static inline void
+radv_emit_shader_pointer(struct radeon_winsys_cs *cs,
+uint32_t sh_offset, uint64_t va)
+{
+   radeon_set_sh_reg_seq(cs, sh_offset, 2);
+   radeon_emit(cs, va);
+   radeon_emit(cs, va >> 32);
+}
+
 static inline struct radv_descriptor_state *
 radv_get_descriptors_state(struct radv_cmd_buffer *cmd_buffer,
   VkPipelineBindPoint bind_point)

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


Mesa (master): radv: add some helpers for cleaning up radv_get_preamble_cs()

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

Author: Samuel Pitoiset 
Date:   Thu May 17 10:11:44 2018 +0200

radv: add some helpers for cleaning up radv_get_preamble_cs()

Because this function looks a bit ugly to me.

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

---

 src/amd/vulkan/radv_device.c | 214 ++-
 1 file changed, 128 insertions(+), 86 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 51b44cc222..7067f5b01d 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1861,6 +1861,128 @@ radv_get_hs_offchip_param(struct radv_device *device, 
uint32_t *max_offchip_buff
return hs_offchip_param;
 }
 
+static void
+radv_emit_gs_ring_sizes(struct radv_queue *queue, struct radeon_winsys_cs *cs,
+   struct radeon_winsys_bo *esgs_ring_bo,
+   uint32_t esgs_ring_size,
+   struct radeon_winsys_bo *gsvs_ring_bo,
+   uint32_t gsvs_ring_size)
+{
+   if (!esgs_ring_bo && !gsvs_ring_bo)
+   return;
+
+   if (esgs_ring_bo)
+   radv_cs_add_buffer(queue->device->ws, cs, esgs_ring_bo, 8);
+
+   if (gsvs_ring_bo)
+   radv_cs_add_buffer(queue->device->ws, cs, gsvs_ring_bo, 8);
+
+   if (queue->device->physical_device->rad_info.chip_class >= CIK) {
+   radeon_set_uconfig_reg_seq(cs, R_030900_VGT_ESGS_RING_SIZE, 2);
+   radeon_emit(cs, esgs_ring_size >> 8);
+   radeon_emit(cs, gsvs_ring_size >> 8);
+   } else {
+   radeon_set_config_reg_seq(cs, R_0088C8_VGT_ESGS_RING_SIZE, 2);
+   radeon_emit(cs, esgs_ring_size >> 8);
+   radeon_emit(cs, gsvs_ring_size >> 8);
+   }
+}
+
+static void
+radv_emit_tess_factor_ring(struct radv_queue *queue, struct radeon_winsys_cs 
*cs,
+  unsigned hs_offchip_param, unsigned tf_ring_size,
+  struct radeon_winsys_bo *tess_rings_bo)
+{
+   uint64_t tf_va;
+
+   if (!tess_rings_bo)
+   return;
+
+   tf_va = radv_buffer_get_va(tess_rings_bo);
+
+   radv_cs_add_buffer(queue->device->ws, cs, tess_rings_bo, 8);
+
+   if (queue->device->physical_device->rad_info.chip_class >= CIK) {
+   radeon_set_uconfig_reg(cs, R_030938_VGT_TF_RING_SIZE,
+  S_030938_SIZE(tf_ring_size / 4));
+   radeon_set_uconfig_reg(cs, R_030940_VGT_TF_MEMORY_BASE,
+  tf_va >> 8);
+   if (queue->device->physical_device->rad_info.chip_class >= 
GFX9) {
+   radeon_set_uconfig_reg(cs, 
R_030944_VGT_TF_MEMORY_BASE_HI,
+  S_030944_BASE_HI(tf_va >> 40));
+   }
+   radeon_set_uconfig_reg(cs, R_03093C_VGT_HS_OFFCHIP_PARAM,
+  hs_offchip_param);
+   } else {
+   radeon_set_config_reg(cs, R_008988_VGT_TF_RING_SIZE,
+ S_008988_SIZE(tf_ring_size / 4));
+   radeon_set_config_reg(cs, R_0089B8_VGT_TF_MEMORY_BASE,
+ tf_va >> 8);
+   radeon_set_config_reg(cs, R_0089B0_VGT_HS_OFFCHIP_PARAM,
+hs_offchip_param);
+   }
+}
+
+static void
+radv_emit_compute_scratch(struct radv_queue *queue, struct radeon_winsys_cs 
*cs,
+ struct radeon_winsys_bo *compute_scratch_bo)
+{
+   uint64_t scratch_va;
+
+   if (!compute_scratch_bo)
+   return;
+
+   scratch_va = radv_buffer_get_va(compute_scratch_bo);
+
+   radv_cs_add_buffer(queue->device->ws, cs, compute_scratch_bo, 8);
+
+   radeon_set_sh_reg_seq(cs, R_00B900_COMPUTE_USER_DATA_0, 2);
+   radeon_emit(cs, scratch_va);
+   radeon_emit(cs, S_008F04_BASE_ADDRESS_HI(scratch_va >> 32) |
+   S_008F04_SWIZZLE_ENABLE(1));
+}
+
+static void
+radv_emit_global_shader_pointers(struct radv_queue *queue,
+struct radeon_winsys_cs *cs,
+struct radeon_winsys_bo *descriptor_bo)
+{
+   uint64_t va;
+
+   if (!descriptor_bo)
+   return;
+
+   va = radv_buffer_get_va(descriptor_bo);
+
+   radv_cs_add_buffer(queue->device->ws, cs, descriptor_bo, 8);
+
+   if (queue->device->physical_device->rad_info.chip_class >= GFX9) {
+   uint32_t regs[] = {R_00B030_SPI_SHADER_USER_DATA_PS_0,
+  R_00B130_SPI_SHADER_USER_DATA_VS_0,
+ 

Mesa (master): radv: only declare the ESGS rings for pre GFX9 chips

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

Author: Samuel Pitoiset 
Date:   Tue May 15 22:27:28 2018 +0200

radv: only declare the ESGS rings for pre GFX9 chips

GFX9 uses LDS instead.

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 82b1e3637f..dba615025d 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -3017,9 +3017,16 @@ ac_nir_eliminate_const_vs_outputs(struct 
radv_shader_context *ctx)
 static void
 ac_setup_rings(struct radv_shader_context *ctx)
 {
-   if ((ctx->stage == MESA_SHADER_VERTEX && ctx->options->key.vs.as_es) ||
-   (ctx->stage == MESA_SHADER_TESS_EVAL && 
ctx->options->key.tes.as_es)) {
-   ctx->esgs_ring = ac_build_load_to_sgpr(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->ac.i32, RING_ESGS_VS, false));
+   if (ctx->options->chip_class <= VI &&
+   (ctx->stage == MESA_SHADER_GEOMETRY ||
+ctx->options->key.vs.as_es || ctx->options->key.tes.as_es)) {
+   unsigned ring = ctx->stage == MESA_SHADER_GEOMETRY ? 
RING_ESGS_GS
+  : 
RING_ESGS_VS;
+   LLVMValueRef offset = LLVMConstInt(ctx->ac.i32, ring, false);
+
+   ctx->esgs_ring = ac_build_load_to_sgpr(&ctx->ac,
+  ctx->ring_offsets,
+  offset);
}
 
if (ctx->is_gs_copy_shader) {
@@ -3030,7 +3037,6 @@ ac_setup_rings(struct radv_shader_context *ctx)
uint32_t num_entries = 64;
LLVMValueRef gsvs_ring_stride = LLVMConstInt(ctx->ac.i32, 
ctx->max_gsvs_emit_size, false);
LLVMValueRef gsvs_ring_desc = LLVMConstInt(ctx->ac.i32, 
ctx->max_gsvs_emit_size << 16, false);
-   ctx->esgs_ring = ac_build_load_to_sgpr(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->ac.i32, RING_ESGS_GS, false));
ctx->gsvs_ring = ac_build_load_to_sgpr(&ctx->ac, 
ctx->ring_offsets, LLVMConstInt(ctx->ac.i32, RING_GSVS_GS, false));
 
ctx->gsvs_ring = LLVMBuildBitCast(ctx->ac.builder, 
ctx->gsvs_ring, ctx->ac.v4i32, "");

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


Mesa (master): radv: do not emit unnecessary GS output stores

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

Author: Samuel Pitoiset 
Date:   Wed May 16 17:43:22 2018 +0200

radv: do not emit unnecessary GS output stores

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index b4af0f2941..05ae709685 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -1684,6 +1684,8 @@ visit_emit_vertex(struct ac_shader_abi *abi, unsigned 
stream, LLVMValueRef *addr
/* loop num outputs */
idx = 0;
for (unsigned i = 0; i < AC_LLVM_MAX_OUTPUTS; ++i) {
+   unsigned output_usage_mask =
+   ctx->shader_info->info.gs.output_usage_mask[i];
LLVMValueRef *out_ptr = &addrs[i * 4];
int length = 4;
int slot = idx;
@@ -1697,8 +1699,13 @@ visit_emit_vertex(struct ac_shader_abi *abi, unsigned 
stream, LLVMValueRef *addr
length = ctx->num_output_clips + ctx->num_output_culls;
if (length > 4)
slot_inc = 2;
+   output_usage_mask = (1 << length) - 1;
}
+
for (unsigned j = 0; j < length; j++) {
+   if (!(output_usage_mask & (1 << j)))
+   continue;
+
LLVMValueRef out_val = LLVMBuildLoad(ctx->ac.builder,
 out_ptr[j], "");
LLVMValueRef voffset = LLVMConstInt(ctx->ac.i32, (slot 
* 4 + j) * ctx->gs_max_out_vertices, false);

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


Mesa (master): radv: do not emit unnecessary ES output stores

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

Author: Samuel Pitoiset 
Date:   Wed May 16 17:43:23 2018 +0200

radv: do not emit unnecessary ES output stores

GFX9:
Totals from affected shaders:
SGPRS: 472 -> 464 (-1.69 %)
VGPRS: 576 -> 584 (1.39 %)
Code Size: 45432 -> 44324 (-2.44 %) bytes
Max Waves: 40 -> 40 (0.00 %)

VI:
SGPRS: 720 -> 720 (0.00 %)
VGPRS: 728 -> 728 (0.00 %)
Code Size: 45348 -> 43992 (-2.99 %) bytes
Max Waves: 120 -> 120 (0.00 %)

This affects Rise of Tomb Raider and the three Vulkan demos
that use a geometry shader (geometryshader, deferredshadows
and viewportarray).

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 26 +++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 05ae709685..82b1e3637f 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2582,14 +2582,26 @@ handle_es_outputs_post(struct radv_shader_context *ctx,
for (unsigned i = 0; i < AC_LLVM_MAX_OUTPUTS; ++i) {
LLVMValueRef dw_addr = NULL;
LLVMValueRef *out_ptr = &ctx->abi.outputs[i * 4];
+   unsigned output_usage_mask;
int param_index;
int length = 4;
 
if (!(ctx->output_mask & (1ull << i)))
continue;
 
-   if (i == VARYING_SLOT_CLIP_DIST0)
+   if (ctx->stage == MESA_SHADER_VERTEX) {
+   output_usage_mask =
+   ctx->shader_info->info.vs.output_usage_mask[i];
+   } else {
+   assert(ctx->stage == MESA_SHADER_TESS_EVAL);
+   output_usage_mask =
+   ctx->shader_info->info.tes.output_usage_mask[i];
+   }
+
+   if (i == VARYING_SLOT_CLIP_DIST0) {
length = ctx->num_output_clips + ctx->num_output_culls;
+   output_usage_mask = (1 << length) - 1;
+   }
 
param_index = shader_io_get_unique_index(i);
 
@@ -2598,14 +2610,22 @@ handle_es_outputs_post(struct radv_shader_context *ctx,
   LLVMConstInt(ctx->ac.i32, 
param_index * 4, false),
   "");
}
+
for (j = 0; j < length; j++) {
+   if (!(output_usage_mask & (1 << j)))
+   continue;
+
LLVMValueRef out_val = LLVMBuildLoad(ctx->ac.builder, 
out_ptr[j], "");
out_val = LLVMBuildBitCast(ctx->ac.builder, out_val, 
ctx->ac.i32, "");
 
if (ctx->ac.chip_class  >= GFX9) {
-   ac_lds_store(&ctx->ac, dw_addr,
+   LLVMValueRef dw_addr_offset =
+   LLVMBuildAdd(ctx->ac.builder, dw_addr,
+LLVMConstInt(ctx->ac.i32,
+ j, false), 
"");
+
+   ac_lds_store(&ctx->ac, dw_addr_offset,
 LLVMBuildLoad(ctx->ac.builder, 
out_ptr[j], ""));
-   dw_addr = LLVMBuildAdd(ctx->ac.builder, 
dw_addr, ctx->ac.i32_1, "");
} else {
ac_build_buffer_store_dword(&ctx->ac,
ctx->esgs_ring,

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


Mesa (master): radv: allow to print GPU info with RADV_DEBUG=info

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

Author: Samuel Pitoiset 
Date:   Wed May 16 15:52:37 2018 +0200

radv: allow to print GPU info with RADV_DEBUG=info

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

---

 src/amd/vulkan/radv_debug.h  | 1 +
 src/amd/vulkan/radv_device.c | 4 
 2 files changed, 5 insertions(+)

diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index 9dda9b6b0c..b6993cee1c 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -45,6 +45,7 @@ enum {
RADV_DEBUG_PREOPTIR  = 0x8000,
RADV_DEBUG_NO_DYNAMIC_BOUNDS = 0x1,
RADV_DEBUG_NO_OUT_OF_ORDER   = 0x2,
+   RADV_DEBUG_INFO  = 0x4,
 };
 
 enum {
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index e24b8c2a76..778887bd58 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -329,6 +329,9 @@ radv_physical_device_init(struct radv_physical_device 
*device,
goto fail;
}
 
+   if ((device->instance->debug_flags & RADV_DEBUG_INFO))
+   ac_print_gpu_info(&device->rad_info);
+
return VK_SUCCESS;
 
 fail:
@@ -391,6 +394,7 @@ static const struct debug_control radv_debug_options[] = {
{"preoptir", RADV_DEBUG_PREOPTIR},
{"nodynamicbounds", RADV_DEBUG_NO_DYNAMIC_BOUNDS},
{"nooutoforder", RADV_DEBUG_NO_OUT_OF_ORDER},
+   {"info", RADV_DEBUG_INFO},
{NULL, 0}
 };
 

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


Mesa (master): radv: remove the radv_finishme() when compiling shaders

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

Author: Samuel Pitoiset 
Date:   Thu May 17 09:56:48 2018 +0200

radv: remove the radv_finishme() when compiling shaders

Having an entrypoint different than "main" doesn't mean we
have multiple shaders per module.

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

---

 src/amd/vulkan/radv_shader.c | 4 
 1 file changed, 4 deletions(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 1968758a39..7589d9c88a 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -163,10 +163,6 @@ radv_shader_compile_to_nir(struct radv_device *device,
   const VkSpecializationInfo *spec_info,
   const VkPipelineCreateFlags flags)
 {
-   if (strcmp(entrypoint_name, "main") != 0) {
-   radv_finishme("Multiple shaders per module not really 
supported");
-   }
-
nir_shader *nir;
nir_function *entry_point;
if (module->nir) {

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


Mesa (master): radv: only pass the global BO list at submit time if enabled

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

Author: Samuel Pitoiset 
Date:   Thu May 17 11:36:09 2018 +0200

radv: only pass the global BO list at submit time if enabled

That way the winsys might use a faster path when the global
BO list is NULL.

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

---

 src/amd/vulkan/radv_device.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 2ce0c9dbd0..e24b8c2a76 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -2472,6 +2472,8 @@ VkResult radv_QueueSubmit(
 
for (uint32_t j = 0; j < pSubmits[i].commandBufferCount; j += 
advance) {
struct radeon_winsys_cs *initial_preamble = (do_flush 
&& !j) ? initial_flush_preamble_cs : initial_preamble_cs;
+   const struct radv_winsys_bo_list *bo_list = NULL;
+
advance = MIN2(max_cs_submission,
   pSubmits[i].commandBufferCount - j);
 
@@ -2481,12 +2483,14 @@ VkResult radv_QueueSubmit(
sem_info.cs_emit_wait = j == 0;
sem_info.cs_emit_signal = j + advance == 
pSubmits[i].commandBufferCount;
 
-   if (unlikely(queue->device->use_global_bo_list))
+   if (unlikely(queue->device->use_global_bo_list)) {

pthread_mutex_lock(&queue->device->bo_list.mutex);
+   bo_list = &queue->device->bo_list.list;
+   }
 
ret = queue->device->ws->cs_submit(ctx, 
queue->queue_idx, cs_array + j,
advance, 
initial_preamble, continue_preamble_cs,
-   &sem_info, 
&queue->device->bo_list.list,
+   &sem_info, bo_list,
can_patch, base_fence);
 
if (unlikely(queue->device->use_global_bo_list))

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


Mesa (master): radv: remove radv_device::llvm_supports_spill

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

Author: Samuel Pitoiset 
Date:   Thu May 17 09:56:47 2018 +0200

radv: remove radv_device::llvm_supports_spill

It's always true.

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

---

 src/amd/vulkan/radv_device.c  | 2 --
 src/amd/vulkan/radv_private.h | 1 -
 src/amd/vulkan/radv_shader.c  | 5 +
 3 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index a7f4a5ab7b..2ce0c9dbd0 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1454,8 +1454,6 @@ VkResult radv_CreateDevice(
device->always_use_syncobj = 
device->physical_device->rad_info.has_syncobj_wait_for_submit;
 #endif
 
-   device->llvm_supports_spill = true;
-
/* The maximum number of scratch waves. Scratch space isn't divided
 * evenly between CUs. The number is only a function of the number of 
CUs.
 * We can decrease the constant to decrease the scratch buffer size.
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index e3eed887fa..304ed17f01 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -624,7 +624,6 @@ struct radv_device {
struct radeon_winsys_cs *empty_cs[RADV_MAX_QUEUE_FAMILIES];
 
bool always_use_syncobj;
-   bool llvm_supports_spill;
bool has_distributed_tess;
bool pbb_allowed;
bool dfsm_allowed;
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index dfe63d60d4..1968758a39 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -376,9 +376,6 @@ radv_fill_shader_variant(struct radv_device *device,
struct radv_shader_info *info = &variant->info.info;
unsigned vgpr_comp_cnt = 0;
 
-   if (scratch_enabled && !device->llvm_supports_spill)
-   radv_finishme("shader scratch support only available with LLVM 
4.0");
-
variant->code_size = binary->code_size;
variant->rsrc2 = S_00B12C_USER_SGPR(variant->info.num_user_sgprs) |
 S_00B12C_SCRATCH_EN(scratch_enabled);
@@ -554,7 +551,7 @@ radv_shader_variant_create(struct radv_device *device,
options.key = *key;
 
options.unsafe_math = !!(device->instance->debug_flags & 
RADV_DEBUG_UNSAFE_MATH);
-   options.supports_spill = device->llvm_supports_spill;
+   options.supports_spill = true;
 
return shader_variant_create(device, module, shaders, shader_count, 
shaders[shader_count - 1]->info.stage,
 &options, false, code_out, code_size_out);

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


Mesa (master): radv: add generated files to .gitignore(s)

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

Author: Dieter Nützel 
Date:   Sun May 13 23:10:07 2018 +0200

radv: add generated files to .gitignore(s)

Signed-off-by: Dieter Nützel 
Reviewed-by: Samuel Pitoiset 

---

 src/amd/vulkan/.gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/amd/vulkan/.gitignore b/src/amd/vulkan/.gitignore
index 7c02e42bb0..1aabfc08a9 100644
--- a/src/amd/vulkan/.gitignore
+++ b/src/amd/vulkan/.gitignore
@@ -2,6 +2,7 @@
 /radv_entrypoints.c
 /radv_entrypoints.h
 /radv_extensions.c
+/radv_extensions.h
 /radv_timestamp.h
 /dev_icd.json
 /vk_format_table.c

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


Mesa (master): spirv: fix visiting inner loops with same break/continue block

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

Author: Samuel Pitoiset 
Date:   Tue May 15 12:00:30 2018 +0200

spirv: fix visiting inner loops with same break/continue block

We should stop walking through the CFG when the inner loop's
break block ends up as the same block as the outer loop's
continue block because we are already going to visit it.

This fixes the following assertion which ends up by crashing
in RADV or ANV:

SPIR-V parsing FAILED:
In file ../src/compiler/spirv/vtn_cfg.c:381
block->node.link.next == NULL
0 bytes into the SPIR-V binary

This also fixes a crash with a camera shader from SteamVR.

v2: make use of vtn_get_branch_type() and add an assertion

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106090
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106504
CC: 18.0 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Jason Ekstrand 

---

 src/compiler/spirv/vtn_cfg.c | 13 +
 1 file changed, 13 insertions(+)

diff --git a/src/compiler/spirv/vtn_cfg.c b/src/compiler/spirv/vtn_cfg.c
index e7d2f9ea61..ad4374112e 100644
--- a/src/compiler/spirv/vtn_cfg.c
+++ b/src/compiler/spirv/vtn_cfg.c
@@ -374,6 +374,19 @@ vtn_cfg_walk_blocks(struct vtn_builder *b, struct 
list_head *cf_list,
  vtn_cfg_walk_blocks(b, &loop->cont_body, new_loop_cont, NULL, NULL,
  new_loop_break, NULL, block);
 
+ enum vtn_branch_type branch_type =
+vtn_get_branch_type(b, new_loop_break, switch_case, switch_break,
+loop_break, loop_cont);
+
+ if (branch_type != vtn_branch_type_none) {
+/* Stop walking through the CFG when this inner loop's break block
+ * ends up as the same block as the outer loop's continue block
+ * because we are already going to visit it.
+ */
+vtn_assert(branch_type == vtn_branch_type_loop_continue);
+return;
+ }
+
  block = new_loop_break;
  continue;
   }

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


Mesa (master): radv: run the shader info pass before emitting the GS copy shader

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

Author: Samuel Pitoiset 
Date:   Mon May 14 16:04:34 2018 +0200

radv: run the shader info pass before emitting the GS copy shader

For further optimizations.

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 47c52dc437..2162ca58e0 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -3549,6 +3549,8 @@ radv_compile_gs_copy_shader(LLVMTargetMachineRef tm,
ctx.ac.builder = ac_create_builder(ctx.context, float_mode);
ctx.stage = MESA_SHADER_VERTEX;
 
+   radv_nir_shader_info_pass(geom_shader, options, &shader_info->info);
+
create_function(&ctx, MESA_SHADER_VERTEX, false, MESA_SHADER_VERTEX);
 
ctx.gs_max_out_vertices = geom_shader->info.gs.vertices_out;

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


Mesa (master): radv: scan the geometry shader output usage mask

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

Author: Samuel Pitoiset 
Date:   Mon May 14 16:04:35 2018 +0200

radv: scan the geometry shader output usage mask

For reducing the number of parameters that are exported by
the GS copy shader.

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

---

 src/amd/vulkan/radv_shader.h  | 3 +++
 src/amd/vulkan/radv_shader_info.c | 6 ++
 2 files changed, 9 insertions(+)

diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index b711cba80c..679fa44279 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -159,6 +159,9 @@ struct radv_shader_info {
} vs;
struct {
uint8_t output_usage_mask[VARYING_SLOT_VAR31 + 1];
+   } gs;
+   struct {
+   uint8_t output_usage_mask[VARYING_SLOT_VAR31 + 1];
} tes;
struct {
bool force_persample;
diff --git a/src/amd/vulkan/radv_shader_info.c 
b/src/amd/vulkan/radv_shader_info.c
index a436bd7534..b45b4c0c95 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -134,6 +134,12 @@ gather_intrinsic_store_var_info(const nir_shader *nir,
instr->const_index[0] << comp;
}
break;
+   case MESA_SHADER_GEOMETRY:
+   for (unsigned i = 0; i < attrib_count; i++) {
+   info->gs.output_usage_mask[idx + i + 
const_offset] |=
+   instr->const_index[0] << comp;
+   }
+   break;
case MESA_SHADER_TESS_EVAL:
for (unsigned i = 0; i < attrib_count; i++) {
info->tes.output_usage_mask[idx + i + 
const_offset] |=

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


Mesa (master): radv: reduce the number of parameters export by the GS copy shader

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

Author: Samuel Pitoiset 
Date:   Mon May 14 16:04:36 2018 +0200

radv: reduce the number of parameters export by the GS copy shader

By using the geometry shader output usage mask.

This improves all Vulkan demos that use a geometry shader
(ie. geometryshader, deferredshadows, viewportarray).

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

---

 src/amd/vulkan/radv_nir_to_llvm.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 2162ca58e0..b4af0f2941 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2493,10 +2493,9 @@ handle_vs_outputs_post(struct radv_shader_context *ctx,
output_usage_mask =
ctx->shader_info->info.tes.output_usage_mask[i];
} else {
-   /* Enable all channels for the GS copy shader because
-* we don't know the output usage mask currently.
-*/
-   output_usage_mask = 0xf;
+   assert(ctx->is_gs_copy_shader);
+   output_usage_mask =
+   ctx->shader_info->info.gs.output_usage_mask[i];
}
 
radv_export_param(ctx, param_count, values, output_usage_mask);

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


Mesa (master): radv: check that layout isn't NULL in radv_nir_shader_info_pass()

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

Author: Samuel Pitoiset 
Date:   Mon May 14 16:04:33 2018 +0200

radv: check that layout isn't NULL in radv_nir_shader_info_pass()

An upcoming patch will run the shader info pass on the
geometry shader just before emitting the GS copy shader.

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

---

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

diff --git a/src/amd/vulkan/radv_shader_info.c 
b/src/amd/vulkan/radv_shader_info.c
index aa06efc9dc..a436bd7534 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -424,7 +424,7 @@ radv_nir_shader_info_pass(const struct nir_shader *nir,
struct nir_function *func =
(struct nir_function 
*)exec_list_get_head_const(&nir->functions);
 
-   if (options->layout->dynamic_offset_count)
+   if (options->layout && options->layout->dynamic_offset_count)
info->loads_push_constants = true;
 
nir_foreach_variable(variable, &nir->inputs)

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


Mesa (master): radv: allow to dump the GS copy shader with RADV_DEBUG="shaders"

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

Author: Samuel Pitoiset 
Date:   Fri May 11 16:36:02 2018 +0200

radv: allow to dump the GS copy shader with RADV_DEBUG="shaders"

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

 src/amd/vulkan/radv_pipeline.c | 2 +-
 src/amd/vulkan/radv_shader.c   | 2 +-
 src/amd/vulkan/radv_shader.h   | 9 ++---
 3 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index d443f8271e..e6ac0721dc 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1984,7 +1984,7 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
radv_link_shaders(pipeline, nir);
 
for (int i = 0; i < MESA_SHADER_STAGES; ++i) {
-   if (modules[i] && radv_can_dump_shader(device, modules[i]))
+   if (modules[i] && radv_can_dump_shader(device, modules[i], 
false))
nir_print_shader(nir[i], stderr);
}
 
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index fde6309c97..dfe63d60d4 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -484,7 +484,7 @@ shader_variant_create(struct radv_device *device,
 
options->family = chip_family;
options->chip_class = device->physical_device->rad_info.chip_class;
-   options->dump_shader = radv_can_dump_shader(device, module);
+   options->dump_shader = radv_can_dump_shader(device, module, 
gs_copy_shader);
options->dump_preoptir = options->dump_shader &&
 device->instance->debug_flags & 
RADV_DEBUG_PREOPTIR;
options->record_llvm_ir = device->keep_shader_info;
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 182b69849c..12878307ec 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -329,11 +329,14 @@ radv_shader_dump_stats(struct radv_device *device,
 
 static inline bool
 radv_can_dump_shader(struct radv_device *device,
-struct radv_shader_module *module)
+struct radv_shader_module *module,
+bool is_gs_copy_shader)
 {
+   if (!(device->instance->debug_flags & RADV_DEBUG_DUMP_SHADERS))
+   return false;
+
/* Only dump non-meta shaders, useful for debugging purposes. */
-   return device->instance->debug_flags & RADV_DEBUG_DUMP_SHADERS &&
-  module && !module->nir;
+   return (module && !module->nir) || is_gs_copy_shader;
 }
 
 static inline bool

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


Mesa (master): radv: move {load,store}_var intrinsics scanning in different functions

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

Author: Samuel Pitoiset 
Date:   Thu May 10 17:15:41 2018 +0200

radv: move {load,store}_var intrinsics scanning in different functions

These are going to be crazy and we are probably going to add
more scan stuff in the future. Also use switch cases instead.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

 src/amd/vulkan/radv_shader_info.c | 127 --
 1 file changed, 80 insertions(+), 47 deletions(-)

diff --git a/src/amd/vulkan/radv_shader_info.c 
b/src/amd/vulkan/radv_shader_info.c
index 1fb350faed..aa06efc9dc 100644
--- a/src/amd/vulkan/radv_shader_info.c
+++ b/src/amd/vulkan/radv_shader_info.c
@@ -88,6 +88,83 @@ static void get_deref_offset(nir_deref_var *deref, unsigned 
*const_out)
 }
 
 static void
+gather_intrinsic_load_var_info(const nir_shader *nir,
+  const nir_intrinsic_instr *instr,
+  struct radv_shader_info *info)
+{
+   switch (nir->info.stage) {
+   case MESA_SHADER_VERTEX: {
+   nir_deref_var *dvar = instr->variables[0];
+   nir_variable *var = dvar->var;
+
+   if (var->data.mode == nir_var_shader_in) {
+   unsigned idx = var->data.location;
+   uint8_t mask = 
nir_ssa_def_components_read(&instr->dest.ssa);
+
+   info->vs.input_usage_mask[idx] |=
+   mask << var->data.location_frac;
+   }
+   break;
+   }
+   default:
+   break;
+   }
+}
+
+static void
+gather_intrinsic_store_var_info(const nir_shader *nir,
+   const nir_intrinsic_instr *instr,
+   struct radv_shader_info *info)
+{
+   nir_deref_var *dvar = instr->variables[0];
+   nir_variable *var = dvar->var;
+
+   if (var->data.mode == nir_var_shader_out) {
+   unsigned attrib_count = glsl_count_attribute_slots(var->type, 
false);
+   unsigned idx = var->data.location;
+   unsigned comp = var->data.location_frac;
+   unsigned const_offset = 0;
+
+   get_deref_offset(dvar, &const_offset);
+
+   switch (nir->info.stage) {
+   case MESA_SHADER_VERTEX:
+   for (unsigned i = 0; i < attrib_count; i++) {
+   info->vs.output_usage_mask[idx + i + 
const_offset] |=
+   instr->const_index[0] << comp;
+   }
+   break;
+   case MESA_SHADER_TESS_EVAL:
+   for (unsigned i = 0; i < attrib_count; i++) {
+   info->tes.output_usage_mask[idx + i + 
const_offset] |=
+   instr->const_index[0] << comp;
+   }
+   break;
+   case MESA_SHADER_TESS_CTRL: {
+   unsigned param = shader_io_get_unique_index(idx);
+   const struct glsl_type *type = var->type;
+
+   if (!var->data.patch)
+   type = glsl_get_array_element(var->type);
+
+   unsigned slots =
+   var->data.compact ? 
DIV_ROUND_UP(glsl_get_length(type), 4)
+ : 
glsl_count_attribute_slots(type, false);
+
+   if (idx == VARYING_SLOT_CLIP_DIST0)
+   slots = (nir->info.clip_distance_array_size +
+nir->info.cull_distance_array_size > 
4) ? 2 : 1;
+
+   mark_tess_output(info, var->data.patch, param, slots);
+   break;
+   }
+   default:
+   break;
+   }
+   }
+}
+
+static void
 gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
  struct radv_shader_info *info)
 {
@@ -197,55 +274,11 @@ gather_intrinsic_info(const nir_shader *nir, const 
nir_intrinsic_instr *instr,
info->ps.writes_memory = true;
break;
case nir_intrinsic_load_var:
-   if (nir->info.stage == MESA_SHADER_VERTEX) {
-   nir_deref_var *dvar = instr->variables[0];
-   nir_variable *var = dvar->var;
-
-   if (var->data.mode == nir_var_shader_in) {
-   unsigned idx = var->data.location;
-   uint8_t mask =
-   
nir_ssa_def_c

Mesa (master): radv: remove useless check in radv_create_shaders()

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

Author: Samuel Pitoiset 
Date:   Fri May 11 16:36:52 2018 +0200

radv: remove useless check in radv_create_shaders()

radv_can_dump_shader() already handles if module is NULL.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

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

diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index e6ac0721dc..3d242e05bf 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1984,7 +1984,7 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
radv_link_shaders(pipeline, nir);
 
for (int i = 0; i < MESA_SHADER_STAGES; ++i) {
-   if (modules[i] && radv_can_dump_shader(device, modules[i], 
false))
+   if (radv_can_dump_shader(device, modules[i], false))
nir_print_shader(nir[i], stderr);
}
 

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


Mesa (master): radv: minor cleanups in radv_fill_shader_variant()

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

Author: Samuel Pitoiset 
Date:   Fri May 11 09:46:46 2018 +0200

radv: minor cleanups in radv_fill_shader_variant()

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

 src/amd/vulkan/radv_shader.c | 29 +++--
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 27b3fbed16..07634870d4 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -371,6 +371,7 @@ radv_fill_shader_variant(struct radv_device *device,
 gl_shader_stage stage)
 {
bool scratch_enabled = variant->config.scratch_bytes_per_wave > 0;
+   struct radv_shader_info *info = &variant->info.info;
unsigned vgpr_comp_cnt = 0;
 
if (scratch_enabled && !device->llvm_supports_spill)
@@ -378,9 +379,9 @@ radv_fill_shader_variant(struct radv_device *device,
 
variant->code_size = binary->code_size;
variant->rsrc2 = S_00B12C_USER_SGPR(variant->info.num_user_sgprs) |
-   S_00B12C_SCRATCH_EN(scratch_enabled);
+S_00B12C_SCRATCH_EN(scratch_enabled);
 
-   variant->rsrc1 =  S_00B848_VGPRS((variant->config.num_vgprs - 1) / 4) |
+   variant->rsrc1 = S_00B848_VGPRS((variant->config.num_vgprs - 1) / 4) |
S_00B848_SGPRS((variant->config.num_sgprs - 1) / 8) |
S_00B848_DX10_CLAMP(1) |
S_00B848_FLOAT_MODE(variant->config.float_mode);
@@ -391,10 +392,11 @@ radv_fill_shader_variant(struct radv_device *device,
variant->rsrc2 |= S_00B12C_OC_LDS_EN(1);
break;
case MESA_SHADER_TESS_CTRL:
-   if (device->physical_device->rad_info.chip_class >= GFX9)
+   if (device->physical_device->rad_info.chip_class >= GFX9) {
vgpr_comp_cnt = variant->info.vs.vgpr_comp_cnt;
-   else
+   } else {
variant->rsrc2 |= S_00B12C_OC_LDS_EN(1);
+   }
break;
case MESA_SHADER_VERTEX:
case MESA_SHADER_GEOMETRY:
@@ -402,8 +404,7 @@ radv_fill_shader_variant(struct radv_device *device,
break;
case MESA_SHADER_FRAGMENT:
break;
-   case MESA_SHADER_COMPUTE: {
-   struct radv_shader_info *info = &variant->info.info;
+   case MESA_SHADER_COMPUTE:
variant->rsrc2 |=
S_00B84C_TGID_X_EN(info->cs.uses_block_id[0]) |
S_00B84C_TGID_Y_EN(info->cs.uses_block_id[1]) |
@@ -413,7 +414,6 @@ radv_fill_shader_variant(struct radv_device *device,
S_00B84C_TG_SIZE_EN(info->cs.uses_local_invocation_idx) 
|
S_00B84C_LDS_SIZE(variant->config.lds_size);
break;
-   }
default:
unreachable("unsupported shader type");
break;
@@ -421,7 +421,6 @@ radv_fill_shader_variant(struct radv_device *device,
 
if (device->physical_device->rad_info.chip_class >= GFX9 &&
stage == MESA_SHADER_GEOMETRY) {
-   struct radv_shader_info *info = &variant->info.info;
unsigned es_type = variant->info.gs.es_type;
unsigned gs_vgpr_comp_cnt, es_vgpr_comp_cnt;
 
@@ -436,23 +435,25 @@ radv_fill_shader_variant(struct radv_device *device,
/* If offsets 4, 5 are used, GS_VGPR_COMP_CNT is ignored and
 * VGPR[0:4] are always loaded.
 */
-   if (info->uses_invocation_id)
+   if (info->uses_invocation_id) {
gs_vgpr_comp_cnt = 3; /* VGPR3 contains InvocationID. */
-   else if (info->uses_prim_id)
+   } else if (info->uses_prim_id) {
gs_vgpr_comp_cnt = 2; /* VGPR2 contains PrimitiveID. */
-   else if (variant->info.gs.vertices_in >= 3)
+   } else if (variant->info.gs.vertices_in >= 3) {
gs_vgpr_comp_cnt = 1; /* VGPR1 contains offsets 2, 3 */
-   else
+   } else {
gs_vgpr_comp_cnt = 0; /* VGPR0 contains offsets 0, 1 */
+   }
 
variant->rsrc1 |= S_00B228_GS_VGPR_COMP_CNT(gs_vgpr_comp_cnt);
variant->rsrc2 |= S_00B22C_ES_VGPR_COMP_CNT(es_vgpr_comp_cnt) |
  S_00B22C_OC_LDS_EN(es_type == 
MESA_SHADER_TESS_EVAL);
} else if (device->physical_device->rad_info.chip_class >= GFX9 &&
-   stage == MESA_SHADER_TESS_CTRL)
+ 

Mesa (master): radv: move ac_build_if_state on top of radv_nir_to_llvm.c

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

Author: Samuel Pitoiset 
Date:   Fri May 11 09:37:11 2018 +0200

radv: move ac_build_if_state on top of radv_nir_to_llvm.c

These helpers will be needed for future work.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Timothy Arceri 

---

 src/amd/vulkan/radv_nir_to_llvm.c | 183 +++---
 1 file changed, 92 insertions(+), 91 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index e2d241e495..f98940f0d8 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -124,6 +124,98 @@ radv_shader_context_from_abi(struct ac_shader_abi *abi)
return container_of(abi, ctx, abi);
 }
 
+struct ac_build_if_state
+{
+   struct radv_shader_context *ctx;
+   LLVMValueRef condition;
+   LLVMBasicBlockRef entry_block;
+   LLVMBasicBlockRef true_block;
+   LLVMBasicBlockRef false_block;
+   LLVMBasicBlockRef merge_block;
+};
+
+static LLVMBasicBlockRef
+ac_build_insert_new_block(struct radv_shader_context *ctx, const char *name)
+{
+   LLVMBasicBlockRef current_block;
+   LLVMBasicBlockRef next_block;
+   LLVMBasicBlockRef new_block;
+
+   /* get current basic block */
+   current_block = LLVMGetInsertBlock(ctx->ac.builder);
+
+   /* chqeck if there's another block after this one */
+   next_block = LLVMGetNextBasicBlock(current_block);
+   if (next_block) {
+   /* insert the new block before the next block */
+   new_block = LLVMInsertBasicBlockInContext(ctx->context, 
next_block, name);
+   }
+   else {
+   /* append new block after current block */
+   LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
+   new_block = LLVMAppendBasicBlockInContext(ctx->context, 
function, name);
+   }
+   return new_block;
+}
+
+static void
+ac_nir_build_if(struct ac_build_if_state *ifthen,
+   struct radv_shader_context *ctx,
+   LLVMValueRef condition)
+{
+   LLVMBasicBlockRef block = LLVMGetInsertBlock(ctx->ac.builder);
+
+   memset(ifthen, 0, sizeof *ifthen);
+   ifthen->ctx = ctx;
+   ifthen->condition = condition;
+   ifthen->entry_block = block;
+
+   /* create endif/merge basic block for the phi functions */
+   ifthen->merge_block = ac_build_insert_new_block(ctx, "endif-block");
+
+   /* create/insert true_block before merge_block */
+   ifthen->true_block =
+   LLVMInsertBasicBlockInContext(ctx->context,
+ ifthen->merge_block,
+ "if-true-block");
+
+   /* successive code goes into the true block */
+   LLVMPositionBuilderAtEnd(ctx->ac.builder, ifthen->true_block);
+}
+
+/**
+ * End a conditional.
+ */
+static void
+ac_nir_build_endif(struct ac_build_if_state *ifthen)
+{
+   LLVMBuilderRef builder = ifthen->ctx->ac.builder;
+
+   /* Insert branch to the merge block from current block */
+   LLVMBuildBr(builder, ifthen->merge_block);
+
+   /*
+* Now patch in the various branch instructions.
+*/
+
+   /* Insert the conditional branch instruction at the end of entry_block 
*/
+   LLVMPositionBuilderAtEnd(builder, ifthen->entry_block);
+   if (ifthen->false_block) {
+   /* we have an else clause */
+   LLVMBuildCondBr(builder, ifthen->condition,
+   ifthen->true_block, ifthen->false_block);
+   }
+   else {
+   /* no else clause */
+   LLVMBuildCondBr(builder, ifthen->condition,
+   ifthen->true_block, ifthen->merge_block);
+   }
+
+   /* Resume building code at end of the ifthen->merge_block */
+   LLVMPositionBuilderAtEnd(builder, ifthen->merge_block);
+}
+
+
 static LLVMValueRef get_rel_patch_id(struct radv_shader_context *ctx)
 {
switch (ctx->stage) {
@@ -2502,97 +2594,6 @@ handle_ls_outputs_post(struct radv_shader_context *ctx)
}
 }
 
-struct ac_build_if_state
-{
-   struct radv_shader_context *ctx;
-   LLVMValueRef condition;
-   LLVMBasicBlockRef entry_block;
-   LLVMBasicBlockRef true_block;
-   LLVMBasicBlockRef false_block;
-   LLVMBasicBlockRef merge_block;
-};
-
-static LLVMBasicBlockRef
-ac_build_insert_new_block(struct radv_shader_context *ctx, const char *name)
-{
-   LLVMBasicBlockRef current_block;
-   LLVMBasicBlockRef next_block;
-   LLVMBasicBlockRef new_block;
-
-   /* get current basic block */
-   current_block = LLVMGetInsertBlock(ctx->ac.builder);
-
-   /* check if there's

Mesa (master): radv: move handling nosisched option in a better place

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

Author: Samuel Pitoiset 
Date:   Wed May  9 23:52:53 2018 +0200

radv: move handling nosisched option in a better place

It's a per-application optimization, so it makes more sense
to do that in radv_handle_per_app_options().

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

---

 src/amd/vulkan/radv_device.c | 18 ++
 1 file changed, 6 insertions(+), 12 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 08795dd6b6..a7f4a5ab7b 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -428,10 +428,12 @@ radv_handle_per_app_options(struct radv_instance 
*instance,
 
if (!strcmp(name, "Talos - Linux - 32bit") ||
!strcmp(name, "Talos - Linux - 64bit")) {
-   /* Force enable LLVM sisched for Talos because it looks safe
-* and it gives few more FPS.
-*/
-   instance->perftest_flags |= RADV_PERFTEST_SISCHED;
+   if (!(instance->debug_flags & RADV_DEBUG_NO_SISCHED)) {
+   /* Force enable LLVM sisched for Talos because it looks
+* safe and it gives few more FPS.
+*/
+   instance->perftest_flags |= RADV_PERFTEST_SISCHED;
+   }
}
 }
 
@@ -508,14 +510,6 @@ VkResult radv_CreateInstance(
 
radv_handle_per_app_options(instance, pCreateInfo->pApplicationInfo);
 
-   if (instance->debug_flags & RADV_DEBUG_NO_SISCHED) {
-   /* Disable sisched when the user requests it, this is mostly
-* useful when the driver force-enable sisched for the given
-* application.
-*/
-   instance->perftest_flags &= ~RADV_PERFTEST_SISCHED;
-   }
-
*pInstance = radv_instance_to_handle(instance);
 
return VK_SUCCESS;

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


Mesa (master): radv: fix multisample image copies

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

Author: Matthew Nicholls 
Date:   Wed May  2 14:03:52 2018 +0200

radv: fix multisample image copies

Previously before fb077b0728, the LOD parameter was being used in place of the
sample index, which would only copy the first sample to all samples in the
destination image. After that multisample image copies wouldn't copy anything
from my observations.

This fixes some copy_and_blit CTS tests.

v3.1: - set lod to 0 for nir_txf_ms (Samuel)
v2: - use GLSL_SAMPLER_DIM_MS instead of 2D (Samuel)
- updated commit description (Samuel)

Fix this properly by copying each sample in a separate radv_CmdDraw and using a
pipeline with the correct rasterizationSamples for the destination image.

Cc: 18.0 18.1 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_meta_blit2d.c | 288 +-
 src/amd/vulkan/radv_private.h |  18 +--
 2 files changed, 196 insertions(+), 110 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_blit2d.c 
b/src/amd/vulkan/radv_meta_blit2d.c
index e163056257..4a718c639d 100644
--- a/src/amd/vulkan/radv_meta_blit2d.c
+++ b/src/amd/vulkan/radv_meta_blit2d.c
@@ -100,7 +100,8 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
 struct radv_meta_blit2d_buffer *src_buf,
 struct blit2d_src_temps *tmp,
 enum blit2d_src_type src_type, VkFormat depth_format,
-VkImageAspectFlagBits aspects)
+VkImageAspectFlagBits aspects,
+uint32_t log2_samples)
 {
struct radv_device *device = cmd_buffer->device;
 
@@ -108,7 +109,7 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
create_bview(cmd_buffer, src_buf, &tmp->bview, depth_format);
 
radv_meta_push_descriptor_set(cmd_buffer, 
VK_PIPELINE_BIND_POINT_GRAPHICS,
- 
device->meta_state.blit2d.p_layouts[src_type],
+ 
device->meta_state.blit2d[log2_samples].p_layouts[src_type],
  0, /* set */
  1, /* descriptorWriteCount */
  (VkWriteDescriptorSet[]) {
@@ -123,7 +124,7 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
  });
 
radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
- 
device->meta_state.blit2d.p_layouts[src_type],
+ 
device->meta_state.blit2d[log2_samples].p_layouts[src_type],
  VK_SHADER_STAGE_FRAGMENT_BIT, 16, 4,
  &src_buf->pitch);
} else {
@@ -131,12 +132,12 @@ blit2d_bind_src(struct radv_cmd_buffer *cmd_buffer,
 
if (src_type == BLIT2D_SRC_TYPE_IMAGE_3D)

radv_CmdPushConstants(radv_cmd_buffer_to_handle(cmd_buffer),
- 
device->meta_state.blit2d.p_layouts[src_type],
+ 
device->meta_state.blit2d[log2_samples].p_layouts[src_type],
  VK_SHADER_STAGE_FRAGMENT_BIT, 16, 
4,
  &src_img->layer);
 
radv_meta_push_descriptor_set(cmd_buffer, 
VK_PIPELINE_BIND_POINT_GRAPHICS,
- 
device->meta_state.blit2d.p_layouts[src_type],
+ 
device->meta_state.blit2d[log2_samples].p_layouts[src_type],
  0, /* set */
  1, /* descriptorWriteCount */
  (VkWriteDescriptorSet[]) {
@@ -190,10 +191,11 @@ blit2d_bind_dst(struct radv_cmd_buffer *cmd_buffer,
 
 static void
 bind_pipeline(struct radv_cmd_buffer *cmd_buffer,
-  enum blit2d_src_type src_type, unsigned fs_key)
+  enum blit2d_src_type src_type, unsigned fs_key,
+  uint32_t log2_samples)
 {
VkPipeline pipeline =
-   
cmd_buffer->device->meta_state.blit2d.pipelines[src_type][fs_key];
+   
cmd_buffer->device->meta_state.blit2d[log2_samples].pipelines[src_type][fs_key];
 
radv_CmdBindPipeline(radv_cmd_buffer_to_handle(cmd_buffer),
 VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
@@ -201,10 +203,11 @@ bind_pipeline(struct radv_cmd_buffer *cmd_buffer,
 
 static void
 bind_depth_pipeline(struct radv_cmd_buffer *cmd_buffer,
-   enum blit2d_src_type src_type)
+   enum blit2d_src_type src_type,
+   uint32_t log2_samples)
 {
VkPipeline pipeline =
-

Mesa (master): radv: only disable out-of-order rast for perfect occlusion queries

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

Author: Samuel Pitoiset 
Date:   Tue Apr 24 17:06:18 2018 +0200

radv: only disable out-of-order rast for perfect occlusion queries

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 18 ++
 src/amd/vulkan/radv_query.c  |  4 ++--
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index baab8db617..baa28d408b 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -1334,6 +1334,7 @@ radv_emit_index_buffer(struct radv_cmd_buffer *cmd_buffer)
 
 void radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer)
 {
+   bool has_perfect_queries = 
cmd_buffer->state.perfect_occlusion_queries_enabled;
struct radv_pipeline *pipeline = cmd_buffer->state.pipeline;
uint32_t pa_sc_mode_cntl_1 =
pipeline ? pipeline->graphics.ms.pa_sc_mode_cntl_1 : 0;
@@ -1342,11 +1343,12 @@ void radv_set_db_count_control(struct radv_cmd_buffer 
*cmd_buffer)
if(!cmd_buffer->state.active_occlusion_queries) {
if (cmd_buffer->device->physical_device->rad_info.chip_class >= 
CIK) {
if 
(G_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(pa_sc_mode_cntl_1) &&
-   
pipeline->graphics.disable_out_of_order_rast_for_occlusion) {
+   
pipeline->graphics.disable_out_of_order_rast_for_occlusion &&
+   has_perfect_queries) {
/* Re-enable out-of-order rasterization if the
 * bound pipeline supports it and if it's has
-* been disabled before starting occlusion
-* queries.
+* been disabled before starting any perfect
+* occlusion queries.
 */
radeon_set_context_reg(cmd_buffer->cs,
   
R_028A4C_PA_SC_MODE_CNTL_1,
@@ -1359,22 +1361,22 @@ void radv_set_db_count_control(struct radv_cmd_buffer 
*cmd_buffer)
} else {
const struct radv_subpass *subpass = cmd_buffer->state.subpass;
uint32_t sample_rate = subpass ? 
util_logbase2(subpass->max_sample_count) : 0;
-   bool perfect = 
cmd_buffer->state.perfect_occlusion_queries_enabled;
 
if (cmd_buffer->device->physical_device->rad_info.chip_class >= 
CIK) {
db_count_control =
-   S_028004_PERFECT_ZPASS_COUNTS(perfect) |
+   
S_028004_PERFECT_ZPASS_COUNTS(has_perfect_queries) |
S_028004_SAMPLE_RATE(sample_rate) |
S_028004_ZPASS_ENABLE(1) |
S_028004_SLICE_EVEN_ENABLE(1) |
S_028004_SLICE_ODD_ENABLE(1);
 
if 
(G_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(pa_sc_mode_cntl_1) &&
-   
pipeline->graphics.disable_out_of_order_rast_for_occlusion) {
+   
pipeline->graphics.disable_out_of_order_rast_for_occlusion &&
+   has_perfect_queries) {
/* If the bound pipeline has enabled
 * out-of-order rasterization, we should
-* disable it before starting occlusion
-* queries.
+* disable it before starting any perfect
+* occlusion queries.
 */
pa_sc_mode_cntl_1 &= 
C_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE;
 
diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c
index 859a4a1d68..2b2e80f4e5 100644
--- a/src/amd/vulkan/radv_query.c
+++ b/src/amd/vulkan/radv_query.c
@@ -1140,12 +1140,12 @@ static void emit_end_query(struct radv_cmd_buffer 
*cmd_buffer,
 
cmd_buffer->state.active_occlusion_queries--;
if (cmd_buffer->state.active_occlusion_queries == 0) {
+   radv_set_db_count_control(cmd_buffer);
+
/* Reset the perfect occlusion queries hint now that no
 * queries are active.
 */
cmd_buffer->state.perfect_occlusion_queries_enabled = 
false;
-
-   radv_set_db_count_control(cmd_buffer);
}
 
radeon_emit(cs,

Mesa (master): radv: enable out-of-order rasterization by default

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

Author: Samuel Pitoiset 
Date:   Tue Apr 24 17:06:19 2018 +0200

radv: enable out-of-order rasterization by default

As the implementation is conservative, we can now enable it
by default. It can be disabled with RADV_DEBUG=nooutoforder.

Don't expect much more than 1% of improvements, but the gain
seems consistent.

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

---

 src/amd/vulkan/radv_debug.h  | 1 +
 src/amd/vulkan/radv_device.c | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index 03f218fcda..9dda9b6b0c 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -44,6 +44,7 @@ enum {
RADV_DEBUG_NO_SISCHED= 0x4000,
RADV_DEBUG_PREOPTIR  = 0x8000,
RADV_DEBUG_NO_DYNAMIC_BOUNDS = 0x1,
+   RADV_DEBUG_NO_OUT_OF_ORDER   = 0x2,
 };
 
 enum {
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 629957afec..ef32c37464 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -315,7 +315,7 @@ radv_physical_device_init(struct radv_physical_device 
*device,
device->has_out_of_order_rast = device->rad_info.chip_class >= VI &&
device->rad_info.max_se >= 2;
device->out_of_order_rast_allowed = device->has_out_of_order_rast &&
-   (device->instance->perftest_flags & 
RADV_PERFTEST_OUT_OF_ORDER);
+   !(device->instance->debug_flags & 
RADV_DEBUG_NO_OUT_OF_ORDER);
 
device->dcc_msaa_allowed = device->rad_info.chip_class == VI &&
   (device->instance->perftest_flags & 
RADV_PERFTEST_DCC_MSAA);
@@ -390,6 +390,7 @@ static const struct debug_control radv_debug_options[] = {
{"nosisched", RADV_DEBUG_NO_SISCHED},
{"preoptir", RADV_DEBUG_PREOPTIR},
{"nodynamicbounds", RADV_DEBUG_NO_DYNAMIC_BOUNDS},
+   {"nooutoforder", RADV_DEBUG_NO_OUT_OF_ORDER},
{NULL, 0}
 };
 
@@ -405,7 +406,6 @@ static const struct debug_control radv_perftest_options[] = 
{
{"sisched", RADV_PERFTEST_SISCHED},
{"localbos", RADV_PERFTEST_LOCAL_BOS},
{"binning", RADV_PERFTEST_BINNING},
-   {"outoforderrast", RADV_PERFTEST_OUT_OF_ORDER},
{"dccmsaa", RADV_PERFTEST_DCC_MSAA},
{NULL, 0}
 };

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


Mesa (master): radv: compute the number of subpass attachments correctly

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

Author: Samuel Pitoiset 
Date:   Fri Apr 27 10:53:13 2018 +0200

radv: compute the number of subpass attachments correctly

Only count color attachments twice if resolves are used, also
account for the depth stencil attachment if present.

Cc: 18.0 18.1 
Reviewed-by: Bas Nieuwenhuizen 
Signed-off-by: Samuel Pitoiset 

---

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

diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c
index d059af54f9..a7d54d7d61 100644
--- a/src/amd/vulkan/radv_pass.c
+++ b/src/amd/vulkan/radv_pass.c
@@ -87,8 +87,8 @@ VkResult radv_CreateRenderPass(
subpass_attachment_count +=
desc->inputAttachmentCount +
desc->colorAttachmentCount +
-   /* Count colorAttachmentCount again for 
resolve_attachments */
-   desc->colorAttachmentCount;
+   (desc->pResolveAttachments ? desc->colorAttachmentCount 
: 0) +
+   (desc->pDepthStencilAttachment != NULL);
}
 
if (subpass_attachment_count) {

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


Mesa (master): ac: fix texture query LOD for 1D textures on GFX9

2018-04-27 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: d38425ce872c4a00cfb691ae9dceca6a07afc516
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d38425ce872c4a00cfb691ae9dceca6a07afc516

Author: Samuel Pitoiset 
Date:   Wed Apr 25 18:15:52 2018 +0200

ac: fix texture query LOD for 1D textures on GFX9

1D textures are allocated as 2D which means we only need
one coordinate for texture query LOD.

Fixes: 625dcbbc456 ("amd/common: pass address components individually to
ac_build_image_intrinsic")
Cc: 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Nicolai Hähnle 

---

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

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 900c1c4afe..e4ae6ef49a 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -1309,6 +1309,14 @@ static LLVMValueRef build_tex_intrinsic(struct 
ac_nir_context *ctx,
}
}
 
+   /* Fixup for GFX9 which allocates 1D textures as 2D. */
+   if (instr->op == nir_texop_lod && ctx->ac.chip_class >= GFX9) {
+   if ((args->dim == ac_image_2darray ||
+args->dim == ac_image_2d) && !args->coords[1]) {
+   args->coords[1] = ctx->ac.i32_0;
+   }
+   }
+
args->attributes = AC_FUNC_ATTR_READNONE;
return ac_build_image_opcode(&ctx->ac, args);
 }

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


Mesa (master): radv: fix DCC enablement since partial MSAA implementation

2018-04-26 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: a6fbefa67b5b0ed1ee42a9034ee74dfaed1c389a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6fbefa67b5b0ed1ee42a9034ee74dfaed1c389a

Author: Samuel Pitoiset 
Date:   Wed Apr 25 10:56:15 2018 +0200

radv: fix DCC enablement since partial MSAA implementation

dcc_msaa_allowed is always false on GFX9+ and only true on VI
if RADV_PERFTEST=dccmsaa is set. This means DCC was disabled
in some situations where it should not.

This is likely going to fix a performance regression.

Fixes: 2f63b3dd09 ("radv: enable DCC for MSAA 2x textures on VI under an 
option")
Cc: 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_image.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 348f4c7b34..793f861f4f 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -133,12 +133,12 @@ radv_use_dcc_for_image(struct radv_device *device,
if (create_info->scanout)
return false;
 
-   /* FIXME: DCC for MSAA with 4x and 8x samples doesn't work yet. */
-   if (pCreateInfo->samples > 2)
-   return false;
-
-   /* TODO: Enable DCC for MSAA textures. */
-   if (!device->physical_device->dcc_msaa_allowed)
+   /* FIXME: DCC for MSAA with 4x and 8x samples doesn't work yet, while
+* 2x can be enabled with an option.
+*/
+   if (pCreateInfo->samples > 2 ||
+   (pCreateInfo->samples == 2 &&
+!device->physical_device->dcc_msaa_allowed))
return false;
 
/* Determine if the formats are DCC compatible. */

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


Mesa (master): radv: set ac_surf_info::num_channels correctly

2018-04-26 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: d7ffe3b384f4d1c15a9364768cf405d416522e60
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d7ffe3b384f4d1c15a9364768cf405d416522e60

Author: Samuel Pitoiset 
Date:   Wed Apr 25 11:22:17 2018 +0200

radv: set ac_surf_info::num_channels correctly

num_channels has been introduced since "ac/surface: don't set
the display flag for obviously unsupported cases".

Based on RadeonSI.

Fixes: e29facff315 ("ac/surface: don't set the display flag for obviously 
unsupported cases (v2)")
Cc: 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_image.c | 2 +-
 src/amd/vulkan/vk_format.h  | 7 +++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 793f861f4f..a6f3628c8f 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -968,7 +968,7 @@ radv_image_create(VkDevice _device,
image->info.samples = pCreateInfo->samples;
image->info.array_size = pCreateInfo->arrayLayers;
image->info.levels = pCreateInfo->mipLevels;
-   image->info.num_channels = 4; /* TODO: set this correctly */
+   image->info.num_channels = 
vk_format_get_nr_components(pCreateInfo->format);
 
image->vk_format = pCreateInfo->format;
image->tiling = pCreateInfo->tiling;
diff --git a/src/amd/vulkan/vk_format.h b/src/amd/vulkan/vk_format.h
index 43265ed3d9..b8cb4f4ed3 100644
--- a/src/amd/vulkan/vk_format.h
+++ b/src/amd/vulkan/vk_format.h
@@ -488,4 +488,11 @@ vk_to_non_srgb_format(VkFormat format)
}
 }
 
+static inline unsigned
+vk_format_get_nr_components(VkFormat format)
+{
+   const struct vk_format_description *desc = 
vk_format_description(format);
+   return desc->nr_channels;
+}
+
 #endif /* VK_FORMAT_H */

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


Mesa (master): ac: fix the number of coordinates for ac_image_get_lod and arrays

2018-04-23 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: d136a5fad9c7e67c1362453388914ecc60420883
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d136a5fad9c7e67c1362453388914ecc60420883

Author: Samuel Pitoiset 
Date:   Mon Apr 23 17:05:10 2018 +0200

ac: fix the number of coordinates for ac_image_get_lod and arrays

This fixes crashes for the following CTS:
dEQP-VK.glsl.texture_functions.query.texturequerylod.*

Cubemaps are the same as 2D arrays.

Fixes: 625dcbbc456 ("amd/common: pass address components individually to
ac_build_image_intrinsic")
Cc: 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Nicolai Hähnle 

---

 src/amd/common/ac_llvm_build.c | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c
index 02739f9da9..f21a5d2623 100644
--- a/src/amd/common/ac_llvm_build.c
+++ b/src/amd/common/ac_llvm_build.c
@@ -1521,6 +1521,20 @@ LLVMValueRef ac_build_image_opcode(struct 
ac_llvm_context *ctx,
LLVMValueRef addr;
unsigned num_addr = 0;
 
+   if (a->opcode == ac_image_get_lod) {
+   switch (a->dim) {
+   case ac_image_1darray:
+   num_coords = 1;
+   break;
+   case ac_image_2darray:
+   case ac_image_cube:
+   num_coords = 2;
+   break;
+   default:
+   break;
+   }
+   }
+
if (a->offset)
args[num_addr++] = ac_to_integer(ctx, a->offset);
if (a->bias)

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


Mesa (master): ac/nir: add missing round_slice for 1D arrays

2018-04-23 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 84fef802fb16cef68ec358cbfed1cac9c3bfa410
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=84fef802fb16cef68ec358cbfed1cac9c3bfa410

Author: Samuel Pitoiset 
Date:   Mon Apr 23 14:46:26 2018 +0200

ac/nir: add missing round_slice for 1D arrays

This fixes a bunch of CTS fails with 1D arrays:

dEQP-VK.glsl.texture_functions.texture*.sampler1darray_*

Fixes: 625dcbbc456 ("amd/common: pass address components individually to
ac_build_image_intrinsic")
Cc: 18.1 
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 
Reviewed-by: Nicolai Hähnle 

---

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

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 72c773522f..34efb2b9fe 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3397,6 +3397,13 @@ static void visit_tex(struct ac_nir_context *ctx, 
nir_tex_instr *instr)
}
 
/* Texture coordinates fixups */
+   if (instr->coord_components > 1 &&
+   instr->sampler_dim == GLSL_SAMPLER_DIM_1D &&
+   instr->is_array &&
+   instr->op != nir_texop_txf) {
+   args.coords[1] = apply_round_slice(&ctx->ac, args.coords[1]);
+   }
+
if (instr->coord_components > 2 &&
(instr->sampler_dim == GLSL_SAMPLER_DIM_2D ||
 instr->sampler_dim == GLSL_SAMPLER_DIM_MS ||

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


Mesa (master): ac: teach get_ac_sampler_dim() about subpass attachments

2018-04-23 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: e37e6435895b27024e857f3b12269578613bd920
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=e37e6435895b27024e857f3b12269578613bd920

Author: Samuel Pitoiset 
Date:   Mon Apr 23 16:55:39 2018 +0200

ac: teach get_ac_sampler_dim() about subpass attachments

Suggested by Nicolai.

Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 
Reviewed-by: Nicolai Hähnle 

---

 src/amd/common/ac_nir_to_llvm.c | 24 +++-
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index 34efb2b9fe..900c1c4afe 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -87,7 +87,6 @@ get_ac_sampler_dim(const struct ac_llvm_context *ctx, enum 
glsl_sampler_dim dim,
return is_array ? ac_image_1darray : ac_image_1d;
case GLSL_SAMPLER_DIM_2D:
case GLSL_SAMPLER_DIM_RECT:
-   case GLSL_SAMPLER_DIM_SUBPASS:
case GLSL_SAMPLER_DIM_EXTERNAL:
return is_array ? ac_image_2darray : ac_image_2d;
case GLSL_SAMPLER_DIM_3D:
@@ -95,8 +94,11 @@ get_ac_sampler_dim(const struct ac_llvm_context *ctx, enum 
glsl_sampler_dim dim,
case GLSL_SAMPLER_DIM_CUBE:
return ac_image_cube;
case GLSL_SAMPLER_DIM_MS:
-   case GLSL_SAMPLER_DIM_SUBPASS_MS:
return is_array ? ac_image_2darraymsaa : ac_image_2dmsaa;
+   case GLSL_SAMPLER_DIM_SUBPASS:
+   return ac_image_2darray;
+   case GLSL_SAMPLER_DIM_SUBPASS_MS:
+   return ac_image_2darraymsaa;
default:
unreachable("bad sampler dim");
}
@@ -2090,18 +2092,6 @@ static LLVMValueRef 
adjust_sample_index_using_fmask(struct ac_llvm_context *ctx,
return sample_index;
 }
 
-static bool
-glsl_is_array_image(const struct glsl_type *type)
-{
-   const enum glsl_sampler_dim dim = glsl_get_sampler_dim(type);
-
-   if (glsl_sampler_type_is_array(type))
-   return true;
-
-   return dim == GLSL_SAMPLER_DIM_SUBPASS ||
-  dim == GLSL_SAMPLER_DIM_SUBPASS_MS;
-}
-
 static void get_image_coords(struct ac_nir_context *ctx,
 const nir_intrinsic_instr *instr,
 struct ac_image_args *args)
@@ -2247,7 +2237,7 @@ static LLVMValueRef visit_image_load(struct 
ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_is_array_image(type));
+   glsl_sampler_type_is_array(type));
args.dmask = 15;
args.attributes = AC_FUNC_ATTR_READONLY;
if (var->data.image._volatile || var->data.image.coherent)
@@ -2290,7 +2280,7 @@ static void visit_image_store(struct ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_is_array_image(type));
+   glsl_sampler_type_is_array(type));
args.dmask = 15;
if (force_glc || var->data.image._volatile || 
var->data.image.coherent)
args.cache_policy |= ac_glc;
@@ -2381,7 +2371,7 @@ static LLVMValueRef visit_image_atomic(struct 
ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_is_array_image(type));
+   glsl_sampler_type_is_array(type));
 
return ac_build_image_opcode(&ctx->ac, &args);
}

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


Mesa (master): radv: advertise 8 bits of subpixel precision for viewports

2018-04-23 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 8328c64eb1a9b4c6d4ad33574491d92c86a5a500
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8328c64eb1a9b4c6d4ad33574491d92c86a5a500

Author: Józef Kucia 
Date:   Wed Apr 11 00:11:57 2018 +0200

radv: advertise 8 bits of subpixel precision for viewports

This is what radeonsi does.

Reviewed-by: Samuel Pitoiset 

---

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

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index d88d5f0642..25c0d47da8 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -865,7 +865,7 @@ void radv_GetPhysicalDeviceProperties(
.maxViewports = MAX_VIEWPORTS,
.maxViewportDimensions= { (1 << 14), (1 << 
14) },
.viewportBoundsRange  = { INT16_MIN, 
INT16_MAX },
-   .viewportSubPixelBits = 13, /* We take a 
float? */
+   .viewportSubPixelBits = 8,
.minMemoryMapAlignment= 4096, /* A page */
.minTexelBufferOffsetAlignment= 1,
.minUniformBufferOffsetAlignment  = 4,

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


Mesa (master): ac/nir: fix image dimension for subpass attachments

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 8f13975713a7a7b8d625e3561a7fc9ce202ac64b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f13975713a7a7b8d625e3561a7fc9ce202ac64b

Author: Samuel Pitoiset 
Date:   Fri Apr 20 18:06:43 2018 +0200

ac/nir: fix image dimension for subpass attachments

For subpass attachments we need one more coordinate with
the layer, so make them array types.

This fixes a bunch of CTS fails with RADV.

Fixes: 24fb3e6aa1 ("ac/nir: use ac_build_image_opcode for image intrinsics")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index ba7f353a9a..72c773522f 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2090,6 +2090,18 @@ static LLVMValueRef 
adjust_sample_index_using_fmask(struct ac_llvm_context *ctx,
return sample_index;
 }
 
+static bool
+glsl_is_array_image(const struct glsl_type *type)
+{
+   const enum glsl_sampler_dim dim = glsl_get_sampler_dim(type);
+
+   if (glsl_sampler_type_is_array(type))
+   return true;
+
+   return dim == GLSL_SAMPLER_DIM_SUBPASS ||
+  dim == GLSL_SAMPLER_DIM_SUBPASS_MS;
+}
+
 static void get_image_coords(struct ac_nir_context *ctx,
 const nir_intrinsic_instr *instr,
 struct ac_image_args *args)
@@ -2235,7 +2247,7 @@ static LLVMValueRef visit_image_load(struct 
ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_sampler_type_is_array(type));
+   glsl_is_array_image(type));
args.dmask = 15;
args.attributes = AC_FUNC_ATTR_READONLY;
if (var->data.image._volatile || var->data.image.coherent)
@@ -2278,7 +2290,7 @@ static void visit_image_store(struct ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_sampler_type_is_array(type));
+   glsl_is_array_image(type));
args.dmask = 15;
if (force_glc || var->data.image._volatile || 
var->data.image.coherent)
args.cache_policy |= ac_glc;
@@ -2369,7 +2381,7 @@ static LLVMValueRef visit_image_atomic(struct 
ac_nir_context *ctx,
args.resource = get_sampler_desc(ctx, instr->variables[0],
 AC_DESC_IMAGE, NULL, true, 
false);
args.dim = get_ac_image_dim(&ctx->ac, 
glsl_get_sampler_dim(type),
-   glsl_sampler_type_is_array(type));
+   glsl_is_array_image(type));
 
return ac_build_image_opcode(&ctx->ac, &args);
}

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


Mesa (master): radv/winsys: allow to submit up to 4 IBs for chips without chaining

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: fedd0a4215bcd387525000d76b77993ca38916ae
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fedd0a4215bcd387525000d76b77993ca38916ae

Author: Samuel Pitoiset 
Date:   Fri Apr 20 13:42:36 2018 +0200

radv/winsys: allow to submit up to 4 IBs for chips without chaining

The SI family doesn't support chaining which means the maximum
size in dwords per CS is limited. When that limit was reached
we failed to submit the CS and the application crashed.

This patch allows to submit up to 4 IBs which is currently the
limit, but recent amdgpu supports more than that.

Please note that we can reach the limit of 4 IBs per submit
but currently we can't improve that. The only solution is to
upgrade libdrm. That will be improved later but for now this
should fix crashes on SI or when using RADV_DEBUG=noibs.

Fixes: 36cb5508e89 ("radv/winsys: Fail early on overgrown cs.")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105775
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 218 --
 1 file changed, 168 insertions(+), 50 deletions(-)

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index c4b2232ce9..0cd870b7c8 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -68,6 +68,10 @@ struct radv_amdgpu_cs {
struct radeon_winsys_bo **virtual_buffers;
uint8_t *virtual_buffer_priorities;
int *virtual_buffer_hash_table;
+
+   /* For chips that don't support chaining. */
+   struct radeon_winsys_cs *old_cs_buffers;
+   unsignednum_old_cs_buffers;
 };
 
 static inline struct radv_amdgpu_cs *
@@ -201,6 +205,12 @@ static void radv_amdgpu_cs_destroy(struct radeon_winsys_cs 
*rcs)
for (unsigned i = 0; i < cs->num_old_ib_buffers; ++i)
cs->ws->base.buffer_destroy(cs->old_ib_buffers[i]);
 
+   for (unsigned i = 0; i < cs->num_old_cs_buffers; ++i) {
+   struct radeon_winsys_cs *rcs = &cs->old_cs_buffers[i];
+   free(rcs->buf);
+   }
+
+   free(cs->old_cs_buffers);
free(cs->old_ib_buffers);
free(cs->virtual_buffers);
free(cs->virtual_buffer_priorities);
@@ -286,9 +296,46 @@ static void radv_amdgpu_cs_grow(struct radeon_winsys_cs 
*_cs, size_t min_size)
/* The total ib size cannot exceed limit_dws dwords. */
if (ib_dws > limit_dws)
{
-   cs->failed = true;
+   /* The maximum size in dwords has been reached,
+* try to allocate a new one.
+*/
+   if (cs->num_old_cs_buffers + 1 >= 
AMDGPU_CS_MAX_IBS_PER_SUBMIT) {
+   /* TODO: Allow to submit more than 4 IBs. */
+   fprintf(stderr, "amdgpu: Maximum number of IBs "
+   "per submit reached.\n");
+   cs->failed = true;
+   cs->base.cdw = 0;
+   return;
+   }
+
+   cs->old_cs_buffers =
+   realloc(cs->old_cs_buffers,
+   (cs->num_old_cs_buffers + 1) * 
sizeof(*cs->old_cs_buffers));
+   if (!cs->old_cs_buffers) {
+   cs->failed = true;
+   cs->base.cdw = 0;
+   return;
+   }
+
+   /* Store the current one for submitting it later. */
+   cs->old_cs_buffers[cs->num_old_cs_buffers].cdw = 
cs->base.cdw;
+   cs->old_cs_buffers[cs->num_old_cs_buffers].max_dw = 
cs->base.max_dw;
+   cs->old_cs_buffers[cs->num_old_cs_buffers].buf = 
cs->base.buf;
+   cs->num_old_cs_buffers++;
+
+   /* Reset the cs, it will be re-allocated below. */
cs->base.cdw = 0;
-   return;
+   cs->base.buf = NULL;
+
+   /* Re-compute the number of dwords to allocate. */
+   ib_dws = MAX2(cs->base.cdw + min_size,
+ MIN2(cs->base.max_dw * 2, limit_dws));
+   if (ib_dws > limit_dws) {
+   fprintf(stderr, "amdgpu: Too high number of "
+   "dwords to allocate\n");
+   cs->fail

Mesa (master): ac/nir: handle nir_intrinsic_load_first_vertex like base_vertex

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: dd069e9b41cb667cc6290417a7ce83e1f9ab1349
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dd069e9b41cb667cc6290417a7ce83e1f9ab1349

Author: Samuel Pitoiset 
Date:   Fri Apr 20 16:58:24 2018 +0200

ac/nir: handle nir_intrinsic_load_first_vertex like base_vertex

This fixes a ton of CTS crashes.

Fixes: c366f422f0 ("nir: Offset vertex_id by first_vertex instead of 
base_vertex")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 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 f00091e825..ba7f353a9a 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -2815,10 +2815,10 @@ static void visit_intrinsic(struct ac_nir_context *ctx,
result = ac_build_gather_values(&ctx->ac, values, 3);
break;
}
-   case nir_intrinsic_load_base_vertex: {
+   case nir_intrinsic_load_base_vertex:
+   case nir_intrinsic_load_first_vertex:
result = ctx->abi->load_base_vertex(ctx->abi);
break;
-   }
case nir_intrinsic_load_local_group_size:
result = ctx->abi->load_local_group_size(ctx->abi);
break;

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


Mesa (master): radv/winsys: allow local BOs on APUs

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: b21a4efb55359cc1ddcb6cfd99982e3bddfc8332
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b21a4efb55359cc1ddcb6cfd99982e3bddfc8332

Author: Samuel Pitoiset 
Date:   Fri Apr 20 15:11:24 2018 +0200

radv/winsys: allow local BOs on APUs

Ported from RadeonSI.

Local BOs ignore BO priorities, and we don't need those on APUs.

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

---

 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index 32f263addd..e2060651e4 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -347,7 +347,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
request.flags |= AMDGPU_GEM_CREATE_CPU_GTT_USWC;
if (!(flags & RADEON_FLAG_IMPLICIT_SYNC) && ws->info.drm_minor >= 22)
request.flags |= AMDGPU_GEM_CREATE_EXPLICIT_SYNC;
-   if (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING && ws->info.drm_minor 
>= 20 && ws->use_local_bos) {
+   if (flags & RADEON_FLAG_NO_INTERPROCESS_SHARING &&
+   ws->info.has_local_buffers && ws->use_local_bos) {
bo->base.is_local = true;
request.flags |= AMDGPU_GEM_CREATE_VM_ALWAYS_VALID;
}

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


Mesa (master): Revert "radv: Don't store buffer references in the descriptor set."

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 7bd5367546971f65c8210c0b44b8f21c0b8811c4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7bd5367546971f65c8210c0b44b8f21c0b8811c4

Author: Samuel Pitoiset 
Date:   Thu Apr 19 13:39:17 2018 +0200

Revert "radv: Don't store buffer references in the descriptor set."

In order to reduce a performance regression introduced by
4b13fe55a4 ("radv: Keep a global BO list for VkMemory."),
we are going to maintain two different paths.

One when VK_EXT_descriptor_indexing is enabled by the
application because we need to have a global BO list, and
one (the old one) when it's not enabled.

With Talos on Polaris, the global BO list reduces performance
by 10% which is too much for me.

This reverts commit ab6cadd3ecc7fbdd9079808b407674e0b19c52f0.
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_cmd_buffer.c |  4 ++
 src/amd/vulkan/radv_debug.c  |  3 ++
 src/amd/vulkan/radv_descriptor_set.c | 82 ++--
 src/amd/vulkan/radv_descriptor_set.h |  4 ++
 src/amd/vulkan/radv_private.h|  2 +
 5 files changed, 82 insertions(+), 13 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 1afdeda486..b06429abd7 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2206,6 +2206,10 @@ radv_bind_descriptor_set(struct radv_cmd_buffer 
*cmd_buffer,
 
assert(!(set->layout->flags & 
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
 
+   for (unsigned j = 0; j < set->layout->buffer_count; ++j)
+   if (set->descriptors[j])
+   radv_cs_add_buffer(ws, cmd_buffer->cs, 
set->descriptors[j], 7);
+
if(set->bo)
radv_cs_add_buffer(ws, cmd_buffer->cs, set->bo, 8);
 }
diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index 2e9e016523..368bc4b5d0 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -250,6 +250,7 @@ radv_dump_descriptor_set(enum chip_class chip_class,
fprintf(f, "\tshader_stages: %x\n", layout->shader_stages);
fprintf(f, "\tdynamic_shader_stages: %x\n",
layout->dynamic_shader_stages);
+   fprintf(f, "\tbuffer_count: %d\n", layout->buffer_count);
fprintf(f, "\tdynamic_offset_count: %d\n",
layout->dynamic_offset_count);
fprintf(f, "\n");
@@ -265,6 +266,8 @@ radv_dump_descriptor_set(enum chip_class chip_class,
layout->binding[i].array_size);
fprintf(f, "\t\toffset: %d\n",
layout->binding[i].offset);
+   fprintf(f, "\t\tbuffer_offset: %d\n",
+   layout->binding[i].buffer_offset);
fprintf(f, "\t\tdynamic_offset_offset: %d\n",
layout->binding[i].dynamic_offset_offset);
fprintf(f, "\t\tdynamic_offset_count: %d\n",
diff --git a/src/amd/vulkan/radv_descriptor_set.c 
b/src/amd/vulkan/radv_descriptor_set.c
index 55b4aaa388..4b08a1f0f8 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -117,12 +117,14 @@ VkResult radv_CreateDescriptorSetLayout(
 
memset(set_layout->binding, 0, size - sizeof(struct 
radv_descriptor_set_layout));
 
+   uint32_t buffer_count = 0;
uint32_t dynamic_offset_count = 0;
 
for (uint32_t j = 0; j < pCreateInfo->bindingCount; j++) {
const VkDescriptorSetLayoutBinding *binding = bindings + j;
uint32_t b = binding->binding;
uint32_t alignment;
+   unsigned binding_buffer_count = 0;
 
switch (binding->descriptorType) {
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:
@@ -131,6 +133,7 @@ VkResult radv_CreateDescriptorSetLayout(
set_layout->binding[b].dynamic_offset_count = 1;
set_layout->dynamic_shader_stages |= 
binding->stageFlags;
set_layout->binding[b].size = 0;
+   binding_buffer_count = 1;
alignment = 1;
break;
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER:
@@ -138,6 +141,7 @@ VkResult radv_CreateDescriptorSetLayout(
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
set_layout->binding[b].size = 16;
+   binding_buffer_count = 1;
alignment = 16;
break;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE:
@@ -145,11 +149,13 @@ VkResult radv_CreateDescriptorSetLayout(
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:

Mesa (master): radv: use a global BO list only for VK_EXT_descriptor_indexing

2018-04-20 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 5c1233ed620754c1691ffc6fc68d3f58f29a8d03
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c1233ed620754c1691ffc6fc68d3f58f29a8d03

Author: Samuel Pitoiset 
Date:   Thu Apr 19 13:48:33 2018 +0200

radv: use a global BO list only for VK_EXT_descriptor_indexing

Maintaining two different paths is annoying but this gets
rid of the performance regression introduced by the global
BO list.

We might find a better solution in the future, but for now
just keeps two paths.

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

---

 src/amd/vulkan/radv_cmd_buffer.c |  8 +---
 src/amd/vulkan/radv_device.c | 32 ++--
 src/amd/vulkan/radv_private.h|  3 +++
 3 files changed, 34 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index b06429abd7..baab8db617 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2206,9 +2206,11 @@ radv_bind_descriptor_set(struct radv_cmd_buffer 
*cmd_buffer,
 
assert(!(set->layout->flags & 
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR));
 
-   for (unsigned j = 0; j < set->layout->buffer_count; ++j)
-   if (set->descriptors[j])
-   radv_cs_add_buffer(ws, cmd_buffer->cs, 
set->descriptors[j], 7);
+   if (!cmd_buffer->device->use_global_bo_list) {
+   for (unsigned j = 0; j < set->layout->buffer_count; ++j)
+   if (set->descriptors[j])
+   radv_cs_add_buffer(ws, cmd_buffer->cs, 
set->descriptors[j], 7);
+   }
 
if(set->bo)
radv_cs_add_buffer(ws, cmd_buffer->cs, set->bo, 8);
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 9950ed40f1..edf099e4f0 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -1302,8 +1302,14 @@ radv_bo_list_finish(struct radv_bo_list *bo_list)
pthread_mutex_destroy(&bo_list->mutex);
 }
 
-static VkResult radv_bo_list_add(struct radv_bo_list *bo_list, struct 
radeon_winsys_bo *bo)
+static VkResult radv_bo_list_add(struct radv_device *device,
+struct radeon_winsys_bo *bo)
 {
+   struct radv_bo_list *bo_list = &device->bo_list;
+
+   if (unlikely(!device->use_global_bo_list))
+   return VK_SUCCESS;
+
pthread_mutex_lock(&bo_list->mutex);
if (bo_list->list.count == bo_list->capacity) {
unsigned capacity = MAX2(4, bo_list->capacity * 2);
@@ -1323,8 +1329,14 @@ static VkResult radv_bo_list_add(struct radv_bo_list 
*bo_list, struct radeon_win
return VK_SUCCESS;
 }
 
-static void radv_bo_list_remove(struct radv_bo_list *bo_list, struct 
radeon_winsys_bo *bo)
+static void radv_bo_list_remove(struct radv_device *device,
+   struct radeon_winsys_bo *bo)
 {
+   struct radv_bo_list *bo_list = &device->bo_list;
+
+   if (unlikely(!device->use_global_bo_list))
+   return;
+
pthread_mutex_lock(&bo_list->mutex);
for(unsigned i = 0; i < bo_list->list.count; ++i) {
if (bo_list->list.bos[i] == bo) {
@@ -1434,6 +1446,12 @@ VkResult radv_CreateDevice(
 
keep_shader_info = device->enabled_extensions.AMD_shader_info;
 
+   /* With update after bind we can't attach bo's to the command buffer
+* from the descriptor set anymore, so we have to use a global BO list.
+*/
+   device->use_global_bo_list =
+   device->enabled_extensions.EXT_descriptor_indexing;
+
mtx_init(&device->shader_slab_mutex, mtx_plain);
list_inithead(&device->shader_slabs);
 
@@ -2506,14 +2524,16 @@ VkResult radv_QueueSubmit(
sem_info.cs_emit_wait = j == 0;
sem_info.cs_emit_signal = j + advance == 
pSubmits[i].commandBufferCount;
 
-   pthread_mutex_lock(&queue->device->bo_list.mutex);
+   if (unlikely(queue->device->use_global_bo_list))
+   
pthread_mutex_lock(&queue->device->bo_list.mutex);
 
ret = queue->device->ws->cs_submit(ctx, 
queue->queue_idx, cs_array + j,
advance, 
initial_preamble, continue_preamble_cs,
&sem_info, 
&queue->device->bo_list.list,
can_patch, base_fence);
 
-   pthread_mutex_unlock(&queue->device->bo_list.mutex);
+   if (unlikely(queue->device->use_global_bo_list))
+   
pthread_mutex_unl

Mesa (master): radv: enable DCC for MSAA 2x textures on VI under an option

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 2f63b3dd09cb516b83537504adf36a0227e3f874
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2f63b3dd09cb516b83537504adf36a0227e3f874

Author: Samuel Pitoiset 
Date:   Tue Apr 17 16:05:18 2018 +0200

radv: enable DCC for MSAA 2x textures on VI under an option

This can be enabled with RADV_PERFTEST=dccmsaa.

DCC for MSAA textures is actually not as easy to implement. It
looks like there is some corner cases. I will improve support
incrementally.

Vega support, as well as Polaris improvements, will be added later.

No CTS changes on Polaris using RADV_DEBUG=zerovram and
RADV_PERFTEST=dccmsaa.

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

---

 src/amd/vulkan/radv_debug.h   | 1 +
 src/amd/vulkan/radv_device.c  | 4 
 src/amd/vulkan/radv_image.c   | 6 +-
 src/amd/vulkan/radv_private.h | 3 +++
 4 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h
index f35991fa4e..79c624aec1 100644
--- a/src/amd/vulkan/radv_debug.h
+++ b/src/amd/vulkan/radv_debug.h
@@ -51,6 +51,7 @@ enum {
RADV_PERFTEST_LOCAL_BOS  =   0x4,
RADV_PERFTEST_BINNING =   0x8,
RADV_PERFTEST_OUT_OF_ORDER   =  0x10,
+   RADV_PERFTEST_DCC_MSAA   =  0x20,
 };
 
 bool
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index fd11cedcbf..14ecbd0200 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -314,6 +314,9 @@ radv_physical_device_init(struct radv_physical_device 
*device,
device->out_of_order_rast_allowed = device->has_out_of_order_rast &&
(device->instance->perftest_flags & 
RADV_PERFTEST_OUT_OF_ORDER);
 
+   device->dcc_msaa_allowed = device->rad_info.chip_class == VI &&
+  (device->instance->perftest_flags & 
RADV_PERFTEST_DCC_MSAA);
+
radv_physical_device_init_mem_types(device);
radv_fill_device_extension_table(device, &device->supported_extensions);
 
@@ -399,6 +402,7 @@ static const struct debug_control radv_perftest_options[] = 
{
{"localbos", RADV_PERFTEST_LOCAL_BOS},
{"binning", RADV_PERFTEST_BINNING},
{"outoforderrast", RADV_PERFTEST_OUT_OF_ORDER},
+   {"dccmsaa", RADV_PERFTEST_DCC_MSAA},
{NULL, 0}
 };
 
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index ba8f14d91b..348f4c7b34 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -133,8 +133,12 @@ radv_use_dcc_for_image(struct radv_device *device,
if (create_info->scanout)
return false;
 
+   /* FIXME: DCC for MSAA with 4x and 8x samples doesn't work yet. */
+   if (pCreateInfo->samples > 2)
+   return false;
+
/* TODO: Enable DCC for MSAA textures. */
-   if (pCreateInfo->samples >= 2)
+   if (!device->physical_device->dcc_msaa_allowed)
return false;
 
/* Determine if the formats are DCC compatible. */
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index af95f4b649..4a860c595f 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -295,6 +295,9 @@ struct radv_physical_device {
bool has_out_of_order_rast;
bool out_of_order_rast_allowed;
 
+   /* Whether DCC should be enabled for MSAA textures. */
+   bool dcc_msaa_allowed;
+
/* This is the drivers on-disk cache used as a fallback as opposed to
 * the pipeline cache defined by apps.
 */

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


Mesa (master): radv: add a workaround for fast clears with DCC and MSAA textures

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 1aefb62f1e85de379d6045f234f32bf6cb924a09
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1aefb62f1e85de379d6045f234f32bf6cb924a09

Author: Samuel Pitoiset 
Date:   Tue Apr 17 16:05:16 2018 +0200

radv: add a workaround for fast clears with DCC and MSAA textures

This should be fixed at some point in order to improve
performance.

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

---

 src/amd/vulkan/radv_meta_clear.c | 9 +
 1 file changed, 9 insertions(+)

diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 86e0bc17ed..858e3368b6 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -1062,6 +1062,15 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer,
 
if (iview->image->info.samples > 1) {
/* DCC fast clear with MSAA should clear CMASK. */
+   /* FIXME: This doesn't work for now. There is a
+* hardware bug with fast clears and DCC for MSAA
+* textures. AMDVLK has a workaround but it doesn't
+* seem to work here. Note that we might emit useless
+* CB flushes but that shouldn't matter.
+*/
+   if (!can_avoid_fast_clear_elim)
+   goto fail;
+
assert(radv_image_has_cmask(iview->image));
 
flush_bits = radv_clear_cmask(cmd_buffer, iview->image,

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


Mesa (master): radv: implement fast color clear for DCC with MSAA

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 255506c4e04bfa5490d98a748aa248189a213ad6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=255506c4e04bfa5490d98a748aa248189a213ad6

Author: Samuel Pitoiset 
Date:   Tue Apr 17 16:05:14 2018 +0200

radv: implement fast color clear for DCC with MSAA

When DCC is enabled with MSAA textures, CMASK should be
cleared to 0x.

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

---

 src/amd/vulkan/radv_meta_clear.c | 17 -
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 016c1ee296..86e0bc17ed 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -1054,14 +1054,29 @@ emit_fast_color_clear(struct radv_cmd_buffer 
*cmd_buffer,
if (radv_image_has_dcc(iview->image)) {
uint32_t reset_value;
bool can_avoid_fast_clear_elim;
+   bool need_decompress_pass = false;
+
vi_get_fast_clear_parameters(iview->image->vk_format,
 &clear_value, &reset_value,
 &can_avoid_fast_clear_elim);
 
+   if (iview->image->info.samples > 1) {
+   /* DCC fast clear with MSAA should clear CMASK. */
+   assert(radv_image_has_cmask(iview->image));
+
+   flush_bits = radv_clear_cmask(cmd_buffer, iview->image,
+ cmask_clear_value);
+
+   need_decompress_pass = true;
+   }
+
+   if (!can_avoid_fast_clear_elim)
+   need_decompress_pass = true;
+
flush_bits = radv_clear_dcc(cmd_buffer, iview->image, 
reset_value);
 
radv_set_dcc_need_cmask_elim_pred(cmd_buffer, iview->image,
- !can_avoid_fast_clear_elim);
+ need_decompress_pass);
} else {
flush_bits = radv_clear_cmask(cmd_buffer, iview->image,
  cmask_clear_value);

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


Mesa (master): radv: decompress DCC for multisampled source images before resolving

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: dc3d39771ff561fe3e71aa0d08623e190ff496f9
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dc3d39771ff561fe3e71aa0d08623e190ff496f9

Author: Samuel Pitoiset 
Date:   Tue Apr 17 16:05:17 2018 +0200

radv: decompress DCC for multisampled source images before resolving

Multisampled source images (ie. color attachments) can be now
DCC compressed, so the driver needs to perform a DCC decompression
pass before resolving

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

---

 src/amd/vulkan/radv_meta.h|  1 +
 src/amd/vulkan/radv_meta_resolve.c| 17 +++--
 src/amd/vulkan/radv_meta_resolve_cs.c |  2 +-
 src/amd/vulkan/radv_meta_resolve_fs.c |  2 +-
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index 47eec5cd6a..4a9abae30a 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -195,6 +195,7 @@ void radv_decompress_resolve_subpass_src(struct 
radv_cmd_buffer *cmd_buffer);
 
 void radv_decompress_resolve_src(struct radv_cmd_buffer *cmd_buffer,
 struct radv_image *src_image,
+VkImageLayout src_image_layout,
 uint32_t region_count,
 const VkImageResolve *regions);
 
diff --git a/src/amd/vulkan/radv_meta_resolve.c 
b/src/amd/vulkan/radv_meta_resolve.c
index d66f1c9f93..f3e088b10c 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -697,7 +697,8 @@ radv_decompress_resolve_subpass_src(struct radv_cmd_buffer 
*cmd_buffer)
region.srcSubresource.mipLevel = 0;
region.srcSubresource.layerCount = 1;
 
-   radv_decompress_resolve_src(cmd_buffer, src_image, 1, ®ion);
+   radv_decompress_resolve_src(cmd_buffer, src_image,
+   src_att.layout, 1, ®ion);
}
 }
 
@@ -707,6 +708,7 @@ radv_decompress_resolve_subpass_src(struct radv_cmd_buffer 
*cmd_buffer)
 void
 radv_decompress_resolve_src(struct radv_cmd_buffer *cmd_buffer,
struct radv_image *src_image,
+   VkImageLayout src_image_layout,
uint32_t region_count,
const VkImageResolve *regions)
 {
@@ -722,6 +724,17 @@ radv_decompress_resolve_src(struct radv_cmd_buffer 
*cmd_buffer,
range.baseArrayLayer = src_base_layer;
range.layerCount = region->srcSubresource.layerCount;
 
-   radv_fast_clear_flush_image_inplace(cmd_buffer, src_image, 
&range);
+   uint32_t queue_mask =
+   radv_image_queue_family_mask(src_image,
+
cmd_buffer->queue_family_index,
+
cmd_buffer->queue_family_index);
+
+   if (radv_layout_dcc_compressed(src_image, src_image_layout,
+  queue_mask)) {
+   radv_decompress_dcc(cmd_buffer, src_image, &range);
+   } else {
+   radv_fast_clear_flush_image_inplace(cmd_buffer,
+   src_image, &range);
+   }
}
 }
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c 
b/src/amd/vulkan/radv_meta_resolve_cs.c
index ede55f6d00..274e64999a 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -388,7 +388,7 @@ void radv_meta_resolve_compute_image(struct radv_cmd_buffer 
*cmd_buffer,
 {
struct radv_meta_saved_state saved_state;
 
-   radv_decompress_resolve_src(cmd_buffer, src_image,
+   radv_decompress_resolve_src(cmd_buffer, src_image, src_image_layout,
region_count, regions);
 
radv_meta_save(&saved_state, cmd_buffer,
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c 
b/src/amd/vulkan/radv_meta_resolve_fs.c
index 499b3ae27a..ef8c1d8b1d 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -458,7 +458,7 @@ void radv_meta_resolve_fragment_image(struct 
radv_cmd_buffer *cmd_buffer,
unsigned dst_layout = 
radv_meta_dst_layout_from_layout(dest_image_layout);
VkRenderPass rp;
 
-   radv_decompress_resolve_src(cmd_buffer, src_image,
+   radv_decompress_resolve_src(cmd_buffer, src_image, src_image_layout,
region_count, regions);
 
rp = 
device->meta_state.resolve_fragment.rc[samples_log2].render_pass[fs_key][dst_layout];

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


Mesa (master): radv: make sure to sync after resolving using the compute path

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 796b6f4aab46924f9954c9b2a9821b4706618cab
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=796b6f4aab46924f9954c9b2a9821b4706618cab

Author: Samuel Pitoiset 
Date:   Tue Apr 17 15:08:11 2018 +0200

radv: make sure to sync after resolving using the compute path

This fixes some random CTS failures:

dEQP-VK.renderpass.multisample.*.

Performing a fast-clear eliminate is still useless, but it
seems that we need to sync.

Found while running CTS with RADV_DEBUG=zerovram.

Fixes: 56a171a499c ("radv: don't fast-clear eliminate after resolving a subpass 
with compute")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_meta_resolve_cs.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c 
b/src/amd/vulkan/radv_meta_resolve_cs.c
index 628208d635..ede55f6d00 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -516,5 +516,8 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer 
*cmd_buffer)
 &(VkExtent2D) { fb->width, fb->height });
}
 
+   cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH |
+   RADV_CMD_FLAG_INV_VMEM_L1;
+
radv_meta_restore(&saved_state, cmd_buffer);
 }

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


Mesa (master): radv: allocate CMASK for DCC fast clear with MSAA

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 373fa0b599ca3b2904433e413fd6e24fc37292b7
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=373fa0b599ca3b2904433e413fd6e24fc37292b7

Author: Samuel Pitoiset 
Date:   Tue Apr 17 16:05:15 2018 +0200

radv: allocate CMASK for DCC fast clear with MSAA

CMASK is required because it should be cleared to
0x for MSAA textures.

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

---

 src/amd/vulkan/radv_image.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index a14e7c18b2..ba8f14d91b 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -997,6 +997,13 @@ radv_image_create(VkDevice _device,
/* Try to enable DCC first. */
if (radv_image_can_enable_dcc(image)) {
radv_image_alloc_dcc(image);
+   if (image->info.samples > 1) {
+   /* CMASK should be enabled because DCC fast
+* clear with MSAA needs it.
+*/
+   assert(radv_image_can_enable_cmask(image));
+   radv_image_alloc_cmask(device, image);
+   }
} else {
/* When DCC cannot be enabled, try CMASK. */
image->surface.dcc_size = 0;

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


Mesa (master): radv: dump the SHA1 of SPIRV in the hang report

2018-04-19 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 4a698660aef46475e9bb49a03eb1019792f478c2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4a698660aef46475e9bb49a03eb1019792f478c2

Author: Samuel Pitoiset 
Date:   Wed Apr 18 18:53:44 2018 +0200

radv: dump the SHA1 of SPIRV in the hang report

Might be useful for debugging purposes, especially when we
want to replace a shader on the fly.

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

---

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

diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c
index 17782ab744..2e9e016523 100644
--- a/src/amd/vulkan/radv_debug.c
+++ b/src/amd/vulkan/radv_debug.c
@@ -29,6 +29,7 @@
 #include 
 #include 
 
+#include "util/mesa-sha1.h"
 #include "sid.h"
 #include "gfx9d.h"
 #include "ac_debug.h"
@@ -496,7 +497,13 @@ radv_dump_shader(struct radv_pipeline *pipeline,
fprintf(f, "%s:\n\n", radv_get_shader_name(shader, stage));
 
if (shader->spirv) {
-   fprintf(f, "SPIRV:\n");
+   unsigned char sha1[21];
+   char sha1buf[41];
+
+   _mesa_sha1_compute(shader->spirv, shader->spirv_size, sha1);
+   _mesa_sha1_format(sha1buf, sha1);
+
+   fprintf(f, "SPIRV (sha1: %s):\n", sha1buf);
radv_print_spirv(shader->spirv, shader->spirv_size, f);
}
 

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


Mesa (master): radv: fix scissor computation when using half-pixel viewport offset

2018-04-17 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 893e19efb74edd6133a607e09338bf5d449632f1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=893e19efb74edd6133a607e09338bf5d449632f1

Author: Samuel Pitoiset 
Date:   Tue Apr 17 22:07:26 2018 +0200

radv: fix scissor computation when using half-pixel viewport offset

'scale[i]' can be non-integer.

Original patch by Philip Rebohle.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106074
Fixes: 0f3de89a56a ("radv: Use the guard band.")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Niuwenhuizen 

---

 src/amd/vulkan/si_cmd_buffer.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index aed291be35..15edaa4b2b 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -663,10 +663,10 @@ static VkRect2D si_scissor_from_viewport(const VkViewport 
*viewport)
 
get_viewport_xform(viewport, scale, translate);
 
-   rect.offset.x = translate[0] - abs(scale[0]);
-   rect.offset.y = translate[1] - abs(scale[1]);
-   rect.extent.width = ceilf(translate[0] + abs(scale[0])) - rect.offset.x;
-   rect.extent.height = ceilf(translate[1] + abs(scale[1])) - 
rect.offset.y;
+   rect.offset.x = translate[0] - fabs(scale[0]);
+   rect.offset.y = translate[1] - fabs(scale[1]);
+   rect.extent.width = ceilf(translate[0] + fabs(scale[0])) - 
rect.offset.x;
+   rect.extent.height = ceilf(translate[1] + fabs(scale[1])) - 
rect.offset.y;
 
return rect;
 }

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


Mesa (master): radv: merge radv_handle_{dcc,cmask}_image_transition() functions

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 584d1f2711e07f0c0bf159ddde9c7bf127591437
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=584d1f2711e07f0c0bf159ddde9c7bf127591437

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:49 2018 +0200

radv: merge radv_handle_{dcc,cmask}_image_transition() functions

Into radv_handle_color_image_transition().

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 58 
 1 file changed, 17 insertions(+), 41 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 48877bde4a..afe953d90c 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3766,20 +3766,6 @@ static void radv_initialise_cmask(struct radv_cmd_buffer 
*cmd_buffer,
state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
 }
 
-static void radv_handle_cmask_image_transition(struct radv_cmd_buffer 
*cmd_buffer,
-  struct radv_image *image,
-  VkImageLayout src_layout,
-  VkImageLayout dst_layout,
-  unsigned src_queue_mask,
-  unsigned dst_queue_mask,
-  const VkImageSubresourceRange 
*range)
-{
-   if (radv_layout_can_fast_clear(image, src_layout, src_queue_mask) &&
-  !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
-   radv_fast_clear_flush_image_inplace(cmd_buffer, image, range);
-   }
-}
-
 void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer,
 struct radv_image *image, uint32_t value)
 {
@@ -3794,25 +3780,6 @@ void radv_initialize_dcc(struct radv_cmd_buffer 
*cmd_buffer,
 RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
 }
 
-static void radv_handle_dcc_image_transition(struct radv_cmd_buffer 
*cmd_buffer,
-struct radv_image *image,
-VkImageLayout src_layout,
-VkImageLayout dst_layout,
-unsigned src_queue_mask,
-unsigned dst_queue_mask,
-const VkImageSubresourceRange 
*range)
-{
-   if (src_layout == VK_IMAGE_LAYOUT_PREINITIALIZED) {
-   radv_initialize_dcc(cmd_buffer, image, 0xu);
-   } else if (radv_layout_dcc_compressed(image, src_layout, 
src_queue_mask) &&
-  !radv_layout_dcc_compressed(image, dst_layout, 
dst_queue_mask)) {
-   radv_decompress_dcc(cmd_buffer, image, range);
-   } else if (radv_layout_can_fast_clear(image, src_layout, 
src_queue_mask) &&
-  !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
-   radv_fast_clear_flush_image_inplace(cmd_buffer, image, range);
-   }
-}
-
 /**
  * Initialize DCC/FMASK/CMASK metadata for a color image.
  */
@@ -3864,15 +3831,24 @@ static void radv_handle_color_image_transition(struct 
radv_cmd_buffer *cmd_buffe
return;
}
 
-   if (radv_image_has_dcc(image))
-   radv_handle_dcc_image_transition(cmd_buffer, image, src_layout,
-dst_layout, src_queue_mask,
-dst_queue_mask, range);
+   if (radv_image_has_dcc(image)) {
+   if (src_layout == VK_IMAGE_LAYOUT_PREINITIALIZED) {
+   radv_initialize_dcc(cmd_buffer, image, 0xu);
+   } else if (radv_layout_dcc_compressed(image, src_layout, 
src_queue_mask) &&
+  !radv_layout_dcc_compressed(image, dst_layout, 
dst_queue_mask)) {
+   radv_decompress_dcc(cmd_buffer, image, range);
+   } else if (radv_layout_can_fast_clear(image, src_layout, 
src_queue_mask) &&
+  !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
+   radv_fast_clear_flush_image_inplace(cmd_buffer, image, 
range);
+   }
+   }
 
-   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
-   radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
-  dst_layout, src_queue_mask,
-  dst_queue_mask, range);
+   if (radv_image_has_cmask(image) || radv_image_has_fmask(image)) {
+   if (radv_layout_can_fast_clear(image, src_layout, 
src_queue_mask) &&
+   !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
+   

Mesa (master): radv: disable prediction only if it has been enabled

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 79c87a45b69e6f94ebe42ffcd59267ec3d9c99ca
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=79c87a45b69e6f94ebe42ffcd59267ec3d9c99ca

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:43 2018 +0200

radv: disable prediction only if it has been enabled

When decompressing DCC we don't enable it, so it's useless
to disable it. This reduces the number of prediction packets
sent to the GPU when performing color decompression passes.

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

---

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

diff --git a/src/amd/vulkan/radv_meta_fast_clear.c 
b/src/amd/vulkan/radv_meta_fast_clear.c
index 327c1ae440..d5af7a1b0c 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -667,7 +667,7 @@ radv_emit_color_decompress(struct radv_cmd_buffer 
*cmd_buffer,
&cmd_buffer->pool->alloc);
 
}
-   if (radv_image_has_dcc(image)) {
+   if (!decompress_dcc && radv_image_has_dcc(image)) {
cmd_buffer->state.predicating = false;
radv_emit_set_predication_state_from_image(cmd_buffer, image, 
false);
}

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


Mesa (master): radv: clean up radv_handle_image_transition() a bit

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 790f6e47182d4f1b1b85b449f29b6fdd4954074f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=790f6e47182d4f1b1b85b449f29b6fdd4954074f

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:46 2018 +0200

radv: clean up radv_handle_image_transition() a bit

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 31 ---
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 270dcd5a9e..a74bad1981 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3718,6 +3718,9 @@ static void radv_handle_depth_image_transition(struct 
radv_cmd_buffer *cmd_buffe
   const VkImageSubresourceRange 
*range,
   VkImageAspectFlags 
pending_clears)
 {
+   if (!radv_image_has_htile(image))
+   return;
+
if (dst_layout == VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL &&
(pending_clears & vk_format_aspects(image->vk_format)) == 
vk_format_aspects(image->vk_format) &&
cmd_buffer->state.render_area.offset.x == 0 && 
cmd_buffer->state.render_area.offset.y == 0 &&
@@ -3867,18 +3870,24 @@ static void radv_handle_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
return;
}
 
-   unsigned src_queue_mask = radv_image_queue_family_mask(image, 
src_family, cmd_buffer->queue_family_index);
-   unsigned dst_queue_mask = radv_image_queue_family_mask(image, 
dst_family, cmd_buffer->queue_family_index);
+   unsigned src_queue_mask =
+   radv_image_queue_family_mask(image, src_family,
+cmd_buffer->queue_family_index);
+   unsigned dst_queue_mask =
+   radv_image_queue_family_mask(image, dst_family,
+cmd_buffer->queue_family_index);
 
-   if (radv_image_has_htile(image))
-   radv_handle_depth_image_transition(cmd_buffer, image, 
src_layout,
-  dst_layout, src_queue_mask,
-  dst_queue_mask, range,
-  pending_clears);
-
-   radv_handle_color_image_transition(cmd_buffer, image, src_layout,
-  dst_layout, src_queue_mask,
-  dst_queue_mask, range);
+   if (vk_format_is_depth(image->vk_format)) {
+   radv_handle_depth_image_transition(cmd_buffer, image,
+  src_layout, dst_layout,
+  src_queue_mask, 
dst_queue_mask,
+  range, pending_clears);
+   } else {
+   radv_handle_color_image_transition(cmd_buffer, image,
+  src_layout, dst_layout,
+  src_queue_mask, 
dst_queue_mask,
+  range);
+   }
 }
 
 void radv_CmdPipelineBarrier(

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


Mesa (master): radv: make radv_initialise_cmask() static

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: fde7b90ecf6fe74e977e5676acc9454de5d5d9e4
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fde7b90ecf6fe74e977e5676acc9454de5d5d9e4

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:47 2018 +0200

radv: make radv_initialise_cmask() static

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 4 ++--
 src/amd/vulkan/radv_private.h| 2 --
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index a74bad1981..8fe96b2e50 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3753,8 +3753,8 @@ static void radv_handle_depth_image_transition(struct 
radv_cmd_buffer *cmd_buffe
}
 }
 
-void radv_initialise_cmask(struct radv_cmd_buffer *cmd_buffer,
-  struct radv_image *image, uint32_t value)
+static void radv_initialise_cmask(struct radv_cmd_buffer *cmd_buffer,
+ struct radv_image *image, uint32_t value)
 {
struct radv_cmd_state *state = &cmd_buffer->state;
 
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index df8fe891dc..1869604e9e 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1728,8 +1728,6 @@ void radv_meta_push_descriptor_set(struct radv_cmd_buffer 
*cmd_buffer,
uint32_t descriptorWriteCount,
const VkWriteDescriptorSet 
*pDescriptorWrites);
 
-void radv_initialise_cmask(struct radv_cmd_buffer *cmd_buffer,
-  struct radv_image *image, uint32_t value);
 void radv_initialize_dcc(struct radv_cmd_buffer *cmd_buffer,
 struct radv_image *image, uint32_t value);
 

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


Mesa (master): radv: add radv_init_color_image_metadata() helper

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: d5812b900b68ec639a0b305e62712c182b9fa5d6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d5812b900b68ec639a0b305e62712c182b9fa5d6

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:48 2018 +0200

radv: add radv_init_color_image_metadata() helper

In order to separate initialization from decompression. In the
future, that will allow us to init DCC/FMASK/CMASK in one shot.

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 51 
 1 file changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 8fe96b2e50..48877bde4a 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3774,12 +3774,7 @@ static void radv_handle_cmask_image_transition(struct 
radv_cmd_buffer *cmd_buffe
   unsigned dst_queue_mask,
   const VkImageSubresourceRange 
*range)
 {
-   if (src_layout == VK_IMAGE_LAYOUT_UNDEFINED) {
-   if (radv_image_has_fmask(image))
-   radv_initialise_cmask(cmd_buffer, image, 0xu);
-   else
-   radv_initialise_cmask(cmd_buffer, image, 0xu);
-   } else if (radv_layout_can_fast_clear(image, src_layout, 
src_queue_mask) &&
+   if (radv_layout_can_fast_clear(image, src_layout, src_queue_mask) &&
   !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
radv_fast_clear_flush_image_inplace(cmd_buffer, image, range);
}
@@ -3809,10 +3804,6 @@ static void radv_handle_dcc_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
 {
if (src_layout == VK_IMAGE_LAYOUT_PREINITIALIZED) {
radv_initialize_dcc(cmd_buffer, image, 0xu);
-   } else if (src_layout == VK_IMAGE_LAYOUT_UNDEFINED) {
-   radv_initialize_dcc(cmd_buffer, image,
-   radv_layout_dcc_compressed(image, 
dst_layout, dst_queue_mask) ?
-0x20202020u : 0xu);
} else if (radv_layout_dcc_compressed(image, src_layout, 
src_queue_mask) &&
   !radv_layout_dcc_compressed(image, dst_layout, 
dst_queue_mask)) {
radv_decompress_dcc(cmd_buffer, image, range);
@@ -3823,6 +3814,39 @@ static void radv_handle_dcc_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
 }
 
 /**
+ * Initialize DCC/FMASK/CMASK metadata for a color image.
+ */
+static void radv_init_color_image_metadata(struct radv_cmd_buffer *cmd_buffer,
+  struct radv_image *image,
+  VkImageLayout src_layout,
+  VkImageLayout dst_layout,
+  unsigned src_queue_mask,
+  unsigned dst_queue_mask)
+{
+   if (radv_image_has_cmask(image)) {
+   uint32_t value = 0xu; /* Fully expanded mode. */
+
+   /*  TODO: clarify this. */
+   if (radv_image_has_fmask(image)) {
+   value = 0xu;
+   }
+
+   radv_initialise_cmask(cmd_buffer, image, value);
+   }
+
+   if (radv_image_has_dcc(image)) {
+   uint32_t value = 0xu; /* Fully expanded mode. */
+
+   if (radv_layout_dcc_compressed(image, dst_layout,
+  dst_queue_mask)) {
+   value = 0x20202020u;
+   }
+
+   radv_initialize_dcc(cmd_buffer, image, value);
+   }
+}
+
+/**
  * Handle color image transitions for DCC/FMASK/CMASK.
  */
 static void radv_handle_color_image_transition(struct radv_cmd_buffer 
*cmd_buffer,
@@ -3833,6 +3857,13 @@ static void radv_handle_color_image_transition(struct 
radv_cmd_buffer *cmd_buffe
   unsigned dst_queue_mask,
   const VkImageSubresourceRange 
*range)
 {
+   if (src_layout == VK_IMAGE_LAYOUT_UNDEFINED) {
+   radv_init_color_image_metadata(cmd_buffer, image,
+  src_layout, dst_layout,
+  src_queue_mask, dst_queue_mask);
+   return;
+   }
+
if (radv_image_has_dcc(image))
radv_handle_dcc_image_transition(cmd_buffer, image, src_layout,
 dst_layout, src_queue_mask,

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


Mesa (master): radv: handle DCC image transitions before CMASK/FMASK transitions

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: c6b1f1c97a2f2b7079a7f9c870903f20ea6de8f0
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c6b1f1c97a2f2b7079a7f9c870903f20ea6de8f0

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:44 2018 +0200

radv: handle DCC image transitions before CMASK/FMASK transitions

Mostly because DCC implies a fast-clear eliminate and we
should be able to skip some DCC decompressions by setting
a predicate like for CMASK and FMASK.

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index f73526b5fc..92c00f5394 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3854,15 +3854,15 @@ static void radv_handle_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
   dst_queue_mask, range,
   pending_clears);
 
-   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
-   radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
-  dst_layout, src_queue_mask,
-  dst_queue_mask, range);
-
if (radv_image_has_dcc(image))
radv_handle_dcc_image_transition(cmd_buffer, image, src_layout,
 dst_layout, src_queue_mask,
 dst_queue_mask, range);
+
+   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
+   radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
+  dst_layout, src_queue_mask,
+  dst_queue_mask, range);
 }
 
 void radv_CmdPipelineBarrier(

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


Mesa (master): radv: handle CMASK/FMASK transitions only if DCC is disabled

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 7e84d698611fce27c625a270408fa0137e4b803b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=7e84d698611fce27c625a270408fa0137e4b803b

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:50 2018 +0200

radv: handle CMASK/FMASK transitions only if DCC is disabled

DCC implies a fast-clear eliminate, so I think this sounds
reasonable.

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index afe953d90c..72fb6d6357 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3841,9 +3841,7 @@ static void radv_handle_color_image_transition(struct 
radv_cmd_buffer *cmd_buffe
   !radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
radv_fast_clear_flush_image_inplace(cmd_buffer, image, 
range);
}
-   }
-
-   if (radv_image_has_cmask(image) || radv_image_has_fmask(image)) {
+   } else if (radv_image_has_cmask(image) || radv_image_has_fmask(image)) {
if (radv_layout_can_fast_clear(image, src_layout, 
src_queue_mask) &&
!radv_layout_can_fast_clear(image, dst_layout, 
dst_queue_mask)) {
radv_fast_clear_flush_image_inplace(cmd_buffer, image, 
range);

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


Mesa (master): radv: clean up radv_decompress_resolve_subpass_src()

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 62510846b6ed7083b384d7f5b9765aebf34b2e3a
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=62510846b6ed7083b384d7f5b9765aebf34b2e3a

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:52 2018 +0200

radv: clean up radv_decompress_resolve_subpass_src()

To handle the source color image transitions in the same place.

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

---

 src/amd/vulkan/radv_meta_resolve.c | 17 +++--
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_resolve.c 
b/src/amd/vulkan/radv_meta_resolve.c
index 1828eb37f4..d66f1c9f93 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -689,18 +689,15 @@ radv_decompress_resolve_subpass_src(struct 
radv_cmd_buffer *cmd_buffer)
dest_att.attachment == VK_ATTACHMENT_UNUSED)
continue;
 
-   struct radv_image_view *src_iview =
-   fb->attachments[src_att.attachment].attachment;
+   struct radv_image *src_image =
+   fb->attachments[src_att.attachment].attachment->image;
 
-   VkImageSubresourceRange range;
-   range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-   range.baseMipLevel = 0;
-   range.levelCount = 1;
-   range.baseArrayLayer = 0;
-   range.layerCount = 1;
+   VkImageResolve region = {};
+   region.srcSubresource.baseArrayLayer = 0;
+   region.srcSubresource.mipLevel = 0;
+   region.srcSubresource.layerCount = 1;
 
-   radv_fast_clear_flush_image_inplace(cmd_buffer,
-   src_iview->image, &range);
+   radv_decompress_resolve_src(cmd_buffer, src_image, 1, ®ion);
}
 }
 

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


Mesa (master): radv: don't fast-clear eliminate after resolving a subpass with compute

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 56a171a499c861c261c2b0821951e05fde845af6
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=56a171a499c861c261c2b0821951e05fde845af6

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:51 2018 +0200

radv: don't fast-clear eliminate after resolving a subpass with compute

That looks useless, and I think radv_handle_image_transition()
will do a fast-clear eliminate because it's called after the
resolve.

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

---

 src/amd/vulkan/radv_meta_resolve_cs.c | 14 --
 1 file changed, 14 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c 
b/src/amd/vulkan/radv_meta_resolve_cs.c
index 6d605aba01..628208d635 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -517,18 +517,4 @@ radv_cmd_buffer_resolve_subpass_cs(struct radv_cmd_buffer 
*cmd_buffer)
}
 
radv_meta_restore(&saved_state, cmd_buffer);
-
-   for (uint32_t i = 0; i < subpass->color_count; ++i) {
-   VkAttachmentReference dest_att = 
subpass->resolve_attachments[i];
-   struct radv_image *dst_img = 
cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment->image;
-   if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
-   continue;
-   VkImageSubresourceRange range;
-   range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
-   range.baseMipLevel = 0;
-   range.levelCount = 1;
-   range.baseArrayLayer = 0;
-   range.layerCount = 1;
-   radv_fast_clear_flush_image_inplace(cmd_buffer, dst_img, 
&range);
-   }
 }

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


Mesa (master): radv: add radv_handle_color_image_transition() helper

2018-04-16 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 6967d32bebf84b715d4fd6dd4a750d1fc75f8991
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6967d32bebf84b715d4fd6dd4a750d1fc75f8991

Author: Samuel Pitoiset 
Date:   Fri Apr 13 19:14:45 2018 +0200

radv: add radv_handle_color_image_transition() helper

To handle CMASK, FMASK and DCC transitions in the same place.

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

---

 src/amd/vulkan/radv_cmd_buffer.c | 34 +-
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 92c00f5394..270dcd5a9e 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3819,6 +3819,28 @@ static void radv_handle_dcc_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
}
 }
 
+/**
+ * Handle color image transitions for DCC/FMASK/CMASK.
+ */
+static void radv_handle_color_image_transition(struct radv_cmd_buffer 
*cmd_buffer,
+  struct radv_image *image,
+  VkImageLayout src_layout,
+  VkImageLayout dst_layout,
+  unsigned src_queue_mask,
+  unsigned dst_queue_mask,
+  const VkImageSubresourceRange 
*range)
+{
+   if (radv_image_has_dcc(image))
+   radv_handle_dcc_image_transition(cmd_buffer, image, src_layout,
+dst_layout, src_queue_mask,
+dst_queue_mask, range);
+
+   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
+   radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
+  dst_layout, src_queue_mask,
+  dst_queue_mask, range);
+}
+
 static void radv_handle_image_transition(struct radv_cmd_buffer *cmd_buffer,
 struct radv_image *image,
 VkImageLayout src_layout,
@@ -3854,15 +3876,9 @@ static void radv_handle_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
   dst_queue_mask, range,
   pending_clears);
 
-   if (radv_image_has_dcc(image))
-   radv_handle_dcc_image_transition(cmd_buffer, image, src_layout,
-dst_layout, src_queue_mask,
-dst_queue_mask, range);
-
-   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
-   radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
-  dst_layout, src_queue_mask,
-  dst_queue_mask, range);
+   radv_handle_color_image_transition(cmd_buffer, image, src_layout,
+  dst_layout, src_queue_mask,
+  dst_queue_mask, range);
 }
 
 void radv_CmdPipelineBarrier(

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


Mesa (master): radv: fix radv_layout_dcc_compressed() when image doesn't have DCC

2018-04-12 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 9eac49246cdc501530418e8bd2a3e6d47173332b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9eac49246cdc501530418e8bd2a3e6d47173332b

Author: Samuel Pitoiset 
Date:   Wed Apr 11 21:34:43 2018 +0200

radv: fix radv_layout_dcc_compressed() when image doesn't have DCC

num_dcc_levels means that DCC is supported, but this doesn't
mean that it's enabled by the driver. Instead, we should rely
on radv_image_has_dcc().

This fixes some multisample regressions since 0babc8e5d66
("radv: fix picking the method for resolve subpass") on Vega.
This is because the resolve method changed from HW to FS, but
those fails are totally unexpected, so there might some
differences between Polaris and Vega here.

Fixes: 44fcf587445 ("radv: Disable DCC for GENERAL layout and compute transfer 
dest.")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index acb569203d..a14e7c18b2 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -1241,7 +1241,7 @@ bool radv_layout_dcc_compressed(const struct radv_image 
*image,
(queue_mask & (1u << RADV_QUEUE_COMPUTE)))
return false;
 
-   return image->surface.num_dcc_levels > 0 && layout != 
VK_IMAGE_LAYOUT_GENERAL;
+   return radv_image_has_dcc(image) && layout != VK_IMAGE_LAYOUT_GENERAL;
 }
 
 

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


Mesa (master): radv: add radv_decompress_resolve_{subpass}_src() helpers

2018-04-12 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: ab0e625a671d19bb6a736d663bbc6fa5fd9ecd06
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab0e625a671d19bb6a736d663bbc6fa5fd9ecd06

Author: Samuel Pitoiset 
Date:   Wed Apr 11 14:09:16 2018 +0200

radv: add radv_decompress_resolve_{subpass}_src() helpers

This helper shares common code before resolving using either
a fragment or a compute shader.

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

---

 src/amd/vulkan/radv_meta.h|  7 +
 src/amd/vulkan/radv_meta_resolve.c| 58 +++
 src/amd/vulkan/radv_meta_resolve_cs.c | 34 ++--
 src/amd/vulkan/radv_meta_resolve_fs.c | 28 +++--
 4 files changed, 73 insertions(+), 54 deletions(-)

diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index 57b76c1326..47eec5cd6a 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -191,6 +191,13 @@ void radv_meta_resolve_fragment_image(struct 
radv_cmd_buffer *cmd_buffer,
  uint32_t region_count,
  const VkImageResolve *regions);
 
+void radv_decompress_resolve_subpass_src(struct radv_cmd_buffer *cmd_buffer);
+
+void radv_decompress_resolve_src(struct radv_cmd_buffer *cmd_buffer,
+struct radv_image *src_image,
+uint32_t region_count,
+const VkImageResolve *regions);
+
 void radv_blit_to_prime_linear(struct radv_cmd_buffer *cmd_buffer,
   struct radv_image *image,
   struct radv_image *linear_image);
diff --git a/src/amd/vulkan/radv_meta_resolve.c 
b/src/amd/vulkan/radv_meta_resolve.c
index e932976df2..1828eb37f4 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -670,3 +670,61 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer 
*cmd_buffer)
cmd_buffer->state.subpass = subpass;
radv_meta_restore(&saved_state, cmd_buffer);
 }
+
+/**
+ * Decompress CMask/FMask before resolving a multisampled source image inside a
+ * subpass.
+ */
+void
+radv_decompress_resolve_subpass_src(struct radv_cmd_buffer *cmd_buffer)
+{
+   const struct radv_subpass *subpass = cmd_buffer->state.subpass;
+   struct radv_framebuffer *fb = cmd_buffer->state.framebuffer;
+
+   for (uint32_t i = 0; i < subpass->color_count; ++i) {
+   VkAttachmentReference src_att = subpass->color_attachments[i];
+   VkAttachmentReference dest_att = 
subpass->resolve_attachments[i];
+
+   if (src_att.attachment == VK_ATTACHMENT_UNUSED ||
+   dest_att.attachment == VK_ATTACHMENT_UNUSED)
+   continue;
+
+   struct radv_image_view *src_iview =
+   fb->attachments[src_att.attachment].attachment;
+
+   VkImageSubresourceRange range;
+   range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+   range.baseMipLevel = 0;
+   range.levelCount = 1;
+   range.baseArrayLayer = 0;
+   range.layerCount = 1;
+
+   radv_fast_clear_flush_image_inplace(cmd_buffer,
+   src_iview->image, &range);
+   }
+}
+
+/**
+ * Decompress CMask/FMask before resolving a multisampled source image.
+ */
+void
+radv_decompress_resolve_src(struct radv_cmd_buffer *cmd_buffer,
+   struct radv_image *src_image,
+   uint32_t region_count,
+   const VkImageResolve *regions)
+{
+   for (uint32_t r = 0; r < region_count; ++r) {
+   const VkImageResolve *region = ®ions[r];
+   const uint32_t src_base_layer =
+   radv_meta_get_iview_layer(src_image, 
®ion->srcSubresource,
+ ®ion->srcOffset);
+   VkImageSubresourceRange range;
+   range.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+   range.baseMipLevel = region->srcSubresource.mipLevel;
+   range.levelCount = 1;
+   range.baseArrayLayer = src_base_layer;
+   range.layerCount = region->srcSubresource.layerCount;
+
+   radv_fast_clear_flush_image_inplace(cmd_buffer, src_image, 
&range);
+   }
+}
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c 
b/src/amd/vulkan/radv_meta_resolve_cs.c
index ca8f826f53..6d605aba01 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -388,19 +388,8 @@ void radv_meta_resolve_compute_image(struct 
radv_cmd_buffer *cmd_buffer,
 {
struct radv_meta_saved_state saved_state;
 
-   for (uint32_t r = 0; r < region_count; ++r) {
-   const VkImageResolve *region 

Mesa (master): radv: add radv_init_dcc_control_reg() helper

2018-04-12 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: ed93d90a67d31fc396e64d566e2ac58e2994a4e3
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed93d90a67d31fc396e64d566e2ac58e2994a4e3

Author: Samuel Pitoiset 
Date:   Wed Apr 11 14:09:15 2018 +0200

radv: add radv_init_dcc_control_reg() helper

And add some comments.

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

---

 src/amd/vulkan/radv_device.c | 84 +++-
 1 file changed, 52 insertions(+), 32 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 22e8f1e7a7..d912fac8ec 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -3450,6 +3450,57 @@ static uint32_t radv_surface_max_layer_count(struct 
radv_image_view *iview)
return iview->type == VK_IMAGE_VIEW_TYPE_3D ? iview->extent.depth : 
(iview->base_layer + iview->layer_count);
 }
 
+static uint32_t
+radv_init_dcc_control_reg(struct radv_device *device,
+ struct radv_image_view *iview)
+{
+   unsigned max_uncompressed_block_size = V_028C78_MAX_BLOCK_SIZE_256B;
+   unsigned min_compressed_block_size = V_028C78_MIN_BLOCK_SIZE_32B;
+   unsigned max_compressed_block_size;
+   unsigned independent_64b_blocks;
+
+   if (device->physical_device->rad_info.chip_class < VI)
+   return 0;
+
+   if (iview->image->info.samples > 1) {
+   if (iview->image->surface.bpe == 1)
+   max_uncompressed_block_size = 
V_028C78_MAX_BLOCK_SIZE_64B;
+   else if (iview->image->surface.bpe == 2)
+   max_uncompressed_block_size = 
V_028C78_MAX_BLOCK_SIZE_128B;
+   }
+
+   if (!device->physical_device->rad_info.has_dedicated_vram) {
+   /* amdvlk: [min-compressed-block-size] should be set to 32 for
+* dGPU and 64 for APU because all of our APUs to date use
+* DIMMs which have a request granularity size of 64B while all
+* other chips have a 32B request size.
+*/
+   min_compressed_block_size = V_028C78_MIN_BLOCK_SIZE_64B;
+   }
+
+   if (iview->image->usage & (VK_IMAGE_USAGE_SAMPLED_BIT |
+  VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
+  VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
+   /* If this DCC image is potentially going to be used in texture
+* fetches, we need some special settings.
+*/
+   independent_64b_blocks = 1;
+   max_compressed_block_size = V_028C78_MAX_BLOCK_SIZE_64B;
+   } else {
+   /* MAX_UNCOMPRESSED_BLOCK_SIZE must be >=
+* MAX_COMPRESSED_BLOCK_SIZE. Set MAX_COMPRESSED_BLOCK_SIZE as
+* big as possible for better compression state.
+*/
+   independent_64b_blocks = 0;
+   max_compressed_block_size = max_uncompressed_block_size;
+   }
+
+   return 
S_028C78_MAX_UNCOMPRESSED_BLOCK_SIZE(max_uncompressed_block_size) |
+  S_028C78_MAX_COMPRESSED_BLOCK_SIZE(max_compressed_block_size) |
+  S_028C78_MIN_COMPRESSED_BLOCK_SIZE(min_compressed_block_size) |
+  S_028C78_INDEPENDENT_64B_BLOCKS(independent_64b_blocks);
+}
+
 static void
 radv_initialise_color_surface(struct radv_device *device,
  struct radv_color_buffer_info *cb,
@@ -3604,38 +3655,7 @@ radv_initialise_color_surface(struct radv_device *device,
if (radv_dcc_enabled(iview->image, iview->base_mip))
cb->cb_color_info |= S_028C70_DCC_ENABLE(1);
 
-   if (device->physical_device->rad_info.chip_class >= VI) {
-   unsigned max_uncompressed_block_size = 
V_028C78_MAX_BLOCK_SIZE_256B;
-   unsigned min_compressed_block_size = 
V_028C78_MIN_BLOCK_SIZE_32B;
-   unsigned independent_64b_blocks = 0;
-   unsigned max_compressed_block_size;
-
-   /* amdvlk: [min-compressed-block-size] should be set to 32 for 
dGPU and
-  64 for APU because all of our APUs to date use DIMMs which 
have
-  a request granularity size of 64B while all other chips have 
a
-  32B request size */
-   if (!device->physical_device->rad_info.has_dedicated_vram)
-   min_compressed_block_size = V_028C78_MIN_BLOCK_SIZE_64B;
-
-   if (iview->image->info.samples > 1) {
-   if (iview->image->surface.bpe == 1)
-   max_uncompressed_block_size = 
V_028C78_MAX_BLOCK_SIZE_64B;
-   else if (iview->image->surface.bpe == 2)
-   max_uncompressed_block_size = 
V_028C78_MAX_BLOCK_SIZE_128B;
-   }

Mesa (master): radv: add shader BOs to the list at pipeline bind time

2018-04-10 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 9f6a28eb27ca059cbadfa5e277bfe4509a426615
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9f6a28eb27ca059cbadfa5e277bfe4509a426615

Author: Samuel Pitoiset 
Date:   Tue Apr 10 14:09:04 2018 +0200

radv: add shader BOs to the list at pipeline bind time

Otherwise, the shader BOs are not added to the list on SI because
prefetching isn't supported. Calling radv_cs_add_buffer() in the
prefetch codepath was a bad idea.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105952
Fixes: 4ad7595f35 ("radv: rename radv_emit_prefetch() to radv_emit_prefetch_L2")
Signed-off-by: Samuel Pitoiset 
Tested-by: Turo Lamminen 
Reviewed-by: Bas Nieuwenhuizen 

---

 src/amd/vulkan/radv_cmd_buffer.c | 18 +++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 4e89969016..3b1d6aedc8 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -625,8 +625,6 @@ static void
 radv_emit_shader_prefetch(struct radv_cmd_buffer *cmd_buffer,
  struct radv_shader_variant *shader)
 {
-   struct radeon_winsys *ws = cmd_buffer->device->ws;
-   struct radeon_winsys_cs *cs = cmd_buffer->cs;
uint64_t va;
 
if (!shader)
@@ -634,7 +632,6 @@ radv_emit_shader_prefetch(struct radv_cmd_buffer 
*cmd_buffer,
 
va = radv_buffer_get_va(shader->bo) + shader->bo_offset;
 
-   radv_cs_add_buffer(ws, cs, shader->bo, 8);
si_cp_dma_prefetch(cmd_buffer, va, shader->code_size);
 }
 
@@ -702,6 +699,18 @@ radv_emit_graphics_pipeline(struct radv_cmd_buffer 
*cmd_buffer)
 
radeon_emit_array(cmd_buffer->cs, pipeline->cs.buf, pipeline->cs.cdw);
 
+   for (unsigned i = 0; i < MESA_SHADER_COMPUTE; i++) {
+   if (!pipeline->shaders[i])
+   continue;
+
+   radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
+  pipeline->shaders[i]->bo, 8);
+   }
+
+   if (radv_pipeline_has_gs(pipeline))
+   radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
+  pipeline->gs_copy_shader->bo, 8);
+
if (unlikely(cmd_buffer->device->trace_bo))
radv_save_pipeline(cmd_buffer, pipeline, RING_GFX);
 
@@ -2280,6 +2289,9 @@ radv_emit_compute_pipeline(struct radv_cmd_buffer 
*cmd_buffer)
  MAX2(cmd_buffer->compute_scratch_size_needed,
   pipeline->max_waves * 
pipeline->scratch_bytes_per_wave);
 
+   radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs,
+  pipeline->shaders[MESA_SHADER_COMPUTE]->bo, 8);
+
if (unlikely(cmd_buffer->device->trace_bo))
radv_save_pipeline(cmd_buffer, pipeline, RING_COMPUTE);
 }

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


Mesa (master): radv: fix picking the method for resolve subpass

2018-04-10 Thread Samuel Pitoiset
Module: Mesa
Branch: master
Commit: 0babc8e5d665e54783c926b89183ab9a596aa04c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0babc8e5d665e54783c926b89183ab9a596aa04c

Author: Samuel Pitoiset 
Date:   Tue Apr 10 16:00:56 2018 +0200

radv: fix picking the method for resolve subpass

The source and destination image parameters were swapped.

No CTS changes on Polaris10, but I suspect this might
fix something.

Fixes: 2a04f5481df ("radv/meta: select resolve paths")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/vulkan/radv_meta_resolve.c 
b/src/amd/vulkan/radv_meta_resolve.c
index bee398378c..e932976df2 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -621,7 +621,7 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer 
*cmd_buffer)
struct radv_image *dst_img = 
cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment->image;
struct radv_image *src_img = 
cmd_buffer->state.framebuffer->attachments[src_att.attachment].attachment->image;
 
-   radv_pick_resolve_method_images(dst_img, src_img, 
dest_att.layout, cmd_buffer, &resolve_method);
+   radv_pick_resolve_method_images(src_img, dst_img, 
dest_att.layout, cmd_buffer, &resolve_method);
if (resolve_method == RESOLVE_FRAGMENT) {
break;
}

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


Mesa (master): radv: fix prefetching of vertex shader and VBOs on SI

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

Author: Samuel Pitoiset 
Date:   Mon Apr  9 14:38:16 2018 +0200

radv: fix prefetching of vertex shader and VBOs on SI

Forgot one check... Too many mistakes for a simple change.

Fixes: f1d7c16e85 ("radv: fix prefetching compute shaders on CIK and older 
chips")
Signed-off-by: Samuel Pitoiset 
Reviewed-by: Bas Nieuwenhuizen 

---

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

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index e8a6d9be15..6cd798dbfc 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3083,7 +3083,7 @@ radv_draw(struct radv_cmd_buffer *cmd_buffer,
 */
si_emit_cache_flush(cmd_buffer);
 
-   if (cmd_buffer->state.prefetch_L2_mask) {
+   if (has_prefetch && cmd_buffer->state.prefetch_L2_mask) {
/* Only prefetch the vertex shader and VBO descriptors
 * in order to start the draw as soon as possible.
 */

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


Mesa (master): radv: add RADV_NUM_PHYSICAL_VGPRS constant

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 14:10:34 2018 +0200

radv: add RADV_NUM_PHYSICAL_VGPRS constant

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

---

 src/amd/vulkan/radv_shader.c | 6 --
 src/amd/vulkan/radv_shader.h | 2 ++
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 59ad2f3819..eaf24dcdee 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -633,7 +633,9 @@ generate_shader_stats(struct radv_device *device,
 
radv_get_num_physical_sgprs(device->physical_device) / conf->num_sgprs);
 
if (conf->num_vgprs)
-   max_simd_waves = MIN2(max_simd_waves, 256 / conf->num_vgprs);
+   max_simd_waves =
+   MIN2(max_simd_waves,
+RADV_NUM_PHYSICAL_VGPRS / conf->num_vgprs);
 
/* LDS is 64KB per CU (4 SIMDs), divided into 16KB blocks per SIMD
 * that PS can use.
@@ -712,7 +714,7 @@ radv_GetShaderInfoAMD(VkDevice _device,
 
VkShaderStatisticsInfoAMD statistics = {};
statistics.shaderStageMask = shaderStage;
-   statistics.numPhysicalVgprs = 256;
+   statistics.numPhysicalVgprs = RADV_NUM_PHYSICAL_VGPRS;
statistics.numPhysicalSgprs = 
radv_get_num_physical_sgprs(device->physical_device);
statistics.numAvailableSgprs = 
statistics.numPhysicalSgprs;
 
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index f5c0645b5f..cbb7394eea 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -46,6 +46,8 @@
 // Match MAX_SETS from radv_descriptor_set.h
 #define RADV_UD_MAX_SETS MAX_SETS
 
+#define RADV_NUM_PHYSICAL_VGPRS 256
+
 struct radv_shader_module {
struct nir_shader *nir;
unsigned char sha1[20];

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


Mesa (master): radv: add radv_get_num_physical_sgprs() helper

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 14:06:24 2018 +0200

radv: add radv_get_num_physical_sgprs() helper

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

---

 src/amd/vulkan/radv_shader.c | 15 ---
 src/amd/vulkan/radv_shader.h |  6 ++
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index f46beab8c1..59ad2f3819 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -597,15 +597,6 @@ radv_get_shader_name(struct radv_shader_variant *var, 
gl_shader_stage stage)
};
 }
 
-static uint32_t
-get_total_sgprs(struct radv_device *device)
-{
-   if (device->physical_device->rad_info.chip_class >= VI)
-   return 800;
-   else
-   return 512;
-}
-
 static void
 generate_shader_stats(struct radv_device *device,
  struct radv_shader_variant *variant,
@@ -637,7 +628,9 @@ generate_shader_stats(struct radv_device *device,
}
 
if (conf->num_sgprs)
-   max_simd_waves = MIN2(max_simd_waves, get_total_sgprs(device) / 
conf->num_sgprs);
+   max_simd_waves =
+   MIN2(max_simd_waves,
+
radv_get_num_physical_sgprs(device->physical_device) / conf->num_sgprs);
 
if (conf->num_vgprs)
max_simd_waves = MIN2(max_simd_waves, 256 / conf->num_vgprs);
@@ -720,7 +713,7 @@ radv_GetShaderInfoAMD(VkDevice _device,
VkShaderStatisticsInfoAMD statistics = {};
statistics.shaderStageMask = shaderStage;
statistics.numPhysicalVgprs = 256;
-   statistics.numPhysicalSgprs = get_total_sgprs(device);
+   statistics.numPhysicalSgprs = 
radv_get_num_physical_sgprs(device->physical_device);
statistics.numAvailableSgprs = 
statistics.numPhysicalSgprs;
 
if (stage == MESA_SHADER_COMPUTE) {
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index ae30d6125b..f5c0645b5f 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -362,4 +362,10 @@ static inline unsigned 
shader_io_get_unique_index(gl_varying_slot slot)
unreachable("illegal slot in get unique index\n");
 }
 
+static inline uint32_t
+radv_get_num_physical_sgprs(struct radv_physical_device *physical_device)
+{
+   return physical_device->rad_info.chip_class >= VI ? 800 : 512;
+}
+
 #endif

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


Mesa (master): vulkan: Update the XML and headers to 1.1.72

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 12:39:41 2018 +0200

vulkan: Update the XML and headers to 1.1.72

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

---

 include/vulkan/vulkan_android.h |  66 ++
 include/vulkan/vulkan_core.h| 144 +++-
 src/vulkan/registry/vk.xml  | 286 +---
 3 files changed, 445 insertions(+), 51 deletions(-)

Diff:   
http://cgit.freedesktop.org/mesa/mesa/diff/?id=b30dec738a66d5427916b56f4428bb3d45dd4756
___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): radv: implement VK_AMD_shader_core_properties

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 12:40:33 2018 +0200

radv: implement VK_AMD_shader_core_properties

Simple extension that only returns information for AMD hw.

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

---

 src/amd/vulkan/radv_device.c  | 40 +++
 src/amd/vulkan/radv_extensions.py |  1 +
 2 files changed, 41 insertions(+)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index de184603eb..4fc7392e65 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -961,6 +961,46 @@ void radv_GetPhysicalDeviceProperties2(
properties->filterMinmaxSingleComponentFormats = true;
break;
}
+   case 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD: {
+   VkPhysicalDeviceShaderCorePropertiesAMD *properties =
+   (VkPhysicalDeviceShaderCorePropertiesAMD *)ext;
+
+   /* Shader engines. */
+   properties->shaderEngineCount =
+   pdevice->rad_info.max_se;
+   properties->shaderArraysPerEngineCount =
+   pdevice->rad_info.max_sh_per_se;
+   properties->computeUnitsPerShaderArray =
+   pdevice->rad_info.num_good_compute_units /
+   (pdevice->rad_info.max_se *
+pdevice->rad_info.max_sh_per_se);
+   properties->simdPerComputeUnit = 4;
+   properties->wavefrontsPerSimd =
+   pdevice->rad_info.family == CHIP_TONGA ||
+   pdevice->rad_info.family == CHIP_ICELAND ||
+   pdevice->rad_info.family == CHIP_POLARIS10 ||
+   pdevice->rad_info.family == CHIP_POLARIS11 ||
+   pdevice->rad_info.family == CHIP_POLARIS12 ? 8 
: 10;
+   properties->wavefrontSize = 64;
+
+   /* SGPR. */
+   properties->sgprsPerSimd =
+   radv_get_num_physical_sgprs(pdevice);
+   properties->minSgprAllocation =
+   pdevice->rad_info.chip_class >= VI ? 16 : 8;
+   properties->maxSgprAllocation =
+   pdevice->rad_info.family == CHIP_TONGA ||
+   pdevice->rad_info.family == CHIP_ICELAND ? 96 : 
104;
+   properties->sgprAllocationGranularity =
+   pdevice->rad_info.chip_class >= VI ? 16 : 8;
+
+   /* VGPR. */
+   properties->vgprsPerSimd = RADV_NUM_PHYSICAL_VGPRS;
+   properties->minVgprAllocation = 4;
+   properties->maxVgprAllocation = 256;
+   properties->vgprAllocationGranularity = 4;
+   break;
+   }
default:
break;
}
diff --git a/src/amd/vulkan/radv_extensions.py 
b/src/amd/vulkan/radv_extensions.py
index bc63a34896..a25db637e2 100644
--- a/src/amd/vulkan/radv_extensions.py
+++ b/src/amd/vulkan/radv_extensions.py
@@ -96,6 +96,7 @@ EXTENSIONS = [
 Extension('VK_AMD_draw_indirect_count',   1, True),
 Extension('VK_AMD_gcn_shader',1, True),
 Extension('VK_AMD_rasterization_order',   1, 
'device->has_out_of_order_rast'),
+Extension('VK_AMD_shader_core_properties',1, True),
 Extension('VK_AMD_shader_info',   1, True),
 Extension('VK_AMD_shader_trinary_minmax', 1, True),
 ]

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


Mesa (master): radv: add radv_use_dcc_for_image() helper

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

Author: Samuel Pitoiset 
Date:   Fri Mar 30 16:46:14 2018 +0200

radv: add radv_use_dcc_for_image() helper

And add some TODOs.

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

---

 src/amd/vulkan/radv_image.c | 98 +++--
 1 file changed, 68 insertions(+), 30 deletions(-)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index dc4781231d..86d97ff83b 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -103,6 +103,71 @@ radv_use_tc_compat_htile_for_image(struct radv_device 
*device,
return true;
 }
 
+static bool
+radv_use_dcc_for_image(struct radv_device *device,
+  const struct radv_image_create_info *create_info,
+  const VkImageCreateInfo *pCreateInfo)
+{
+   bool dcc_compatible_formats;
+   bool blendable;
+
+   /* DCC (Delta Color Compression) is only available for GFX8+. */
+   if (device->physical_device->rad_info.chip_class < VI)
+   return false;
+
+   if (device->instance->debug_flags & RADV_DEBUG_NO_DCC)
+   return false;
+
+   /* TODO: Enable DCC for storage images. */
+   if ((pCreateInfo->usage & VK_IMAGE_USAGE_STORAGE_BIT) ||
+   (pCreateInfo->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR))
+   return false;
+
+   if (pCreateInfo->tiling == VK_IMAGE_TILING_LINEAR)
+   return false;
+
+   /* TODO: Enable DCC for mipmaps and array layers. */
+   if (pCreateInfo->mipLevels > 1 || pCreateInfo->arrayLayers > 1)
+   return false;
+
+   if (create_info->scanout)
+   return false;
+
+   /* TODO: Enable DCC for MSAA textures. */
+   if (pCreateInfo->samples >= 2)
+   return false;
+
+   /* Determine if the formats are DCC compatible. */
+   dcc_compatible_formats =
+   radv_is_colorbuffer_format_supported(pCreateInfo->format,
+&blendable);
+
+   if (pCreateInfo->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) {
+   const struct VkImageFormatListCreateInfoKHR *format_list =
+   (const struct  VkImageFormatListCreateInfoKHR *)
+   vk_find_struct_const(pCreateInfo->pNext,
+
IMAGE_FORMAT_LIST_CREATE_INFO_KHR);
+
+   /* We have to ignore the existence of the list if 
viewFormatCount = 0 */
+   if (format_list && format_list->viewFormatCount) {
+   /* compatibility is transitive, so we only need to check
+* one format with everything else. */
+   for (unsigned i = 0; i < format_list->viewFormatCount; 
++i) {
+   if 
(!radv_dcc_formats_compatible(pCreateInfo->format,
+
format_list->pViewFormats[i]))
+   dcc_compatible_formats = false;
+   }
+   } else {
+   dcc_compatible_formats = false;
+   }
+   }
+
+   if (!dcc_compatible_formats)
+   return false;
+
+   return true;
+}
+
 static int
 radv_init_surface(struct radv_device *device,
  struct radeon_surf *surface,
@@ -112,7 +177,7 @@ radv_init_surface(struct radv_device *device,
unsigned array_mode = radv_choose_tiling(device, create_info);
const struct vk_format_description *desc =
vk_format_description(pCreateInfo->format);
-   bool is_depth, is_stencil, blendable;
+   bool is_depth, is_stencil;
 
is_depth = vk_format_has_depth(desc);
is_stencil = vk_format_has_stencil(desc);
@@ -158,36 +223,9 @@ radv_init_surface(struct radv_device *device,
 
surface->flags |= RADEON_SURF_OPTIMIZE_FOR_SPACE;
 
-   bool dcc_compatible_formats = 
radv_is_colorbuffer_format_supported(pCreateInfo->format, &blendable);
-   if (pCreateInfo->flags & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) {
-   const struct  VkImageFormatListCreateInfoKHR *format_list =
- (const struct  VkImageFormatListCreateInfoKHR *)
-   vk_find_struct_const(pCreateInfo->pNext,
-
IMAGE_FORMAT_LIST_CREATE_INFO_KHR);
-
-   /* We have to ignore the existence of the list if 
viewFormatCount = 0 */
-   if (format_list && format_list->viewFormatCount) {
-   /* compatibility is transitive, so 

Mesa (master): radv: simplify a check in radv_initialise_color_surface()

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 16:02:16 2018 +0200

radv: simplify a check in radv_initialise_color_surface()

If the image has FMASK metadata, the number of samples is > 1
because radv_image_can_enable_fmask() handles that already.

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

---

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

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 846639eab0..39e320e377 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -3548,7 +3548,7 @@ radv_initialise_color_surface(struct radv_device *device,
format != V_028C70_COLOR_24_8) |
S_028C70_NUMBER_TYPE(ntype) |
S_028C70_ENDIAN(endian);
-   if ((iview->image->info.samples > 1) && 
radv_image_has_fmask(iview->image)) {
+   if (radv_image_has_fmask(iview->image)) {
cb->cb_color_info |= S_028C70_COMPRESSION(1);
if (device->physical_device->rad_info.chip_class == SI) {
unsigned fmask_bankh = 
util_logbase2(iview->image->fmask.bank_height);

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


Mesa (master): radv: rename radv_image_is_tc_compat_htile()

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 16:07:22 2018 +0200

radv: rename radv_image_is_tc_compat_htile()

... to radv_use_tc_compat_htile_for_image(). This function
name makes more sense to me because we want to know if and
only if TC-compat HTILE should be used.

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

---

 src/amd/vulkan/radv_image.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 1a8352fea2..dc4781231d 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -65,8 +65,8 @@ radv_choose_tiling(struct radv_device *device,
 }
 
 static bool
-radv_image_is_tc_compat_htile(struct radv_device *device,
- const VkImageCreateInfo *pCreateInfo)
+radv_use_tc_compat_htile_for_image(struct radv_device *device,
+  const VkImageCreateInfo *pCreateInfo)
 {
/* TC-compat HTILE is only available for GFX8+. */
if (device->physical_device->rad_info.chip_class < VI)
@@ -149,7 +149,7 @@ radv_init_surface(struct radv_device *device,
 
if (is_depth) {
surface->flags |= RADEON_SURF_ZBUFFER;
-   if (radv_image_is_tc_compat_htile(device, pCreateInfo))
+   if (radv_use_tc_compat_htile_for_image(device, pCreateInfo))
surface->flags |= RADEON_SURF_TC_COMPATIBLE_HTILE;
}
 

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


Mesa (master): radv: clean up radv_vi_dcc_enabled()

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 16:00:08 2018 +0200

radv: clean up radv_vi_dcc_enabled()

And rename to radv_dcc_enabled() to be consistent.

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

---

 src/amd/vulkan/radv_device.c  |  2 +-
 src/amd/vulkan/radv_image.c   |  2 +-
 src/amd/vulkan/radv_private.h | 16 ++--
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index caf6f00e63..846639eab0 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -3560,7 +3560,7 @@ radv_initialise_color_surface(struct radv_device *device,
!(device->instance->debug_flags & RADV_DEBUG_NO_FAST_CLEARS))
cb->cb_color_info |= S_028C70_FAST_CLEAR(1);
 
-   if (radv_vi_dcc_enabled(iview->image, iview->base_mip))
+   if (radv_dcc_enabled(iview->image, iview->base_mip))
cb->cb_color_info |= S_028C70_DCC_ENABLE(1);
 
if (device->physical_device->rad_info.chip_class >= VI) {
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 56b9ba1cda..1a8352fea2 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -294,7 +294,7 @@ si_set_mutable_tex_desc_fields(struct radv_device *device,
if (chip_class >= VI) {
state[6] &= C_008F28_COMPRESSION_EN;
state[7] = 0;
-   if (!is_storage_image && radv_vi_dcc_enabled(image, 
first_level)) {
+   if (!is_storage_image && radv_dcc_enabled(image, first_level)) {
meta_va = gpu_address + image->dcc_offset;
if (chip_class <= VI)
meta_va += base_level_info->dcc_offset;
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index f954d67874..97f4cf657d 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1384,12 +1384,6 @@ bool radv_layout_dcc_compressed(const struct radv_image 
*image,
VkImageLayout layout,
unsigned queue_mask);
 
-static inline bool
-radv_vi_dcc_enabled(const struct radv_image *image, unsigned level)
-{
-   return image->surface.dcc_size && level < image->surface.num_dcc_levels;
-}
-
 /**
  * Return whether the image has CMASK metadata for color surfaces.
  */
@@ -1418,6 +1412,16 @@ radv_image_has_dcc(const struct radv_image *image)
 }
 
 /**
+ * Return whether DCC metadata is enabled for a level.
+ */
+static inline bool
+radv_dcc_enabled(const struct radv_image *image, unsigned level)
+{
+   return radv_image_has_dcc(image) &&
+  level < image->surface.num_dcc_levels;
+}
+
+/**
  * Return whether the image has HTILE metadata for depth surfaces.
  */
 static inline bool

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


Mesa (master): radv: add radv_clear_{cmask,dcc} helpers

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 12:22:02 2018 +0200

radv: add radv_clear_{cmask,dcc} helpers

They will help for DCC MSAA textures and if we support mipmaps
in the future.

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

---

 src/amd/vulkan/radv_cmd_buffer.c  |  8 ++--
 src/amd/vulkan/radv_meta.h|  5 +
 src/amd/vulkan/radv_meta_clear.c  | 27 +--
 src/amd/vulkan/radv_meta_fast_clear.c |  4 +---
 4 files changed, 29 insertions(+), 15 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index d9f12a351e..7003818b5b 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3617,9 +3617,7 @@ void radv_initialise_cmask(struct radv_cmd_buffer 
*cmd_buffer,
state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB |
RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
 
-   state->flush_bits |= radv_fill_buffer(cmd_buffer, image->bo,
- image->offset + 
image->cmask.offset,
- image->cmask.size, value);
+   state->flush_bits |= radv_clear_cmask(cmd_buffer, image, value);
 
state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
 }
@@ -3651,9 +3649,7 @@ void radv_initialize_dcc(struct radv_cmd_buffer 
*cmd_buffer,
state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB |
 RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
 
-   state->flush_bits |= radv_fill_buffer(cmd_buffer, image->bo,
- image->offset + image->dcc_offset,
- image->surface.dcc_size, value);
+   state->flush_bits |= radv_clear_dcc(cmd_buffer, image, value);
 
state->flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB |
 RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index 9f3198e879..57b76c1326 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -195,6 +195,11 @@ void radv_blit_to_prime_linear(struct radv_cmd_buffer 
*cmd_buffer,
   struct radv_image *image,
   struct radv_image *linear_image);
 
+uint32_t radv_clear_cmask(struct radv_cmd_buffer *cmd_buffer,
+ struct radv_image *image, uint32_t value);
+uint32_t radv_clear_dcc(struct radv_cmd_buffer *cmd_buffer,
+   struct radv_image *image, uint32_t value);
+
 /* common nir builder helpers */
 #include "nir/nir_builder.h"
 
diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 98fb8fa6a7..678de4275f 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -859,6 +859,24 @@ fail:
return res;
 }
 
+uint32_t
+radv_clear_cmask(struct radv_cmd_buffer *cmd_buffer,
+struct radv_image *image, uint32_t value)
+{
+   return radv_fill_buffer(cmd_buffer, image->bo,
+   image->offset + image->cmask.offset,
+   image->cmask.size, value);
+}
+
+uint32_t
+radv_clear_dcc(struct radv_cmd_buffer *cmd_buffer,
+  struct radv_image *image, uint32_t value)
+{
+   return radv_fill_buffer(cmd_buffer, image->bo,
+   image->offset + image->dcc_offset,
+   image->surface.dcc_size, value);
+}
+
 static void vi_get_fast_clear_parameters(VkFormat format,
 const VkClearColorValue *clear_value,
 uint32_t* reset_value,
@@ -1020,15 +1038,12 @@ emit_fast_color_clear(struct radv_cmd_buffer 
*cmd_buffer,
 &clear_value, &reset_value,
 &can_avoid_fast_clear_elim);
 
-   flush_bits = radv_fill_buffer(cmd_buffer, iview->image->bo,
- iview->image->offset + 
iview->image->dcc_offset,
- iview->image->surface.dcc_size, 
reset_value);
+   flush_bits = radv_clear_dcc(cmd_buffer, iview->image, 
reset_value);
+
radv_set_dcc_need_cmask_elim_pred(cmd_buffer, iview->image,
  !can_avoid_fast_clear_elim);
} else {
-   flush_bits = radv_fill_buffer(cmd_buffer, iview->image->bo,
- iview->image->offset + 
iview->image->cmask.offse

Mesa (master): radv: clean up radv_htile_enabled()

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 15:57:48 2018 +0200

radv: clean up radv_htile_enabled()

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

---

 src/amd/vulkan/radv_private.h | 15 +--
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index b4952b56e1..f954d67874 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1390,12 +1390,6 @@ radv_vi_dcc_enabled(const struct radv_image *image, 
unsigned level)
return image->surface.dcc_size && level < image->surface.num_dcc_levels;
 }
 
-static inline bool
-radv_htile_enabled(const struct radv_image *image, unsigned level)
-{
-   return image->surface.htile_size && level == 0;
-}
-
 /**
  * Return whether the image has CMASK metadata for color surfaces.
  */
@@ -1432,6 +1426,15 @@ radv_image_has_htile(const struct radv_image *image)
return image->surface.htile_size;
 }
 
+/**
+ * Return whether HTILE metadata is enabled for a level.
+ */
+static inline bool
+radv_htile_enabled(const struct radv_image *image, unsigned level)
+{
+   return radv_image_has_htile(image) && level == 0;
+}
+
 unsigned radv_image_queue_family_mask(const struct radv_image *image, uint32_t 
family, uint32_t queue_family);
 
 static inline uint32_t

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


Mesa (master): radv: add radv_get_cmask_fast_clear_value() helper

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 15:32:25 2018 +0200

radv: add radv_get_cmask_fast_clear_value() helper

DCC for MSAA textures are currently unsupported but that will
be used later on.

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

---

 src/amd/vulkan/radv_meta_clear.c | 23 ++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index 678de4275f..7de2f2d013 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -859,6 +859,22 @@ fail:
return res;
 }
 
+static uint32_t
+radv_get_cmask_fast_clear_value(const struct radv_image *image)
+{
+   uint32_t value = 0; /* Default value when no DCC. */
+
+   /* The fast-clear value is different for images that have both DCC and
+* CMASK metadata.
+*/
+   if (image->surface.dcc_size) {
+   /* DCC fast clear with MSAA should clear CMASK to 0xC. */
+   return image->info.samples > 1 ? 0x : 0x;
+   }
+
+   return value;
+}
+
 uint32_t
 radv_clear_cmask(struct radv_cmd_buffer *cmd_buffer,
 struct radv_image *image, uint32_t value)
@@ -970,6 +986,7 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer,
const struct radv_image_view *iview = 
fb->attachments[pass_att].attachment;
VkClearColorValue clear_value = clear_att->clearValue.color;
uint32_t clear_color[2], flush_bits;
+   uint32_t cmask_clear_value;
bool ret;
 
if (!iview->image->cmask.size && !iview->image->surface.dcc_size)
@@ -1030,6 +1047,9 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer,
} else
cmd_buffer->state.flush_bits |= RADV_CMD_FLAG_FLUSH_AND_INV_CB |

RADV_CMD_FLAG_FLUSH_AND_INV_CB_META;
+
+   cmask_clear_value = radv_get_cmask_fast_clear_value(iview->image);
+
/* clear cmask buffer */
if (iview->image->surface.dcc_size) {
uint32_t reset_value;
@@ -1043,7 +1063,8 @@ emit_fast_color_clear(struct radv_cmd_buffer *cmd_buffer,
radv_set_dcc_need_cmask_elim_pred(cmd_buffer, iview->image,
  !can_avoid_fast_clear_elim);
} else {
-   flush_bits = radv_clear_cmask(cmd_buffer, iview->image, 0);
+   flush_bits = radv_clear_cmask(cmd_buffer, iview->image,
+ cmask_clear_value);
}
 
if (post_flush) {

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


Mesa (master): radv: add radv_image_has_{cmask,fmask,dcc,htile}() helpers

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

Author: Samuel Pitoiset 
Date:   Fri Apr  6 15:37:28 2018 +0200

radv: add radv_image_has_{cmask,fmask,dcc,htile}() helpers

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

---

 src/amd/vulkan/radv_cmd_buffer.c  | 18 +-
 src/amd/vulkan/radv_device.c  | 10 +-
 src/amd/vulkan/radv_image.c   | 14 +++---
 src/amd/vulkan/radv_meta_clear.c  | 12 ++--
 src/amd/vulkan/radv_meta_copy.c   |  4 ++--
 src/amd/vulkan/radv_meta_decompress.c |  2 +-
 src/amd/vulkan/radv_meta_fast_clear.c |  8 
 src/amd/vulkan/radv_meta_resolve.c|  4 ++--
 src/amd/vulkan/radv_private.h | 36 +++
 9 files changed, 72 insertions(+), 36 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 7003818b5b..e8a6d9be15 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -947,7 +947,7 @@ radv_set_depth_clear_regs(struct radv_cmd_buffer 
*cmd_buffer,
va += image->offset + image->clear_value_offset;
unsigned reg_offset = 0, reg_count = 0;
 
-   assert(image->surface.htile_size);
+   assert(radv_image_has_htile(image));
 
if (aspects & VK_IMAGE_ASPECT_STENCIL_BIT) {
++reg_count;
@@ -985,7 +985,7 @@ radv_load_depth_clear_regs(struct radv_cmd_buffer 
*cmd_buffer,
va += image->offset + image->clear_value_offset;
unsigned reg_offset = 0, reg_count = 0;
 
-   if (!image->surface.htile_size)
+   if (!radv_image_has_htile(image))
return;
 
if (aspects & VK_IMAGE_ASPECT_STENCIL_BIT) {
@@ -1024,7 +1024,7 @@ radv_set_dcc_need_cmask_elim_pred(struct radv_cmd_buffer 
*cmd_buffer,
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->dcc_pred_offset;
 
-   assert(image->surface.dcc_size);
+   assert(radv_image_has_dcc(image));
 
radeon_emit(cmd_buffer->cs, PKT3(PKT3_WRITE_DATA, 4, 0));
radeon_emit(cmd_buffer->cs, S_370_DST_SEL(V_370_MEM_ASYNC) |
@@ -1045,7 +1045,7 @@ radv_set_color_clear_regs(struct radv_cmd_buffer 
*cmd_buffer,
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->clear_value_offset;
 
-   assert(image->cmask.size || image->surface.dcc_size);
+   assert(radv_image_has_cmask(image) || radv_image_has_dcc(image));
 
radeon_emit(cmd_buffer->cs, PKT3(PKT3_WRITE_DATA, 4, 0));
radeon_emit(cmd_buffer->cs, S_370_DST_SEL(V_370_MEM_ASYNC) |
@@ -1069,7 +1069,7 @@ radv_load_color_clear_regs(struct radv_cmd_buffer 
*cmd_buffer,
uint64_t va = radv_buffer_get_va(image->bo);
va += image->offset + image->clear_value_offset;
 
-   if (!image->cmask.size && !image->surface.dcc_size)
+   if (!radv_image_has_cmask(image) && !radv_image_has_dcc(image))
return;
 
uint32_t reg = R_028C8C_CB_COLOR0_CLEAR_WORD0 + idx * 0x3c;
@@ -3631,7 +3631,7 @@ static void radv_handle_cmask_image_transition(struct 
radv_cmd_buffer *cmd_buffe
   const VkImageSubresourceRange 
*range)
 {
if (src_layout == VK_IMAGE_LAYOUT_UNDEFINED) {
-   if (image->fmask.size)
+   if (radv_image_has_fmask(image))
radv_initialise_cmask(cmd_buffer, image, 0xu);
else
radv_initialise_cmask(cmd_buffer, image, 0xu);
@@ -3707,18 +3707,18 @@ static void radv_handle_image_transition(struct 
radv_cmd_buffer *cmd_buffer,
unsigned src_queue_mask = radv_image_queue_family_mask(image, 
src_family, cmd_buffer->queue_family_index);
unsigned dst_queue_mask = radv_image_queue_family_mask(image, 
dst_family, cmd_buffer->queue_family_index);
 
-   if (image->surface.htile_size)
+   if (radv_image_has_htile(image))
radv_handle_depth_image_transition(cmd_buffer, image, 
src_layout,
   dst_layout, src_queue_mask,
   dst_queue_mask, range,
   pending_clears);
 
-   if (image->cmask.size || image->fmask.size)
+   if (radv_image_has_cmask(image) || radv_image_has_fmask(image))
radv_handle_cmask_image_transition(cmd_buffer, image, 
src_layout,
   dst_layout, src_queue_mask,
   dst_queue_mask, range);
 
-   if (image->surface.dcc_size)
+   if (radv_image_has_dcc(image))
radv_handle_dcc_image_

  1   2   3   4   5   6   7   8   9   10   >