mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
swr: support NULL-resources
It's legal for a buffer-object to have a NULL-resource, but let's just
skip over it, as there's nothing to do.
This patch switches the order of the conditionals in swr_update_derived,
so the logic becomes a bit more straight forward:
if (is_user_buffer)
...
else if (resource)
...
else
...
...instead of this:
if (!is_user_buffer)
if (resource)
...
else
...
else
...
Signed-off-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Reviewed-by: Alok Hota <alok.hota@intel.com>
This commit is contained in:
parent
04b0c6e9df
commit
ef13691e0c
1 changed files with 25 additions and 24 deletions
|
|
@ -729,7 +729,7 @@ swr_update_resource_status(struct pipe_context *pipe,
|
|||
/* VBO vertex buffers */
|
||||
for (uint32_t i = 0; i < ctx->num_vertex_buffers; i++) {
|
||||
struct pipe_vertex_buffer *vb = &ctx->vertex_buffer[i];
|
||||
if (!vb->is_user_buffer)
|
||||
if (!vb->is_user_buffer && vb->buffer.resource)
|
||||
swr_resource_read(vb->buffer.resource);
|
||||
}
|
||||
|
||||
|
|
@ -1269,28 +1269,7 @@ swr_update_derived(struct pipe_context *pipe,
|
|||
struct pipe_vertex_buffer *vb = &ctx->vertex_buffer[i];
|
||||
|
||||
pitch = vb->stride;
|
||||
if (!vb->is_user_buffer) {
|
||||
/* VBO */
|
||||
if (!pitch) {
|
||||
/* If pitch=0 (ie vb->stride), buffer contains a single
|
||||
* constant attribute. Use the stream_pitch which was
|
||||
* calculated during creation of vertex_elements_state for the
|
||||
* size of the attribute. */
|
||||
size = ctx->velems->stream_pitch[i];
|
||||
elems = 1;
|
||||
partial_inbounds = 0;
|
||||
min_vertex_index = 0;
|
||||
} else {
|
||||
/* size is based on buffer->width0 rather than info.max_index
|
||||
* to prevent having to validate VBO on each draw. */
|
||||
size = vb->buffer.resource->width0;
|
||||
elems = size / pitch;
|
||||
partial_inbounds = size % pitch;
|
||||
min_vertex_index = 0;
|
||||
}
|
||||
|
||||
p_data = swr_resource_data(vb->buffer.resource) + vb->buffer_offset;
|
||||
} else {
|
||||
if (vb->is_user_buffer) {
|
||||
/* Client buffer
|
||||
* client memory is one-time use, re-trigger SWR_NEW_VERTEX to
|
||||
* revalidate on each draw */
|
||||
|
|
@ -1315,7 +1294,29 @@ swr_update_derived(struct pipe_context *pipe,
|
|||
ctx, &ctx->scratch->vertex_buffer, ptr, size);
|
||||
p_data = (const uint8_t *)ptr - base;
|
||||
}
|
||||
}
|
||||
} else if (vb->buffer.resource) {
|
||||
/* VBO */
|
||||
if (!pitch) {
|
||||
/* If pitch=0 (ie vb->stride), buffer contains a single
|
||||
* constant attribute. Use the stream_pitch which was
|
||||
* calculated during creation of vertex_elements_state for the
|
||||
* size of the attribute. */
|
||||
size = ctx->velems->stream_pitch[i];
|
||||
elems = 1;
|
||||
partial_inbounds = 0;
|
||||
min_vertex_index = 0;
|
||||
} else {
|
||||
/* size is based on buffer->width0 rather than info.max_index
|
||||
* to prevent having to validate VBO on each draw. */
|
||||
size = vb->buffer.resource->width0;
|
||||
elems = size / pitch;
|
||||
partial_inbounds = size % pitch;
|
||||
min_vertex_index = 0;
|
||||
}
|
||||
|
||||
p_data = swr_resource_data(vb->buffer.resource) + vb->buffer_offset;
|
||||
} else
|
||||
p_data = NULL;
|
||||
|
||||
swrVertexBuffers[i] = {0};
|
||||
swrVertexBuffers[i].index = i;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue