Signed-off-by: Karol Herbst <kher...@redhat.com> --- src/gallium/drivers/nouveau/codegen/nv50_ir.h | 1 + .../drivers/nouveau/codegen/nv50_ir_driver.h | 1 + .../drivers/nouveau/codegen/nv50_ir_inlines.h | 17 +++++++++++++++++ .../drivers/nouveau/codegen/nv50_ir_target.cpp | 2 ++ src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 4 ++-- 5 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h b/src/gallium/drivers/nouveau/codegen/nv50_ir.h index 8085bb2f542..b00a005bdef 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h @@ -867,6 +867,7 @@ public: inline bool isPseudo() const { return op < OP_MOV; } bool isDead() const; bool isNop() const; + inline bool isCvt() const; bool isCommutationLegal(const Instruction *) const; // must be adjacent ! bool isActionEqual(const Instruction *) const; bool isResultEqual(const Instruction *) const; diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h index 7c835ceab8d..5bee7bfd108 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_driver.h @@ -93,6 +93,7 @@ struct nv50_ir_prog_info uint32_t *code; uint32_t codeSize; uint32_t instructions; + uint32_t cvt_instructions; uint8_t sourceRep; /* PIPE_SHADER_IR_* */ const void *source; void *relocData; diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_inlines.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_inlines.h index 4cb53ab42ed..06882058dc9 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_inlines.h +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_inlines.h @@ -419,4 +419,21 @@ LValue *Function::getLValue(int id) return reinterpret_cast<LValue *>(allLValues.get(id)); } +bool Instruction::isCvt() const +{ + switch (op) { + case OP_ABS: + case OP_CEIL: + case OP_FLOOR: + case OP_NEG: + case OP_TRUNC: + case OP_SAT: + return true; + case OP_CVT: + return def(0).getFile() != FILE_PREDICATE && src(0).getFile() != FILE_PREDICATE; + default: + return false; + } +} + #endif // __NV50_IR_INLINES_H__ diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp index 9193a01f189..85adb5b1852 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp @@ -393,6 +393,8 @@ Program::emitBinary(struct nv50_ir_prog_info *info) for (Instruction *i = fn->bbArray[b]->getEntry(); i; i = i->next) { emit->emitInstruction(i); info->bin.instructions++; + if (i->isCvt()) + info->bin.cvt_instructions++; if ((typeSizeof(i->sType) == 8 || typeSizeof(i->dType) == 8) && (isFloatType(i->sType) || isFloatType(i->dType))) info->io.fp64 = true; diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c index 57d98753f45..139e4fec9c0 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c @@ -699,9 +699,9 @@ nvc0_program_translate(struct nvc0_program *prog, uint16_t chipset, &prog->pipe.stream_output); pipe_debug_message(debug, SHADER_INFO, - "type: %d, local: %d, shared: %d, gpr: %d, inst: %d, bytes: %d", + "type: %d, local: %d, shared: %d, gpr: %d, inst: %d, cvts: %d, bytes: %d", prog->type, info->bin.tlsSpace, info->bin.smemSize, - prog->num_gprs, info->bin.instructions, + prog->num_gprs, info->bin.instructions, info->bin.cvt_instructions, info->bin.codeSize); #ifdef DEBUG -- 2.19.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev