mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 22:08:26 +02:00
i965/vs: Store texturing results into a vec4 temporary.
The sampler appears to ignore writemasks (even when correcting the
WRITEMASK_XYZW in brw_vec4_emit.cpp to the proper writemask) and just
always writes all four values.
To cope with this, just texture into a temporary, then MOV out into a
register that has the proper number of components.
NOTE: This is a candidate for stable branches.
Fixes es3conform's shadow_execution_vert.test.
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <idr@freedesktop.org>
(cherry picked from commit f0dbd9255b)
This commit is contained in:
parent
29bc8e7d8f
commit
bc7112746d
1 changed files with 7 additions and 6 deletions
|
|
@ -1905,6 +1905,7 @@ vec4_visitor::visit(ir_texture *ir)
|
|||
inst->mlen = inst->header_present + 1; /* always at least one */
|
||||
inst->sampler = sampler;
|
||||
inst->dst = dst_reg(this, ir->type);
|
||||
inst->dst.writemask = WRITEMASK_XYZW;
|
||||
inst->shadow_compare = ir->shadow_comparitor != NULL;
|
||||
|
||||
if (ir->offset != NULL && ir->op != ir_txf)
|
||||
|
|
@ -2010,13 +2011,16 @@ vec4_visitor::visit(ir_texture *ir)
|
|||
void
|
||||
vec4_visitor::swizzle_result(ir_texture *ir, src_reg orig_val, int sampler)
|
||||
{
|
||||
this->result = orig_val;
|
||||
|
||||
int s = c->key.tex.swizzles[sampler];
|
||||
|
||||
this->result = src_reg(this, ir->type);
|
||||
dst_reg swizzled_result(this->result);
|
||||
|
||||
if (ir->op == ir_txs || ir->type == glsl_type::float_type
|
||||
|| s == SWIZZLE_NOOP)
|
||||
|| s == SWIZZLE_NOOP) {
|
||||
emit(MOV(swizzled_result, orig_val));
|
||||
return;
|
||||
}
|
||||
|
||||
int zero_mask = 0, one_mask = 0, copy_mask = 0;
|
||||
int swizzle[4];
|
||||
|
|
@ -2036,9 +2040,6 @@ vec4_visitor::swizzle_result(ir_texture *ir, src_reg orig_val, int sampler)
|
|||
}
|
||||
}
|
||||
|
||||
this->result = src_reg(this, ir->type);
|
||||
dst_reg swizzled_result(this->result);
|
||||
|
||||
if (copy_mask) {
|
||||
orig_val.swizzle = BRW_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
|
||||
swizzled_result.writemask = copy_mask;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue