mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-07 08:00:36 +01:00
r600: clamp to max_texel_buffer_elements
This change is inspired by the following updates:74a172a448("radeonsi: fix glTexBuffer max size handling") and86cce0e677("panfrost: clamp buffer-size to max-size"). The value of max_texel_buffer_elements is updated as well and synchronized with radeonsi. The previous value was too high. Note: the clamp is done on rv770 and cypress and the tests are failing. This seems to be related to resinfo (textureSize()) which is not working properly on these gpus. This change was also tested on barts and cayman. Here are the tests fixed: spec/arb_texture_buffer_object/texture-buffer-size-clamp/r8ui_texture_buffer_size_via_image: fail pass spec/arb_texture_buffer_object/texture-buffer-size-clamp/r8ui_texture_buffer_size_via_sampler: fail pass spec/arb_texture_buffer_object/texture-buffer-size-clamp/rg8ui_texture_buffer_size_via_image: skip pass spec/arb_texture_buffer_object/texture-buffer-size-clamp/rg8ui_texture_buffer_size_via_sampler: skip pass Signed-off-by: Patrick Lerda <patrick9876@free.fr> Reviewed-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35159>
This commit is contained in:
parent
1d03751801
commit
1a441ad5cb
3 changed files with 17 additions and 5 deletions
|
|
@ -702,7 +702,9 @@ texture_buffer_sampler_view(struct r600_context *rctx,
|
|||
|
||||
params.pipe_format = view->base.format;
|
||||
params.offset = view->base.u.buf.offset;
|
||||
params.size = view->base.u.buf.size;
|
||||
params.size = MIN2(util_format_get_blocksize(view->base.format) *
|
||||
rctx->screen->b.b.caps.max_texel_buffer_elements,
|
||||
view->base.u.buf.size);
|
||||
params.swizzle[0] = view->base.swizzle_r;
|
||||
params.swizzle[1] = view->base.swizzle_g;
|
||||
params.swizzle[2] = view->base.swizzle_b;
|
||||
|
|
@ -4482,6 +4484,9 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
|
|||
istate->compressed_colortex_mask |= 1 << i;
|
||||
else
|
||||
istate->compressed_colortex_mask &= ~(1 << i);
|
||||
|
||||
unsigned buffer_size = iview->u.buf.size;
|
||||
|
||||
if (!is_buffer) {
|
||||
|
||||
evergreen_set_color_surface_common(rctx, rtex,
|
||||
|
|
@ -4493,12 +4498,16 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
|
|||
color.dim = S_028C78_WIDTH_MAX(u_minify(image->width0, iview->u.tex.level) - 1) |
|
||||
S_028C78_HEIGHT_MAX(u_minify(image->height0, iview->u.tex.level) - 1);
|
||||
} else {
|
||||
buffer_size = MIN2(util_format_get_blocksize(iview->format) *
|
||||
rctx->screen->b.b.caps.max_texel_buffer_elements,
|
||||
buffer_size);
|
||||
|
||||
color.offset = 0;
|
||||
color.view = 0;
|
||||
evergreen_set_color_surface_buffer(rctx, resource,
|
||||
iview->format,
|
||||
iview->u.buf.offset,
|
||||
iview->u.buf.size,
|
||||
buffer_size,
|
||||
&color);
|
||||
}
|
||||
|
||||
|
|
@ -4564,7 +4573,7 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
|
|||
} else {
|
||||
memset(&buf_params, 0, sizeof(buf_params));
|
||||
buf_params.pipe_format = iview->format;
|
||||
buf_params.size = iview->u.buf.size;
|
||||
buf_params.size = buffer_size;
|
||||
buf_params.offset = iview->u.buf.offset;
|
||||
buf_params.swizzle[0] = PIPE_SWIZZLE_X;
|
||||
buf_params.swizzle[1] = PIPE_SWIZZLE_Y;
|
||||
|
|
|
|||
|
|
@ -473,7 +473,7 @@ static void r600_init_screen_caps(struct r600_screen *rscreen)
|
|||
caps->fake_sw_msaa = false;
|
||||
|
||||
caps->max_texel_buffer_elements =
|
||||
MIN2(rscreen->b.info.max_heap_size_kb * 1024ull / 4, INT_MAX);
|
||||
MIN2(rscreen->b.info.max_heap_size_kb * 1024ull / 4, UINT32_MAX / 16);
|
||||
|
||||
caps->min_map_buffer_alignment = R600_MAP_BUFFER_ALIGNMENT;
|
||||
|
||||
|
|
|
|||
|
|
@ -618,11 +618,14 @@ static struct pipe_sampler_view *
|
|||
texture_buffer_sampler_view(struct pipe_context *ctx,
|
||||
struct r600_pipe_sampler_view *view)
|
||||
{
|
||||
struct r600_context *rctx = (struct r600_context *)ctx;
|
||||
struct r600_texture *tmp = (struct r600_texture*)view->base.texture;
|
||||
const unsigned stride = util_format_get_blocksize(view->base.format);
|
||||
unsigned format, num_format, format_comp, endian;
|
||||
uint64_t offset = view->base.u.buf.offset;
|
||||
unsigned size = view->base.u.buf.size;
|
||||
const unsigned size = MIN2(stride *
|
||||
rctx->screen->b.b.caps.max_texel_buffer_elements,
|
||||
view->base.u.buf.size);
|
||||
|
||||
r600_vertex_data_type(view->base.format,
|
||||
&format, &num_format, &format_comp,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue