i965: Introduce new SHADER_OPCODE_URB_WRITE_SIMD8_MASKED/PER_SLOT opcodes.
In the vec4 backend, we have a vec4_instruction::urb_write_flags field. There are many kinds of flags for SIMD4x2 messages. However, there are really only two (per-slot offset, use channel masks) for SIMD8 messages. Rather than adding a boolean flag for per-slot offsets (polluting all instructions), I decided to just make three new opcodes. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
This commit is contained in:
parent
0e57694745
commit
bea7522782
|
@ -1032,6 +1032,9 @@ enum opcode {
|
|||
SHADER_OPCODE_GEN7_SCRATCH_READ,
|
||||
|
||||
SHADER_OPCODE_URB_WRITE_SIMD8,
|
||||
SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT,
|
||||
SHADER_OPCODE_URB_WRITE_SIMD8_MASKED,
|
||||
SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT,
|
||||
|
||||
/**
|
||||
* Return the index of an arbitrary live channel (i.e. one of the channels
|
||||
|
|
|
@ -281,6 +281,9 @@ fs_inst::is_send_from_grf() const
|
|||
case SHADER_OPCODE_TYPED_SURFACE_READ:
|
||||
case SHADER_OPCODE_TYPED_SURFACE_WRITE:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
return true;
|
||||
case FS_OPCODE_UNIFORM_PULL_CONSTANT_LOAD:
|
||||
return src[1].file == GRF;
|
||||
|
@ -781,6 +784,9 @@ fs_inst::regs_read(int arg) const
|
|||
switch (opcode) {
|
||||
case FS_OPCODE_FB_WRITE:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
case SHADER_OPCODE_UNTYPED_ATOMIC:
|
||||
case SHADER_OPCODE_UNTYPED_SURFACE_READ:
|
||||
case SHADER_OPCODE_UNTYPED_SURFACE_WRITE:
|
||||
|
@ -910,6 +916,9 @@ fs_visitor::implied_mrf_writes(fs_inst *inst)
|
|||
case SHADER_OPCODE_TYPED_SURFACE_READ:
|
||||
case SHADER_OPCODE_TYPED_SURFACE_WRITE:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
case FS_OPCODE_INTERPOLATE_AT_CENTROID:
|
||||
case FS_OPCODE_INTERPOLATE_AT_SAMPLE:
|
||||
case FS_OPCODE_INTERPOLATE_AT_SHARED_OFFSET:
|
||||
|
|
|
@ -368,6 +368,14 @@ fs_generator::generate_urb_write(fs_inst *inst, struct brw_reg payload)
|
|||
brw_inst_set_sfid(p->devinfo, insn, BRW_SFID_URB);
|
||||
brw_inst_set_urb_opcode(p->devinfo, insn, GEN8_URB_OPCODE_SIMD8_WRITE);
|
||||
|
||||
if (inst->opcode == SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT ||
|
||||
inst->opcode == SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT)
|
||||
brw_inst_set_urb_per_slot_offset(p->devinfo, insn, true);
|
||||
|
||||
if (inst->opcode == SHADER_OPCODE_URB_WRITE_SIMD8_MASKED ||
|
||||
inst->opcode == SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT)
|
||||
brw_inst_set_urb_channel_mask_present(p->devinfo, insn, true);
|
||||
|
||||
brw_inst_set_mlen(p->devinfo, insn, inst->mlen);
|
||||
brw_inst_set_rlen(p->devinfo, insn, 0);
|
||||
brw_inst_set_eot(p->devinfo, insn, inst->eot);
|
||||
|
@ -2002,6 +2010,9 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
|
|||
break;
|
||||
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
generate_urb_write(inst, src[0]);
|
||||
break;
|
||||
|
||||
|
|
|
@ -393,6 +393,7 @@ FF(urb_per_slot_offset,
|
|||
/* 4-6: */ -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
/* 7: */ MD(16), MD(16),
|
||||
/* 8: */ MD(17), MD(17))
|
||||
FC(urb_channel_mask_present, MD(15), MD(15), devinfo->gen >= 8)
|
||||
FC(urb_complete, MD(15), MD(15), devinfo->gen < 8)
|
||||
FC(urb_used, MD(14), MD(14), devinfo->gen < 7)
|
||||
FC(urb_allocate, MD(13), MD(13), devinfo->gen < 7)
|
||||
|
|
|
@ -408,6 +408,12 @@ brw_instruction_name(enum opcode op)
|
|||
return "gen7_scratch_read";
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
return "gen8_urb_write_simd8";
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
return "gen8_urb_write_simd8_per_slot";
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
return "gen8_urb_write_simd8_masked";
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
return "gen8_urb_write_simd8_masked_per_slot";
|
||||
|
||||
case SHADER_OPCODE_FIND_LIVE_CHANNEL:
|
||||
return "find_live_channel";
|
||||
|
@ -961,6 +967,9 @@ backend_instruction::has_side_effects() const
|
|||
case SHADER_OPCODE_TYPED_SURFACE_WRITE_LOGICAL:
|
||||
case SHADER_OPCODE_MEMORY_FENCE:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_PER_SLOT:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED:
|
||||
case SHADER_OPCODE_URB_WRITE_SIMD8_MASKED_PER_SLOT:
|
||||
case FS_OPCODE_FB_WRITE:
|
||||
case SHADER_OPCODE_BARRIER:
|
||||
return true;
|
||||
|
|
Loading…
Reference in New Issue