Module: Mesa Branch: main Commit: 62044403a97cfe0c38a48ec1f1c896684f26b1c9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=62044403a97cfe0c38a48ec1f1c896684f26b1c9
Author: Mike Blumenkrantz <[email protected]> Date: Fri Jul 22 09:33:21 2022 -0400 util/blitter: respect PIPE_TEXTURE_RECT if this isn't supported, don't use rect-related sampling cc: mesa-stable Reviewed-by: Erik Faye-Lund <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17714> --- src/gallium/auxiliary/util/u_blitter.c | 27 ++++++++++++++++++-------- src/gallium/drivers/zink/ci/zink-lvp-fails.txt | 1 - 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/gallium/auxiliary/util/u_blitter.c b/src/gallium/auxiliary/util/u_blitter.c index 2627a3219e0..36e3f793124 100644 --- a/src/gallium/auxiliary/util/u_blitter.c +++ b/src/gallium/auxiliary/util/u_blitter.c @@ -151,6 +151,7 @@ struct blitter_context_priv bool has_txf; bool has_sample_shading; bool cube_as_2darray; + bool has_texrect; bool cached_all_shaders; /* The Draw module overrides these functions. @@ -219,6 +220,7 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe) PIPE_CAP_SAMPLE_SHADING); ctx->cube_as_2darray = pipe->screen->get_param(pipe->screen, PIPE_CAP_SAMPLER_VIEW_TARGET); + ctx->has_texrect = pipe->screen->get_param(pipe->screen, PIPE_CAP_TEXRECT); /* blend state objects */ memset(&blend, 0, sizeof(blend)); @@ -273,15 +275,19 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe) sampler_state.wrap_r = PIPE_TEX_WRAP_CLAMP_TO_EDGE; sampler_state.normalized_coords = 1; ctx->sampler_state = pipe->create_sampler_state(pipe, &sampler_state); - sampler_state.normalized_coords = 0; - ctx->sampler_state_rect = pipe->create_sampler_state(pipe, &sampler_state); + if (ctx->has_texrect) { + sampler_state.normalized_coords = 0; + ctx->sampler_state_rect = pipe->create_sampler_state(pipe, &sampler_state); + } sampler_state.min_img_filter = PIPE_TEX_FILTER_LINEAR; sampler_state.mag_img_filter = PIPE_TEX_FILTER_LINEAR; sampler_state.normalized_coords = 1; ctx->sampler_state_linear = pipe->create_sampler_state(pipe, &sampler_state); - sampler_state.normalized_coords = 0; - ctx->sampler_state_rect_linear = pipe->create_sampler_state(pipe, &sampler_state); + if (ctx->has_texrect) { + sampler_state.normalized_coords = 0; + ctx->sampler_state_rect_linear = pipe->create_sampler_state(pipe, &sampler_state); + } /* rasterizer state */ memset(&rs_state, 0, sizeof(rs_state)); @@ -581,8 +587,10 @@ void util_blitter_destroy(struct blitter_context *blitter) if (ctx->fs_stencil_blit_fallback[i]) ctx->delete_fs_state(pipe, ctx->fs_stencil_blit_fallback[i]); - pipe->delete_sampler_state(pipe, ctx->sampler_state_rect_linear); - pipe->delete_sampler_state(pipe, ctx->sampler_state_rect); + if (ctx->sampler_state_rect_linear) + pipe->delete_sampler_state(pipe, ctx->sampler_state_rect_linear); + if (ctx->sampler_state_rect) + pipe->delete_sampler_state(pipe, ctx->sampler_state_rect); pipe->delete_sampler_state(pipe, ctx->sampler_state_linear); pipe->delete_sampler_state(pipe, ctx->sampler_state); FREE(ctx); @@ -1278,6 +1286,9 @@ void util_blitter_cache_all_shaders(struct blitter_context *blitter) if (!has_cubearraytex && (target == PIPE_TEXTURE_CUBE_ARRAY)) continue; + if (!ctx->has_texrect && + (target == PIPE_TEXTURE_RECT)) + continue; if (samples > 1 && (target != PIPE_TEXTURE_2D && @@ -2145,13 +2156,13 @@ void util_blitter_blit_generic(struct blitter_context *blitter, /* Set the linear filter only for scaled color non-MSAA blits. */ if (filter == PIPE_TEX_FILTER_LINEAR) { - if (src_target == PIPE_TEXTURE_RECT) { + if (src_target == PIPE_TEXTURE_RECT && ctx->has_texrect) { sampler_state = ctx->sampler_state_rect_linear; } else { sampler_state = ctx->sampler_state_linear; } } else { - if (src_target == PIPE_TEXTURE_RECT) { + if (src_target == PIPE_TEXTURE_RECT && ctx->has_texrect) { sampler_state = ctx->sampler_state_rect; } else { sampler_state = ctx->sampler_state; diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index 2fde06949dd..7c6c523a753 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -5,7 +5,6 @@ spec@arb_tessellation_shader@execution@variable-indexing@tes-both-input-array-ve spec@arb_tessellation_shader@execution@variable-indexing@tes-both-input-array-vec4-index-rd,Crash # #6322 -spec@arb_framebuffer_object@fbo-attachments-blit-scaled-linear,Fail spec@arb_framebuffer_object@fbo-blit-scaled-linear,Fail
