diff options
author | Marek Olšák <marek.olsak@amd.com> | 2016-05-31 12:03:32 +0200 |
---|---|---|
committer | Marek Olšák <marek.olsak@amd.com> | 2016-05-31 16:48:53 +0200 |
commit | 921ab0028e7ed90c4eeef3a2f674291450f39874 (patch) | |
tree | 86e2f1ce59a2bc241035dd5a687f63fe0b177557 | |
parent | 8a10192b4b2435577bde1227c06166029b581398 (diff) |
gallium/u_blitter: do GL-compliant integer resolves
The GL spec has been clarified and the new rule says we should just
copy 1 sample.
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
-rw-r--r-- | src/gallium/auxiliary/util/u_blitter.c | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 2a44d6b71c..ad645ad39e 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -100,8 +100,6 @@ struct blitter_context_priv /* FS which outputs an average of all samples. */ void *fs_resolve[PIPE_MAX_TEXTURE_TYPES][NUM_RESOLVE_FRAG_SHADERS][2]; - void *fs_resolve_sint[PIPE_MAX_TEXTURE_TYPES][NUM_RESOLVE_FRAG_SHADERS][2]; - void *fs_resolve_uint[PIPE_MAX_TEXTURE_TYPES][NUM_RESOLVE_FRAG_SHADERS][2]; /* Blend state. */ void *blend[PIPE_MASK_RGBA+1][2]; /**< blend state with writemask */ @@ -487,16 +485,6 @@ void util_blitter_destroy(struct blitter_context *blitter) for (f = 0; f < 2; f++) if (ctx->fs_resolve[i][j][f]) ctx->delete_fs_state(pipe, ctx->fs_resolve[i][j][f]); - - for (j = 0; j< ARRAY_SIZE(ctx->fs_resolve_sint[i]); j++) - for (f = 0; f < 2; f++) - if (ctx->fs_resolve_sint[i][j][f]) - ctx->delete_fs_state(pipe, ctx->fs_resolve_sint[i][j][f]); - - for (j = 0; j< ARRAY_SIZE(ctx->fs_resolve_uint[i]); j++) - for (f = 0; f < 2; f++) - if (ctx->fs_resolve_uint[i][j][f]) - ctx->delete_fs_state(pipe, ctx->fs_resolve_uint[i][j][f]); } if (ctx->fs_empty) @@ -891,18 +879,18 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx, if (src_nr_samples > 1) { void **shader; - if (dst_nr_samples <= 1) { + /* OpenGL requires that integer textures just copy 1 sample instead + * of averaging. + */ + if (dst_nr_samples <= 1 && + stype != TGSI_RETURN_TYPE_UINT && + stype != TGSI_RETURN_TYPE_SINT) { /* The destination has one sample, so we'll do color resolve. */ unsigned index = GET_MSAA_RESOLVE_FS_IDX(src_nr_samples); assert(filter < 2); - if (stype == TGSI_RETURN_TYPE_UINT) - shader = &ctx->fs_resolve_uint[target][index][filter]; - else if (stype == TGSI_RETURN_TYPE_SINT) - shader = &ctx->fs_resolve_sint[target][index][filter]; - else - shader = &ctx->fs_resolve[target][index][filter]; + shader = &ctx->fs_resolve[target][index][filter]; if (!*shader) { assert(!ctx->cached_all_shaders); |