anv/pipeline: Fix MEDIA_VFE_STATE::PerThreadScratchSpace on gen7
We were always programming it with the Broadwell convention which is too large by a factor of two on Haswell and just plain wrong on IVB and BYT. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
da1a5a19bd
commit
7eaaff18cb
|
@ -2087,9 +2087,29 @@ compute_pipeline_create(
|
|||
vfe.URBEntryAllocationSize = GEN_GEN <= 7 ? 0 : 2;
|
||||
vfe.CURBEAllocationSize = vfe_curbe_allocation;
|
||||
|
||||
vfe.PerThreadScratchSpace = get_scratch_space(cs_bin);
|
||||
vfe.ScratchSpaceBasePointer =
|
||||
get_scratch_address(pipeline, MESA_SHADER_COMPUTE, cs_bin);
|
||||
if (cs_bin->prog_data->total_scratch) {
|
||||
if (GEN_GEN >= 8) {
|
||||
/* Broadwell's Per Thread Scratch Space is in the range [0, 11]
|
||||
* where 0 = 1k, 1 = 2k, 2 = 4k, ..., 11 = 2M.
|
||||
*/
|
||||
vfe.PerThreadScratchSpace =
|
||||
ffs(cs_bin->prog_data->total_scratch) - 11;
|
||||
} else if (GEN_IS_HASWELL) {
|
||||
/* Haswell's Per Thread Scratch Space is in the range [0, 10]
|
||||
* where 0 = 2k, 1 = 4k, 2 = 8k, ..., 10 = 2M.
|
||||
*/
|
||||
vfe.PerThreadScratchSpace =
|
||||
ffs(cs_bin->prog_data->total_scratch) - 12;
|
||||
} else {
|
||||
/* IVB and BYT use the range [0, 11] to mean [1kB, 12kB]
|
||||
* where 0 = 1kB, 1 = 2kB, 2 = 3kB, ..., 11 = 12kB.
|
||||
*/
|
||||
vfe.PerThreadScratchSpace =
|
||||
cs_bin->prog_data->total_scratch / 1024 - 1;
|
||||
}
|
||||
vfe.ScratchSpaceBasePointer =
|
||||
get_scratch_address(pipeline, MESA_SHADER_COMPUTE, cs_bin);
|
||||
}
|
||||
}
|
||||
|
||||
struct GENX(INTERFACE_DESCRIPTOR_DATA) desc = {
|
||||
|
|
Loading…
Reference in New Issue