Mesa (master): freedreno/ir3: catch incorrect usage of tmp-dst
Rob Clark
robclark at kemper.freedesktop.org
Fri Sep 12 20:26:54 UTC 2014
Module: Mesa
Branch: master
Commit: 59ff81663affa173ad80bb314eff8e9ec0ff1f4d
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=59ff81663affa173ad80bb314eff8e9ec0ff1f4d
Author: Rob Clark <robclark at freedesktop.org>
Date: Thu Sep 11 11:41:12 2014 -0400
freedreno/ir3: catch incorrect usage of tmp-dst
Each get_dst() should have a matching put_dst(). Add a bit of checking
to catch mistakes.
Signed-off-by: Rob Clark <robclark at freedesktop.org>
---
src/gallium/drivers/freedreno/ir3/ir3_compiler.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_compiler.c b/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
index 08c2119..36c6a1b 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_compiler.c
@@ -115,6 +115,10 @@ struct ir3_compile_context {
*/
struct tgsi_dst_register tmp_dst;
struct tgsi_src_register *tmp_src;
+
+ /* just for catching incorrect use of get_dst()/put_dst():
+ */
+ bool using_tmp_dst;
};
@@ -167,6 +171,8 @@ compile_init(struct ir3_compile_context *ctx, struct ir3_shader_variant *so,
ctx->atomic = false;
ctx->frag_pos = NULL;
ctx->frag_face = NULL;
+ ctx->tmp_src = NULL;
+ ctx->using_tmp_dst = false;
memset(ctx->frag_coord, 0, sizeof(ctx->frag_coord));
@@ -897,6 +903,10 @@ get_dst(struct ir3_compile_context *ctx, struct tgsi_full_instruction *inst)
{
struct tgsi_dst_register *dst = &inst->Dst[0].Register;
unsigned i;
+
+ compile_assert(ctx, !ctx->using_tmp_dst);
+ ctx->using_tmp_dst = true;
+
for (i = 0; i < inst->Instruction.NumSrcRegs; i++) {
struct tgsi_src_register *src = &inst->Src[i].Register;
if ((src->File == dst->File) && (src->Index == dst->Index)) {
@@ -919,6 +929,9 @@ static void
put_dst(struct ir3_compile_context *ctx, struct tgsi_full_instruction *inst,
struct tgsi_dst_register *dst)
{
+ compile_assert(ctx, ctx->using_tmp_dst);
+ ctx->using_tmp_dst = false;
+
/* if necessary, add mov back into original dst: */
if (dst != &inst->Dst[0].Register) {
create_mov(ctx, &inst->Dst[0].Register, ctx->tmp_src);
@@ -2523,6 +2536,8 @@ compile_instructions(struct ir3_compile_context *ctx)
if (t->fxn) {
t->fxn(t, ctx, inst);
ctx->num_internal_temps = 0;
+
+ compile_assert(ctx, !ctx->using_tmp_dst);
} else {
compile_error(ctx, "unknown TGSI opc: %s\n",
tgsi_get_opcode_name(opc));
More information about the mesa-commit
mailing list