[Mesa-dev] [PATCH 1/2] radeonsi: simplify gl_FragCoord behavior
Nicolai Hähnle
nhaehnle at gmail.com
Tue Jan 12 14:41:43 PST 2016
Fine with me
On 12.01.2016 13:10, Marek Olšák wrote:
> Hi,
>
> For AMD guys: Is it okay with you to push this patch series?
>
> Thanks,
>
> Marek
>
> On Fri, Jan 8, 2016 at 2:30 AM, Marek Olšák <maraeo at gmail.com> wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> It will become a system value, not an input.
>> ---
>> src/gallium/drivers/radeonsi/si_state_shaders.c | 45 ++++++++++++-------------
>> 1 file changed, 22 insertions(+), 23 deletions(-)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
>> index 64adf69..460dda5 100644
>> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
>> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
>> @@ -399,30 +399,29 @@ static void si_shader_ps(struct si_shader *shader)
>> if (!pm4)
>> return;
>>
>> - for (i = 0; i < info->num_inputs; i++) {
>> - switch (info->input_semantic_name[i]) {
>> - case TGSI_SEMANTIC_POSITION:
>> - /* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
>> - * Possible vaules:
>> - * 0 -> Position = pixel center (default)
>> - * 1 -> Position = pixel centroid
>> - * 2 -> Position = at sample position
>> - */
>> - switch (info->input_interpolate_loc[i]) {
>> - case TGSI_INTERPOLATE_LOC_CENTROID:
>> - spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(1);
>> - break;
>> - case TGSI_INTERPOLATE_LOC_SAMPLE:
>> - spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(2);
>> - break;
>> - }
>> + /* SPI_BARYC_CNTL.POS_FLOAT_LOCATION
>> + * Possible vaules:
>> + * 0 -> Position = pixel center
>> + * 1 -> Position = pixel centroid
>> + * 2 -> Position = at sample position
>> + *
>> + * From GLSL 4.5 specification, section 7.1:
>> + * "The variable gl_FragCoord is available as an input variable from
>> + * within fragment shaders and it holds the window relative coordinates
>> + * (x, y, z, 1/w) values for the fragment. If multi-sampling, this
>> + * value can be for any location within the pixel, or one of the
>> + * fragment samples. The use of centroid does not further restrict
>> + * this value to be inside the current primitive."
>> + *
>> + * Meaning that centroid has no effect and we can return anything within
>> + * the pixel. Thus, return the value at sample position, because that's
>> + * the most accurate one shaders can get.
>> + */
>> + spi_baryc_cntl |= S_0286E0_POS_FLOAT_LOCATION(2);
>>
>> - if (info->properties[TGSI_PROPERTY_FS_COORD_PIXEL_CENTER] ==
>> - TGSI_FS_COORD_PIXEL_CENTER_INTEGER)
>> - spi_baryc_cntl |= S_0286E0_POS_FLOAT_ULC(1);
>> - break;
>> - }
>> - }
>> + if (info->properties[TGSI_PROPERTY_FS_COORD_PIXEL_CENTER] ==
>> + TGSI_FS_COORD_PIXEL_CENTER_INTEGER)
>> + spi_baryc_cntl |= S_0286E0_POS_FLOAT_ULC(1);
>>
>> /* Find out what SPI_SHADER_COL_FORMAT and CB_SHADER_MASK should be. */
>> colors_written = info->colors_written;
>> --
>> 2.1.4
>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list