Re: [Mesa-dev] [PATCH 3/4] st/mesa: add support for ARB_texture_multisample
On 04/06/2013 03:05 AM, Dave Airlie wrote: From: Dave Airlie airl...@redhat.com This adds support to the mesa state tracker for ARB_texture_multisample. hardware doesn't seem to use a different texture instructions, so I don't think we need to create one for TGSI at this time. Thanks to Marek for fixes to sample number picking. Reviewed-by: Marek Olšák mar...@gmail.com Signed-off-by: Dave Airlie airl...@redhat.com --- src/mesa/state_tracker/st_atom_framebuffer.c | 1 + src/mesa/state_tracker/st_atom_msaa.c| 2 ++ src/mesa/state_tracker/st_cb_bitmap.c| 4 +-- src/mesa/state_tracker/st_cb_drawpixels.c| 2 +- src/mesa/state_tracker/st_cb_fbo.c | 2 +- src/mesa/state_tracker/st_cb_texture.c | 41 src/mesa/state_tracker/st_extensions.c | 6 +++- src/mesa/state_tracker/st_gen_mipmap.c | 1 + src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 ++-- src/mesa/state_tracker/st_mesa_to_tgsi.c | 2 ++ src/mesa/state_tracker/st_texture.c | 8 +- src/mesa/state_tracker/st_texture.h | 1 + 12 files changed, 72 insertions(+), 15 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index 3df8691..c752640 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -59,6 +59,7 @@ update_renderbuffer_surface(struct st_context *st, enum pipe_format format = st-ctx-Color.sRGBEnabled ? resource-format : util_format_linear(resource-format); if (!strb-surface || + strb-surface-texture-nr_samples != strb-Base.NumSamples || strb-surface-format != format || strb-surface-texture != resource || strb-surface-width != rtt_width || diff --git a/src/mesa/state_tracker/st_atom_msaa.c b/src/mesa/state_tracker/st_atom_msaa.c index 9baa4fc..b749a17 100644 --- a/src/mesa/state_tracker/st_atom_msaa.c +++ b/src/mesa/state_tracker/st_atom_msaa.c @@ -63,6 +63,8 @@ static void update_sample_mask( struct st_context *st ) sample_mask = ~sample_mask; } /* TODO merge with app-supplied sample mask */ + if (st-ctx-Multisample.SampleMask) + sample_mask = st-ctx-Multisample.SampleMaskValue; } /* mask off unused bits or don't care? */ diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 0513814..ee66ab3 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -299,7 +299,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height, * Create texture to hold bitmap pattern. */ pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format, - 0, width, height, 1, 1, + 0, width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); if (!pt) { _mesa_unmap_pbo_source(ctx, unpack); @@ -568,7 +568,7 @@ reset_cache(struct st_context *st) cache-texture = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format, 0, BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, - 1, 1, + 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index b25b776..db2f03a 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -466,7 +466,7 @@ alloc_texture(struct st_context *st, GLsizei width, GLsizei height, struct pipe_resource *pt; pt = st_texture_create(st, st-internal_target, texFormat, 0, - width, height, 1, 1, PIPE_BIND_SAMPLER_VIEW); + width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); return pt; } diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 4452e52..127b123 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -433,7 +433,7 @@ st_render_texture(struct gl_context *ctx, strb-rtt_level = att-TextureLevel; strb-rtt_face = att-CubeMapFace; strb-rtt_slice = att-Zoffset; - + rb-NumSamples = texImage-NumSamples; rb-Width = texImage-Width2; rb-Height = texImage-Height2; rb-_BaseFormat = texImage-_BaseFormat; diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 0cd0d77..25ee352 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -78,6 +78,8 @@ gl_target_to_pipe(GLenum target) case GL_TEXTURE_2D: case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_EXTERNAL_OES: + case GL_TEXTURE_2D_MULTISAMPLE: + case GL_PROXY_TEXTURE_2D_MULTISAMPLE:
[Mesa-dev] [PATCH 3/4] st/mesa: add support for ARB_texture_multisample
From: Dave Airlie airl...@redhat.com This adds support to the mesa state tracker for ARB_texture_multisample. hardware doesn't seem to use a different texture instructions, so I don't think we need to create one for TGSI at this time. Thanks to Marek for fixes to sample number picking. Reviewed-by: Marek Olšák mar...@gmail.com Signed-off-by: Dave Airlie airl...@redhat.com --- src/mesa/state_tracker/st_atom_framebuffer.c | 1 + src/mesa/state_tracker/st_atom_msaa.c| 2 ++ src/mesa/state_tracker/st_cb_bitmap.c| 4 +-- src/mesa/state_tracker/st_cb_drawpixels.c| 2 +- src/mesa/state_tracker/st_cb_fbo.c | 2 +- src/mesa/state_tracker/st_cb_texture.c | 41 src/mesa/state_tracker/st_extensions.c | 6 +++- src/mesa/state_tracker/st_gen_mipmap.c | 1 + src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 ++-- src/mesa/state_tracker/st_mesa_to_tgsi.c | 2 ++ src/mesa/state_tracker/st_texture.c | 8 +- src/mesa/state_tracker/st_texture.h | 1 + 12 files changed, 72 insertions(+), 15 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index 3df8691..c752640 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -59,6 +59,7 @@ update_renderbuffer_surface(struct st_context *st, enum pipe_format format = st-ctx-Color.sRGBEnabled ? resource-format : util_format_linear(resource-format); if (!strb-surface || + strb-surface-texture-nr_samples != strb-Base.NumSamples || strb-surface-format != format || strb-surface-texture != resource || strb-surface-width != rtt_width || diff --git a/src/mesa/state_tracker/st_atom_msaa.c b/src/mesa/state_tracker/st_atom_msaa.c index 9baa4fc..b749a17 100644 --- a/src/mesa/state_tracker/st_atom_msaa.c +++ b/src/mesa/state_tracker/st_atom_msaa.c @@ -63,6 +63,8 @@ static void update_sample_mask( struct st_context *st ) sample_mask = ~sample_mask; } /* TODO merge with app-supplied sample mask */ + if (st-ctx-Multisample.SampleMask) + sample_mask = st-ctx-Multisample.SampleMaskValue; } /* mask off unused bits or don't care? */ diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 0513814..ee66ab3 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -299,7 +299,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height, * Create texture to hold bitmap pattern. */ pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format, - 0, width, height, 1, 1, + 0, width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); if (!pt) { _mesa_unmap_pbo_source(ctx, unpack); @@ -568,7 +568,7 @@ reset_cache(struct st_context *st) cache-texture = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format, 0, BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, - 1, 1, + 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index b25b776..db2f03a 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -466,7 +466,7 @@ alloc_texture(struct st_context *st, GLsizei width, GLsizei height, struct pipe_resource *pt; pt = st_texture_create(st, st-internal_target, texFormat, 0, - width, height, 1, 1, PIPE_BIND_SAMPLER_VIEW); + width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); return pt; } diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 4452e52..127b123 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -433,7 +433,7 @@ st_render_texture(struct gl_context *ctx, strb-rtt_level = att-TextureLevel; strb-rtt_face = att-CubeMapFace; strb-rtt_slice = att-Zoffset; - + rb-NumSamples = texImage-NumSamples; rb-Width = texImage-Width2; rb-Height = texImage-Height2; rb-_BaseFormat = texImage-_BaseFormat; diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 0cd0d77..25ee352 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -78,6 +78,8 @@ gl_target_to_pipe(GLenum target) case GL_TEXTURE_2D: case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_EXTERNAL_OES: + case GL_TEXTURE_2D_MULTISAMPLE: + case GL_PROXY_TEXTURE_2D_MULTISAMPLE: return PIPE_TEXTURE_2D; case GL_TEXTURE_RECTANGLE_NV: case
Re: [Mesa-dev] [PATCH 3/4] st/mesa: add support for ARB_texture_multisample
On Sun, Mar 3, 2013 at 9:27 PM, Dave Airlie airl...@gmail.com wrote: From: Dave Airlie airl...@redhat.com This adds support to the mesa state tracker for ARB_texture_multisample. hardware doesn't seem to use a different texture instructions, so I don't think we need to create one for TGSI at this time. Thanks to Marek for fixes to sample number picking. Signed-off-by: Dave Airlie airl...@redhat.com --- src/mesa/state_tracker/st_atom_framebuffer.c | 1 + src/mesa/state_tracker/st_atom_msaa.c| 2 ++ src/mesa/state_tracker/st_cb_bitmap.c| 4 +-- src/mesa/state_tracker/st_cb_drawpixels.c| 2 +- src/mesa/state_tracker/st_cb_fbo.c | 2 +- src/mesa/state_tracker/st_cb_texture.c | 41 src/mesa/state_tracker/st_extensions.c | 7 + src/mesa/state_tracker/st_gen_mipmap.c | 1 + src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 ++-- src/mesa/state_tracker/st_mesa_to_tgsi.c | 2 ++ src/mesa/state_tracker/st_texture.c | 8 +- src/mesa/state_tracker/st_texture.h | 1 + 12 files changed, 74 insertions(+), 14 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index 3df8691..c752640 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -59,6 +59,7 @@ update_renderbuffer_surface(struct st_context *st, enum pipe_format format = st-ctx-Color.sRGBEnabled ? resource-format : util_format_linear(resource-format); if (!strb-surface || + strb-surface-texture-nr_samples != strb-Base.NumSamples || strb-surface-format != format || strb-surface-texture != resource || strb-surface-width != rtt_width || diff --git a/src/mesa/state_tracker/st_atom_msaa.c b/src/mesa/state_tracker/st_atom_msaa.c index 9baa4fc..b749a17 100644 --- a/src/mesa/state_tracker/st_atom_msaa.c +++ b/src/mesa/state_tracker/st_atom_msaa.c @@ -63,6 +63,8 @@ static void update_sample_mask( struct st_context *st ) sample_mask = ~sample_mask; } /* TODO merge with app-supplied sample mask */ + if (st-ctx-Multisample.SampleMask) + sample_mask = st-ctx-Multisample.SampleMaskValue; } /* mask off unused bits or don't care? */ diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 36fffe9..d7a95e2 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -299,7 +299,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height, * Create texture to hold bitmap pattern. */ pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format, - 0, width, height, 1, 1, + 0, width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); if (!pt) { _mesa_unmap_pbo_source(ctx, unpack); @@ -568,7 +568,7 @@ reset_cache(struct st_context *st) cache-texture = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format, 0, BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, - 1, 1, + 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index e282bf9..e609eb5 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -463,7 +463,7 @@ alloc_texture(struct st_context *st, GLsizei width, GLsizei height, struct pipe_resource *pt; pt = st_texture_create(st, st-internal_target, texFormat, 0, - width, height, 1, 1, PIPE_BIND_SAMPLER_VIEW); + width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); return pt; } diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 72bc960..cf3e27f 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -430,7 +430,7 @@ st_render_texture(struct gl_context *ctx, strb-rtt_level = att-TextureLevel; strb-rtt_face = att-CubeMapFace; strb-rtt_slice = att-Zoffset; - + rb-NumSamples = texImage-NumSamples; rb-Width = texImage-Width2; rb-Height = texImage-Height2; rb-_BaseFormat = texImage-_BaseFormat; diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index c922a31..385bac6 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -78,6 +78,8 @@ gl_target_to_pipe(GLenum target) case GL_TEXTURE_2D: case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_EXTERNAL_OES: + case
[Mesa-dev] [PATCH 3/4] st/mesa: add support for ARB_texture_multisample
From: Dave Airlie airl...@redhat.com This adds support to the mesa state tracker for ARB_texture_multisample. hardware doesn't seem to use a different texture instructions, so I don't think we need to create one for TGSI at this time. Thanks to Marek for fixes to sample number picking. Signed-off-by: Dave Airlie airl...@redhat.com --- src/mesa/state_tracker/st_atom_framebuffer.c | 1 + src/mesa/state_tracker/st_atom_msaa.c| 2 ++ src/mesa/state_tracker/st_cb_bitmap.c| 4 +-- src/mesa/state_tracker/st_cb_drawpixels.c| 2 +- src/mesa/state_tracker/st_cb_fbo.c | 2 +- src/mesa/state_tracker/st_cb_texture.c | 41 src/mesa/state_tracker/st_extensions.c | 7 + src/mesa/state_tracker/st_gen_mipmap.c | 1 + src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 ++-- src/mesa/state_tracker/st_mesa_to_tgsi.c | 2 ++ src/mesa/state_tracker/st_texture.c | 8 +- src/mesa/state_tracker/st_texture.h | 1 + 12 files changed, 74 insertions(+), 14 deletions(-) diff --git a/src/mesa/state_tracker/st_atom_framebuffer.c b/src/mesa/state_tracker/st_atom_framebuffer.c index 3df8691..c752640 100644 --- a/src/mesa/state_tracker/st_atom_framebuffer.c +++ b/src/mesa/state_tracker/st_atom_framebuffer.c @@ -59,6 +59,7 @@ update_renderbuffer_surface(struct st_context *st, enum pipe_format format = st-ctx-Color.sRGBEnabled ? resource-format : util_format_linear(resource-format); if (!strb-surface || + strb-surface-texture-nr_samples != strb-Base.NumSamples || strb-surface-format != format || strb-surface-texture != resource || strb-surface-width != rtt_width || diff --git a/src/mesa/state_tracker/st_atom_msaa.c b/src/mesa/state_tracker/st_atom_msaa.c index 9baa4fc..b749a17 100644 --- a/src/mesa/state_tracker/st_atom_msaa.c +++ b/src/mesa/state_tracker/st_atom_msaa.c @@ -63,6 +63,8 @@ static void update_sample_mask( struct st_context *st ) sample_mask = ~sample_mask; } /* TODO merge with app-supplied sample mask */ + if (st-ctx-Multisample.SampleMask) + sample_mask = st-ctx-Multisample.SampleMaskValue; } /* mask off unused bits or don't care? */ diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 36fffe9..d7a95e2 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -299,7 +299,7 @@ make_bitmap_texture(struct gl_context *ctx, GLsizei width, GLsizei height, * Create texture to hold bitmap pattern. */ pt = st_texture_create(st, st-internal_target, st-bitmap.tex_format, - 0, width, height, 1, 1, + 0, width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); if (!pt) { _mesa_unmap_pbo_source(ctx, unpack); @@ -568,7 +568,7 @@ reset_cache(struct st_context *st) cache-texture = st_texture_create(st, PIPE_TEXTURE_2D, st-bitmap.tex_format, 0, BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, - 1, 1, + 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); } diff --git a/src/mesa/state_tracker/st_cb_drawpixels.c b/src/mesa/state_tracker/st_cb_drawpixels.c index e282bf9..e609eb5 100644 --- a/src/mesa/state_tracker/st_cb_drawpixels.c +++ b/src/mesa/state_tracker/st_cb_drawpixels.c @@ -463,7 +463,7 @@ alloc_texture(struct st_context *st, GLsizei width, GLsizei height, struct pipe_resource *pt; pt = st_texture_create(st, st-internal_target, texFormat, 0, - width, height, 1, 1, PIPE_BIND_SAMPLER_VIEW); + width, height, 1, 1, 0, PIPE_BIND_SAMPLER_VIEW); return pt; } diff --git a/src/mesa/state_tracker/st_cb_fbo.c b/src/mesa/state_tracker/st_cb_fbo.c index 72bc960..cf3e27f 100644 --- a/src/mesa/state_tracker/st_cb_fbo.c +++ b/src/mesa/state_tracker/st_cb_fbo.c @@ -430,7 +430,7 @@ st_render_texture(struct gl_context *ctx, strb-rtt_level = att-TextureLevel; strb-rtt_face = att-CubeMapFace; strb-rtt_slice = att-Zoffset; - + rb-NumSamples = texImage-NumSamples; rb-Width = texImage-Width2; rb-Height = texImage-Height2; rb-_BaseFormat = texImage-_BaseFormat; diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index c922a31..385bac6 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -78,6 +78,8 @@ gl_target_to_pipe(GLenum target) case GL_TEXTURE_2D: case GL_PROXY_TEXTURE_2D: case GL_TEXTURE_EXTERNAL_OES: + case GL_TEXTURE_2D_MULTISAMPLE: + case GL_PROXY_TEXTURE_2D_MULTISAMPLE: return PIPE_TEXTURE_2D; case GL_TEXTURE_RECTANGLE_NV: case GL_PROXY_TEXTURE_RECTANGLE_NV: @@ -99,6 +101,8 @@