brw_set_dest(p, insn, brw_null_reg());
brw_set_src0(p, insn, payload);
- brw_set_src1(p, insn, brw_imm_d(0));
+ brw_set_src1(p, insn, brw_imm_ud(0u));
brw_inst_set_sfid(p->devinfo, insn, BRW_SFID_URB);
brw_inst_set_urb_opcode(p->devinfo, insn, GEN8_URB_OPCODE_SIMD8_WRITE);
brw_set_dest(p, insn, retype(brw_null_reg(), BRW_REGISTER_TYPE_UW));
brw_set_src0(p, insn, retype(payload, BRW_REGISTER_TYPE_UW));
- brw_set_src1(p, insn, brw_imm_d(0));
+ brw_set_src1(p, insn, brw_imm_ud(0u));
/* Terminate a compute shader by sending a message to the thread spawner.
*/
}
break;
case SHADER_OPCODE_TXS:
+ case SHADER_OPCODE_IMAGE_SIZE:
msg_type = GEN5_SAMPLER_MESSAGE_SAMPLE_RESINFO;
break;
case SHADER_OPCODE_TXD:
}
}
- uint32_t base_binding_table_index = (inst->opcode == SHADER_OPCODE_TG4 ||
- inst->opcode == SHADER_OPCODE_TG4_OFFSET)
- ? prog_data->binding_table.gather_texture_start
- : prog_data->binding_table.texture_start;
+ uint32_t base_binding_table_index;
+ switch (inst->opcode) {
+ case SHADER_OPCODE_TG4:
+ case SHADER_OPCODE_TG4_OFFSET:
+ base_binding_table_index = prog_data->binding_table.gather_texture_start;
+ break;
+ case SHADER_OPCODE_IMAGE_SIZE:
+ base_binding_table_index = prog_data->binding_table.image_start;
+ break;
+ default:
+ base_binding_table_index = prog_data->binding_table.texture_start;
+ break;
+ }
if (surface_index.file == BRW_IMMEDIATE_VALUE &&
sampler_index.file == BRW_IMMEDIATE_VALUE) {
* gen7, so the fact that it's a send message is hidden at the IR level.
*/
assert(inst->header_size == 0);
- assert(!inst->mlen);
+ assert(inst->mlen);
assert(index.type == BRW_REGISTER_TYPE_UD);
- uint32_t simd_mode, rlen, mlen;
+ uint32_t simd_mode, rlen;
if (inst->exec_size == 16) {
- mlen = 2;
rlen = 8;
simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
} else {
assert(inst->exec_size == 8);
- mlen = 1;
rlen = 4;
simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8;
}
brw_set_dest(p, send, retype(dst, BRW_REGISTER_TYPE_UW));
brw_set_src0(p, send, offset);
brw_set_desc(p, send,
- brw_message_desc(devinfo, mlen, rlen, false) |
+ brw_message_desc(devinfo, inst->mlen, rlen, false) |
brw_sampler_desc(devinfo, surf_index,
0, /* LD message ignores sampler unit */
GEN5_SAMPLER_MESSAGE_SAMPLE_LD,
brw_send_indirect_message(
p, BRW_SFID_SAMPLER, retype(dst, BRW_REGISTER_TYPE_UW),
offset, addr,
- brw_message_desc(devinfo, mlen, rlen, false) |
+ brw_message_desc(devinfo, inst->mlen, rlen, false) |
brw_sampler_desc(devinfo,
0 /* surface */,
0 /* sampler */,
case SHADER_OPCODE_SAMPLEINFO:
generate_tex(inst, dst, src[0], src[1], src[2]);
break;
+
+ case SHADER_OPCODE_IMAGE_SIZE:
+ generate_tex(inst, dst, src[0], src[1], brw_imm_ud(0));
+ break;
+
case FS_OPCODE_DDX_COARSE:
case FS_OPCODE_DDX_FINE:
generate_ddx(inst, dst, src[0]);
inst->header_size);
break;
+ case SHADER_OPCODE_UNTYPED_ATOMIC_FLOAT:
+ assert(src[2].file == BRW_IMMEDIATE_VALUE);
+ brw_untyped_atomic_float(p, dst, src[0], src[1], src[2].ud,
+ inst->mlen, !inst->dst.is_null(),
+ inst->header_size);
+ break;
+
case SHADER_OPCODE_UNTYPED_SURFACE_READ:
assert(!inst->header_size);
assert(src[2].file == BRW_IMMEDIATE_VALUE);