intel/fs: disable coarse pixel shader with interpolater messages at sample
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9292 Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23962>
This commit is contained in:

committed by
Marge Bot

parent
30163c59f7
commit
c26c0a36d3
@@ -7303,7 +7303,7 @@ brw_nir_move_interpolation_to_top(nir_shader *nir)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
brw_nir_populate_wm_prog_data(const nir_shader *shader,
|
brw_nir_populate_wm_prog_data(nir_shader *shader,
|
||||||
const struct intel_device_info *devinfo,
|
const struct intel_device_info *devinfo,
|
||||||
const struct brw_wm_prog_key *key,
|
const struct brw_wm_prog_key *key,
|
||||||
struct brw_wm_prog_data *prog_data,
|
struct brw_wm_prog_data *prog_data,
|
||||||
@@ -7412,6 +7412,35 @@ brw_nir_populate_wm_prog_data(const nir_shader *shader,
|
|||||||
prog_data->coarse_pixel_dispatch = BRW_NEVER;
|
prog_data->coarse_pixel_dispatch = BRW_NEVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ICL PRMs, Volume 9: Render Engine, Shared Functions Pixel Interpolater,
|
||||||
|
* Message Descriptor :
|
||||||
|
*
|
||||||
|
* "Message Type. Specifies the type of message being sent when
|
||||||
|
* pixel-rate evaluation is requested :
|
||||||
|
*
|
||||||
|
* Format = U2
|
||||||
|
* 0: Per Message Offset (eval_snapped with immediate offset)
|
||||||
|
* 1: Sample Position Offset (eval_sindex)
|
||||||
|
* 2: Centroid Position Offset (eval_centroid)
|
||||||
|
* 3: Per Slot Offset (eval_snapped with register offset)
|
||||||
|
*
|
||||||
|
* Message Type. Specifies the type of message being sent when
|
||||||
|
* coarse-rate evaluation is requested :
|
||||||
|
*
|
||||||
|
* Format = U2
|
||||||
|
* 0: Coarse to Pixel Mapping Message (internal message)
|
||||||
|
* 1: Reserved
|
||||||
|
* 2: Coarse Centroid Position (eval_centroid)
|
||||||
|
* 3: Per Slot Coarse Pixel Offset (eval_snapped with register offset)"
|
||||||
|
*
|
||||||
|
* The Sample Position Offset is marked as reserved for coarse rate
|
||||||
|
* evaluation and leads to hangs if we try to use it. So disable coarse
|
||||||
|
* pixel shading if we have any intrinsic that will result in a pixel
|
||||||
|
* interpolater message at sample.
|
||||||
|
*/
|
||||||
|
if (brw_nir_pulls_at_sample(shader))
|
||||||
|
prog_data->coarse_pixel_dispatch = BRW_NEVER;
|
||||||
|
|
||||||
/* We choose to always enable VMask prior to XeHP, as it would cause
|
/* We choose to always enable VMask prior to XeHP, as it would cause
|
||||||
* us to lose out on the eliminate_find_live_channel() optimization.
|
* us to lose out on the eliminate_find_live_channel() optimization.
|
||||||
*/
|
*/
|
||||||
|
@@ -2083,3 +2083,23 @@ brw_nir_load_global_const(nir_builder *b, nir_intrinsic_instr *load_uniform,
|
|||||||
|
|
||||||
return sysval;
|
return sysval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
brw_nir_pulls_at_sample(nir_shader *shader)
|
||||||
|
{
|
||||||
|
nir_foreach_function_impl(impl, shader) {
|
||||||
|
nir_foreach_block(block, impl) {
|
||||||
|
nir_foreach_instr(instr, block) {
|
||||||
|
if (instr->type != nir_instr_type_intrinsic)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
|
||||||
|
|
||||||
|
if (intrin->intrinsic == nir_intrinsic_load_barycentric_at_sample)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@@ -270,6 +270,8 @@ nir_shader *brw_nir_create_passthrough_tcs(void *mem_ctx,
|
|||||||
const struct brw_compiler *compiler,
|
const struct brw_compiler *compiler,
|
||||||
const struct brw_tcs_prog_key *key);
|
const struct brw_tcs_prog_key *key);
|
||||||
|
|
||||||
|
bool brw_nir_pulls_at_sample(nir_shader *shader);
|
||||||
|
|
||||||
#define BRW_NIR_FRAG_OUTPUT_INDEX_SHIFT 0
|
#define BRW_NIR_FRAG_OUTPUT_INDEX_SHIFT 0
|
||||||
#define BRW_NIR_FRAG_OUTPUT_INDEX_MASK INTEL_MASK(0, 0)
|
#define BRW_NIR_FRAG_OUTPUT_INDEX_MASK INTEL_MASK(0, 0)
|
||||||
#define BRW_NIR_FRAG_OUTPUT_LOCATION_SHIFT 1
|
#define BRW_NIR_FRAG_OUTPUT_LOCATION_SHIFT 1
|
||||||
|
Reference in New Issue
Block a user