Mesa (master): radv: handle exporting view index to fragment shader. (v1.1)

2018-03-18 Thread Dave Airlie
Module: Mesa
Branch: master
Commit: 8f052a3e257a61240cb311032497d016278117a8
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f052a3e257a61240cb311032497d016278117a8

Author: Dave Airlie 
Date:   Fri Mar 16 05:57:11 2018 +

radv: handle exporting view index to fragment shader. (v1.1)

The fragment shader was trying to read this, but nothing
was exporting it from the vertex shader. This handles
it like the prim id export.

Fixes:
dEQP-VK.multiview.secondary_cmd_buffer.*
dEQP-VK.multiview.index.fragment_shader.*

v1.1: updated to use 0x1 (Samuel)

Fixes: e3265c10c89 (radv: Implement multiview draws.)
Reviewed-by: Samuel Pitoiset 
Signed-off-by: Dave Airlie 

---

 src/amd/vulkan/radv_nir_to_llvm.c | 18 --
 src/amd/vulkan/radv_pipeline.c|  4 
 src/amd/vulkan/radv_shader.h  |  2 ++
 src/amd/vulkan/radv_shader_info.c |  2 ++
 4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index cedcd38b3a..7379f348d8 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -2183,7 +2183,7 @@ radv_load_output(struct radv_shader_context *ctx, 
unsigned index, unsigned chan)
 
 static void
 handle_vs_outputs_post(struct radv_shader_context *ctx,
-  bool export_prim_id,
+  bool export_prim_id, bool export_layer_id,
   struct radv_vs_output_info *outinfo)
 {
uint32_t param_count = 0;
@@ -2363,6 +2363,18 @@ handle_vs_outputs_post(struct radv_shader_context *ctx,
outinfo->export_prim_id = true;
}
 
+   if (export_layer_id) {
+   LLVMValueRef values[4];
+
+   values[0] = layer_value;
+   for (unsigned j = 1; j < 4; j++)
+   values[j] = ctx->ac.f32_0;
+
+   radv_export_param(ctx, param_count, values, 0x1);
+
+   outinfo->vs_output_param_offset[VARYING_SLOT_LAYER] = 
param_count++;
+   }
+
outinfo->pos_exports = num_pos_exports;
outinfo->param_exports = param_count;
 }
@@ -2825,6 +2837,7 @@ handle_shader_outputs_post(struct ac_shader_abi *abi, 
unsigned max_outputs,
handle_es_outputs_post(ctx, 
>shader_info->vs.es_info);
else
handle_vs_outputs_post(ctx, 
ctx->options->key.vs.export_prim_id,
+  
ctx->options->key.vs.export_layer_id,
   >shader_info->vs.outinfo);
break;
case MESA_SHADER_FRAGMENT:
@@ -2841,6 +2854,7 @@ handle_shader_outputs_post(struct ac_shader_abi *abi, 
unsigned max_outputs,
handle_es_outputs_post(ctx, 
>shader_info->tes.es_info);
else
handle_vs_outputs_post(ctx, 
ctx->options->key.tes.export_prim_id,
+  
ctx->options->key.tes.export_layer_id,
   >shader_info->tes.outinfo);
break;
default:
@@ -3439,7 +3453,7 @@ ac_gs_copy_shader_emit(struct radv_shader_context *ctx)
}
idx += slot_inc;
}
-   handle_vs_outputs_post(ctx, false, >shader_info->vs.outinfo);
+   handle_vs_outputs_post(ctx, false, false, 
>shader_info->vs.outinfo);
 }
 
 void
diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c
index 52a6d23718..89c5e69941 100644
--- a/src/amd/vulkan/radv_pipeline.c
+++ b/src/amd/vulkan/radv_pipeline.c
@@ -1718,8 +1718,12 @@ void radv_create_shaders(struct radv_pipeline *pipeline,
/* TODO: These are no longer used as keys we should refactor 
this */
keys[MESA_SHADER_VERTEX].vs.export_prim_id =

pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.prim_id_input;
+   keys[MESA_SHADER_VERTEX].vs.export_layer_id =
+   
pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.layer_input;
keys[MESA_SHADER_TESS_EVAL].tes.export_prim_id =

pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.prim_id_input;
+   keys[MESA_SHADER_TESS_EVAL].tes.export_layer_id =
+   
pipeline->shaders[MESA_SHADER_FRAGMENT]->info.info.ps.layer_input;
}
 
