intel: Increase Gen11 compute shader scratch IDs to 64.
From the MEDIA_VFE_STATE docs:
"Starting with this configuration, the Maximum Number of Threads must
be set to (#EU * 8) for GPGPU dispatches.
Although there are only 7 threads per EU in the configuration, the
FFTID is calculated as if there are 8 threads per EU, which in turn
requires a larger amount of Scratch Space to be allocated by the
driver."
It's pretty clear that we need to increase this for scratch address
calculations, because the FFTID has a certain bit-pattern. The quote
above seems to indicate that we should increase the actual thread count
programmed in MEDIA_VFE_STATE as well, but we think the intention is to
only bump the scratch space.
Fixes GPU hangs in Bioshock Infinite and Synmark's CSDof on Icelake 8x8.
Fixes: 5ac804bd9a
("intel: Add a preliminary device for Ice Lake")
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
50c0dd8621
commit
b9e93db208
|
@ -1930,6 +1930,21 @@ iris_get_scratch_space(struct iris_context *ice,
|
|||
|
||||
if (!*bop) {
|
||||
unsigned scratch_ids_per_subslice = devinfo->max_cs_threads;
|
||||
|
||||
if (devinfo->gen >= 11) {
|
||||
/* The MEDIA_VFE_STATE docs say:
|
||||
*
|
||||
* "Starting with this configuration, the Maximum Number of
|
||||
* Threads must be set to (#EU * 8) for GPGPU dispatches.
|
||||
*
|
||||
* Although there are only 7 threads per EU in the configuration,
|
||||
* the FFTID is calculated as if there are 8 threads per EU,
|
||||
* which in turn requires a larger amount of Scratch Space to be
|
||||
* allocated by the driver."
|
||||
*/
|
||||
scratch_ids_per_subslice = 8 * 8;
|
||||
}
|
||||
|
||||
uint32_t max_threads[] = {
|
||||
[MESA_SHADER_VERTEX] = devinfo->max_vs_threads,
|
||||
[MESA_SHADER_TESS_CTRL] = devinfo->max_tcs_threads,
|
||||
|
|
|
@ -1520,7 +1520,19 @@ anv_scratch_pool_alloc(struct anv_device *device, struct anv_scratch_pool *pool,
|
|||
const unsigned subslices = MAX2(physical_device->subslice_total, 1);
|
||||
|
||||
unsigned scratch_ids_per_subslice;
|
||||
if (devinfo->is_haswell) {
|
||||
if (devinfo->gen >= 11) {
|
||||
/* The MEDIA_VFE_STATE docs say:
|
||||
*
|
||||
* "Starting with this configuration, the Maximum Number of
|
||||
* Threads must be set to (#EU * 8) for GPGPU dispatches.
|
||||
*
|
||||
* Although there are only 7 threads per EU in the configuration,
|
||||
* the FFTID is calculated as if there are 8 threads per EU,
|
||||
* which in turn requires a larger amount of Scratch Space to be
|
||||
* allocated by the driver."
|
||||
*/
|
||||
scratch_ids_per_subslice = 8 * 8;
|
||||
} else if (devinfo->is_haswell) {
|
||||
/* WaCSScratchSize:hsw
|
||||
*
|
||||
* Haswell's scratch space address calculation appears to be sparse
|
||||
|
|
|
@ -464,7 +464,19 @@ brw_alloc_stage_scratch(struct brw_context *brw,
|
|||
subslices = 4 * brw->screen->devinfo.num_slices;
|
||||
|
||||
unsigned scratch_ids_per_subslice;
|
||||
if (devinfo->is_haswell) {
|
||||
if (devinfo->gen >= 11) {
|
||||
/* The MEDIA_VFE_STATE docs say:
|
||||
*
|
||||
* "Starting with this configuration, the Maximum Number of
|
||||
* Threads must be set to (#EU * 8) for GPGPU dispatches.
|
||||
*
|
||||
* Although there are only 7 threads per EU in the configuration,
|
||||
* the FFTID is calculated as if there are 8 threads per EU,
|
||||
* which in turn requires a larger amount of Scratch Space to be
|
||||
* allocated by the driver."
|
||||
*/
|
||||
scratch_ids_per_subslice = 8 * 8;
|
||||
} else if (devinfo->is_haswell) {
|
||||
/* WaCSScratchSize:hsw
|
||||
*
|
||||
* Haswell's scratch space address calculation appears to be sparse
|
||||
|
|
Loading…
Reference in New Issue