• Home
  • Raw
  • Download

Lines Matching +full:flat +full:- +full:cache

31    /* Value to patch with will be block->offset */
39 /* TODO: how to encode 16-bit coords? */ in agx_pack_sample_coords()
81 /* Otherwise must be a 16-bit float immediate */ in agx_pack_lod()
147 /* RA invariant: alignment of half-reg */ in agx_pack_alu_dst()
152 (dest.cache ? (1 << 0) : 0) | in agx_pack_alu_dst()
165 /* Flags 0 for an 8-bit immediate */ in agx_pack_alu_src()
183 assert(!(src.cache && src.discard)); in agx_pack_alu_src()
185 unsigned hint = src.discard ? 0x3 : src.cache ? 0x2 : 0x1; in agx_pack_alu_src()
206 /* Flags 0x4 for an 8-bit immediate */ in agx_pack_cmpsel_src()
225 assert(!(src.cache && src.discard)); in agx_pack_cmpsel_src()
229 unsigned hint = src.discard ? 0x3 : src.cache ? 0x2 : 0x1; in agx_pack_cmpsel_src()
251 assert(!(src.cache && src.discard)); in agx_pack_sample_mask_src()
268 if (!agx_is_null(I->dest[d]) && I->dest[d].size != AGX_SIZE_16) in agx_all_16()
273 if (!agx_is_null(I->src[s]) && I->src[s].size != AGX_SIZE_16) in agx_all_16()
285 struct agx_opcode_info info = agx_opcodes_info[I->op]; in agx_pack_alu()
296 if (I->saturate) in agx_pack_alu()
301 unsigned D = agx_pack_alu_dst(I->dest[0]); in agx_pack_alu()
302 unsigned extend_offset = (sizeof(extend)*8) - 4; in agx_pack_alu()
307 raw |= (I->invert_cond << 8); in agx_pack_alu()
308 raw |= (I->nest << 11); in agx_pack_alu()
309 raw |= (I->icond << 13); in agx_pack_alu()
314 (I->op == AGX_OPCODE_ICMPSEL || I->op == AGX_OPCODE_FCMPSEL); in agx_pack_alu()
317 agx_pack_cmpsel_src(I->src[s], I->dest[0].size) : in agx_pack_alu()
318 agx_pack_alu_src(I->src[s]); in agx_pack_alu()
323 /* Size bit always zero and so omitted for 16-bit */ in agx_pack_alu()
328 unsigned fmod = agx_pack_float_mod(I->src[s]); in agx_pack_alu()
331 } else if (I->op == AGX_OPCODE_IMAD || I->op == AGX_OPCODE_IADD) { in agx_pack_alu()
332 bool zext = I->src[s].abs; in agx_pack_alu()
333 bool extends = I->src[s].size < AGX_SIZE_64; in agx_pack_alu()
337 assert(!I->src[s].neg || s == 1); in agx_pack_alu()
346 unsigned extend_offset = (sizeof(extend)*8) - ((s + 3) * 2); in agx_pack_alu()
350 if ((I->op == AGX_OPCODE_IMAD || I->op == AGX_OPCODE_IADD) && I->src[1].neg) in agx_pack_alu()
354 raw |= (I->truth_table & 0x3) << 26; in agx_pack_alu()
355 raw |= (uint64_t) (I->truth_table >> 2) << 38; in agx_pack_alu()
357 raw |= (uint64_t) (I->shift & 1) << 39; in agx_pack_alu()
358 raw |= (uint64_t) (I->shift >> 2) << 52; in agx_pack_alu()
360 raw |= (uint64_t) (I->mask & 0x3) << 38; in agx_pack_alu()
361 raw |= (uint64_t) ((I->mask >> 2) & 0x3) << 50; in agx_pack_alu()
362 raw |= (uint64_t) ((I->mask >> 4) & 0x1) << 63; in agx_pack_alu()
364 raw |= (uint64_t) (I->sr & 0x3F) << 16; in agx_pack_alu()
365 raw |= (uint64_t) (I->sr >> 6) << 26; in agx_pack_alu()
367 raw |= (uint64_t) (I->imm) << 8; in agx_pack_alu()
369 raw |= (uint64_t) (I->imm) << 16; in agx_pack_alu()
371 raw |= (uint64_t) (I->imm) << 26; in agx_pack_alu()
373 raw |= (uint64_t) (I->fcond) << 61; in agx_pack_alu()
377 unsigned short_mask = (1 << length) - 1; in agx_pack_alu()
387 unsigned extend_offset = ((length - sizeof(extend)) * 8); in agx_pack_alu()
390 if (I->op == AGX_OPCODE_IADD) in agx_pack_alu()
391 extend_offset -= 16; in agx_pack_alu()
397 unsigned extend_offset = (((length - sizeof(extend)) * 8) - 64); in agx_pack_alu()
401 memcpy(util_dynarray_grow_bytes(emission, 1, length - 8), &hi, length - 8); in agx_pack_alu()
408 switch (I->op) { in agx_pack_instr()
412 bool load = (I->op == AGX_OPCODE_LD_TILE); in agx_pack_instr()
413 unsigned D = agx_pack_alu_dst(load ? I->dest[0] : I->src[0]); in agx_pack_instr()
415 unsigned mask = I->mask ?: 0xF; in agx_pack_instr()
422 ((uint64_t) (I->format) << 24) | in agx_pack_instr()
436 unsigned S = agx_pack_sample_mask_src(I->src[0]); in agx_pack_instr()
452 bool flat = (I->op == AGX_OPCODE_LD_VARY_FLAT); in agx_pack_instr() local
453 unsigned D = agx_pack_alu_dst(I->dest[0]); in agx_pack_instr()
454 unsigned channels = (I->channels & 0x3); in agx_pack_instr()
455 assert(I->mask < 0xF); /* 0 indicates full mask */ in agx_pack_instr()
456 agx_index index_src = I->src[0]; in agx_pack_instr()
458 assert(!(flat && I->perspective)); in agx_pack_instr()
463 0x21 | (flat ? (1 << 7) : 0) | in agx_pack_instr()
464 (I->perspective ? (1 << 6) : 0) | in agx_pack_instr()
469 (!flat ? (1ull << 46) : 0) | /* XXX */ in agx_pack_instr()
480 agx_index index_src = I->src[0]; in agx_pack_instr()
481 agx_index value = I->src[1]; in agx_pack_instr()
489 (I->last ? (1 << 7) : 0) | in agx_pack_instr()
503 assert(I->mask != 0); in agx_pack_instr()
504 assert(I->format <= 0x10); in agx_pack_instr()
507 unsigned R = agx_pack_memory_reg(I->dest[0], &Rt); in agx_pack_instr()
508 unsigned A = agx_pack_memory_base(I->src[0], &At); in agx_pack_instr()
509 unsigned O = agx_pack_memory_index(I->src[1], &Ot); in agx_pack_instr()
518 ((I->format & BITFIELD_MASK(3)) << 7) | in agx_pack_instr()
523 (I->src[1].abs ? (1 << 25) : 0) | in agx_pack_instr()
527 (I->scoreboard << 30) | in agx_pack_instr()
531 (((uint64_t) I->shift) << 42) | in agx_pack_instr()
534 (((uint64_t) (I->format >> 3)) << 48) | in agx_pack_instr()
537 (((uint64_t) I->mask) << 52) | in agx_pack_instr()
547 assert(I->mask != 0); in agx_pack_instr()
548 assert(I->format <= 0x10); in agx_pack_instr()
553 unsigned R = agx_pack_memory_reg(I->dest[0], &Rt); in agx_pack_instr()
554 unsigned C = agx_pack_sample_coords(I->src[0], &Ct); in agx_pack_instr()
555 unsigned T = agx_pack_texture(I->src[2], &Tt); in agx_pack_instr()
556 unsigned S = agx_pack_sampler(I->src[3], &St); in agx_pack_instr()
557 unsigned O = agx_pack_sample_offset(I->src[4], &Ot); in agx_pack_instr()
558 unsigned D = agx_pack_lod(I->src[1]); in agx_pack_instr()
582 assert(I->scoreboard == 0 && "todo"); in agx_pack_instr()
596 (((uint64_t) I->dim) << 40) | in agx_pack_instr()
598 (((uint64_t) I->mask) << 48) | in agx_pack_instr()
599 (((uint64_t) I->lod_mode) << 52) | in agx_pack_instr()
615 assert(I->target != NULL); in agx_pack_instr()
619 .block = I->target, in agx_pack_instr()
620 .offset = emission->size in agx_pack_instr()
626 struct agx_opcode_info info = agx_opcodes_info[I->op]; in agx_pack_instr()
645 uint8_t *location = ((uint8_t *) emission->data) + fix.offset + 2; in agx_fixup_branch()
648 int32_t patch = (int32_t) fix.block->offset - (int32_t) fix.offset; in agx_fixup_branch()
663 block->offset = emission->size; in agx_pack_binary()