Mesa (master): freedreno: extract helper for stage->sb for a4xx+

Rob Clark robclark at kemper.freedesktop.org
Mon Apr 17 18:01:20 UTC 2017


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

Author: Rob Clark <robdclark at gmail.com>
Date:   Wed Apr  5 19:43:31 2017 -0400

freedreno: extract helper for stage->sb for a4xx+

Signed-off-by: Rob Clark <robdclark at gmail.com>

---

 src/gallium/drivers/freedreno/a4xx/fd4_emit.c    |  9 ++-------
 src/gallium/drivers/freedreno/a4xx/fd4_program.c |  8 +-------
 src/gallium/drivers/freedreno/a5xx/fd5_emit.c    |  9 ++-------
 src/gallium/drivers/freedreno/a5xx/fd5_program.c |  8 +-------
 src/gallium/drivers/freedreno/freedreno_util.h   | 23 +++++++++++++++++++++++
 5 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
index e07694a6ed..733e4a8c17 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_emit.c
@@ -45,11 +45,6 @@
 #include "fd4_format.h"
 #include "fd4_zsa.h"
 
-static const enum a4xx_state_block sb[] = {
-	[SHADER_VERTEX]   = SB4_VS_SHADER,
-	[SHADER_FRAGMENT] = SB4_FS_SHADER,
-};
-
 /* regid:          base const register
  * prsc or dwords: buffer containing constant values
  * sizedwords:     size of const value buffer
@@ -76,7 +71,7 @@ fd4_emit_const(struct fd_ringbuffer *ring, enum shader_t type,
 	OUT_PKT3(ring, CP_LOAD_STATE4, 2 + sz);
 	OUT_RING(ring, CP_LOAD_STATE4_0_DST_OFF(regid/4) |
 			CP_LOAD_STATE4_0_STATE_SRC(src) |
-			CP_LOAD_STATE4_0_STATE_BLOCK(sb[type]) |
+			CP_LOAD_STATE4_0_STATE_BLOCK(fd4_stage2shadersb(type)) |
 			CP_LOAD_STATE4_0_NUM_UNIT(sizedwords/4));
 	if (prsc) {
 		struct fd_bo *bo = fd_resource(prsc)->bo;
@@ -104,7 +99,7 @@ fd4_emit_const_bo(struct fd_ringbuffer *ring, enum shader_t type, boolean write,
 	OUT_PKT3(ring, CP_LOAD_STATE4, 2 + anum);
 	OUT_RING(ring, CP_LOAD_STATE4_0_DST_OFF(regid/4) |
 			CP_LOAD_STATE4_0_STATE_SRC(SS4_DIRECT) |
-			CP_LOAD_STATE4_0_STATE_BLOCK(sb[type]) |
+			CP_LOAD_STATE4_0_STATE_BLOCK(fd4_stage2shadersb(type)) |
 			CP_LOAD_STATE4_0_NUM_UNIT(anum/4));
 	OUT_RING(ring, CP_LOAD_STATE4_1_EXT_SRC_ADDR(0) |
 			CP_LOAD_STATE4_1_STATE_TYPE(ST4_CONSTANTS));
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_program.c b/src/gallium/drivers/freedreno/a4xx/fd4_program.c
index d9f13af1d9..05b0c4f9ae 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_program.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_program.c
@@ -89,16 +89,10 @@ static void
 emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 {
 	const struct ir3_info *si = &so->info;
-	enum adreno_state_block sb;
+	enum a4xx_state_block sb = fd4_stage2shadersb(so->type);
 	enum adreno_state_src src;
 	uint32_t i, sz, *bin;
 
-	if (so->type == SHADER_VERTEX) {
-		sb = SB4_VS_SHADER;
-	} else {
-		sb = SB4_FS_SHADER;
-	}
-
 	if (fd_mesa_debug & FD_DBG_DIRECT) {
 		sz = si->sizedwords;
 		src = SS4_DIRECT;
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
index cbb86d890c..e9dbab93b1 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_emit.c
@@ -43,11 +43,6 @@
 #include "fd5_format.h"
 #include "fd5_zsa.h"
 
-static const enum a4xx_state_block sb[] = {
-	[SHADER_VERTEX]   = SB4_VS_SHADER,
-	[SHADER_FRAGMENT] = SB4_FS_SHADER,
-};
-
 /* regid:          base const register
  * prsc or dwords: buffer containing constant values
  * sizedwords:     size of const value buffer
@@ -74,7 +69,7 @@ fd5_emit_const(struct fd_ringbuffer *ring, enum shader_t type,
 	OUT_PKT7(ring, CP_LOAD_STATE4, 3 + sz);
 	OUT_RING(ring, CP_LOAD_STATE4_0_DST_OFF(regid/4) |
 			CP_LOAD_STATE4_0_STATE_SRC(src) |
-			CP_LOAD_STATE4_0_STATE_BLOCK(sb[type]) |
+			CP_LOAD_STATE4_0_STATE_BLOCK(fd4_stage2shadersb(type)) |
 			CP_LOAD_STATE4_0_NUM_UNIT(sizedwords/4));
 	if (prsc) {
 		struct fd_bo *bo = fd_resource(prsc)->bo;
@@ -103,7 +98,7 @@ fd5_emit_const_bo(struct fd_ringbuffer *ring, enum shader_t type, boolean write,
 	OUT_PKT7(ring, CP_LOAD_STATE4, 3 + (2 * anum));
 	OUT_RING(ring, CP_LOAD_STATE4_0_DST_OFF(regid/4) |
 			CP_LOAD_STATE4_0_STATE_SRC(SS4_DIRECT) |
-			CP_LOAD_STATE4_0_STATE_BLOCK(sb[type]) |
+			CP_LOAD_STATE4_0_STATE_BLOCK(fd4_stage2shadersb(type)) |
 			CP_LOAD_STATE4_0_NUM_UNIT(anum/2));
 	OUT_RING(ring, CP_LOAD_STATE4_1_EXT_SRC_ADDR(0) |
 			CP_LOAD_STATE4_1_STATE_TYPE(ST4_CONSTANTS));
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.c b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
index b8722a5d03..232b3fb877 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_program.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.c
@@ -88,16 +88,10 @@ static void
 emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 {
 	const struct ir3_info *si = &so->info;
-	enum a4xx_state_block sb;
+	enum a4xx_state_block sb = fd4_stage2shadersb(so->type);
 	enum a4xx_state_src src;
 	uint32_t i, sz, *bin;
 
-	if (so->type == SHADER_VERTEX) {
-		sb = SB4_VS_SHADER;
-	} else {
-		sb = SB4_FS_SHADER;
-	}
-
 	if (fd_mesa_debug & FD_DBG_DIRECT) {
 		sz = si->sizedwords;
 		src = SS4_DIRECT;
diff --git a/src/gallium/drivers/freedreno/freedreno_util.h b/src/gallium/drivers/freedreno/freedreno_util.h
index a9b38c9375..e644433790 100644
--- a/src/gallium/drivers/freedreno/freedreno_util.h
+++ b/src/gallium/drivers/freedreno/freedreno_util.h
@@ -449,4 +449,27 @@ pack_rgba(enum pipe_format format, const float *rgba)
 #define foreach_bit(b, mask) \
 	for (uint32_t _m = (mask); _m && ({(b) = u_bit_scan(&_m); 1;});)
 
+
+#define BIT(bit) (1u << bit)
+
+/*
+ * a4xx+ helpers:
+ */
+
+static inline enum a4xx_state_block
+fd4_stage2shadersb(enum shader_t type)
+{
+	switch (type) {
+	case SHADER_VERTEX:
+		return SB4_VS_SHADER;
+	case SHADER_FRAGMENT:
+		return SB4_FS_SHADER;
+	case SHADER_COMPUTE:
+		return SB4_CS_SHADER;
+	default:
+		unreachable("bad shader type");
+		return ~0;
+	}
+}
+
 #endif /* FREEDRENO_UTIL_H_ */




More information about the mesa-commit mailing list