summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/vc4
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2015-02-19 12:19:44 -0800
committerEric Anholt <[email protected]>2015-02-19 23:35:17 -0800
commit877b48a531adc397493e508e509aba2918915349 (patch)
tree8aa23a56e1470b1a0a78c7f80ae7a4894006e0d2 /src/gallium/drivers/vc4
parent14dc281c1332518b6144718e1fb3845abbe23ff7 (diff)
vc4: Move qir_uniform() and the constant-value versions to vc4_qir.c/h.
I may want them in optimization passes, and they're not really particular to the program translation stage.
Diffstat (limited to 'src/gallium/drivers/vc4')
-rw-r--r--src/gallium/drivers/vc4/vc4_program.c45
-rw-r--r--src/gallium/drivers/vc4/vc4_qir.c33
-rw-r--r--src/gallium/drivers/vc4/vc4_qir.h16
3 files changed, 49 insertions, 45 deletions
diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index b904679ef00..56a3a96c1b5 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -110,51 +110,6 @@ resize_qreg_array(struct vc4_compile *c,
}
static struct qreg
-qir_uniform(struct vc4_compile *c,
- enum quniform_contents contents,
- uint32_t data)
-{
- for (int i = 0; i < c->num_uniforms; i++) {
- if (c->uniform_contents[i] == contents &&
- c->uniform_data[i] == data) {
- return (struct qreg) { QFILE_UNIF, i };
- }
- }
-
- uint32_t uniform = c->num_uniforms++;
- struct qreg u = { QFILE_UNIF, uniform };
-
- if (uniform >= c->uniform_array_size) {
- c->uniform_array_size = MAX2(MAX2(16, uniform + 1),
- c->uniform_array_size * 2);
-
- c->uniform_data = reralloc(c, c->uniform_data,
- uint32_t,
- c->uniform_array_size);
- c->uniform_contents = reralloc(c, c->uniform_contents,
- enum quniform_contents,
- c->uniform_array_size);
- }
-
- c->uniform_contents[uniform] = contents;
- c->uniform_data[uniform] = data;
-
- return u;
-}
-
-static struct qreg
-qir_uniform_ui(struct vc4_compile *c, uint32_t ui)
-{
- return qir_uniform(c, QUNIFORM_CONSTANT, ui);
-}
-
-static struct qreg
-qir_uniform_f(struct vc4_compile *c, float f)
-{
- return qir_uniform(c, QUNIFORM_CONSTANT, fui(f));
-}
-
-static struct qreg
indirect_uniform_load(struct vc4_compile *c,
struct tgsi_full_src_register *src, int swiz)
{
diff --git a/src/gallium/drivers/vc4/vc4_qir.c b/src/gallium/drivers/vc4/vc4_qir.c
index 5c1fdbddfb6..9addf9cafc8 100644
--- a/src/gallium/drivers/vc4/vc4_qir.c
+++ b/src/gallium/drivers/vc4/vc4_qir.c
@@ -423,6 +423,39 @@ qir_get_stage_name(enum qstage stage)
return names[stage];
}
+struct qreg
+qir_uniform(struct vc4_compile *c,
+ enum quniform_contents contents,
+ uint32_t data)
+{
+ for (int i = 0; i < c->num_uniforms; i++) {
+ if (c->uniform_contents[i] == contents &&
+ c->uniform_data[i] == data) {
+ return (struct qreg) { QFILE_UNIF, i };
+ }
+ }
+
+ uint32_t uniform = c->num_uniforms++;
+ struct qreg u = { QFILE_UNIF, uniform };
+
+ if (uniform >= c->uniform_array_size) {
+ c->uniform_array_size = MAX2(MAX2(16, uniform + 1),
+ c->uniform_array_size * 2);
+
+ c->uniform_data = reralloc(c, c->uniform_data,
+ uint32_t,
+ c->uniform_array_size);
+ c->uniform_contents = reralloc(c, c->uniform_contents,
+ enum quniform_contents,
+ c->uniform_array_size);
+ }
+
+ c->uniform_contents[uniform] = contents;
+ c->uniform_data[uniform] = data;
+
+ return u;
+}
+
void
qir_SF(struct vc4_compile *c, struct qreg src)
{
diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h
index a1b55605584..af92c8c66a9 100644
--- a/src/gallium/drivers/vc4/vc4_qir.h
+++ b/src/gallium/drivers/vc4/vc4_qir.h
@@ -33,6 +33,7 @@
#include "util/macros.h"
#include "util/simple_list.h"
+#include "util/u_math.h"
#include "tgsi/tgsi_parse.h"
enum qfile {
@@ -368,6 +369,9 @@ struct qinst *qir_inst4(enum qop op, struct qreg dst,
struct qreg c,
struct qreg d);
void qir_remove_instruction(struct qinst *qinst);
+struct qreg qir_uniform(struct vc4_compile *c,
+ enum quniform_contents contents,
+ uint32_t data);
void qir_reorder_uniforms(struct vc4_compile *c);
void qir_emit(struct vc4_compile *c, struct qinst *inst);
struct qreg qir_get_temp(struct vc4_compile *c);
@@ -400,6 +404,18 @@ void qpu_schedule_instructions(struct vc4_compile *c);
void qir_SF(struct vc4_compile *c, struct qreg src);
+static inline struct qreg
+qir_uniform_ui(struct vc4_compile *c, uint32_t ui)
+{
+ return qir_uniform(c, QUNIFORM_CONSTANT, ui);
+}
+
+static inline struct qreg
+qir_uniform_f(struct vc4_compile *c, float f)
+{
+ return qir_uniform(c, QUNIFORM_CONSTANT, fui(f));
+}
+
#define QIR_ALU0(name) \
static inline struct qreg \
qir_##name(struct vc4_compile *c) \