zink: fix null buffer/surface formats
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Tue, 26 Apr 2022 15:07:23 +0000 (11:07 -0400)
committerMarge Bot <emma+marge@anholt.net>
Tue, 10 May 2022 06:18:26 +0000 (06:18 +0000)
4-component formats are needed here in order to return the correct
alpha value in invalid load scenarios

cc: mesa-stable

fixes:
spec@arb_shader_image_load_store@invalid

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16167>

src/gallium/drivers/zink/ci/zink-lvp-fails.txt
src/gallium/drivers/zink/zink_context.c
src/gallium/drivers/zink/zink_surface.c

index 0f83c78..5f8fa81 100644 (file)
@@ -343,9 +343,6 @@ spec@arb_shader_image_load_store@early-z@occlusion query test/early-z pass,Fail
 spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-load,Crash
 spec@arb_shader_image_load_store@execution@image-array-out-of-bounds-access-store,Crash
 
-spec@arb_shader_image_load_store@invalid,Fail
-spec@arb_shader_image_load_store@invalid@imageLoad/incompatible format test/imageBuffer,Fail
-
 spec@arb_tessellation_shader@execution@tcs-tes-levels-out-of-bounds-read,Crash
 spec@arb_tessellation_shader@execution@tcs-tes-levels-out-of-bounds-write,Crash
 
@@ -354,7 +351,6 @@ spec@khr_texture_compression_astc@array-gles@12x12 Block Dim,Fail
 spec@khr_texture_compression_astc@array-gles@5x5 Block Dim,Fail
 spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3,Fail
 spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageLoad,Fail
-spec@oes_egl_image_external_essl3@oes_egl_image_external_essl3@oes_egl_image_external_essl3_imageStore,Fail
 
 
 #literally no driver can pass these
index 1364a77..0e1fd2a 100644 (file)
@@ -2034,7 +2034,7 @@ get_render_pass(struct zink_context *ctx)
                state.msaa_expand_mask |= BITFIELD_BIT(i);
          }
       } else {
-         state.rts[i].format = VK_FORMAT_R8_UINT;
+         state.rts[i].format = VK_FORMAT_R8G8B8A8_UNORM;
          state.rts[i].samples = fb->samples;
       }
       state.num_rts++;
@@ -4321,7 +4321,7 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
    if (!ctx->render_pass_cache)
       goto fail;
 
-   const uint8_t data[] = {0};
+   const uint32_t data[] = {0};
    ctx->dummy_vertex_buffer = pipe_buffer_create(&screen->base,
       PIPE_BIND_VERTEX_BUFFER | PIPE_BIND_SHADER_IMAGE, PIPE_USAGE_IMMUTABLE, sizeof(data));
    if (!ctx->dummy_vertex_buffer)
@@ -4337,7 +4337,7 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
       if (!ctx->dummy_surface[i])
          goto fail;
    }
-   VkBufferViewCreateInfo bvci = create_bvci(ctx, zink_resource(ctx->dummy_vertex_buffer), PIPE_FORMAT_R8_UNORM, 0, sizeof(data));
+   VkBufferViewCreateInfo bvci = create_bvci(ctx, zink_resource(ctx->dummy_vertex_buffer), PIPE_FORMAT_R8G8B8A8_UNORM, 0, sizeof(data));
    ctx->dummy_bufferview = get_buffer_view(ctx, zink_resource(ctx->dummy_vertex_buffer), &bvci);
    if (!ctx->dummy_bufferview)
       goto fail;
index daddb0c..c7491dc 100644 (file)
@@ -394,7 +394,7 @@ zink_surface_create_null(struct zink_context *ctx, enum pipe_texture_target targ
    templ.width0 = width;
    templ.height0 = height;
    templ.depth0 = 1;
-   templ.format = PIPE_FORMAT_R8_UINT;
+   templ.format = PIPE_FORMAT_R8G8B8A8_UNORM;
    templ.target = target;
    templ.bind = PIPE_BIND_RENDER_TARGET;
    templ.nr_samples = samples;
@@ -403,7 +403,7 @@ zink_surface_create_null(struct zink_context *ctx, enum pipe_texture_target targ
    if (!pres)
       return NULL;
 
-   surf_templ.format = PIPE_FORMAT_R8_UINT;
+   surf_templ.format = PIPE_FORMAT_R8G8B8A8_UNORM;
    surf_templ.nr_samples = 0;
    struct pipe_surface *psurf = ctx->base.create_surface(&ctx->base, pres, &surf_templ);
    pipe_resource_reference(&pres, NULL);