i965: Fix shared local memory size for Gen9+.
Skylake changes the representation of shared local memory size: Size | 0 kB | 1 kB | 2 kB | 4 kB | 8 kB | 16 kB | 32 kB | 64 kB | ------------------------------------------------------------------- Gen7-8 | 0 | none | none | 1 | 2 | 4 | 8 | 16 | ------------------------------------------------------------------- Gen9+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | The old formula would substantially underallocate the amount of space. This fixes GPU hangs on Skylake when running with full thread counts. v2: Fix the Vulkan driver too, use a helper function, and fix the table in the comments and commit message. Cc: "12.0" <mesa-stable@lists.freedesktop.org> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Francisco Jerez <currojerez@riseup.net> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
This commit is contained in:
@@ -241,15 +241,7 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
|
||||
}
|
||||
}
|
||||
|
||||
assert(prog_data->total_shared <= 64 * 1024);
|
||||
uint32_t slm_size = 0;
|
||||
if (prog_data->total_shared > 0) {
|
||||
/* slm_size is in 4k increments, but must be a power of 2. */
|
||||
slm_size = 4 * 1024;
|
||||
while (slm_size < prog_data->total_shared)
|
||||
slm_size <<= 1;
|
||||
slm_size /= 4 * 1024;
|
||||
}
|
||||
const uint32_t slm_size = encode_slm_size(GEN_GEN, prog_data->total_shared);
|
||||
|
||||
struct anv_state state =
|
||||
anv_state_pool_emit(&device->dynamic_state_pool,
|
||||
|
Reference in New Issue
Block a user