spirv: Fix SpvOpFwidth, SpvOpFwidthFine and SpvOpFwidthCoarse
"Result is the same as computing the sum of the absolute values of OpDPdx and OpDPdy on P." We were doing sum of absolute values of OpDPdx of P and OpDPdx of NULL.
This commit is contained in:
@@ -404,17 +404,17 @@ vtn_handle_alu(struct vtn_builder *b, SpvOp opcode,
|
|||||||
case SpvOpFwidth:
|
case SpvOpFwidth:
|
||||||
val->ssa->def = nir_fadd(&b->nb,
|
val->ssa->def = nir_fadd(&b->nb,
|
||||||
nir_fabs(&b->nb, nir_fddx(&b->nb, src[0])),
|
nir_fabs(&b->nb, nir_fddx(&b->nb, src[0])),
|
||||||
nir_fabs(&b->nb, nir_fddx(&b->nb, src[1])));
|
nir_fabs(&b->nb, nir_fddy(&b->nb, src[0])));
|
||||||
return;
|
return;
|
||||||
case SpvOpFwidthFine:
|
case SpvOpFwidthFine:
|
||||||
val->ssa->def = nir_fadd(&b->nb,
|
val->ssa->def = nir_fadd(&b->nb,
|
||||||
nir_fabs(&b->nb, nir_fddx_fine(&b->nb, src[0])),
|
nir_fabs(&b->nb, nir_fddx_fine(&b->nb, src[0])),
|
||||||
nir_fabs(&b->nb, nir_fddx_fine(&b->nb, src[1])));
|
nir_fabs(&b->nb, nir_fddy_fine(&b->nb, src[0])));
|
||||||
return;
|
return;
|
||||||
case SpvOpFwidthCoarse:
|
case SpvOpFwidthCoarse:
|
||||||
val->ssa->def = nir_fadd(&b->nb,
|
val->ssa->def = nir_fadd(&b->nb,
|
||||||
nir_fabs(&b->nb, nir_fddx_coarse(&b->nb, src[0])),
|
nir_fabs(&b->nb, nir_fddx_coarse(&b->nb, src[0])),
|
||||||
nir_fabs(&b->nb, nir_fddx_coarse(&b->nb, src[1])));
|
nir_fabs(&b->nb, nir_fddy_coarse(&b->nb, src[0])));
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case SpvOpVectorTimesScalar:
|
case SpvOpVectorTimesScalar:
|
||||||
|
Reference in New Issue
Block a user