mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
gallivm: handle texel swizzles correctly for d3d10-style sample opcodes
unlike OpenGL, the texel swizzle is embedded in the instruction, so honor that. (Technically we now execute both the sampler_view swizzle and the per-instruction swizzle but this should be quite ok.) v2: add documentation note as it's not obvious. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
f2be639972
commit
abcc40e7f0
2 changed files with 29 additions and 0 deletions
|
|
@ -1859,6 +1859,19 @@ emit_sample(struct lp_build_tgsi_soa_context *bld,
|
|||
deriv_ptr,
|
||||
lod_bias, explicit_lod, scalar_lod,
|
||||
texel);
|
||||
|
||||
if (inst->Src[1].Register.SwizzleX != PIPE_SWIZZLE_RED ||
|
||||
inst->Src[1].Register.SwizzleY != PIPE_SWIZZLE_GREEN ||
|
||||
inst->Src[1].Register.SwizzleZ != PIPE_SWIZZLE_BLUE ||
|
||||
inst->Src[1].Register.SwizzleW != PIPE_SWIZZLE_ALPHA) {
|
||||
unsigned char swizzles[4];
|
||||
swizzles[0] = inst->Src[1].Register.SwizzleX;
|
||||
swizzles[1] = inst->Src[1].Register.SwizzleY;
|
||||
swizzles[2] = inst->Src[1].Register.SwizzleZ;
|
||||
swizzles[3] = inst->Src[1].Register.SwizzleW;
|
||||
|
||||
lp_build_swizzle_soa_inplace(&bld->bld_base.base, texel, swizzles);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -1954,6 +1967,20 @@ emit_fetch_texels( struct lp_build_tgsi_soa_context *bld,
|
|||
NULL,
|
||||
NULL, explicit_lod, scalar_lod,
|
||||
texel);
|
||||
|
||||
if (is_samplei &&
|
||||
(inst->Src[1].Register.SwizzleX != PIPE_SWIZZLE_RED ||
|
||||
inst->Src[1].Register.SwizzleY != PIPE_SWIZZLE_GREEN ||
|
||||
inst->Src[1].Register.SwizzleZ != PIPE_SWIZZLE_BLUE ||
|
||||
inst->Src[1].Register.SwizzleW != PIPE_SWIZZLE_ALPHA)) {
|
||||
unsigned char swizzles[4];
|
||||
swizzles[0] = inst->Src[1].Register.SwizzleX;
|
||||
swizzles[1] = inst->Src[1].Register.SwizzleY;
|
||||
swizzles[2] = inst->Src[1].Register.SwizzleZ;
|
||||
swizzles[3] = inst->Src[1].Register.SwizzleW;
|
||||
|
||||
lp_build_swizzle_soa_inplace(&bld->bld_base.base, texel, swizzles);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -1730,6 +1730,8 @@ Resource Sampling Opcodes
|
|||
|
||||
Those opcodes follow very closely semantics of the respective Direct3D
|
||||
instructions. If in doubt double check Direct3D documentation.
|
||||
Note that the swizzle on SVIEW (src1) determines texel swizzling
|
||||
after lookup.
|
||||
|
||||
.. opcode:: SAMPLE - Using provided address, sample data from the
|
||||
specified texture using the filtering mode identified
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue