mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
vkd3d-shader/hlsl: Use aoffimmis when writing gather resource loads.
If the offset of a gather resource load can be represented as an aoffimmi (vectori of ints from -8 to 7), use one. This is of particular importance for 4.0 profiles, where this is the only valid way of representing offsets for this operation.
This commit is contained in:
parent
c2a7a40d3a
commit
18adf0d726
Notes:
Alexandre Julliard
2023-01-24 22:27:58 +01:00
Approved-by: Giovanni Mascellani (@giomasce) Approved-by: Zebediah Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Approved-by: Alexandre Julliard (@julliard) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/51
@ -2154,11 +2154,19 @@ static void write_sm4_gather(struct hlsl_ctx *ctx, struct vkd3d_bytecode_buffer
|
|||||||
|
|
||||||
sm4_src_from_node(&instr.srcs[instr.src_count++], coords, VKD3DSP_WRITEMASK_ALL);
|
sm4_src_from_node(&instr.srcs[instr.src_count++], coords, VKD3DSP_WRITEMASK_ALL);
|
||||||
|
|
||||||
/* FIXME: Use an aoffimmi modifier if possible. */
|
|
||||||
if (texel_offset)
|
if (texel_offset)
|
||||||
{
|
{
|
||||||
instr.opcode = VKD3D_SM5_OP_GATHER4_PO;
|
if (!encode_texel_offset_as_aoffimmi(&instr, texel_offset))
|
||||||
sm4_src_from_node(&instr.srcs[instr.src_count++], texel_offset, VKD3DSP_WRITEMASK_ALL);
|
{
|
||||||
|
if (ctx->profile->major_version < 5)
|
||||||
|
{
|
||||||
|
hlsl_error(ctx, &texel_offset->loc, VKD3D_SHADER_ERROR_HLSL_INVALID_TEXEL_OFFSET,
|
||||||
|
"Offset must resolve to integer literal in the range -8 to 7 for profiles < 5.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
instr.opcode = VKD3D_SM5_OP_GATHER4_PO;
|
||||||
|
sm4_src_from_node(&instr.srcs[instr.src_count++], texel_offset, VKD3DSP_WRITEMASK_ALL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sm4_src_from_deref(ctx, &instr.srcs[instr.src_count++], resource, resource_type, instr.dsts[0].writemask);
|
sm4_src_from_deref(ctx, &instr.srcs[instr.src_count++], resource, resource_type, instr.dsts[0].writemask);
|
||||||
|
Loading…
Reference in New Issue
Block a user