From dc293ffe5076c11464e4620cbfe992034bb98107 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Tue, 12 Nov 2024 16:59:36 +0100 Subject: [PATCH] radeonsi: fallback to util_blitter_draw_rectangle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The blitter VS expects coords to fit in a signed int16. When this is not the case, use util_blitter_draw_rectangle instead. Since util_blitter_draw_rectangle sets vertex elements, we need to make sure they're properly restored. The alternative to this fallback would be to pass coordinates unpacked (so 4 SGPRs instead of 2), but this doesn't fix the fbo-blit-check-limits test because of uv interpolation precision issue. Using 2 triangles instead of a rectangle + disabling window_space_position helps but then this breaks some GLES3 tests, like dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag_reverse_src_x (which doesn't pass either if u_blitter is used for all cases). Using a single triangle covering the whole rectangles fixes all cases but it then requires to setup scissors to not write too much pixels... So, instead of adding so much complexity, let's use u_blitter for the "large coordinates" fallback, and keep the rectangle blit for the other cases. Reviewed-by: Marek Olšák Part-of: --- src/amd/ci/radeonsi-raven-fails.txt | 1 - src/amd/ci/radeonsi-stoney-fails.txt | 1 - src/amd/ci/radeonsi-vangogh-fails.txt | 1 - src/gallium/drivers/radeonsi/ci/gfx10-navi10-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx10_3-navi21-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx11-navi31-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx7-hawaii-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx8-polaris11-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx9-raven-fail.csv | 1 - src/gallium/drivers/radeonsi/ci/gfx9-vega20-fail.csv | 1 - src/gallium/drivers/radeonsi/si_state_draw.cpp | 9 +++++++++ 11 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/amd/ci/radeonsi-raven-fails.txt b/src/amd/ci/radeonsi-raven-fails.txt index 3478c157dad..0ea9112f6f8 100644 --- a/src/amd/ci/radeonsi-raven-fails.txt +++ b/src/amd/ci/radeonsi-raven-fails.txt @@ -21,7 +21,6 @@ spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_khr_surfaceless_context@viewport,Fail spec@egl_mesa_configless_context@basic,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y210,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y212,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y216,Fail diff --git a/src/amd/ci/radeonsi-stoney-fails.txt b/src/amd/ci/radeonsi-stoney-fails.txt index cb8b28cf0df..e9e5238e19c 100644 --- a/src/amd/ci/radeonsi-stoney-fails.txt +++ b/src/amd/ci/radeonsi-stoney-fails.txt @@ -75,7 +75,6 @@ spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_khr_surfaceless_context@viewport,Fail spec@egl_mesa_configless_context@basic,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y210,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y212,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y216,Fail diff --git a/src/amd/ci/radeonsi-vangogh-fails.txt b/src/amd/ci/radeonsi-vangogh-fails.txt index 9062658ee81..38b4abef2d6 100644 --- a/src/amd/ci/radeonsi-vangogh-fails.txt +++ b/src/amd/ci/radeonsi-vangogh-fails.txt @@ -32,7 +32,6 @@ spec@arb_tessellation_shader@arb_tessellation_shader-tes-gs-max-output -small -s spec@arb_viewport_array@display-list,Fail spec@egl 1.4@eglterminate then unbind context,Fail spec@egl_khr_surfaceless_context@viewport,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@glsl-es-3.00@execution@built-in-functions@fs-packhalf2x16,Fail spec@glsl-es-3.00@execution@built-in-functions@vs-packhalf2x16,Fail spec@khr_texture_compression_astc@miptree-gles srgb-fp,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx10-navi10-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx10-navi10-fail.csv index c147c9961b4..052f73e56e5 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx10-navi10-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx10-navi10-fail.csv @@ -18,7 +18,6 @@ spec@arb_shading_language_packing@execution@built-in-functions@fs-packhalf2x16,F spec@arb_shading_language_packing@execution@built-in-functions@vs-packhalf2x16,Fail spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@glsl-1.20@compiler@invalid-vec4-array-to-vec3-array-conversion.vert,Fail spec@glsl-es-3.00@execution@built-in-functions@fs-packhalf2x16,Fail spec@glsl-es-3.00@execution@built-in-functions@vs-packhalf2x16,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx10_3-navi21-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx10_3-navi21-fail.csv index 8b6fea360af..94a702f8cf3 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx10_3-navi21-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx10_3-navi21-fail.csv @@ -17,7 +17,6 @@ spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shading_language_packing@execution@built-in-functions@fs-packhalf2x16,Fail spec@arb_shading_language_packing@execution@built-in-functions@vs-packhalf2x16,Fail spec@arb_texture_multisample@sample-position@8,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@glsl-1.20@compiler@invalid-vec4-array-to-vec3-array-conversion.vert,Fail spec@glsl-es-3.00@execution@built-in-functions@fs-packhalf2x16,Fail spec@glsl-es-3.00@execution@built-in-functions@vs-packhalf2x16,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx11-navi31-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx11-navi31-fail.csv index 3bac257ca4f..55a9092936a 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx11-navi31-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx11-navi31-fail.csv @@ -19,7 +19,6 @@ spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shading_language_packing@execution@built-in-functions@fs-packhalf2x16,Fail spec@arb_shading_language_packing@execution@built-in-functions@vs-packhalf2x16,Fail spec@egl 1.4@egl-ext_egl_image_storage,Crash -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@glsl-1.20@compiler@invalid-vec4-array-to-vec3-array-conversion.vert,Fail spec@glsl-es-3.00@execution@built-in-functions@fs-packhalf2x16,Fail spec@glsl-es-3.00@execution@built-in-functions@vs-packhalf2x16,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx7-hawaii-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx7-hawaii-fail.csv index fa0ce438361..1db2a97380d 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx7-hawaii-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx7-hawaii-fail.csv @@ -84,7 +84,6 @@ spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8I- swizzled- spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8UI- swizzled- border color only,Fail spec@arb_texture_rgb10_a2ui@texwrap formats bordercolor-swizzled,Fail spec@arb_texture_rgb10_a2ui@texwrap formats bordercolor-swizzled@GL_RGB10_A2UI- swizzled- border color only,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y210,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y212,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y216,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx8-polaris11-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx8-polaris11-fail.csv index 3f371130d88..5391a45b3b4 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx8-polaris11-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx8-polaris11-fail.csv @@ -74,7 +74,6 @@ spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8I- swizzled- spec@arb_texture_rg@texwrap formats-int bordercolor-swizzled@GL_RG8UI- swizzled- border color only,Fail spec@arb_texture_rgb10_a2ui@texwrap formats bordercolor-swizzled,Fail spec@arb_texture_rgb10_a2ui@texwrap formats bordercolor-swizzled@GL_RGB10_A2UI- swizzled- border color only,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@ext_framebuffer_multisample@accuracy 8 stencil_draw small depthstencil,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y210,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y212,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx9-raven-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx9-raven-fail.csv index f351149443d..86adb5b3a04 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx9-raven-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx9-raven-fail.csv @@ -25,7 +25,6 @@ spec@arb_shading_language_packing@execution@built-in-functions@vs-packhalf2x16,F spec@egl_chromium_sync_control@conformance,Fail spec@egl_chromium_sync_control@conformance@eglGetSyncValuesCHROMIUM_msc_and_sbc_test,Fail spec@egl_ext_protected_content@conformance,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@glsl-1.20@compiler@invalid-vec4-array-to-vec3-array-conversion.vert,Fail spec@glsl-1.50@execution@geometry@tri-strip-ordering-with-prim-restart gl_triangle_strip_adjacency ffs,Fail spec@glsl-1.50@execution@geometry@tri-strip-ordering-with-prim-restart gl_triangle_strip_adjacency other,Fail diff --git a/src/gallium/drivers/radeonsi/ci/gfx9-vega20-fail.csv b/src/gallium/drivers/radeonsi/ci/gfx9-vega20-fail.csv index daec9c9f5d0..eaea48fe595 100644 --- a/src/gallium/drivers/radeonsi/ci/gfx9-vega20-fail.csv +++ b/src/gallium/drivers/radeonsi/ci/gfx9-vega20-fail.csv @@ -33,7 +33,6 @@ spec@arb_shader_texture_lod@execution@arb_shader_texture_lod-texgradcube,Fail spec@arb_shading_language_packing@execution@built-in-functions@fs-packhalf2x16,Fail spec@arb_shading_language_packing@execution@built-in-functions@vs-packhalf2x16,Fail spec@egl_ext_protected_content@conformance,Fail -spec@ext_framebuffer_blit@fbo-blit-check-limits,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y210,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y212,Fail spec@ext_image_dma_buf_import@ext_image_dma_buf_import-sample_y216,Fail diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index f75089555ba..36635277009 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -2473,6 +2473,15 @@ static void si_draw_rectangle(struct blitter_context *blitter, void *vertex_elem uint32_t attribute_ring_address_lo = sctx->gfx_level >= GFX11 ? sctx->screen->attribute_pos_prim_ring->gpu_address : 0; + if (std::max(std::abs(x1), std::abs(x2)) > INT16_MAX || + std::max(std::abs(y1), std::abs(y2)) > INT16_MAX) { + /* Fallback when coordinates can't fit in int16. */ + util_blitter_save_vertex_elements(sctx->blitter, sctx->vertex_elements); + util_blitter_draw_rectangle(blitter, vertex_elements_cso, get_vs, x1, y1, x2, y2, + depth, num_instances, type, attrib); + return; + } + /* Pack position coordinates as signed int16. */ sctx->vs_blit_sh_data[0] = (uint32_t)(x1 & 0xffff) | ((uint32_t)(y1 & 0xffff) << 16); sctx->vs_blit_sh_data[1] = (uint32_t)(x2 & 0xffff) | ((uint32_t)(y2 & 0xffff) << 16);