Lines Matching refs:block

131 			    struct r600_block *block,
138 /* initialize block */
139 block->flags = 0;
140 block->status |= R600_BLOCK_STATUS_DIRTY; /* dirty all blocks at start */
141 block->start_offset = reg[i].offset;
142 block->pm4[block->pm4_ndwords++] = PKT3(opcode, n, 0);
143 block->pm4[block->pm4_ndwords++] = (block->start_offset - offset_base) >> 2;
144 block->reg = &block->pm4[block->pm4_ndwords];
145 block->pm4_ndwords += n;
146 block->nreg = n;
147 block->nreg_dirty = n;
148 LIST_INITHEAD(&block->list);
149 LIST_INITHEAD(&block->enable_list);
153 block->flags |= REG_FLAG_DIRTY_ALWAYS;
156 if (!(block->status & R600_BLOCK_STATUS_ENABLED)) {
157 block->status |= R600_BLOCK_STATUS_ENABLED;
158 LIST_ADDTAIL(&block->enable_list, &ctx->enable_list);
159 LIST_ADDTAIL(&block->list,&ctx->dirty);
163 block->flags |= REG_FLAG_FLUSH_CHANGE;
167 block->nbo++;
168 assert(block->nbo < R600_BLOCK_MAX_BO);
169 block->pm4_bo_index[j] = block->nbo;
170 block->pm4[block->pm4_ndwords++] = PKT3(PKT3_NOP, 0, 0);
171 block->pm4[block->pm4_ndwords++] = 0x00000000;
172 block->reloc[block->nbo].bo_pm4_index = block->pm4_ndwords - 1;
176 block->pm4[block->pm4_ndwords++] = PKT3(PKT3_SURFACE_BASE_UPDATE, 0, 0);
177 block->pm4[block->pm4_ndwords++] = reg[i+j].sbu_flags;
181 assert(block->pm4_ndwords < R600_BLOCK_MAX_REG);
187 struct r600_block *block;
192 /* ignore new block balise */
217 /* allocate new block */
218 block = calloc(1, sizeof(struct r600_block));
219 if (block == NULL) {
225 /* create block table if it doesn't exist */
231 range->blocks[CTX_BLOCK_ID(reg[i + j].offset)] = block;
234 r600_init_block(ctx, block, reg, i, n, opcode, offset_base);
542 struct r600_block *block;
550 block = ctx->range[i].blocks[j];
551 if (block) {
552 for (int k = 0, offset = block->start_offset; k < block->nreg; k++, offset += 4) {
556 for (int k = 1; k <= block->nbo; k++) {
557 pipe_resource_reference((struct pipe_resource**)&block->reloc[k].bo, NULL);
559 free(block);
570 /* setup block table */
688 struct r600_block *block,
691 if ((index + 1) > block->nreg_dirty)
692 block->nreg_dirty = index + 1;
694 if ((dirty != (block->status & R600_BLOCK_STATUS_DIRTY)) || !(block->status & R600_BLOCK_STATUS_ENABLED)) {
695 block->status |= R600_BLOCK_STATUS_DIRTY;
696 ctx->pm4_dirty_cdwords += block->pm4_ndwords;
697 if (!(block->status & R600_BLOCK_STATUS_ENABLED)) {
698 block->status |= R600_BLOCK_STATUS_ENABLED;
699 LIST_ADDTAIL(&block->enable_list, &ctx->enable_list);
701 LIST_ADDTAIL(&block->list,&ctx->dirty);
703 if (block->flags & REG_FLAG_FLUSH_CHANGE) {
710 * If reg needs a reloc, this function will add it to its block's reloc list.
717 if (!reg->block->pm4_bo_index[reg->id]) {
721 reloc_id = reg->block->pm4_bo_index[reg->id];
723 (struct pipe_resource**)&reg->block->reloc[reloc_id].bo,
725 reg->block->reloc[reloc_id].bo_usage = reg->bo_usage;
747 * Since two registers can be in the same block, we need to make sure
752 * mark_dirty(reg->block)
753 * emit_block(reg->block)
757 * block, we would end up emitting that block twice.
761 /* Mark all the registers in the block as dirty */
762 reg->block->nreg_dirty = reg->block->nreg;
763 reg->block->status |= R600_BLOCK_STATUS_DIRTY;
771 if (reg->block->status & R600_BLOCK_STATUS_DIRTY) {
772 r600_context_block_emit_dirty(ctx, reg->block, pkt_flags);
779 struct r600_block *block;
785 block = reg->block;
788 dirty = block->status & R600_BLOCK_STATUS_DIRTY;
790 if (reg->value != block->reg[id]) {
791 block->reg[id] = reg->value;
794 if (block->flags & REG_FLAG_DIRTY_ALWAYS)
802 r600_context_dirty_block(ctx, block, dirty, id);
808 * block will be used for compute shaders.
810 void r600_context_block_emit_dirty(struct r600_context *ctx, struct r600_block *block,
814 int optional = block->nbo == 0 && !(block->flags & REG_FLAG_DIRTY_ALWAYS);
815 int cp_dwords = block->pm4_ndwords, start_dword = 0;
817 int nbo = block->nbo;
819 if (block->nreg_dirty == 0 && optional) {
824 for (int j = 0; j < block->nreg; j++) {
825 if (block->pm4_bo_index[j]) {
827 struct r600_block_reloc *reloc = &block->reloc[block->pm4_bo_index[j]];
829 block->pm4[reloc->bo_pm4_index] =
832 block->pm4[reloc->bo_pm4_index] = 0;
842 optional &= (block->nreg_dirty != block->nreg);
844 new_dwords = block->nreg_dirty;
848 memcpy(&cs->buf[cs->cdw], block->pm4, cp_dwords * 4);
850 /* We are applying the pkt_flags after copying the register block to
851 * the the command stream, because it is possible this block will be
853 * pkt_flags in the block.
867 block->status ^= R600_BLOCK_STATUS_DIRTY;
868 block->nreg_dirty = 0;
869 LIST_DELINIT(&block->list);