mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-01 10:18:05 +02:00
anv/blorp: Align vertex buffers to 64B
This fixes issues seen when adding support for full 48-bit addresses.
The 48-bit addresses themselves have nothing to do with it other than
that it caused the kernel to place buffers slightly differently so they
interacted differently with the caches.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Cc: "13.0 17.0" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 5d1ba2cb04)
This commit is contained in:
parent
f509c83609
commit
33a9bedc24
1 changed files with 14 additions and 1 deletions
|
|
@ -110,8 +110,21 @@ blorp_alloc_vertex_buffer(struct blorp_batch *batch, uint32_t size,
|
|||
struct blorp_address *addr)
|
||||
{
|
||||
struct anv_cmd_buffer *cmd_buffer = batch->driver_batch;
|
||||
|
||||
/* From the Skylake PRM, 3DSTATE_VERTEX_BUFFERS:
|
||||
*
|
||||
* "The VF cache needs to be invalidated before binding and then using
|
||||
* Vertex Buffers that overlap with any previously bound Vertex Buffer
|
||||
* (at a 64B granularity) since the last invalidation. A VF cache
|
||||
* invalidate is performed by setting the "VF Cache Invalidation Enable"
|
||||
* bit in PIPE_CONTROL."
|
||||
*
|
||||
* This restriction first appears in the Skylake PRM but the internal docs
|
||||
* also list it as being an issue on Broadwell. In order to avoid this
|
||||
* problem, we align all vertex buffer allocations to 64 bytes.
|
||||
*/
|
||||
struct anv_state vb_state =
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, size, 16);
|
||||
anv_cmd_buffer_alloc_dynamic_state(cmd_buffer, size, 64);
|
||||
|
||||
*addr = (struct blorp_address) {
|
||||
.buffer = &cmd_buffer->device->dynamic_state_block_pool.bo,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue