freedreno: Add support for EXT_multisampled_render_to_texture
There is not much to do in freedreno - tile layout and multisample state for gmem renderings is programmed based on the pfb sample count, while resolve blits take the destination sample count from the resource. Reviewed-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Kristian H. Kristensen <hoegsberg@chromium.org>
This commit is contained in:
parent
913eb7fa58
commit
3e55df4f83
|
@ -81,7 +81,8 @@ struct key {
|
||||||
struct {
|
struct {
|
||||||
struct pipe_resource *texture;
|
struct pipe_resource *texture;
|
||||||
union pipe_surface_desc u;
|
union pipe_surface_desc u;
|
||||||
uint16_t pos, format;
|
uint8_t pos, samples;
|
||||||
|
uint16_t format;
|
||||||
} surf[0];
|
} surf[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -401,6 +402,7 @@ key_surf(struct key *key, unsigned idx, unsigned pos, struct pipe_surface *psurf
|
||||||
key->surf[idx].texture = psurf->texture;
|
key->surf[idx].texture = psurf->texture;
|
||||||
key->surf[idx].u = psurf->u;
|
key->surf[idx].u = psurf->u;
|
||||||
key->surf[idx].pos = pos;
|
key->surf[idx].pos = pos;
|
||||||
|
key->surf[idx].samples = psurf->nr_samples;
|
||||||
key->surf[idx].format = psurf->format;
|
key->surf[idx].format = psurf->format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -225,6 +225,9 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
||||||
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
case PIPE_CAP_TEXTURE_MULTISAMPLE:
|
||||||
return is_a5xx(screen) || is_a6xx(screen);
|
return is_a5xx(screen) || is_a6xx(screen);
|
||||||
|
|
||||||
|
case PIPE_CAP_SURFACE_SAMPLE_COUNT:
|
||||||
|
return is_a6xx(screen);
|
||||||
|
|
||||||
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
case PIPE_CAP_DEPTH_CLIP_DISABLE:
|
||||||
return is_a3xx(screen) || is_a4xx(screen);
|
return is_a3xx(screen) || is_a4xx(screen);
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,7 @@ fd_create_surface(struct pipe_context *pctx,
|
||||||
psurf->format = surf_tmpl->format;
|
psurf->format = surf_tmpl->format;
|
||||||
psurf->width = u_minify(ptex->width0, level);
|
psurf->width = u_minify(ptex->width0, level);
|
||||||
psurf->height = u_minify(ptex->height0, level);
|
psurf->height = u_minify(ptex->height0, level);
|
||||||
|
psurf->nr_samples = surf_tmpl->nr_samples;
|
||||||
|
|
||||||
if (ptex->target == PIPE_BUFFER) {
|
if (ptex->target == PIPE_BUFFER) {
|
||||||
psurf->u.buf.first_element = surf_tmpl->u.buf.first_element;
|
psurf->u.buf.first_element = surf_tmpl->u.buf.first_element;
|
||||||
|
|
Loading…
Reference in New Issue