mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 21:50:12 +01:00
vl/idct: fix for commit 7d2f2a0c89
We still need the option for handling 3D textures as well. Should fix: https://bugs.freedesktop.org/show_bug.cgi?id=64143 Signed-off-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
379753869d
commit
85b0880a17
5 changed files with 27 additions and 22 deletions
|
|
@ -902,7 +902,7 @@ init_idct(struct vl_mpeg12_decoder *dec, const struct format_config* format_conf
|
|||
dec->idct_source = vl_video_buffer_create_ex
|
||||
(
|
||||
dec->base.context, &templat,
|
||||
formats, 1, PIPE_USAGE_STATIC
|
||||
formats, 1, 1, PIPE_USAGE_STATIC
|
||||
);
|
||||
|
||||
if (!dec->idct_source)
|
||||
|
|
@ -916,7 +916,7 @@ init_idct(struct vl_mpeg12_decoder *dec, const struct format_config* format_conf
|
|||
dec->mc_source = vl_video_buffer_create_ex
|
||||
(
|
||||
dec->base.context, &templat,
|
||||
formats, nr_of_idct_render_targets, PIPE_USAGE_STATIC
|
||||
formats, nr_of_idct_render_targets, 1, PIPE_USAGE_STATIC
|
||||
);
|
||||
|
||||
if (!dec->mc_source)
|
||||
|
|
@ -967,7 +967,7 @@ init_mc_source_widthout_idct(struct vl_mpeg12_decoder *dec, const struct format_
|
|||
dec->mc_source = vl_video_buffer_create_ex
|
||||
(
|
||||
dec->base.context, &templat,
|
||||
formats, 1, PIPE_USAGE_STATIC
|
||||
formats, 1, 1, PIPE_USAGE_STATIC
|
||||
);
|
||||
|
||||
return dec->mc_source != NULL;
|
||||
|
|
|
|||
|
|
@ -216,15 +216,20 @@ void
|
|||
vl_video_buffer_template(struct pipe_resource *templ,
|
||||
const struct pipe_video_buffer *tmpl,
|
||||
enum pipe_format resource_format,
|
||||
unsigned array_size, unsigned usage,
|
||||
unsigned plane)
|
||||
unsigned depth, unsigned array_size,
|
||||
unsigned usage, unsigned plane)
|
||||
{
|
||||
memset(templ, 0, sizeof(*templ));
|
||||
templ->target = array_size > 1 ? PIPE_TEXTURE_2D_ARRAY : PIPE_TEXTURE_2D;
|
||||
if (depth > 1)
|
||||
templ->target = PIPE_TEXTURE_3D;
|
||||
else if (array_size > 1)
|
||||
templ->target = PIPE_TEXTURE_2D_ARRAY;
|
||||
else
|
||||
templ->target = PIPE_TEXTURE_2D;
|
||||
templ->format = resource_format;
|
||||
templ->width0 = tmpl->width;
|
||||
templ->height0 = tmpl->height;
|
||||
templ->depth0 = 1;
|
||||
templ->depth0 = depth;
|
||||
templ->array_size = array_size;
|
||||
templ->bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_RENDER_TARGET;
|
||||
templ->usage = usage;
|
||||
|
|
@ -420,7 +425,7 @@ vl_video_buffer_create(struct pipe_context *pipe,
|
|||
result = vl_video_buffer_create_ex
|
||||
(
|
||||
pipe, &templat, resource_formats,
|
||||
tmpl->interlaced ? 2 : 1, PIPE_USAGE_STATIC
|
||||
1, tmpl->interlaced ? 2 : 1, PIPE_USAGE_STATIC
|
||||
);
|
||||
|
||||
|
||||
|
|
@ -434,7 +439,7 @@ struct pipe_video_buffer *
|
|||
vl_video_buffer_create_ex(struct pipe_context *pipe,
|
||||
const struct pipe_video_buffer *tmpl,
|
||||
const enum pipe_format resource_formats[VL_NUM_COMPONENTS],
|
||||
unsigned array_size, unsigned usage)
|
||||
unsigned depth, unsigned array_size, unsigned usage)
|
||||
{
|
||||
struct pipe_resource res_tmpl;
|
||||
struct pipe_resource *resources[VL_NUM_COMPONENTS];
|
||||
|
|
@ -444,7 +449,7 @@ vl_video_buffer_create_ex(struct pipe_context *pipe,
|
|||
|
||||
memset(resources, 0, sizeof resources);
|
||||
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[0], array_size, usage, 0);
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[0], depth, array_size, usage, 0);
|
||||
resources[0] = pipe->screen->resource_create(pipe->screen, &res_tmpl);
|
||||
if (!resources[0])
|
||||
goto error;
|
||||
|
|
@ -454,7 +459,7 @@ vl_video_buffer_create_ex(struct pipe_context *pipe,
|
|||
return vl_video_buffer_create_ex2(pipe, tmpl, resources);
|
||||
}
|
||||
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[1], array_size, usage, 1);
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[1], depth, array_size, usage, 1);
|
||||
resources[1] = pipe->screen->resource_create(pipe->screen, &res_tmpl);
|
||||
if (!resources[1])
|
||||
goto error;
|
||||
|
|
@ -462,7 +467,7 @@ vl_video_buffer_create_ex(struct pipe_context *pipe,
|
|||
if (resource_formats[2] == PIPE_FORMAT_NONE)
|
||||
return vl_video_buffer_create_ex2(pipe, tmpl, resources);
|
||||
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[2], array_size, usage, 2);
|
||||
vl_video_buffer_template(&res_tmpl, tmpl, resource_formats[2], depth, array_size, usage, 2);
|
||||
resources[2] = pipe->screen->resource_create(pipe->screen, &res_tmpl);
|
||||
if (!resources[2])
|
||||
goto error;
|
||||
|
|
|
|||
|
|
@ -98,8 +98,8 @@ void
|
|||
vl_video_buffer_template(struct pipe_resource *templ,
|
||||
const struct pipe_video_buffer *templat,
|
||||
enum pipe_format resource_format,
|
||||
unsigned array_size, unsigned usage,
|
||||
unsigned plane);
|
||||
unsigned depth, unsigned array_size,
|
||||
unsigned usage, unsigned plane);
|
||||
|
||||
/**
|
||||
* creates a video buffer, can be used as a standard implementation for pipe->create_video_buffer
|
||||
|
|
@ -109,13 +109,13 @@ vl_video_buffer_create(struct pipe_context *pipe,
|
|||
const struct pipe_video_buffer *templat);
|
||||
|
||||
/**
|
||||
* extended create function, gets array_size, usage and formats for each plane seperately
|
||||
* extended create function, gets depth, array_size, usage and formats for each plane seperately
|
||||
*/
|
||||
struct pipe_video_buffer *
|
||||
vl_video_buffer_create_ex(struct pipe_context *pipe,
|
||||
const struct pipe_video_buffer *templat,
|
||||
const enum pipe_format resource_formats[VL_NUM_COMPONENTS],
|
||||
unsigned array_size, unsigned usage);
|
||||
unsigned depth, unsigned array_size, unsigned usage);
|
||||
|
||||
/**
|
||||
* even more extended create function, provide the pipe_resource for each plane
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe,
|
|||
template.width = align(tmpl->width, VL_MACROBLOCK_WIDTH);
|
||||
template.height = align(tmpl->height / array_size, VL_MACROBLOCK_HEIGHT);
|
||||
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[0], array_size, PIPE_USAGE_STATIC, 0);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[0], 1, array_size, PIPE_USAGE_STATIC, 0);
|
||||
if (ctx->chip_class < EVERGREEN)
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[0] = (struct r600_texture *)
|
||||
|
|
@ -84,7 +84,7 @@ struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe,
|
|||
goto error;
|
||||
|
||||
if (resource_formats[1] != PIPE_FORMAT_NONE) {
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[1], array_size, PIPE_USAGE_STATIC, 1);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[1], 1, array_size, PIPE_USAGE_STATIC, 1);
|
||||
if (ctx->chip_class < EVERGREEN)
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[1] = (struct r600_texture *)
|
||||
|
|
@ -94,7 +94,7 @@ struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe,
|
|||
}
|
||||
|
||||
if (resource_formats[2] != PIPE_FORMAT_NONE) {
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[2], array_size, PIPE_USAGE_STATIC, 2);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[2], 1, array_size, PIPE_USAGE_STATIC, 2);
|
||||
if (ctx->chip_class < EVERGREEN)
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[2] = (struct r600_texture *)
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ struct pipe_video_buffer *radeonsi_video_buffer_create(struct pipe_context *pipe
|
|||
template.width = align(tmpl->width, VL_MACROBLOCK_WIDTH);
|
||||
template.height = align(tmpl->height / array_size, VL_MACROBLOCK_HEIGHT);
|
||||
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[0], array_size, PIPE_USAGE_STATIC, 0);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[0], 1, array_size, PIPE_USAGE_STATIC, 0);
|
||||
/* TODO: Setting the transfer flag is only a workaround till we get tiling working */
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[0] = (struct r600_resource_texture *)
|
||||
|
|
@ -84,7 +84,7 @@ struct pipe_video_buffer *radeonsi_video_buffer_create(struct pipe_context *pipe
|
|||
goto error;
|
||||
|
||||
if (resource_formats[1] != PIPE_FORMAT_NONE) {
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[1], array_size, PIPE_USAGE_STATIC, 1);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[1], 1, array_size, PIPE_USAGE_STATIC, 1);
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[1] = (struct r600_resource_texture *)
|
||||
pipe->screen->resource_create(pipe->screen, &templ);
|
||||
|
|
@ -93,7 +93,7 @@ struct pipe_video_buffer *radeonsi_video_buffer_create(struct pipe_context *pipe
|
|||
}
|
||||
|
||||
if (resource_formats[2] != PIPE_FORMAT_NONE) {
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[2], array_size, PIPE_USAGE_STATIC, 2);
|
||||
vl_video_buffer_template(&templ, &template, resource_formats[2], 1, array_size, PIPE_USAGE_STATIC, 2);
|
||||
templ.flags = R600_RESOURCE_FLAG_TRANSFER;
|
||||
resources[2] = (struct r600_resource_texture *)
|
||||
pipe->screen->resource_create(pipe->screen, &templ);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue