mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-23 18:24:13 +08:00
intel/elk: Actually retype integer sources of sampler message payload
According to PRMs: "All parameters are of type IEEE_Float, except those in the The ld*, resinfo, and the offu, offv of the gather4_po[_c] instruction message types, which are of type signed integer." Currently, we load parameters with the correct types, but use them as send sources with the default float type, which may confuse passes downstream. Fix this by actually storing the retyped sources. Cc: mesa-stable Signed-off-by: Sviatoslav Peleshko <sviatoslav.peleshko@globallogic.com> Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29581>
This commit is contained in:
parent
2358c997f3
commit
5ca51156e2
@ -849,27 +849,29 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, elk_fs_inst *inst, elk_op
|
||||
coordinate_done = true;
|
||||
break;
|
||||
case ELK_SHADER_OPCODE_TXS:
|
||||
bld.MOV(retype(sources[length], payload_unsigned_type), lod);
|
||||
length++;
|
||||
sources[length] = retype(sources[length], payload_unsigned_type);
|
||||
bld.MOV(sources[length++], lod);
|
||||
break;
|
||||
case ELK_SHADER_OPCODE_IMAGE_SIZE_LOGICAL:
|
||||
/* We need an LOD; just use 0 */
|
||||
bld.MOV(retype(sources[length], payload_unsigned_type), elk_imm_ud(0));
|
||||
length++;
|
||||
sources[length] = retype(sources[length], payload_unsigned_type);
|
||||
bld.MOV(sources[length++], elk_imm_ud(0));
|
||||
break;
|
||||
case ELK_SHADER_OPCODE_TXF:
|
||||
case ELK_SHADER_OPCODE_TXF_LZ:
|
||||
/* Unfortunately, the parameters for LD are intermixed: u, lod, v, r. */
|
||||
bld.MOV(retype(sources[length++], payload_signed_type), coordinate);
|
||||
sources[length] = retype(sources[length], payload_signed_type);
|
||||
bld.MOV(sources[length++], coordinate);
|
||||
|
||||
if (op != ELK_SHADER_OPCODE_TXF_LZ) {
|
||||
bld.MOV(retype(sources[length], payload_signed_type), lod);
|
||||
length++;
|
||||
sources[length] = retype(sources[length], payload_signed_type);
|
||||
bld.MOV(sources[length++], lod);
|
||||
}
|
||||
|
||||
for (unsigned i = 1; i < coord_components; i++)
|
||||
bld.MOV(retype(sources[length++], payload_signed_type),
|
||||
offset(coordinate, bld, i));
|
||||
for (unsigned i = 1; i < coord_components; i++) {
|
||||
sources[length] = retype(sources[length], payload_signed_type);
|
||||
bld.MOV(sources[length++], offset(coordinate, bld, i));
|
||||
}
|
||||
|
||||
coordinate_done = true;
|
||||
break;
|
||||
@ -881,7 +883,8 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, elk_fs_inst *inst, elk_op
|
||||
if (op == ELK_SHADER_OPCODE_TXF_UMS ||
|
||||
op == ELK_SHADER_OPCODE_TXF_CMS ||
|
||||
op == ELK_SHADER_OPCODE_TXF_CMS_W) {
|
||||
bld.MOV(retype(sources[length++], payload_unsigned_type), sample_index);
|
||||
sources[length] = retype(sources[length], payload_unsigned_type);
|
||||
bld.MOV(sources[length++], sample_index);
|
||||
}
|
||||
|
||||
/* Data from the multisample control surface. */
|
||||
@ -902,7 +905,8 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, elk_fs_inst *inst, elk_op
|
||||
* payload, we need to split 2-32bit register into 4-16-bit
|
||||
* payload.
|
||||
*/
|
||||
bld.MOV(retype(sources[length++], payload_unsigned_type),
|
||||
sources[length] = retype(sources[length], payload_unsigned_type);
|
||||
bld.MOV(sources[length++],
|
||||
mcs.file == IMM ? mcs : offset(mcs, bld, i));
|
||||
}
|
||||
}
|
||||
@ -910,9 +914,10 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, elk_fs_inst *inst, elk_op
|
||||
/* There is no offsetting for this message; just copy in the integer
|
||||
* texture coordinates.
|
||||
*/
|
||||
for (unsigned i = 0; i < coord_components; i++)
|
||||
bld.MOV(retype(sources[length++], payload_signed_type),
|
||||
offset(coordinate, bld, i));
|
||||
for (unsigned i = 0; i < coord_components; i++) {
|
||||
sources[length] = retype(sources[length], payload_signed_type);
|
||||
bld.MOV(sources[length++], offset(coordinate, bld, i));
|
||||
}
|
||||
|
||||
coordinate_done = true;
|
||||
break;
|
||||
@ -921,9 +926,10 @@ lower_sampler_logical_send_gfx7(const fs_builder &bld, elk_fs_inst *inst, elk_op
|
||||
for (unsigned i = 0; i < 2; i++) /* u, v */
|
||||
bld.MOV(sources[length++], offset(coordinate, bld, i));
|
||||
|
||||
for (unsigned i = 0; i < 2; i++) /* offu, offv */
|
||||
bld.MOV(retype(sources[length++], payload_signed_type),
|
||||
offset(tg4_offset, bld, i));
|
||||
for (unsigned i = 0; i < 2; i++) { /* offu, offv */
|
||||
sources[length] = retype(sources[length], payload_signed_type);
|
||||
bld.MOV(sources[length++], offset(tg4_offset, bld, i));
|
||||
}
|
||||
|
||||
if (coord_components == 3) /* r if present */
|
||||
bld.MOV(sources[length++], offset(coordinate, bld, 2));
|
||||
|
Loading…
Reference in New Issue
Block a user