[Mesa-dev] [PATCH] i965/vec4: Initialize LOD to 0.0f for textureQueryLevels() and texture().
Iago Toral
itoral at igalia.com
Wed Oct 21 23:54:18 PDT 2015
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
On Wed, 2015-10-21 at 12:30 -0700, Matt Turner wrote:
> We implement textureQueryLevels (which takes no arguments, save the
> sampler) using the resinfo message (which takes an argument of LOD).
> Without initializing it, we'd generate a MOV from the null register to
> load the LOD argument.
>
> Essentially the same logic applies to texture. A vertex shader cannot
> compute derivatives and so cannot produce an LOD, so TXL with an LOD of
> 0.0 is used.
> ---
> src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> index c39f97e..b8f90f2 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
> @@ -882,6 +882,18 @@ vec4_visitor::emit_texture(ir_texture_opcode op,
> uint32_t sampler,
> src_reg sampler_reg)
> {
> + /* The sampler can only meaningfully compute LOD for fragment shader
> + * messages. For all other stages, we change the opcode to TXL and hardcode
> + * the LOD to 0.
> + *
> + * textureQueryLevels() is implemented in terms of TXS so we need to pass a
> + * valid LOD argument.
> + */
> + if (op == ir_tex || op == ir_query_levels) {
> + assert(lod.file == BAD_FILE);
> + lod = src_reg(0.0f);
> + }
> +
> enum opcode opcode;
> switch (op) {
> case ir_tex: opcode = SHADER_OPCODE_TXL; break;
More information about the mesa-dev
mailing list