mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
radeonsi: stop using TGSI definitions for interpolation
define our own
This commit is contained in:
parent
22b743b084
commit
536875fc5b
3 changed files with 29 additions and 25 deletions
|
|
@ -13,7 +13,6 @@
|
|||
#include "nir_xfb_info.h"
|
||||
#include "si_pipe.h"
|
||||
#include "si_shader_internal.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
|
||||
static void si_fix_resource_usage(struct si_screen *sscreen, struct si_shader *shader);
|
||||
|
||||
|
|
@ -1798,20 +1797,20 @@ static void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_
|
|||
case INTERP_MODE_COLOR:
|
||||
/* Force the interpolation location for colors here. */
|
||||
if (shader->key.ps.part.prolog.force_persp_sample_interp)
|
||||
location = TGSI_INTERPOLATE_LOC_SAMPLE;
|
||||
location = SI_INTERPOLATE_LOC_SAMPLE;
|
||||
if (shader->key.ps.part.prolog.force_persp_center_interp)
|
||||
location = TGSI_INTERPOLATE_LOC_CENTER;
|
||||
location = SI_INTERPOLATE_LOC_CENTER;
|
||||
|
||||
switch (location) {
|
||||
case TGSI_INTERPOLATE_LOC_SAMPLE:
|
||||
case SI_INTERPOLATE_LOC_SAMPLE:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_PERSP_SAMPLE;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_PERSP_SAMPLE_ENA(1);
|
||||
break;
|
||||
case TGSI_INTERPOLATE_LOC_CENTER:
|
||||
case SI_INTERPOLATE_LOC_CENTER:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_PERSP_CENTER;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_PERSP_CENTER_ENA(1);
|
||||
break;
|
||||
case TGSI_INTERPOLATE_LOC_CENTROID:
|
||||
case SI_INTERPOLATE_LOC_CENTROID:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_PERSP_CENTROID;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_PERSP_CENTROID_ENA(1);
|
||||
break;
|
||||
|
|
@ -1822,24 +1821,24 @@ static void si_get_ps_prolog_key(struct si_shader *shader, union si_shader_part_
|
|||
case INTERP_MODE_NOPERSPECTIVE:
|
||||
/* Force the interpolation location for colors here. */
|
||||
if (shader->key.ps.part.prolog.force_linear_sample_interp)
|
||||
location = TGSI_INTERPOLATE_LOC_SAMPLE;
|
||||
location = SI_INTERPOLATE_LOC_SAMPLE;
|
||||
if (shader->key.ps.part.prolog.force_linear_center_interp)
|
||||
location = TGSI_INTERPOLATE_LOC_CENTER;
|
||||
location = SI_INTERPOLATE_LOC_CENTER;
|
||||
|
||||
/* The VGPR assignment for non-monolithic shaders
|
||||
* works because InitialPSInputAddr is set on the
|
||||
* main shader and PERSP_PULL_MODEL is never used.
|
||||
*/
|
||||
switch (location) {
|
||||
case TGSI_INTERPOLATE_LOC_SAMPLE:
|
||||
case SI_INTERPOLATE_LOC_SAMPLE:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_LINEAR_SAMPLE;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_LINEAR_SAMPLE_ENA(1);
|
||||
break;
|
||||
case TGSI_INTERPOLATE_LOC_CENTER:
|
||||
case SI_INTERPOLATE_LOC_CENTER:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_LINEAR_CENTER;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_LINEAR_CENTER_ENA(1);
|
||||
break;
|
||||
case TGSI_INTERPOLATE_LOC_CENTROID:
|
||||
case SI_INTERPOLATE_LOC_CENTROID:
|
||||
key->ps_prolog.color_interp[i] = AC_COLOR_INTERP_LINEAR_CENTROID;
|
||||
shader->config.spi_ps_input_ena |= S_0286CC_LINEAR_CENTROID_ENA(1);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -234,6 +234,12 @@ enum
|
|||
SI_NUM_PARAMS = SI_PARAM_POS_FIXED_PT + 9, /* +8 for COLOR[0..1] */
|
||||
};
|
||||
|
||||
enum {
|
||||
SI_INTERPOLATE_LOC_CENTER,
|
||||
SI_INTERPOLATE_LOC_CENTROID,
|
||||
SI_INTERPOLATE_LOC_SAMPLE,
|
||||
};
|
||||
|
||||
/* These fields are only set in current_vs_state (except INDEXED) in si_context, and they are
|
||||
* accessible in the shader via vs_state_bits in VS, TES, and GS.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
#include "si_pipe.h"
|
||||
#include "si_shader_internal.h"
|
||||
#include "util/mesa-blake3.h"
|
||||
#include "pipe/p_shader_tokens.h"
|
||||
#include "nir.h"
|
||||
#include "nir_tcs_info.h"
|
||||
#include "nir_xfb_info.h"
|
||||
|
|
@ -67,7 +66,7 @@ get_color_input_interp_info(nir_intrinsic_instr *intr, enum glsl_interp_mode *in
|
|||
|
||||
if (intr->intrinsic != nir_intrinsic_load_interpolated_input) {
|
||||
*interp_mode = INTERP_MODE_FLAT;
|
||||
*interp_location = TGSI_INTERPOLATE_LOC_CENTER;
|
||||
*interp_location = SI_INTERPOLATE_LOC_CENTER;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -82,13 +81,13 @@ get_color_input_interp_info(nir_intrinsic_instr *intr, enum glsl_interp_mode *in
|
|||
|
||||
switch (baryc->intrinsic) {
|
||||
case nir_intrinsic_load_barycentric_pixel:
|
||||
*interp_location = TGSI_INTERPOLATE_LOC_CENTER;
|
||||
*interp_location = SI_INTERPOLATE_LOC_CENTER;
|
||||
break;
|
||||
case nir_intrinsic_load_barycentric_centroid:
|
||||
*interp_location = TGSI_INTERPOLATE_LOC_CENTROID;
|
||||
*interp_location = SI_INTERPOLATE_LOC_CENTROID;
|
||||
break;
|
||||
case nir_intrinsic_load_barycentric_sample:
|
||||
*interp_location = TGSI_INTERPOLATE_LOC_SAMPLE;
|
||||
*interp_location = SI_INTERPOLATE_LOC_SAMPLE;
|
||||
break;
|
||||
default:
|
||||
UNREACHABLE("unexpected baryc intrinsic");
|
||||
|
|
@ -161,19 +160,19 @@ static void gather_io_instrinsic(const nir_shader *nir, struct si_shader_info *i
|
|||
|
||||
switch (interp_mode) {
|
||||
case INTERP_MODE_SMOOTH:
|
||||
if (interp_location == TGSI_INTERPOLATE_LOC_SAMPLE)
|
||||
if (interp_location == SI_INTERPOLATE_LOC_SAMPLE)
|
||||
info->uses_sysval_persp_sample = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTROID)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTROID)
|
||||
info->uses_sysval_persp_centroid = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTER)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTER)
|
||||
info->uses_sysval_persp_center = true;
|
||||
break;
|
||||
case INTERP_MODE_NOPERSPECTIVE:
|
||||
if (interp_location == TGSI_INTERPOLATE_LOC_SAMPLE)
|
||||
if (interp_location == SI_INTERPOLATE_LOC_SAMPLE)
|
||||
info->uses_sysval_linear_sample = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTROID)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTROID)
|
||||
info->uses_sysval_linear_centroid = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTER)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTER)
|
||||
info->uses_sysval_linear_center = true;
|
||||
break;
|
||||
case INTERP_MODE_COLOR:
|
||||
|
|
@ -181,11 +180,11 @@ static void gather_io_instrinsic(const nir_shader *nir, struct si_shader_info *i
|
|||
* in the rasterizer state, otherwise it will be SMOOTH.
|
||||
*/
|
||||
info->uses_interp_color = true;
|
||||
if (interp_location == TGSI_INTERPOLATE_LOC_SAMPLE)
|
||||
if (interp_location == SI_INTERPOLATE_LOC_SAMPLE)
|
||||
info->uses_persp_sample_color = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTROID)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTROID)
|
||||
info->uses_persp_centroid_color = true;
|
||||
else if (interp_location == TGSI_INTERPOLATE_LOC_CENTER)
|
||||
else if (interp_location == SI_INTERPOLATE_LOC_CENTER)
|
||||
info->uses_persp_center_color = true;
|
||||
break;
|
||||
case INTERP_MODE_FLAT:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue