Re: [Mesa-dev] [PATCH 3/8] radeonsi/nir: add si_nir_lookup_interp_param() helper

2018-01-29 Thread Marek Olšák
On Mon, Jan 15, 2018 at 4:46 AM, Timothy Arceri  wrote:
> ---
>  src/amd/common/ac_nir_to_llvm.c   |  4 ---
>  src/amd/common/ac_nir_to_llvm.h   |  5 
>  src/amd/common/ac_shader_abi.h|  2 ++
>  src/gallium/drivers/radeonsi/si_shader_internal.h |  4 +++
>  src/gallium/drivers/radeonsi/si_shader_nir.c  | 36 
> +++
>  5 files changed, 47 insertions(+), 4 deletions(-)
>
> diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
> index e79fdd2ec2..3efb01137c 100644
> --- a/src/amd/common/ac_nir_to_llvm.c
> +++ b/src/amd/common/ac_nir_to_llvm.c
> @@ -3926,10 +3926,6 @@ static LLVMValueRef visit_var_atomic(struct 
> nir_to_llvm_context *ctx,
> return result;
>  }
>
> -#define INTERP_CENTER 0
> -#define INTERP_CENTROID 1
> -#define INTERP_SAMPLE 2
> -
>  static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx,
> enum glsl_interp_mode interp, 
> unsigned location)
>  {
> diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
> index b3ad0a0985..99bc3ef8dd 100644
> --- a/src/amd/common/ac_nir_to_llvm.h
> +++ b/src/amd/common/ac_nir_to_llvm.h
> @@ -115,6 +115,11 @@ enum ac_ud_index {
> AC_UD_MAX_UD = AC_UD_TCS_MAX_UD,
>  };
>
> +/* Interpolation locations */
> +#define INTERP_CENTER 0
> +#define INTERP_CENTROID 1
> +#define INTERP_SAMPLE 2

This should probably be in a different patch.

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


[Mesa-dev] [PATCH 3/8] radeonsi/nir: add si_nir_lookup_interp_param() helper

2018-01-14 Thread Timothy Arceri
---
 src/amd/common/ac_nir_to_llvm.c   |  4 ---
 src/amd/common/ac_nir_to_llvm.h   |  5 
 src/amd/common/ac_shader_abi.h|  2 ++
 src/gallium/drivers/radeonsi/si_shader_internal.h |  4 +++
 src/gallium/drivers/radeonsi/si_shader_nir.c  | 36 +++
 5 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/src/amd/common/ac_nir_to_llvm.c b/src/amd/common/ac_nir_to_llvm.c
index e79fdd2ec2..3efb01137c 100644
--- a/src/amd/common/ac_nir_to_llvm.c
+++ b/src/amd/common/ac_nir_to_llvm.c
@@ -3926,10 +3926,6 @@ static LLVMValueRef visit_var_atomic(struct 
nir_to_llvm_context *ctx,
return result;
 }
 
-#define INTERP_CENTER 0
-#define INTERP_CENTROID 1
-#define INTERP_SAMPLE 2
-
 static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx,
enum glsl_interp_mode interp, unsigned 
location)
 {
diff --git a/src/amd/common/ac_nir_to_llvm.h b/src/amd/common/ac_nir_to_llvm.h
index b3ad0a0985..99bc3ef8dd 100644
--- a/src/amd/common/ac_nir_to_llvm.h
+++ b/src/amd/common/ac_nir_to_llvm.h
@@ -115,6 +115,11 @@ enum ac_ud_index {
AC_UD_MAX_UD = AC_UD_TCS_MAX_UD,
 };
 
+/* Interpolation locations */
+#define INTERP_CENTER 0
+#define INTERP_CENTROID 1
+#define INTERP_SAMPLE 2
+
 /* descriptor index into scratch ring offsets */
 #define RING_SCRATCH 0
 #define RING_ESGS_VS 1
diff --git a/src/amd/common/ac_shader_abi.h b/src/amd/common/ac_shader_abi.h
index 3e9e7a4786..579fca9e7c 100644
--- a/src/amd/common/ac_shader_abi.h
+++ b/src/amd/common/ac_shader_abi.h
@@ -26,6 +26,8 @@
 
 #include 
 
+#include "compiler/shader_enums.h"
+
 enum ac_descriptor_type {
AC_DESC_IMAGE,
AC_DESC_FMASK,
diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h 
b/src/gallium/drivers/radeonsi/si_shader_internal.h
index 7306481ccd..8b0e73abbf 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -292,6 +292,10 @@ LLVMValueRef si_llvm_load_input_gs(struct ac_shader_abi 
*abi,
   LLVMTypeRef type,
   unsigned swizzle);
 
+LLVMValueRef si_nir_lookup_interp_param(struct ac_shader_abi *abi,
+   enum glsl_interp_mode interp,
+   unsigned location);
+
 void si_llvm_emit_store(struct lp_build_tgsi_context *bld_base,
const struct tgsi_full_instruction *inst,
const struct tgsi_opcode_info *info,
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c 
b/src/gallium/drivers/radeonsi/si_shader_nir.c
index d2314e03ec..32ac985bc7 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -624,6 +624,42 @@ LLVMValueRef si_nir_load_input_gs(struct ac_shader_abi 
*abi,
return ac_build_varying_gather_values(>ac, value, num_components, 
component);
 }
 
+LLVMValueRef
+si_nir_lookup_interp_param(struct ac_shader_abi *abi,
+  enum glsl_interp_mode interp, unsigned location)
+{
+   struct si_shader_context *ctx = si_shader_context_from_abi(abi);
+   int interp_param_idx = -1;
+
+   switch (interp) {
+   case INTERP_MODE_FLAT:
+   return NULL;
+   case INTERP_MODE_SMOOTH:
+   case INTERP_MODE_NONE:
+   if (location == INTERP_CENTER)
+   interp_param_idx = SI_PARAM_PERSP_CENTER;
+   else if (location == INTERP_CENTROID)
+   interp_param_idx = SI_PARAM_PERSP_CENTROID;
+   else if (location == INTERP_SAMPLE)
+   interp_param_idx = SI_PARAM_PERSP_SAMPLE;
+   break;
+   case INTERP_MODE_NOPERSPECTIVE:
+   if (location == INTERP_CENTER)
+   interp_param_idx = SI_PARAM_LINEAR_CENTER;
+   else if (location == INTERP_CENTROID)
+   interp_param_idx = SI_PARAM_LINEAR_CENTROID;
+   else if (location == INTERP_SAMPLE)
+   interp_param_idx = SI_PARAM_LINEAR_SAMPLE;
+   break;
+   default:
+   assert(!"Unhandled interpolation mode.");
+   return NULL;
+   }
+
+   return interp_param_idx != -1 ?
+   LLVMGetParam(ctx->main_fn, interp_param_idx) : NULL;
+}
+
 static LLVMValueRef
 si_nir_load_sampler_desc(struct ac_shader_abi *abi,
 unsigned descriptor_set, unsigned base_index,
-- 
2.14.3

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