diff options
-rw-r--r-- | src/gallium/drivers/vc4/vc4_program.c | 45 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_qir.c | 33 | ||||
-rw-r--r-- | src/gallium/drivers/vc4/vc4_qir.h | 16 |
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) \ |