On Thu, May 9, 2013 at 5:33 PM, Marek Olšák <mar...@gmail.com> wrote:
Reviewed-by: Alex Deucher <alexander.deuc...@amd.com> > --- > src/gallium/drivers/r600/evergreen_state.c | 16 ++++------------ > src/gallium/drivers/r600/r600_asm.c | 6 +++--- > src/gallium/drivers/r600/r600_asm.h | 4 ++-- > src/gallium/drivers/r600/r600_blit.c | 22 ++-------------------- > src/gallium/drivers/r600/r600_pipe.c | 20 ++++++-------------- > src/gallium/drivers/r600/r600_pipe.h | 20 +------------------- > src/gallium/drivers/r600/r600_shader.c | 5 +++-- > 7 files changed, 21 insertions(+), 72 deletions(-) > > diff --git a/src/gallium/drivers/r600/evergreen_state.c > b/src/gallium/drivers/r600/evergreen_state.c > index 4eb9768..f49c595 100644 > --- a/src/gallium/drivers/r600/evergreen_state.c > +++ b/src/gallium/drivers/r600/evergreen_state.c > @@ -1219,7 +1219,7 @@ evergreen_create_sampler_view_custom(struct > pipe_context *ctx, > view->tex_resource_words[2] = (surflevel[0].offset + > r600_resource_va(ctx->screen, texture)) >> 8; > > /* TEX_RESOURCE_WORD3.MIP_ADDRESS */ > - if (texture->nr_samples > 1 && rscreen->msaa_texture_support == > MSAA_TEXTURE_COMPRESSED) { > + if (texture->nr_samples > 1 && > rscreen->has_compressed_msaa_texturing) { > if (tmp->is_depth) { > /* disable FMASK (0 = disabled) */ > view->tex_resource_words[3] = 0; > @@ -3537,21 +3537,13 @@ void *evergreen_create_resolve_blend(struct > r600_context *rctx) > void *evergreen_create_decompress_blend(struct r600_context *rctx) > { > struct pipe_blend_state blend; > + unsigned mode = rctx->screen->has_compressed_msaa_texturing ? > + V_028808_CB_FMASK_DECOMPRESS : V_028808_CB_DECOMPRESS; > > memset(&blend, 0, sizeof(blend)); > blend.independent_blend_enable = true; > blend.rt[0].colormask = 0xf; > - return evergreen_create_blend_state_mode(&rctx->context, &blend, > V_028808_CB_DECOMPRESS); > -} > - > -void *evergreen_create_fmask_decompress_blend(struct r600_context *rctx) > -{ > - struct pipe_blend_state blend; > - > - memset(&blend, 0, sizeof(blend)); > - blend.independent_blend_enable = true; > - blend.rt[0].colormask = 0xf; > - return evergreen_create_blend_state_mode(&rctx->context, &blend, > V_028808_CB_FMASK_DECOMPRESS); > + return evergreen_create_blend_state_mode(&rctx->context, &blend, > mode); > } > > void *evergreen_create_db_flush_dsa(struct r600_context *rctx) > diff --git a/src/gallium/drivers/r600/r600_asm.c > b/src/gallium/drivers/r600/r600_asm.c > index df0376a..08fe24e 100644 > --- a/src/gallium/drivers/r600/r600_asm.c > +++ b/src/gallium/drivers/r600/r600_asm.c > @@ -126,7 +126,7 @@ static unsigned stack_entry_size(enum radeon_family chip) > { > void r600_bytecode_init(struct r600_bytecode *bc, > enum chip_class chip_class, > enum radeon_family family, > - enum r600_msaa_texture_mode msaa_texture_mode) > + bool has_compressed_msaa_texturing) > { > static unsigned next_shader_id = 0; > > @@ -143,7 +143,7 @@ void r600_bytecode_init(struct r600_bytecode *bc, > > LIST_INITHEAD(&bc->cf); > bc->chip_class = chip_class; > - bc->msaa_texture_mode = msaa_texture_mode; > + bc->has_compressed_msaa_texturing = has_compressed_msaa_texturing; > bc->stack.entry_size = stack_entry_size(family); > } > > @@ -2287,7 +2287,7 @@ void *r600_create_vertex_fetch_shader(struct > pipe_context *ctx, > > memset(&bc, 0, sizeof(bc)); > r600_bytecode_init(&bc, rctx->chip_class, rctx->family, > - rctx->screen->msaa_texture_support); > + rctx->screen->has_compressed_msaa_texturing); > > bc.isa = rctx->isa; > > diff --git a/src/gallium/drivers/r600/r600_asm.h > b/src/gallium/drivers/r600/r600_asm.h > index bbebaec..6ab5dac 100644 > --- a/src/gallium/drivers/r600/r600_asm.h > +++ b/src/gallium/drivers/r600/r600_asm.h > @@ -195,7 +195,7 @@ struct r600_stack_info { > > struct r600_bytecode { > enum chip_class chip_class; > - enum r600_msaa_texture_mode msaa_texture_mode; > + bool has_compressed_msaa_texturing; > int type; > struct list_head cf; > struct r600_bytecode_cf *cf_last; > @@ -225,7 +225,7 @@ int eg_bytecode_cf_build(struct r600_bytecode *bc, struct > r600_bytecode_cf *cf); > void r600_bytecode_init(struct r600_bytecode *bc, > enum chip_class chip_class, > enum radeon_family family, > - enum r600_msaa_texture_mode msaa_texture_mode); > + bool has_compressed_msaa_texturing); > void r600_bytecode_clear(struct r600_bytecode *bc); > int r600_bytecode_add_alu(struct r600_bytecode *bc, > const struct r600_bytecode_alu *alu); > diff --git a/src/gallium/drivers/r600/r600_blit.c > b/src/gallium/drivers/r600/r600_blit.c > index 7d32eef..058bf81 100644 > --- a/src/gallium/drivers/r600/r600_blit.c > +++ b/src/gallium/drivers/r600/r600_blit.c > @@ -290,25 +290,10 @@ static void r600_blit_decompress_color(struct > pipe_context *ctx, > { > struct r600_context *rctx = (struct r600_context *)ctx; > unsigned layer, level, checked_last_layer, max_layer; > - void *blend_decompress; > > if (!rtex->dirty_level_mask) > return; > > - switch (rctx->screen->msaa_texture_support) { > - case MSAA_TEXTURE_DECOMPRESSED: > - blend_decompress = rctx->custom_blend_decompress; > - break; > - case MSAA_TEXTURE_COMPRESSED: > - blend_decompress = rctx->custom_blend_fmask_decompress; > - break; > - case MSAA_TEXTURE_SAMPLE_ZERO: > - default: > - /* Nothing to do. */ > - rtex->dirty_level_mask = 0; > - return; > - } > - > for (level = first_level; level <= last_level; level++) { > if (!(rtex->dirty_level_mask & (1 << level))) > continue; > @@ -328,7 +313,7 @@ static void r600_blit_decompress_color(struct > pipe_context *ctx, > cbsurf = ctx->create_surface(ctx, > &rtex->resource.b.b, &surf_tmpl); > > r600_blitter_begin(ctx, R600_DECOMPRESS); > - util_blitter_custom_color(rctx->blitter, cbsurf, > blend_decompress); > + util_blitter_custom_color(rctx->blitter, cbsurf, > rctx->custom_blend_decompress); > r600_blitter_end(ctx); > > pipe_surface_reference(&cbsurf, NULL); > @@ -578,7 +563,6 @@ static void r600_resource_copy_region(struct pipe_context > *ctx, > struct pipe_sampler_view src_templ, *src_view; > unsigned dst_width, dst_height, src_width0, src_height0, src_widthFL, > src_heightFL; > struct pipe_box sbox, dstbox; > - bool copy_all_samples; > > /* Handle buffers first. */ > if (dst->target == PIPE_BUFFER && src->target == PIPE_BUFFER) { > @@ -690,8 +674,6 @@ static void r600_resource_copy_region(struct pipe_context > *ctx, > src_widthFL, > src_heightFL); > } > > - copy_all_samples = rctx->screen->msaa_texture_support != > MSAA_TEXTURE_SAMPLE_ZERO; > - > u_box_3d(dstx, dsty, dstz, abs(src_box->width), abs(src_box->height), > abs(src_box->depth), &dstbox); > > @@ -700,7 +682,7 @@ static void r600_resource_copy_region(struct pipe_context > *ctx, > util_blitter_blit_generic(rctx->blitter, dst_view, &dstbox, > src_view, src_box, src_width0, src_height0, > PIPE_MASK_RGBAZS, PIPE_TEX_FILTER_NEAREST, > NULL, > - copy_all_samples); > + TRUE); > r600_blitter_end(ctx); > > pipe_surface_reference(&dst_view, NULL); > diff --git a/src/gallium/drivers/r600/r600_pipe.c > b/src/gallium/drivers/r600/r600_pipe.c > index 533e0c0..f27166b 100644 > --- a/src/gallium/drivers/r600/r600_pipe.c > +++ b/src/gallium/drivers/r600/r600_pipe.c > @@ -333,9 +333,6 @@ static void r600_destroy_context(struct pipe_context > *context) > if (rctx->custom_blend_decompress) { > rctx->context.delete_blend_state(&rctx->context, > rctx->custom_blend_decompress); > } > - if (rctx->custom_blend_fmask_decompress) { > - rctx->context.delete_blend_state(&rctx->context, > rctx->custom_blend_fmask_decompress); > - } > util_unreference_framebuffer_state(&rctx->framebuffer.state); > > if (rctx->blitter) { > @@ -430,7 +427,6 @@ static struct pipe_context *r600_create_context(struct > pipe_screen *screen, void > rctx->custom_dsa_flush = evergreen_create_db_flush_dsa(rctx); > rctx->custom_blend_resolve = > evergreen_create_resolve_blend(rctx); > rctx->custom_blend_decompress = > evergreen_create_decompress_blend(rctx); > - rctx->custom_blend_fmask_decompress = > evergreen_create_fmask_decompress_blend(rctx); > rctx->has_vertex_cache = !(rctx->family == CHIP_CEDAR || > rctx->family == CHIP_PALM || > rctx->family == CHIP_SUMO || > @@ -591,7 +587,9 @@ static int r600_get_param(struct pipe_screen* pscreen, > enum pipe_cap param) > case PIPE_CAP_TEXTURE_BUFFER_OBJECTS: > case PIPE_CAP_PREFER_BLIT_BASED_TEXTURE_TRANSFER: > case PIPE_CAP_QUERY_PIPELINE_STATISTICS: > + case PIPE_CAP_TEXTURE_MULTISAMPLE: > return 1; > + > case PIPE_CAP_TGSI_TEXCOORD: > return 0; > > @@ -607,9 +605,6 @@ static int r600_get_param(struct pipe_screen* pscreen, > enum pipe_cap param) > case PIPE_CAP_GLSL_FEATURE_LEVEL: > return 140; > > - case PIPE_CAP_TEXTURE_MULTISAMPLE: > - return rscreen->msaa_texture_support != > MSAA_TEXTURE_SAMPLE_ZERO; > - > /* Supported except the original R600. */ > case PIPE_CAP_INDEP_BLEND_ENABLE: > case PIPE_CAP_INDEP_BLEND_FUNC: > @@ -1258,22 +1253,19 @@ struct pipe_screen *r600_screen_create(struct > radeon_winsys *ws) > case R600: > case R700: > rscreen->has_msaa = rscreen->info.drm_minor >= 22; > - rscreen->msaa_texture_support = MSAA_TEXTURE_DECOMPRESSED; > + rscreen->has_compressed_msaa_texturing = false; > break; > case EVERGREEN: > rscreen->has_msaa = rscreen->info.drm_minor >= 19; > - rscreen->msaa_texture_support = > - rscreen->info.drm_minor >= 24 ? > MSAA_TEXTURE_COMPRESSED : > - > MSAA_TEXTURE_DECOMPRESSED; > + rscreen->has_compressed_msaa_texturing = > rscreen->info.drm_minor >= 24; > break; > case CAYMAN: > rscreen->has_msaa = rscreen->info.drm_minor >= 19; > - rscreen->msaa_texture_support = MSAA_TEXTURE_COMPRESSED; > + rscreen->has_compressed_msaa_texturing = true; > break; > default: > rscreen->has_msaa = FALSE; > - rscreen->msaa_texture_support = 0; > - break; > + rscreen->has_compressed_msaa_texturing = false; > } > > rscreen->has_cp_dma = rscreen->info.drm_minor >= 27 && > diff --git a/src/gallium/drivers/r600/r600_pipe.h > b/src/gallium/drivers/r600/r600_pipe.h > index bb4e429..2a81434 100644 > --- a/src/gallium/drivers/r600/r600_pipe.h > +++ b/src/gallium/drivers/r600/r600_pipe.h > @@ -216,22 +216,6 @@ struct r600_pipe_fences { > pipe_mutex mutex; > }; > > -enum r600_msaa_texture_mode { > - /* If the hw can fetch the first sample only (no decompression > available). > - * This means MSAA texturing is not fully implemented. */ > - MSAA_TEXTURE_SAMPLE_ZERO, > - > - /* If the hw can fetch decompressed MSAA textures. > - * Supported families: R600, R700, Evergreen. > - * Cayman cannot use this, because it cannot do the decompression. */ > - MSAA_TEXTURE_DECOMPRESSED, > - > - /* If the hw can fetch compressed MSAA textures, which means shaders > can > - * read resolved FMASK. This yields the best performance. > - * Supported families: Evergreen, Cayman. */ > - MSAA_TEXTURE_COMPRESSED > -}; > - > typedef boolean (*r600g_dma_blit_t)(struct pipe_context *ctx, > struct pipe_resource *dst, > unsigned dst_level, > @@ -282,7 +266,7 @@ struct r600_screen { > bool has_streamout; > bool has_msaa; > bool has_cp_dma; > - enum r600_msaa_texture_mode msaa_texture_support; > + bool has_compressed_msaa_texturing; > struct r600_tiling_info tiling_info; > struct r600_pipe_fences fences; > > @@ -561,7 +545,6 @@ struct r600_context { > void *custom_dsa_flush; > void *custom_blend_resolve; > void *custom_blend_decompress; > - void *custom_blend_fmask_decompress; > /* With rasterizer discard, there doesn't have to be a pixel shader. > * In that case, we bind this one: */ > void *dummy_pixel_shader; > @@ -713,7 +696,6 @@ void evergreen_update_vs_state(struct pipe_context *ctx, > struct r600_pipe_shader > void *evergreen_create_db_flush_dsa(struct r600_context *rctx); > void *evergreen_create_resolve_blend(struct r600_context *rctx); > void *evergreen_create_decompress_blend(struct r600_context *rctx); > -void *evergreen_create_fmask_decompress_blend(struct r600_context *rctx); > boolean evergreen_is_format_supported(struct pipe_screen *screen, > enum pipe_format format, > enum pipe_texture_target target, > diff --git a/src/gallium/drivers/r600/r600_shader.c > b/src/gallium/drivers/r600/r600_shader.c > index 78266c0..a9cea07 100644 > --- a/src/gallium/drivers/r600/r600_shader.c > +++ b/src/gallium/drivers/r600/r600_shader.c > @@ -960,7 +960,7 @@ static int r600_shader_from_tgsi(struct r600_screen > *rscreen, > ctx.native_integers = true; > > r600_bytecode_init(ctx.bc, rscreen->chip_class, rscreen->family, > - rscreen->msaa_texture_support); > + rscreen->has_compressed_msaa_texturing); > ctx.tokens = tokens; > tgsi_scan_shader(tokens, &ctx.info); > shader->indirect_files = ctx.info.indirect_files; > @@ -3792,10 +3792,11 @@ static int tgsi_tex(struct r600_shader_ctx *ctx) > unsigned src_gpr; > int r, i, j; > int opcode; > - bool read_compressed_msaa = ctx->bc->msaa_texture_mode == > MSAA_TEXTURE_COMPRESSED && > + bool read_compressed_msaa = ctx->bc->has_compressed_msaa_texturing && > inst->Instruction.Opcode == > TGSI_OPCODE_TXF && > (inst->Texture.Texture == > TGSI_TEXTURE_2D_MSAA || > inst->Texture.Texture == > TGSI_TEXTURE_2D_ARRAY_MSAA); > + > /* Texture fetch instructions can only use gprs as source. > * Also they cannot negate the source or take the absolute value */ > const boolean src_requires_loading = (inst->Instruction.Opcode != > TGSI_OPCODE_TXQ_LZ && > -- > 1.7.10.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev