[Mesa-dev] [PATCH] nvc0/ir: emit VOTE instruction
Samuel Pitoiset
samuel.pitoiset at gmail.com
Sun Feb 28 17:01:15 UTC 2016
On 02/28/2016 06:00 PM, Ilia Mirkin wrote:
> Please add emitters for GK110 and GM107 as well if you want to do this.
Yes, sorry this is the wrong patch...
>
> On Sun, Feb 28, 2016 at 11:50 AM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/gallium/drivers/nouveau/codegen/nv50_ir.h | 4 ++++
>> .../drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp | 23 ++++++++++++++++++++++
>> .../drivers/nouveau/codegen/nv50_ir_print.cpp | 1 +
>> .../drivers/nouveau/codegen/nv50_ir_target.cpp | 3 +++
>> 4 files changed, 31 insertions(+)
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
>> index 97ebed4..7b0eb2f 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
>> @@ -161,6 +161,7 @@ enum operation
>> OP_VSEL,
>> OP_CCTL, // cache control
>> OP_SHFL, // warp shuffle
>> + OP_VOTE,
>> OP_LAST
>> };
>>
>> @@ -244,6 +245,9 @@ enum operation
>> #define NV50_IR_SUBOP_V2(d,a,b) (((d) << 10) | ((b) << 5) | (a) | 0x4000)
>> #define NV50_IR_SUBOP_V4(d,a,b) (((d) << 10) | ((b) << 5) | (a) | 0x8000)
>> #define NV50_IR_SUBOP_Vn(n) ((n) >> 14)
>> +#define NV50_IR_SUBOP_VOTE_ALL 0
>> +#define NV50_IR_SUBOP_VOTE_ANY 1
>> +#define NV50_IR_SUBOP_VOTE_UNI 2
>>
>> enum DataType
>> {
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
>> index d3ae545..71c05d2 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_nvc0.cpp
>> @@ -142,6 +142,8 @@ private:
>>
>> void emitPIXLD(const Instruction *);
>>
>> + void emitVOTE(const Instruction *);
>> +
>> inline void defId(const ValueDef&, const int pos);
>> inline void defId(const Instruction *, int d, const int pos);
>> inline void srcId(const ValueRef&, const int pos);
>> @@ -2337,6 +2339,24 @@ CodeEmitterNVC0::emitPIXLD(const Instruction *i)
>> code[1] |= 0x00e00000;
>> }
>>
>> +void
>> +CodeEmitterNVC0::emitVOTE(const Instruction *i)
>> +{
>> + assert(i->src(0).getFile() == FILE_PREDICATE &&
>> + i->def(1).getFile() == FILE_PREDICATE);
>> +
>> + code[0] = 0x00000004 | (i->subOp << 5);
>> + code[1] = 0x48000000;
>> +
>> + emitPredicate(i);
>> +
>> + defId(i->def(0), 14);
>> + defId(i->def(1), 32 + 22);
>> + if (i->src(0).mod == Modifier(NV50_IR_MOD_NOT))
>> + code[0] |= 1 << 23;
>> + srcId(i->src(0), 20);
>> +}
>> +
>> bool
>> CodeEmitterNVC0::emitInstruction(Instruction *insn)
>> {
>> @@ -2607,6 +2627,9 @@ CodeEmitterNVC0::emitInstruction(Instruction *insn)
>> case OP_PIXLD:
>> emitPIXLD(insn);
>> break;
>> + case OP_VOTE:
>> + emitVOTE(insn);
>> + break;
>> case OP_PHI:
>> case OP_UNION:
>> case OP_CONSTRAINT:
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
>> index 85f7704..cfa85ec 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_print.cpp
>> @@ -190,6 +190,7 @@ const char *operationStr[OP_LAST + 1] =
>> "vsel",
>> "cctl",
>> "shfl",
>> + "vote",
>> "(invalid)"
>> };
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
>> index 89d3a08..160e36f 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target.cpp
>> @@ -55,6 +55,7 @@ const uint8_t Target::operationSrcNr[] =
>> 2, 2, 2, 2, 3, 2, // VADD, VAVG, VMIN, VMAX, VSAD, VSET,
>> 2, 2, 2, 1, // VSHR, VSHL, VSEL, CCTL
>> 3, // SHFL
>> + 1, // VOTE
>> 0
>> };
>>
>> @@ -129,6 +130,8 @@ const OpClass Target::operationClass[] =
>> OPCLASS_VECTOR, OPCLASS_CONTROL,
>> // SHFL
>> OPCLASS_OTHER,
>> + // VOTE
>> + OPCLASS_OTHER,
>> OPCLASS_PSEUDO // LAST
>> };
>>
>> --
>> 2.7.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list