anv: fix calculation of buffer size in case dynamic size is used

VK spec got clarification about the pSizes parameter.

Fixes set of new tests:
   dEQP-VK.pipeline.extended_dynamic_state*with_offset*

v2: move offset subtract to be part of size calculation (Jason)

CC: mesa-stable
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3871
Fixes: b9a05447a1 ("anv: dynamic vertex input binding stride and size support")
Signed-off-by: Tapani Pälli <tapani.palli@intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7439>
This commit is contained in:
Tapani Pälli
2020-11-04 11:11:41 +02:00
parent 3f0da800eb
commit 5998a6543a

View File

@@ -3464,8 +3464,14 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
if (buffer) {
uint32_t stride = dynamic_stride ?
cmd_buffer->state.vertex_bindings[vb].stride : pipeline->vb[vb].stride;
uint32_t size = dynamic_size ?
cmd_buffer->state.vertex_bindings[vb].size : buffer->size;
/* From the Vulkan spec (vkCmdBindVertexBuffers2EXT):
*
* "If pname:pSizes is not NULL then pname:pSizes[i] specifies
* the bound size of the vertex buffer starting from the corresponding
* elements of pname:pBuffers[i] plus pname:pOffsets[i]."
*/
UNUSED uint32_t size = dynamic_size ?
cmd_buffer->state.vertex_bindings[vb].size : buffer->size - offset;
state = (struct GENX(VERTEX_BUFFER_STATE)) {
.VertexBufferIndex = vb,
@@ -3482,9 +3488,14 @@ genX(cmd_buffer_flush_state)(struct anv_cmd_buffer *cmd_buffer)
.NullVertexBuffer = offset >= buffer->size,
#if GEN_GEN >= 8
.BufferSize = size - offset
.BufferSize = size,
#else
.EndAddress = anv_address_add(buffer->address, size - 1),
/* XXX: to handle dynamic offset for older gens we might want
* to modify Endaddress, but there are issues when doing so:
*
* https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7439
*/
.EndAddress = anv_address_add(buffer->address, buffer->size - 1),
#endif
};
} else {