summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-06-30 18:48:12 +0200
committerSamuel Pitoiset <[email protected]>2017-07-07 09:09:39 +0200
commita584a12308228998b24e2b3dd5c15b8dd651a49b (patch)
tree15f1fa5abdcd71589d553341698c306da46eb7de
parent43dea65ad2e8259330849aa7a3e1ed86db5a5d0f (diff)
radeonsi: fix invalidating bindless buffer descriptors
The VA is stored at [4:5], not [0:1]. This invalidated all texture buffer descriptors when they were made resident in the current context. This removes few partial flushes and cache invalidations which are needed when updating a bindless descriptor on the fly with a WRITE_DATA packet. Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/gallium/drivers/radeonsi/si_descriptors.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c
index 88f7dcee959..18b070ba3a2 100644
--- a/src/gallium/drivers/radeonsi/si_descriptors.c
+++ b/src/gallium/drivers/radeonsi/si_descriptors.c
@@ -2361,7 +2361,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
uint64_t offset)
{
struct r600_resource *buf = r600_resource(resource);
- uint32_t *desc_list = desc->desc_list;
+ uint32_t *desc_list = desc->desc_list + 4;
uint64_t old_desc_va;
assert(resource->target == PIPE_BUFFER);
@@ -2374,7 +2374,7 @@ static void si_invalidate_bindless_buf_desc(struct si_context *sctx,
/* The buffer has been invalidated when the handle wasn't
* resident, update the descriptor and the dirty flag.
*/
- si_set_buf_desc_address(buf, offset, &desc_list[4]);
+ si_set_buf_desc_address(buf, offset, &desc_list[0]);
desc->dirty = true;
sctx->bindless_descriptors_dirty = true;