[virglrenderer-devel] [PATCHv2 virglrenderer] shader: improve TXQ translation
Dave Airlie
airlied at gmail.com
Fri Feb 26 04:43:46 UTC 2016
On 22 February 2016 at 09:39, <marcandre.lureau at redhat.com> wrote:
> From: Marc-André Lureau <marcandre.lureau at redhat.com>
>
> TXQ may query levels and size.
>
> Fixes all piglit texturesize tests and others.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau at redhat.com>
> ---
> src/vrend_shader.c | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
> 1 file changed, 45 insertions(+), 5 deletions(-)
>
> diff --git a/src/vrend_shader.c b/src/vrend_shader.c
> index e72231f..ebf53a1 100644
> --- a/src/vrend_shader.c
> +++ b/src/vrend_shader.c
> @@ -25,6 +25,7 @@
> #include "tgsi/tgsi_info.h"
> #include "tgsi/tgsi_iterate.h"
> #include "util/u_memory.h"
> +#include "util/u_math.h"
> #include <string.h>
> #include <stdio.h>
> #include <math.h>
> @@ -1008,17 +1009,56 @@ static int translate_tex(struct dump_ctx *ctx,
> inst->Texture.Texture != TGSI_TEXTURE_2D_ARRAY_MSAA)
> snprintf(bias, 128, ", int(%s.w)", srcs[0]);
>
> + twm = "";
> /* need to emit a textureQueryLevels */
> if (inst->Dst[0].Register.WriteMask & 0x8) {
> - ctx->uses_txq_levels = true;
> - snprintf(buf, 255, "%s = %s(%s(textureQueryLevels(%s)));\n", dsts[0], dstconv, dtypeprefix, srcs[sampler_index]);
> - return emit_buf(ctx, buf);
> - } else {
> - snprintf(buf, 255, "%s = %s(%s(textureSize(%s%s)));\n", dsts[0], dstconv, dtypeprefix, srcs[sampler_index], bias);
> +
> + if (inst->Texture.Texture != TGSI_TEXTURE_BUFFER &&
> + inst->Texture.Texture != TGSI_TEXTURE_RECT &&
> + inst->Texture.Texture != TGSI_TEXTURE_2D_MSAA &&
> + inst->Texture.Texture != TGSI_TEXTURE_2D_ARRAY_MSAA) {
> + ctx->uses_txq_levels = true;
> + if (inst->Dst[0].Register.WriteMask & 0x7)
> + twm = ".w";
> + snprintf(buf, 255, "%s%s = %s(textureQueryLevels(%s));\n", dsts[0], twm, dtypeprefix, srcs[sampler_index]);
> + emit_buf(ctx, buf);
shouldn't this return here? ^^
else we emit another texture instruction after the TXQ.
Dave.
More information about the virglrenderer-devel
mailing list