r600/eg: fix buffer sizing.
authorDave Airlie <airlied@redhat.com>
Sun, 4 Feb 2018 20:31:48 +0000 (06:31 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 6 Feb 2018 20:08:12 +0000 (06:08 +1000)
For buffers we want the size in bytes,
For images we want it in elements.

This fixes:
KHR-GL45.shader_storage_buffer_object.advanced-unsizedArrayLength-cs-std430-vec-pad

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/evergreen_state.c

index eb8eb376c2f9b73e00c96e0ffede29969c75a95a..11e473d604f60198ffa6287e98647d93fc958818 100644 (file)
@@ -616,6 +616,7 @@ struct eg_buf_res_params {
        unsigned char swizzle[4];
        bool uncached;
        bool force_swizzle;
+       bool size_in_bytes;
 };
 
 static void evergreen_fill_buffer_resource_words(struct r600_context *rctx,
@@ -658,7 +659,7 @@ static void evergreen_fill_buffer_resource_words(struct r600_context *rctx,
         * albeit the amd gpu shader analyser
         * uses a const buffer to store the element sizes for buffer txq
         */
-       tex_resource_words[4] = params->size / stride;
+       tex_resource_words[4] = params->size_in_bytes ? params->size : (params->size / stride);
 
        tex_resource_words[5] = tex_resource_words[6] = 0;
        tex_resource_words[7] = S_03001C_TYPE(V_03001C_SQ_TEX_VTX_VALID_BUFFER);
@@ -4041,6 +4042,7 @@ static void evergreen_set_shader_buffers(struct pipe_context *ctx,
                buf_params.swizzle[3] = PIPE_SWIZZLE_W;
                buf_params.force_swizzle = true;
                buf_params.uncached = 1;
+               buf_params.size_in_bytes = true;
                evergreen_fill_buffer_resource_words(rctx, &resource->b.b,
                                                     &buf_params,
                                                     &rview->skip_mip_address_reloc,