mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 05:00:32 +01:00
nv50,nvc0: properly handle buffer storage invalidation on dsa buffer
In case that the buffer has no bind at all, assume it can be a regular
buffer. This can happen on buffers created through the ARB_dsa
interfaces.
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit ad5f6b03e7)
This commit is contained in:
parent
642b66291c
commit
a2f2329cdd
2 changed files with 17 additions and 15 deletions
|
|
@ -168,9 +168,10 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
int ref)
|
||||
{
|
||||
struct nv50_context *nv50 = nv50_context(&ctx->pipe);
|
||||
unsigned bind = res->bind ? res->bind : PIPE_BIND_VERTEX_BUFFER;
|
||||
unsigned s, i;
|
||||
|
||||
if (res->bind & PIPE_BIND_RENDER_TARGET) {
|
||||
if (bind & PIPE_BIND_RENDER_TARGET) {
|
||||
assert(nv50->framebuffer.nr_cbufs <= PIPE_MAX_COLOR_BUFS);
|
||||
for (i = 0; i < nv50->framebuffer.nr_cbufs; ++i) {
|
||||
if (nv50->framebuffer.cbufs[i] &&
|
||||
|
|
@ -182,7 +183,7 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
}
|
||||
}
|
||||
}
|
||||
if (res->bind & PIPE_BIND_DEPTH_STENCIL) {
|
||||
if (bind & PIPE_BIND_DEPTH_STENCIL) {
|
||||
if (nv50->framebuffer.zsbuf &&
|
||||
nv50->framebuffer.zsbuf->texture == res) {
|
||||
nv50->dirty |= NV50_NEW_FRAMEBUFFER;
|
||||
|
|
@ -192,11 +193,11 @@ nv50_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
if (res->bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||
PIPE_BIND_INDEX_BUFFER |
|
||||
PIPE_BIND_CONSTANT_BUFFER |
|
||||
PIPE_BIND_STREAM_OUTPUT |
|
||||
PIPE_BIND_SAMPLER_VIEW)) {
|
||||
if (bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||
PIPE_BIND_INDEX_BUFFER |
|
||||
PIPE_BIND_CONSTANT_BUFFER |
|
||||
PIPE_BIND_STREAM_OUTPUT |
|
||||
PIPE_BIND_SAMPLER_VIEW)) {
|
||||
|
||||
assert(nv50->num_vtxbufs <= PIPE_MAX_ATTRIBS);
|
||||
for (i = 0; i < nv50->num_vtxbufs; ++i) {
|
||||
|
|
|
|||
|
|
@ -180,9 +180,10 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
int ref)
|
||||
{
|
||||
struct nvc0_context *nvc0 = nvc0_context(&ctx->pipe);
|
||||
unsigned bind = res->bind ? res->bind : PIPE_BIND_VERTEX_BUFFER;
|
||||
unsigned s, i;
|
||||
|
||||
if (res->bind & PIPE_BIND_RENDER_TARGET) {
|
||||
if (bind & PIPE_BIND_RENDER_TARGET) {
|
||||
for (i = 0; i < nvc0->framebuffer.nr_cbufs; ++i) {
|
||||
if (nvc0->framebuffer.cbufs[i] &&
|
||||
nvc0->framebuffer.cbufs[i]->texture == res) {
|
||||
|
|
@ -193,7 +194,7 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
}
|
||||
}
|
||||
}
|
||||
if (res->bind & PIPE_BIND_DEPTH_STENCIL) {
|
||||
if (bind & PIPE_BIND_DEPTH_STENCIL) {
|
||||
if (nvc0->framebuffer.zsbuf &&
|
||||
nvc0->framebuffer.zsbuf->texture == res) {
|
||||
nvc0->dirty |= NVC0_NEW_FRAMEBUFFER;
|
||||
|
|
@ -203,12 +204,12 @@ nvc0_invalidate_resource_storage(struct nouveau_context *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
if (res->bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||
PIPE_BIND_INDEX_BUFFER |
|
||||
PIPE_BIND_CONSTANT_BUFFER |
|
||||
PIPE_BIND_STREAM_OUTPUT |
|
||||
PIPE_BIND_COMMAND_ARGS_BUFFER |
|
||||
PIPE_BIND_SAMPLER_VIEW)) {
|
||||
if (bind & (PIPE_BIND_VERTEX_BUFFER |
|
||||
PIPE_BIND_INDEX_BUFFER |
|
||||
PIPE_BIND_CONSTANT_BUFFER |
|
||||
PIPE_BIND_STREAM_OUTPUT |
|
||||
PIPE_BIND_COMMAND_ARGS_BUFFER |
|
||||
PIPE_BIND_SAMPLER_VIEW)) {
|
||||
for (i = 0; i < nvc0->num_vtxbufs; ++i) {
|
||||
if (nvc0->vtxbuf[i].buffer == res) {
|
||||
nvc0->dirty |= NVC0_NEW_ARRAYS;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue