[virglrenderer-devel] [PATCHv2 virglrenderer] shader: improve TXQ translation
Marc-André Lureau
marcandre.lureau at gmail.com
Fri Feb 26 18:48:58 UTC 2016
Hi
On Fri, Feb 26, 2016 at 5:43 AM, Dave Airlie <airlied at gmail.com> wrote:
> 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.
http://gallium.readthedocs.org/en/latest/tgsi.html#opcode-TXQ is not
only about levels.
As for testing this patch:
LIBGL_ALWAYS_SOFTWARE=y GALLIUM_DRIVER=virpipe ./piglit run -v -t
texturesize tests/all results/all
pass: 134, fail: 33
After this patch, they all pass.
--
Marc-André Lureau
More information about the virglrenderer-devel
mailing list