Mesa (master): freedreno/ir3: Switch emit_const_ptrs() to take BOs instead of prscs.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 16 22:33:03 UTC 2020


Module: Mesa
Branch: master
Commit: 386998cfbf068706237e0f274be6f3b874e9d66f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=386998cfbf068706237e0f274be6f3b874e9d66f

Author: Eric Anholt <eric at anholt.net>
Date:   Wed Nov 11 12:18:51 2020 -0800

freedreno/ir3: Switch emit_const_ptrs() to take BOs instead of prscs.

Just indirect in the caller, which means that I'll be able to pass a
non-resource BO in the large-constants case.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5810>

---

 src/gallium/drivers/freedreno/a3xx/fd3_emit.c  | 10 +++++-----
 src/gallium/drivers/freedreno/a4xx/fd4_emit.c  | 10 +++++-----
 src/gallium/drivers/freedreno/a5xx/fd5_emit.c  | 10 +++++-----
 src/gallium/drivers/freedreno/a6xx/fd6_const.c |  2 +-
 src/gallium/drivers/freedreno/ir3/ir3_const.h  | 18 +++++++++---------
 5 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
index a689a794bdc..e62bcb8d7d9 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_emit.c
@@ -101,7 +101,7 @@ fd3_emit_const_bo(struct fd_ringbuffer *ring, const struct ir3_shader_variant *v
 
 static void
 fd3_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
-		uint32_t regid, uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t regid, uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	uint32_t anum = align(num, 4);
 	uint32_t i;
@@ -117,8 +117,8 @@ fd3_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
 			CP_LOAD_STATE_1_STATE_TYPE(ST_CONSTANTS));
 
 	for (i = 0; i < num; i++) {
-		if (prscs[i]) {
-			OUT_RELOC(ring, fd_resource(prscs[i])->bo, offsets[i], 0, 0);
+		if (bos[i]) {
+			OUT_RELOC(ring, bos[i], offsets[i], 0, 0);
 		} else {
 			OUT_RING(ring, 0xbad00000 | (i << 16));
 		}
@@ -137,11 +137,11 @@ is_stateobj(struct fd_ringbuffer *ring)
 static void
 emit_const_ptrs(struct fd_ringbuffer *ring,
 		const struct ir3_shader_variant *v, uint32_t dst_offset,
-		uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	/* TODO inline this */
 	assert(dst_offset + num <= v->constlen * 4);
-	fd3_emit_const_ptrs(ring, v->type, dst_offset, num, prscs, offsets);
+	fd3_emit_const_ptrs(ring, v->type, dst_offset, num, bos, offsets);
 }
 
 #define VERT_TEX_OFF    0
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
index 9c9e2a1aba2..809822feaac 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
@@ -92,7 +92,7 @@ fd4_emit_const_bo(struct fd_ringbuffer *ring, const struct ir3_shader_variant *v
 
 static void
 fd4_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
-		uint32_t regid, uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t regid, uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	uint32_t anum = align(num, 4);
 	uint32_t i;
@@ -108,8 +108,8 @@ fd4_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
 			CP_LOAD_STATE4_1_STATE_TYPE(ST4_CONSTANTS));
 
 	for (i = 0; i < num; i++) {
-		if (prscs[i]) {
-			OUT_RELOC(ring, fd_resource(prscs[i])->bo, offsets[i], 0, 0);
+		if (bos[i]) {
+			OUT_RELOC(ring, bos[i], offsets[i], 0, 0);
 		} else {
 			OUT_RING(ring, 0xbad00000 | (i << 16));
 		}
@@ -128,11 +128,11 @@ is_stateobj(struct fd_ringbuffer *ring)
 static void
 emit_const_ptrs(struct fd_ringbuffer *ring,
 		const struct ir3_shader_variant *v, uint32_t dst_offset,
-		uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	/* TODO inline this */
 	assert(dst_offset + num <= v->constlen * 4);
-	fd4_emit_const_ptrs(ring, v->type, dst_offset, num, prscs, offsets);
+	fd4_emit_const_ptrs(ring, v->type, dst_offset, num, bos, offsets);
 }
 
 static void
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
index 1711fd64f27..0a6db47a3cd 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
@@ -95,7 +95,7 @@ fd5_emit_const_bo(struct fd_ringbuffer *ring, const struct ir3_shader_variant *v
 
 static void
 fd5_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
-		uint32_t regid, uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t regid, uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	uint32_t anum = align(num, 2);
 	uint32_t i;
@@ -112,8 +112,8 @@ fd5_emit_const_ptrs(struct fd_ringbuffer *ring, gl_shader_stage type,
 	OUT_RING(ring, CP_LOAD_STATE4_2_EXT_SRC_ADDR_HI(0));
 
 	for (i = 0; i < num; i++) {
-		if (prscs[i]) {
-			OUT_RELOC(ring, fd_resource(prscs[i])->bo, offsets[i], 0, 0);
+		if (bos[i]) {
+			OUT_RELOC(ring, bos[i], offsets[i], 0, 0);
 		} else {
 			OUT_RING(ring, 0xbad00000 | (i << 16));
 			OUT_RING(ring, 0xbad00000 | (i << 16));
@@ -135,11 +135,11 @@ is_stateobj(struct fd_ringbuffer *ring)
 static void
 emit_const_ptrs(struct fd_ringbuffer *ring,
 		const struct ir3_shader_variant *v, uint32_t dst_offset,
-		uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	/* TODO inline this */
 	assert(dst_offset + num <= v->constlen * 4);
-	fd5_emit_const_ptrs(ring, v->type, dst_offset, num, prscs, offsets);
+	fd5_emit_const_ptrs(ring, v->type, dst_offset, num, bos, offsets);
 }
 
 void
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_const.c b/src/gallium/drivers/freedreno/a6xx/fd6_const.c
index 68a24872639..020fbf532d2 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_const.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_const.c
@@ -124,7 +124,7 @@ is_stateobj(struct fd_ringbuffer *ring)
 static void
 emit_const_ptrs(struct fd_ringbuffer *ring,
 		const struct ir3_shader_variant *v, uint32_t dst_offset,
-		uint32_t num, struct pipe_resource **prscs, uint32_t *offsets)
+		uint32_t num, struct fd_bo **bos, uint32_t *offsets)
 {
 	unreachable("shouldn't be called on a6xx");
 }
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_const.h b/src/gallium/drivers/freedreno/ir3/ir3_const.h
index 4784ac673bc..2c9c56041b5 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_const.h
+++ b/src/gallium/drivers/freedreno/ir3/ir3_const.h
@@ -59,7 +59,7 @@ static void emit_const_prsc(struct fd_ringbuffer *ring,
 
 static void emit_const_ptrs(struct fd_ringbuffer *ring,
 		const struct ir3_shader_variant *v, uint32_t dst_offset,
-		uint32_t num, struct pipe_resource **prscs, uint32_t *offsets);
+		uint32_t num, struct fd_bo **bos, uint32_t *offsets);
 
 static void
 emit_const_asserts(struct fd_ringbuffer *ring,
@@ -173,7 +173,7 @@ ir3_emit_ubos(struct fd_context *ctx, const struct ir3_shader_variant *v,
 	if (v->constlen > offset) {
 		uint32_t params = const_state->num_ubos;
 		uint32_t offsets[params];
-		struct pipe_resource *prscs[params];
+		struct fd_bo *bos[params];
 
 		for (uint32_t i = 0; i < params; i++) {
 			struct pipe_constant_buffer *cb = &constbuf->cb[i];
@@ -194,16 +194,16 @@ ir3_emit_ubos(struct fd_context *ctx, const struct ir3_shader_variant *v,
 
 			if ((constbuf->enabled_mask & (1 << i)) && cb->buffer) {
 				offsets[i] = cb->buffer_offset;
-				prscs[i] = cb->buffer;
+				bos[i] = fd_resource(cb->buffer)->bo;
 			} else {
 				offsets[i] = 0;
-				prscs[i] = NULL;
+				bos[i] = NULL;
 			}
 		}
 
 		assert(offset * 4 + params <= v->constlen * 4);
 
-		emit_const_ptrs(ring, v, offset * 4, params, prscs, offsets);
+		emit_const_ptrs(ring, v, offset * 4, params, bos, offsets);
 	}
 }
 
@@ -336,7 +336,7 @@ emit_tfbos(struct fd_context *ctx, const struct ir3_shader_variant *v,
 		struct ir3_stream_output_info *info = &v->shader->stream_output;
 		uint32_t params = 4;
 		uint32_t offsets[params];
-		struct pipe_resource *prscs[params];
+		struct fd_bo *bos[params];
 
 		for (uint32_t i = 0; i < params; i++) {
 			struct pipe_stream_output_target *target = so->targets[i];
@@ -344,16 +344,16 @@ emit_tfbos(struct fd_context *ctx, const struct ir3_shader_variant *v,
 			if (target) {
 				offsets[i] = (so->offsets[i] * info->stride[i] * 4) +
 						target->buffer_offset;
-				prscs[i] = target->buffer;
+				bos[i] = fd_resource(target->buffer)->bo;
 			} else {
 				offsets[i] = 0;
-				prscs[i] = NULL;
+				bos[i] = NULL;
 			}
 		}
 
 		assert(offset * 4 + params <= v->constlen * 4);
 
-		emit_const_ptrs(ring, v, offset * 4, params, prscs, offsets);
+		emit_const_ptrs(ring, v, offset * 4, params, bos, offsets);
 	}
 }
 



More information about the mesa-commit mailing list