[Mesa-dev] [PATCH 2/2] radeonsi: implement SAMPLEPOS system value without a constant buffer load

Nicolai Hähnle nhaehnle at gmail.com
Wed Jan 20 09:44:08 PST 2016


Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

On 19.01.2016 20:39, Marek Olšák wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> We always get per-sample input position.
> ---
>   src/gallium/drivers/radeonsi/si_shader.c | 15 +++++++++++++--
>   1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index 5c536f8..d788c41 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -1119,9 +1119,20 @@ static void declare_system_value(
>   		value = get_sample_id(radeon_bld);
>   		break;
>
> -	case TGSI_SEMANTIC_SAMPLEPOS:
> -		value = load_sample_position(radeon_bld, get_sample_id(radeon_bld));
> +	case TGSI_SEMANTIC_SAMPLEPOS: {
> +		LLVMValueRef pos[4] = {
> +			LLVMGetParam(radeon_bld->main_fn, SI_PARAM_POS_X_FLOAT),
> +			LLVMGetParam(radeon_bld->main_fn, SI_PARAM_POS_Y_FLOAT),
> +			lp_build_const_float(gallivm, 0),
> +			lp_build_const_float(gallivm, 0)
> +		};
> +		pos[0] = lp_build_emit_llvm_unary(&radeon_bld->soa.bld_base,
> +						  TGSI_OPCODE_FRC, pos[0]);
> +		pos[1] = lp_build_emit_llvm_unary(&radeon_bld->soa.bld_base,
> +						  TGSI_OPCODE_FRC, pos[1]);
> +		value = lp_build_gather_values(gallivm, pos, 4);
>   		break;
> +	}
>
>   	case TGSI_SEMANTIC_SAMPLEMASK:
>   		/* Smoothing isn't MSAA in GL, but it's MSAA in hardware.
>


More information about the mesa-dev mailing list