if (device->physical_device->rad_info.chip_class >= GFX9 && 
modules[MESA_SHADER_TESS_CTRL]) {
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 40e92b52f3..ae30d6125b 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -58,11 +58,13 @@ struct radv_vs_variant_key {
uint32_t as_es:1;
uint32_t as_ls:1;
uint32_t export_prim_id:1;
+   uint32_t export_layer_id:1;
 };
 
 struct radv_tes_variant_key {
uint32_t 

Mesa (master): st/nine: Fix bad tracking of bound vs textures

2018-03-18 Thread Axel Davy
Module: Mesa
Branch: master
Commit: 76fa1f730b7ee232021bb20bae0ead6779941cf1
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=76fa1f730b7ee232021bb20bae0ead6779941cf1

Author: Axel Davy 
Date:   Sat Mar 10 14:21:52 2018 +0100

st/nine: Fix bad tracking of bound vs textures

An incorrect formula was used to compute bound_samplers_mask_vs.
Since s is above always 8 for vs and the variable is encoded on 8 bits,
it was always 0.
This resulted in commiting the samplers every call when
there was at least one texture read in the vs shader.

Signed-off-by: Axel Davy 
Reviewed-by: Patrick Rudolph 
Tested-by: Dieter Nützel 

---

 src/gallium/state_trackers/nine/nine_state.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 26b2dea3bd..c81a05a952 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -980,7 +980,7 @@ update_textures_and_samplers(struct NineDevice9 *device)
 context->changed.sampler[s] = ~0;
 }
 
-context->bound_samplers_mask_vs |= (1 << s);
+context->bound_samplers_mask_vs |= (1 << i);
 }
 
 cso_set_sampler_views(context->cso, PIPE_SHADER_VERTEX, num_textures, 
view);

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


Mesa (master): st/nine: Fix bad tracking of vs textures for NINESBT_ALL

2018-03-18 Thread Axel Davy
Module: Mesa
Branch: master
Commit: 71eae7940ef7fa92e01cdc9afa1172f92d4b489e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=71eae7940ef7fa92e01cdc9afa1172f92d4b489e

Author: Axel Davy 
Date:   Sat Mar 10 14:23:43 2018 +0100

st/nine: Fix bad tracking of vs textures for NINESBT_ALL

Stateblocks with NINESBT_ALL should track all textures.
For better performance they have a faster path which
copies all the required.

This path was only tracking ps textures.

Fixes: https://github.com/iXit/Mesa-3D/issues/303

Signed-off-by: Axel Davy 
Reviewed-by: Patrick Rudolph 
Tested-by: Dieter Nützel 

CC: "17.3 18.0" 

---

 src/gallium/state_trackers/nine/stateblock9.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/stateblock9.c 
b/src/gallium/state_trackers/nine/stateblock9.c
index 4b7166f0da..54bf1e3c95 100644
--- a/src/gallium/state_trackers/nine/stateblock9.c
+++ b/src/gallium/state_trackers/nine/stateblock9.c
@@ -454,7 +454,7 @@ nine_state_copy_common_all(struct NineDevice9 *device,
 
 /* Textures */
 if (1) {
-for (i = 0; i < device->caps.MaxSimultaneousTextures; i++)
+for (i = 0; i < NINE_MAX_SAMPLERS; i++)
 NineStateBlock9_BindTexture(device, apply, >texture[i], 
src->texture[i]);
 }
 

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


Mesa (master): st/nine: Fix non inversible matrix check

2018-03-18 Thread Axel Davy
Module: Mesa
Branch: master
Commit: dbc24835d75466951a44b391b42e39461a6ac5a2
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=dbc24835d75466951a44b391b42e39461a6ac5a2

Author: Axel Davy 
Date:   Sat Mar 10 18:49:59 2018 +0100

st/nine: Fix non inversible matrix check

There was a missing absolute value when
checking if the determinant was big enough.

Fixes: https://github.com/iXit/Mesa-3D/issues/292

Signed-off-by: Axel Davy 
Reviewed-by: Patrick Rudolph 
Tested-by: Dieter Nützel 

CC: "17.3 18.0" 

---

 src/gallium/state_trackers/nine/nine_ff.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index 6c30839b29..d7b697caee 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -2474,7 +2474,7 @@ nine_d3d_matrix_inverse(D3DMATRIX *D, const D3DMATRIX *M)
 M->m[2][0] * D->m[0][2] +
 M->m[3][0] * D->m[0][3];
 
-if (det < 1e-30) {/* non inversible */
+if (fabsf(det) < 1e-30) {/* non inversible */
 *D = *M; /* wine tests */
 return;
 }

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


Mesa (master): st/nine: Fixes warning about implicit conversion

2018-03-18 Thread Axel Davy
Module: Mesa
Branch: master
Commit: f61e9a958bd8d61cb7ca575ca987caefc6edbffd
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f61e9a958bd8d61cb7ca575ca987caefc6edbffd

Author: Axel Davy 
Date:   Sat Mar 10 14:28:10 2018 +0100

st/nine: Fixes warning about implicit conversion

Makes the conversion explicit.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=102542

Signed-off-by: Axel Davy 
Reviewed-by: Patrick Rudolph 
Tested-by: Dieter Nützel 

CC: "17.3 18.0" 

---

 src/gallium/state_trackers/nine/nine_ff.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index eb673e4aff..6c30839b29 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -1935,7 +1935,7 @@ nine_ff_load_lights(struct NineDevice9 *device)
 dst[38 + l * 8].x = cosf(light->Theta * 0.5f);
 dst[38 + l * 8].y = cosf(light->Phi * 0.5f);
 dst[38 + l * 8].z = 1.0f / (dst[38 + l * 8].x - dst[38 + l * 8].y);
-dst[39 + l * 8].w = (l + 1) == context->ff.num_lights_active;
+dst[39 + l * 8].w = (float)((l + 1) == context->ff.num_lights_active);
 }
 }
 

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