diff options
author | Kristian H. Kristensen <[email protected]> | 2018-11-05 21:22:44 -0800 |
---|---|---|
committer | Kristian H. Kristensen <[email protected]> | 2018-12-06 16:55:46 -0800 |
commit | 14ea811c67357f319c9c72a608c2d555f7a3ec34 (patch) | |
tree | 5897382a5304ea0d112ab5654ad07f70ec674bb3 | |
parent | 2710c40e3c817e269fde6fd3bb2727e0ee8d3598 (diff) |
st/mesa: Add support for EXT_multisampled_render_to_texture
In gallium, we model the attachment sample count as a new nr_samples
field in pipe_surface. A driver can indicate support for the extension
using the new pipe cap, PIPE_CAP_MULTISAMPLED_RENDER_TO_TEXTURE.
Reviewed-by: Eric Anholt <[email protected]>
Signed-off-by: Kristian H. Kristensen <[email protected]>
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_fbo.h | 1 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_extensions.c | 1 |
3 files changed, 5 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 0e535257cb4..8901a8680ef 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -516,6 +516,7 @@ st_update_renderbuffer_surface(struct st_context *st, surf->texture != resource || surf->width != rtt_width || surf->height != rtt_height || + surf->nr_samples != strb->rtt_nr_samples || surf->u.tex.level != level || surf->u.tex.first_layer != first_layer || surf->u.tex.last_layer != last_layer) { @@ -523,6 +524,7 @@ st_update_renderbuffer_surface(struct st_context *st, struct pipe_surface surf_tmpl; memset(&surf_tmpl, 0, sizeof(surf_tmpl)); surf_tmpl.format = format; + surf_tmpl.nr_samples = strb->rtt_nr_samples; surf_tmpl.u.tex.level = level; surf_tmpl.u.tex.first_layer = first_layer; surf_tmpl.u.tex.last_layer = last_layer; @@ -572,6 +574,7 @@ st_render_texture(struct gl_context *ctx, strb->rtt_face = att->CubeMapFace; strb->rtt_slice = att->Zoffset; strb->rtt_layered = att->Layered; + strb->rtt_nr_samples = att->NumSamples; pipe_resource_reference(&strb->texture, pt); st_update_renderbuffer_surface(st, strb); diff --git a/src/mesa/state_tracker/st_cb_fbo.h b/src/mesa/state_tracker/st_cb_fbo.h index 345c11442c6..046f01713ce 100644 --- a/src/mesa/state_tracker/st_cb_fbo.h +++ b/src/mesa/state_tracker/st_cb_fbo.h @@ -69,6 +69,7 @@ struct st_renderbuffer boolean is_rtt; /**< whether Driver.RenderTexture was called */ unsigned rtt_face, rtt_slice; boolean rtt_layered; /**< whether glFramebufferTexture was called */ + unsigned rtt_nr_samples; /**< from FramebufferTexture2DMultisampleEXT */ }; diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index 002866d4cdb..081c97f9610 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -740,6 +740,7 @@ void st_init_extensions(struct pipe_screen *screen, { o(EXT_draw_buffers2), PIPE_CAP_INDEP_BLEND_ENABLE }, { o(EXT_memory_object), PIPE_CAP_MEMOBJ }, { o(EXT_memory_object_fd), PIPE_CAP_MEMOBJ }, + { o(EXT_multisampled_render_to_texture), PIPE_CAP_SURFACE_SAMPLE_COUNT }, { o(EXT_semaphore), PIPE_CAP_FENCE_SIGNAL }, { o(EXT_semaphore_fd), PIPE_CAP_FENCE_SIGNAL }, { o(EXT_texture_array), PIPE_CAP_MAX_TEXTURE_ARRAY_LAYERS }, |