mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 06:40:08 +01:00
intel/brw: Remove Gfx8- code from EU codegen helpers
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27691>
This commit is contained in:
parent
99d41ca90d
commit
d61d6fc3bc
3 changed files with 67 additions and 363 deletions
|
|
@ -2182,7 +2182,7 @@ brw_disassemble_inst(FILE *file, const struct brw_isa_info *isa,
|
|||
|
||||
case GFX6_SFID_DATAPORT_RENDER_CACHE: {
|
||||
/* aka BRW_SFID_DATAPORT_WRITE on Gfx4-5 */
|
||||
unsigned msg_type = brw_fb_write_desc_msg_type(devinfo, imm_desc);
|
||||
unsigned msg_type = brw_fb_desc_msg_type(devinfo, imm_desc);
|
||||
|
||||
err |= control(file, "DP rc message type",
|
||||
dp_rc_msg_type(devinfo), msg_type, &space);
|
||||
|
|
@ -2202,7 +2202,7 @@ brw_disassemble_inst(FILE *file, const struct brw_isa_info *isa,
|
|||
string(file, " CoarseWrite");
|
||||
} else {
|
||||
format(file, " MsgCtrl = 0x%u",
|
||||
brw_fb_write_desc_msg_control(devinfo, imm_desc));
|
||||
brw_fb_desc_msg_control(devinfo, imm_desc));
|
||||
}
|
||||
|
||||
format(file, " Surface = %u",
|
||||
|
|
|
|||
|
|
@ -220,26 +220,11 @@ brw_inst_set_group(const struct intel_device_info *devinfo,
|
|||
assert(group % 8 == 0 && group < 32);
|
||||
brw_inst_set_qtr_control(devinfo, inst, group / 8);
|
||||
|
||||
} else if (devinfo->ver >= 7) {
|
||||
} else {
|
||||
assert(group % 4 == 0 && group < 32);
|
||||
brw_inst_set_qtr_control(devinfo, inst, group / 8);
|
||||
brw_inst_set_nib_control(devinfo, inst, (group / 4) % 2);
|
||||
|
||||
} else if (devinfo->ver == 6) {
|
||||
assert(group % 8 == 0 && group < 32);
|
||||
brw_inst_set_qtr_control(devinfo, inst, group / 8);
|
||||
|
||||
} else {
|
||||
assert(group % 8 == 0 && group < 16);
|
||||
/* The channel group and compression controls are non-orthogonal, there
|
||||
* are two possible representations for group zero and we may need to
|
||||
* preserve the current one to avoid changing the selected compression
|
||||
* enable inadvertently.
|
||||
*/
|
||||
if (group == 8)
|
||||
brw_inst_set_qtr_control(devinfo, inst, BRW_COMPRESSION_2NDHALF);
|
||||
else if (brw_inst_qtr_control(devinfo, inst) == BRW_COMPRESSION_2NDHALF)
|
||||
brw_inst_set_qtr_control(devinfo, inst, BRW_COMPRESSION_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -507,12 +492,7 @@ brw_label_assembly(const struct brw_isa_info *isa,
|
|||
brw_create_label(&root_label,
|
||||
offset + brw_inst_jip(devinfo, inst) * to_bytes_scale, mem_ctx);
|
||||
} else if (brw_has_jip(devinfo, brw_inst_opcode(isa, inst))) {
|
||||
int jip;
|
||||
if (devinfo->ver >= 7) {
|
||||
jip = brw_inst_jip(devinfo, inst);
|
||||
} else {
|
||||
jip = brw_inst_gfx6_jump_count(devinfo, inst);
|
||||
}
|
||||
int jip = brw_inst_jip(devinfo, inst);
|
||||
|
||||
brw_create_label(&root_label, offset + jip * to_bytes_scale, mem_ctx);
|
||||
}
|
||||
|
|
@ -775,23 +755,6 @@ brw_num_sources_from_inst(const struct brw_isa_info *isa,
|
|||
|
||||
if (brw_inst_opcode(isa, inst) == BRW_OPCODE_MATH) {
|
||||
math_function = brw_inst_math_function(devinfo, inst);
|
||||
} else if (devinfo->ver < 6 &&
|
||||
brw_inst_opcode(isa, inst) == BRW_OPCODE_SEND) {
|
||||
if (brw_inst_sfid(devinfo, inst) == BRW_SFID_MATH) {
|
||||
/* src1 must be a descriptor (including the information to determine
|
||||
* that the SEND is doing an extended math operation), but src0 can
|
||||
* actually be null since it serves as the source of the implicit GRF
|
||||
* to MRF move.
|
||||
*
|
||||
* If we stop using that functionality, we'll have to revisit this.
|
||||
*/
|
||||
return 2;
|
||||
} else {
|
||||
/* Send instructions are allowed to have null sources since they use
|
||||
* the base_mrf field to specify which message register source.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
assert(desc->nsrc < 4);
|
||||
return desc->nsrc;
|
||||
|
|
|
|||
|
|
@ -288,34 +288,23 @@ brw_message_desc(const struct intel_device_info *devinfo,
|
|||
unsigned response_length,
|
||||
bool header_present)
|
||||
{
|
||||
if (devinfo->ver >= 5) {
|
||||
assert(msg_length % reg_unit(devinfo) == 0);
|
||||
assert(response_length % reg_unit(devinfo) == 0);
|
||||
return (SET_BITS(msg_length / reg_unit(devinfo), 28, 25) |
|
||||
SET_BITS(response_length / reg_unit(devinfo), 24, 20) |
|
||||
SET_BITS(header_present, 19, 19));
|
||||
} else {
|
||||
return (SET_BITS(msg_length, 23, 20) |
|
||||
SET_BITS(response_length, 19, 16));
|
||||
}
|
||||
assert(msg_length % reg_unit(devinfo) == 0);
|
||||
assert(response_length % reg_unit(devinfo) == 0);
|
||||
return (SET_BITS(msg_length / reg_unit(devinfo), 28, 25) |
|
||||
SET_BITS(response_length / reg_unit(devinfo), 24, 20) |
|
||||
SET_BITS(header_present, 19, 19));
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_message_desc_mlen(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 5)
|
||||
return GET_BITS(desc, 28, 25) * reg_unit(devinfo);
|
||||
else
|
||||
return GET_BITS(desc, 23, 20);
|
||||
return GET_BITS(desc, 28, 25) * reg_unit(devinfo);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_message_desc_rlen(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 5)
|
||||
return GET_BITS(desc, 24, 20) * reg_unit(devinfo);
|
||||
else
|
||||
return GET_BITS(desc, 19, 16);
|
||||
return GET_BITS(desc, 24, 20) * reg_unit(devinfo);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
|
|
@ -323,7 +312,6 @@ brw_message_desc_header_present(ASSERTED
|
|||
const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 5);
|
||||
return GET_BITS(desc, 19, 19);
|
||||
}
|
||||
|
||||
|
|
@ -349,26 +337,16 @@ brw_urb_desc(const struct intel_device_info *devinfo,
|
|||
bool channel_mask_present,
|
||||
unsigned global_offset)
|
||||
{
|
||||
if (devinfo->ver >= 8) {
|
||||
return (SET_BITS(per_slot_offset_present, 17, 17) |
|
||||
SET_BITS(channel_mask_present, 15, 15) |
|
||||
SET_BITS(global_offset, 14, 4) |
|
||||
SET_BITS(msg_type, 3, 0));
|
||||
} else if (devinfo->ver >= 7) {
|
||||
assert(!channel_mask_present);
|
||||
return (SET_BITS(per_slot_offset_present, 16, 16) |
|
||||
SET_BITS(global_offset, 13, 3) |
|
||||
SET_BITS(msg_type, 3, 0));
|
||||
} else {
|
||||
unreachable("unhandled URB write generation");
|
||||
}
|
||||
return (SET_BITS(per_slot_offset_present, 17, 17) |
|
||||
SET_BITS(channel_mask_present, 15, 15) |
|
||||
SET_BITS(global_offset, 14, 4) |
|
||||
SET_BITS(msg_type, 3, 0));
|
||||
}
|
||||
|
||||
static inline uint32_t
|
||||
brw_urb_desc_msg_type(ASSERTED const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 7);
|
||||
return GET_BITS(desc, 3, 0);
|
||||
}
|
||||
|
||||
|
|
@ -414,22 +392,10 @@ brw_sampler_desc(const struct intel_device_info *devinfo,
|
|||
* SIMD Mode[2] 29 This field is the upper bit of the 3-bit
|
||||
* SIMD Mode field.
|
||||
*/
|
||||
if (devinfo->ver >= 8)
|
||||
return desc | SET_BITS(msg_type, 16, 12) |
|
||||
SET_BITS(simd_mode & 0x3, 18, 17) |
|
||||
SET_BITS(simd_mode >> 2, 29, 29) |
|
||||
SET_BITS(return_format, 30, 30);
|
||||
if (devinfo->ver >= 7)
|
||||
return (desc | SET_BITS(msg_type, 16, 12) |
|
||||
SET_BITS(simd_mode, 18, 17));
|
||||
else if (devinfo->ver >= 5)
|
||||
return (desc | SET_BITS(msg_type, 15, 12) |
|
||||
SET_BITS(simd_mode, 17, 16));
|
||||
else if (devinfo->verx10 >= 45)
|
||||
return desc | SET_BITS(msg_type, 15, 12);
|
||||
else
|
||||
return (desc | SET_BITS(return_format, 13, 12) |
|
||||
SET_BITS(msg_type, 15, 14));
|
||||
return desc | SET_BITS(msg_type, 16, 12) |
|
||||
SET_BITS(simd_mode & 0x3, 18, 17) |
|
||||
SET_BITS(simd_mode >> 2, 29, 29) |
|
||||
SET_BITS(return_format, 30, 30);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
|
|
@ -452,36 +418,22 @@ brw_sampler_desc_msg_type(const struct intel_device_info *devinfo, uint32_t desc
|
|||
{
|
||||
if (devinfo->ver >= 20)
|
||||
return GET_BITS(desc, 31, 31) << 5 | GET_BITS(desc, 16, 12);
|
||||
else if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 16, 12);
|
||||
else if (devinfo->verx10 >= 45)
|
||||
return GET_BITS(desc, 15, 12);
|
||||
else
|
||||
return GET_BITS(desc, 15, 14);
|
||||
return GET_BITS(desc, 16, 12);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_sampler_desc_simd_mode(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 5);
|
||||
if (devinfo->ver >= 8)
|
||||
return GET_BITS(desc, 18, 17) | GET_BITS(desc, 29, 29) << 2;
|
||||
else if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 18, 17);
|
||||
else
|
||||
return GET_BITS(desc, 17, 16);
|
||||
return GET_BITS(desc, 18, 17) | GET_BITS(desc, 29, 29) << 2;
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
static inline unsigned
|
||||
brw_sampler_desc_return_format(ASSERTED const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->verx10 == 40 || devinfo->ver >= 8);
|
||||
if (devinfo->ver >= 8)
|
||||
return GET_BITS(desc, 30, 30);
|
||||
else
|
||||
return GET_BITS(desc, 13, 12);
|
||||
return GET_BITS(desc, 30, 30);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -493,21 +445,9 @@ brw_dp_desc(const struct intel_device_info *devinfo,
|
|||
unsigned msg_type,
|
||||
unsigned msg_control)
|
||||
{
|
||||
/* Prior to gfx6, things are too inconsistent; use the dp_read/write_desc
|
||||
* helpers instead.
|
||||
*/
|
||||
assert(devinfo->ver >= 6);
|
||||
const unsigned desc = SET_BITS(binding_table_index, 7, 0);
|
||||
if (devinfo->ver >= 8) {
|
||||
return (desc | SET_BITS(msg_control, 13, 8) |
|
||||
SET_BITS(msg_type, 18, 14));
|
||||
} else if (devinfo->ver >= 7) {
|
||||
return (desc | SET_BITS(msg_control, 13, 8) |
|
||||
SET_BITS(msg_type, 17, 14));
|
||||
} else {
|
||||
return (desc | SET_BITS(msg_control, 12, 8) |
|
||||
SET_BITS(msg_type, 16, 13));
|
||||
}
|
||||
return SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 13, 8) |
|
||||
SET_BITS(msg_type, 18, 14);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
|
|
@ -520,23 +460,13 @@ brw_dp_desc_binding_table_index(UNUSED const struct intel_device_info *devinfo,
|
|||
static inline unsigned
|
||||
brw_dp_desc_msg_type(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 6);
|
||||
if (devinfo->ver >= 8)
|
||||
return GET_BITS(desc, 18, 14);
|
||||
else if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 17, 14);
|
||||
else
|
||||
return GET_BITS(desc, 16, 13);
|
||||
return GET_BITS(desc, 18, 14);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_dp_desc_msg_control(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 6);
|
||||
if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 13, 8);
|
||||
else
|
||||
return GET_BITS(desc, 12, 8);
|
||||
return GET_BITS(desc, 13, 8);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -550,42 +480,21 @@ brw_dp_read_desc(const struct intel_device_info *devinfo,
|
|||
unsigned msg_type,
|
||||
unsigned target_cache)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_dp_desc(devinfo, binding_table_index, msg_type, msg_control);
|
||||
else if (devinfo->verx10 >= 45)
|
||||
return (SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 10, 8) |
|
||||
SET_BITS(msg_type, 13, 11) |
|
||||
SET_BITS(target_cache, 15, 14));
|
||||
else
|
||||
return (SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 11, 8) |
|
||||
SET_BITS(msg_type, 13, 12) |
|
||||
SET_BITS(target_cache, 15, 14));
|
||||
return brw_dp_desc(devinfo, binding_table_index, msg_type, msg_control);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_dp_read_desc_msg_type(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_dp_desc_msg_type(devinfo, desc);
|
||||
else if (devinfo->verx10 >= 45)
|
||||
return GET_BITS(desc, 13, 11);
|
||||
else
|
||||
return GET_BITS(desc, 13, 12);
|
||||
return brw_dp_desc_msg_type(devinfo, desc);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_dp_read_desc_msg_control(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_dp_desc_msg_control(devinfo, desc);
|
||||
else if (devinfo->verx10 >= 45)
|
||||
return GET_BITS(desc, 10, 8);
|
||||
else
|
||||
return GET_BITS(desc, 11, 8);
|
||||
return brw_dp_desc_msg_control(devinfo, desc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -599,47 +508,23 @@ brw_dp_write_desc(const struct intel_device_info *devinfo,
|
|||
unsigned msg_type,
|
||||
unsigned send_commit_msg)
|
||||
{
|
||||
assert(devinfo->ver <= 6 || !send_commit_msg);
|
||||
if (devinfo->ver >= 6) {
|
||||
return brw_dp_desc(devinfo, binding_table_index, msg_type, msg_control) |
|
||||
SET_BITS(send_commit_msg, 17, 17);
|
||||
} else {
|
||||
return (SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 11, 8) |
|
||||
SET_BITS(msg_type, 14, 12) |
|
||||
SET_BITS(send_commit_msg, 15, 15));
|
||||
}
|
||||
assert(!send_commit_msg);
|
||||
return brw_dp_desc(devinfo, binding_table_index, msg_type, msg_control) |
|
||||
SET_BITS(send_commit_msg, 17, 17);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_dp_write_desc_msg_type(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_dp_desc_msg_type(devinfo, desc);
|
||||
else
|
||||
return GET_BITS(desc, 14, 12);
|
||||
return brw_dp_desc_msg_type(devinfo, desc);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_dp_write_desc_msg_control(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_dp_desc_msg_control(devinfo, desc);
|
||||
else
|
||||
return GET_BITS(desc, 11, 8);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
brw_dp_write_desc_write_commit(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver <= 6);
|
||||
if (devinfo->ver >= 6)
|
||||
return GET_BITS(desc, 17, 17);
|
||||
else
|
||||
return GET_BITS(desc, 15, 15);
|
||||
return brw_dp_desc_msg_control(devinfo, desc);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -651,7 +536,6 @@ brw_dp_surface_desc(const struct intel_device_info *devinfo,
|
|||
unsigned msg_type,
|
||||
unsigned msg_control)
|
||||
{
|
||||
assert(devinfo->ver >= 7);
|
||||
/* We'll OR in the binding table index later */
|
||||
return brw_dp_desc(devinfo, 0, msg_type, msg_control);
|
||||
}
|
||||
|
|
@ -665,14 +549,10 @@ brw_dp_untyped_atomic_desc(const struct intel_device_info *devinfo,
|
|||
assert(exec_size <= 8 || exec_size == 16);
|
||||
|
||||
unsigned msg_type;
|
||||
if (devinfo->verx10 >= 75) {
|
||||
if (exec_size > 0) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP;
|
||||
} else {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2;
|
||||
}
|
||||
if (exec_size > 0) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP;
|
||||
} else {
|
||||
msg_type = GFX7_DATAPORT_DC_UNTYPED_ATOMIC_OP;
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_OP_SIMD4X2;
|
||||
}
|
||||
|
||||
const unsigned msg_control =
|
||||
|
|
@ -690,7 +570,6 @@ brw_dp_untyped_atomic_float_desc(const struct intel_device_info *devinfo,
|
|||
bool response_expected)
|
||||
{
|
||||
assert(exec_size <= 8 || exec_size == 16);
|
||||
assert(devinfo->ver >= 9);
|
||||
|
||||
assert(exec_size > 0);
|
||||
const unsigned msg_type = GFX9_DATAPORT_DC_PORT1_UNTYPED_ATOMIC_FLOAT_OP;
|
||||
|
|
@ -725,25 +604,9 @@ brw_dp_untyped_surface_rw_desc(const struct intel_device_info *devinfo,
|
|||
{
|
||||
assert(exec_size <= 8 || exec_size == 16);
|
||||
|
||||
unsigned msg_type;
|
||||
if (write) {
|
||||
if (devinfo->verx10 >= 75) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE;
|
||||
} else {
|
||||
msg_type = GFX7_DATAPORT_DC_UNTYPED_SURFACE_WRITE;
|
||||
}
|
||||
} else {
|
||||
/* Read */
|
||||
if (devinfo->verx10 >= 75) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ;
|
||||
} else {
|
||||
msg_type = GFX7_DATAPORT_DC_UNTYPED_SURFACE_READ;
|
||||
}
|
||||
}
|
||||
|
||||
/* SIMD4x2 is only valid for read messages on IVB; use SIMD8 instead */
|
||||
if (write && devinfo->verx10 == 70 && exec_size == 0)
|
||||
exec_size = 8;
|
||||
const unsigned msg_type =
|
||||
write ? HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_WRITE :
|
||||
HSW_DATAPORT_DC_PORT1_UNTYPED_SURFACE_READ;
|
||||
|
||||
/* See also MDC_SM3 in the SKL PRM Vol 2d. */
|
||||
const unsigned simd_mode = exec_size == 0 ? 0 : /* SIMD4x2 */
|
||||
|
|
@ -779,7 +642,6 @@ brw_dp_byte_scattered_rw_desc(const struct intel_device_info *devinfo,
|
|||
{
|
||||
assert(exec_size <= 8 || exec_size == 16);
|
||||
|
||||
assert(devinfo->verx10 >= 75);
|
||||
const unsigned msg_type =
|
||||
write ? HSW_DATAPORT_DC_PORT0_BYTE_SCATTERED_WRITE :
|
||||
HSW_DATAPORT_DC_PORT0_BYTE_SCATTERED_READ;
|
||||
|
|
@ -799,22 +661,9 @@ brw_dp_dword_scattered_rw_desc(const struct intel_device_info *devinfo,
|
|||
{
|
||||
assert(exec_size == 8 || exec_size == 16);
|
||||
|
||||
unsigned msg_type;
|
||||
if (write) {
|
||||
if (devinfo->ver >= 6) {
|
||||
msg_type = GFX6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE;
|
||||
} else {
|
||||
msg_type = BRW_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE;
|
||||
}
|
||||
} else {
|
||||
if (devinfo->ver >= 7) {
|
||||
msg_type = GFX7_DATAPORT_DC_DWORD_SCATTERED_READ;
|
||||
} else if (devinfo->verx10 >= 45) {
|
||||
msg_type = G45_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ;
|
||||
} else {
|
||||
msg_type = BRW_DATAPORT_READ_MESSAGE_DWORD_SCATTERED_READ;
|
||||
}
|
||||
}
|
||||
const unsigned msg_type =
|
||||
write ? GFX6_DATAPORT_WRITE_MESSAGE_DWORD_SCATTERED_WRITE :
|
||||
GFX7_DATAPORT_DC_DWORD_SCATTERED_READ;
|
||||
|
||||
const unsigned msg_control =
|
||||
SET_BITS(1, 1, 1) | /* Legacy SIMD Mode */
|
||||
|
|
@ -850,7 +699,6 @@ brw_dp_a64_untyped_surface_rw_desc(const struct intel_device_info *devinfo,
|
|||
bool write)
|
||||
{
|
||||
assert(exec_size <= 8 || exec_size == 16);
|
||||
assert(devinfo->ver >= 8);
|
||||
|
||||
unsigned msg_type =
|
||||
write ? GFX8_DATAPORT_DC_PORT1_A64_UNTYPED_SURFACE_WRITE :
|
||||
|
|
@ -913,7 +761,6 @@ brw_dp_a64_byte_scattered_rw_desc(const struct intel_device_info *devinfo,
|
|||
bool write)
|
||||
{
|
||||
assert(exec_size <= 8 || exec_size == 16);
|
||||
assert(devinfo->ver >= 8);
|
||||
|
||||
unsigned msg_type =
|
||||
write ? GFX8_DATAPORT_DC_PORT1_A64_SCATTERED_WRITE :
|
||||
|
|
@ -936,7 +783,6 @@ brw_dp_a64_untyped_atomic_desc(const struct intel_device_info *devinfo,
|
|||
bool response_expected)
|
||||
{
|
||||
assert(exec_size == 8);
|
||||
assert(devinfo->ver >= 8);
|
||||
assert(bit_size == 16 || bit_size == 32 || bit_size == 64);
|
||||
assert(devinfo->ver >= 12 || bit_size >= 32);
|
||||
|
||||
|
|
@ -961,7 +807,6 @@ brw_dp_a64_untyped_atomic_float_desc(const struct intel_device_info *devinfo,
|
|||
bool response_expected)
|
||||
{
|
||||
assert(exec_size == 8);
|
||||
assert(devinfo->ver >= 9);
|
||||
assert(bit_size == 16 || bit_size == 32);
|
||||
assert(devinfo->ver >= 12 || bit_size == 32);
|
||||
|
||||
|
|
@ -988,18 +833,9 @@ brw_dp_typed_atomic_desc(const struct intel_device_info *devinfo,
|
|||
assert(exec_size > 0 || exec_group == 0);
|
||||
assert(exec_group % 8 == 0);
|
||||
|
||||
unsigned msg_type;
|
||||
if (devinfo->verx10 >= 75) {
|
||||
if (exec_size == 0) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2;
|
||||
} else {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP;
|
||||
}
|
||||
} else {
|
||||
/* SIMD4x2 typed surface R/W messages only exist on HSW+ */
|
||||
assert(exec_size > 0);
|
||||
msg_type = GFX7_DATAPORT_RC_TYPED_ATOMIC_OP;
|
||||
}
|
||||
const unsigned msg_type =
|
||||
exec_size == 0 ? HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP_SIMD4X2 :
|
||||
HSW_DATAPORT_DC_PORT1_TYPED_ATOMIC_OP;
|
||||
|
||||
const bool high_sample_mask = (exec_group / 8) % 2 == 1;
|
||||
|
||||
|
|
@ -1024,40 +860,17 @@ brw_dp_typed_surface_rw_desc(const struct intel_device_info *devinfo,
|
|||
/* Typed surface reads and writes don't support SIMD16 */
|
||||
assert(exec_size <= 8);
|
||||
|
||||
unsigned msg_type;
|
||||
if (write) {
|
||||
if (devinfo->verx10 >= 75) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE;
|
||||
} else {
|
||||
msg_type = GFX7_DATAPORT_RC_TYPED_SURFACE_WRITE;
|
||||
}
|
||||
} else {
|
||||
if (devinfo->verx10 >= 75) {
|
||||
msg_type = HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ;
|
||||
} else {
|
||||
msg_type = GFX7_DATAPORT_RC_TYPED_SURFACE_READ;
|
||||
}
|
||||
}
|
||||
const unsigned msg_type =
|
||||
write ? HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_WRITE :
|
||||
HSW_DATAPORT_DC_PORT1_TYPED_SURFACE_READ;
|
||||
|
||||
/* See also MDC_SG3 in the SKL PRM Vol 2d. */
|
||||
unsigned msg_control;
|
||||
if (devinfo->verx10 >= 75) {
|
||||
/* See also MDC_SG3 in the SKL PRM Vol 2d. */
|
||||
const unsigned slot_group = exec_size == 0 ? 0 : /* SIMD4x2 */
|
||||
1 + ((exec_group / 8) % 2);
|
||||
const unsigned slot_group = exec_size == 0 ? 0 : /* SIMD4x2 */
|
||||
1 + ((exec_group / 8) % 2);
|
||||
|
||||
msg_control =
|
||||
SET_BITS(brw_mdc_cmask(num_channels), 3, 0) |
|
||||
SET_BITS(slot_group, 5, 4);
|
||||
} else {
|
||||
/* SIMD4x2 typed surface R/W messages only exist on HSW+ */
|
||||
assert(exec_size > 0);
|
||||
const unsigned slot_group = ((exec_group / 8) % 2);
|
||||
|
||||
msg_control =
|
||||
SET_BITS(brw_mdc_cmask(num_channels), 3, 0) |
|
||||
SET_BITS(slot_group, 5, 5);
|
||||
}
|
||||
const unsigned msg_control =
|
||||
SET_BITS(brw_mdc_cmask(num_channels), 3, 0) |
|
||||
SET_BITS(slot_group, 5, 4);
|
||||
|
||||
return brw_dp_surface_desc(devinfo, msg_type, msg_control);
|
||||
}
|
||||
|
|
@ -1068,18 +881,9 @@ brw_fb_desc(const struct intel_device_info *devinfo,
|
|||
unsigned msg_type,
|
||||
unsigned msg_control)
|
||||
{
|
||||
/* Prior to gen6, things are too inconsistent; use the fb_(read|write)_desc
|
||||
* helpers instead.
|
||||
*/
|
||||
assert(devinfo->ver >= 6);
|
||||
const unsigned desc = SET_BITS(binding_table_index, 7, 0);
|
||||
if (devinfo->ver >= 7) {
|
||||
return (desc | SET_BITS(msg_control, 13, 8) |
|
||||
SET_BITS(msg_type, 17, 14));
|
||||
} else {
|
||||
return (desc | SET_BITS(msg_control, 12, 8) |
|
||||
SET_BITS(msg_type, 16, 13));
|
||||
}
|
||||
return SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 13, 8) |
|
||||
SET_BITS(msg_type, 17, 14);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
|
|
@ -1092,21 +896,13 @@ brw_fb_desc_binding_table_index(UNUSED const struct intel_device_info *devinfo,
|
|||
static inline uint32_t
|
||||
brw_fb_desc_msg_control(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 6);
|
||||
if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 13, 8);
|
||||
else
|
||||
return GET_BITS(desc, 12, 8);
|
||||
return GET_BITS(desc, 13, 8);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_fb_desc_msg_type(const struct intel_device_info *devinfo, uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver >= 6);
|
||||
if (devinfo->ver >= 7)
|
||||
return GET_BITS(desc, 17, 14);
|
||||
else
|
||||
return GET_BITS(desc, 16, 13);
|
||||
return GET_BITS(desc, 17, 14);
|
||||
}
|
||||
|
||||
static inline uint32_t
|
||||
|
|
@ -1116,7 +912,6 @@ brw_fb_read_desc(const struct intel_device_info *devinfo,
|
|||
unsigned exec_size,
|
||||
bool per_sample)
|
||||
{
|
||||
assert(devinfo->ver >= 9);
|
||||
assert(exec_size == 8 || exec_size == 16);
|
||||
|
||||
return brw_fb_desc(devinfo, binding_table_index,
|
||||
|
|
@ -1132,64 +927,20 @@ brw_fb_write_desc(const struct intel_device_info *devinfo,
|
|||
bool last_render_target,
|
||||
bool coarse_write)
|
||||
{
|
||||
const unsigned msg_type =
|
||||
devinfo->ver >= 6 ?
|
||||
GFX6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE :
|
||||
BRW_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE;
|
||||
const unsigned msg_type = GFX6_DATAPORT_WRITE_MESSAGE_RENDER_TARGET_WRITE;
|
||||
|
||||
assert(devinfo->ver >= 10 || !coarse_write);
|
||||
|
||||
if (devinfo->ver >= 6) {
|
||||
return brw_fb_desc(devinfo, binding_table_index, msg_type, msg_control) |
|
||||
SET_BITS(last_render_target, 12, 12) |
|
||||
SET_BITS(coarse_write, 18, 18);
|
||||
} else {
|
||||
return (SET_BITS(binding_table_index, 7, 0) |
|
||||
SET_BITS(msg_control, 11, 8) |
|
||||
SET_BITS(last_render_target, 11, 11) |
|
||||
SET_BITS(msg_type, 14, 12));
|
||||
}
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_fb_write_desc_msg_type(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_fb_desc_msg_type(devinfo, desc);
|
||||
else
|
||||
return GET_BITS(desc, 14, 12);
|
||||
}
|
||||
|
||||
static inline unsigned
|
||||
brw_fb_write_desc_msg_control(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return brw_fb_desc_msg_control(devinfo, desc);
|
||||
else
|
||||
return GET_BITS(desc, 11, 8);
|
||||
return brw_fb_desc(devinfo, binding_table_index, msg_type, msg_control) |
|
||||
SET_BITS(last_render_target, 12, 12) |
|
||||
SET_BITS(coarse_write, 18, 18);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
brw_fb_write_desc_last_render_target(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
if (devinfo->ver >= 6)
|
||||
return GET_BITS(desc, 12, 12);
|
||||
else
|
||||
return GET_BITS(desc, 11, 11);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
brw_fb_write_desc_write_commit(const struct intel_device_info *devinfo,
|
||||
uint32_t desc)
|
||||
{
|
||||
assert(devinfo->ver <= 6);
|
||||
if (devinfo->ver >= 6)
|
||||
return GET_BITS(desc, 17, 17);
|
||||
else
|
||||
return GET_BITS(desc, 15, 15);
|
||||
return GET_BITS(desc, 12, 12);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
|
|
@ -1806,17 +1557,7 @@ static inline unsigned
|
|||
brw_jump_scale(const struct intel_device_info *devinfo)
|
||||
{
|
||||
/* Broadwell measures jump targets in bytes. */
|
||||
if (devinfo->ver >= 8)
|
||||
return 16;
|
||||
|
||||
/* Ironlake and later measure jump targets in 64-bit data chunks (in order
|
||||
* (to support compaction), so each 128-bit instruction requires 2 chunks.
|
||||
*/
|
||||
if (devinfo->ver >= 5)
|
||||
return 2;
|
||||
|
||||
/* Gfx4 simply uses the number of 128-bit instructions. */
|
||||
return 1;
|
||||
return 16;
|
||||
}
|
||||
|
||||
void brw_barrier(struct brw_codegen *p, struct brw_reg src);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue