diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2013-10-04 15:57:38 +0200 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2014-07-28 12:33:38 +0200 |
commit | 7562972ac7157775a4bdf07c7f17fcd3bd55cee2 (patch) | |
tree | aea18f5a7295e38610a0e03e344fb30960145d32 | |
parent | bf4655eecca0f66ed74967079805edb0650ef388 (diff) | |
download | mesa-7562972ac7157775a4bdf07c7f17fcd3bd55cee2.tar.gz mesa-7562972ac7157775a4bdf07c7f17fcd3bd55cee2.tar.xz |
sync etna driver to cec463b
-rw-r--r-- | src/gallium/drivers/etna/etna_internal.h | 13 | ||||
-rw-r--r-- | src/gallium/drivers/etna/etna_pipe.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/etna/etna_texture.c | 12 |
3 files changed, 16 insertions, 13 deletions
diff --git a/src/gallium/drivers/etna/etna_internal.h b/src/gallium/drivers/etna/etna_internal.h index d9eaaafade..922813b4e1 100644 --- a/src/gallium/drivers/etna/etna_internal.h +++ b/src/gallium/drivers/etna/etna_internal.h @@ -186,6 +186,7 @@ struct compiled_sampler_view { /* sampler offset +4*sampler, interleave when committing state */ uint32_t TE_SAMPLER_CONFIG0; + uint32_t TE_SAMPLER_CONFIG0_MASK; uint32_t TE_SAMPLER_CONFIG1; uint32_t TE_SAMPLER_SIZE; uint32_t TE_SAMPLER_LOG_SIZE; @@ -369,16 +370,6 @@ struct etna_3d_state uint32_t /*01460*/ PE_PIPE_COLOR_ADDR[VIVS_PE_PIPE__LEN]; uint32_t /*01480*/ PE_PIPE_DEPTH_ADDR[VIVS_PE_PIPE__LEN]; - uint32_t /*01604*/ RS_CONFIG; - uint32_t /*01608*/ RS_SOURCE_ADDR; - uint32_t /*0160C*/ RS_SOURCE_STRIDE; - uint32_t /*01610*/ RS_DEST_ADDR; - uint32_t /*01614*/ RS_DEST_STRIDE; - uint32_t /*01620*/ RS_WINDOW_SIZE; - uint32_t /*01630*/ RS_DITHER[2]; - uint32_t /*0163C*/ RS_CLEAR_CONTROL; - uint32_t /*01640*/ RS_FILL_VALUE[4]; - uint32_t /*01654*/ TS_MEM_CONFIG; uint32_t /*01658*/ TS_COLOR_STATUS_BASE; uint32_t /*0165C*/ TS_COLOR_SURFACE_BASE; @@ -387,8 +378,6 @@ struct etna_3d_state uint32_t /*01668*/ TS_DEPTH_SURFACE_BASE; uint32_t /*0166C*/ TS_DEPTH_CLEAR_VALUE; - uint32_t /*016A0*/ RS_EXTRA_CONFIG; - uint32_t /*02000*/ TE_SAMPLER_CONFIG0[VIVS_TE_SAMPLER__LEN]; uint32_t /*02040*/ TE_SAMPLER_SIZE[VIVS_TE_SAMPLER__LEN]; uint32_t /*02080*/ TE_SAMPLER_LOG_SIZE[VIVS_TE_SAMPLER__LEN]; diff --git a/src/gallium/drivers/etna/etna_pipe.c b/src/gallium/drivers/etna/etna_pipe.c index 91df5f49b9..9ba6c56c36 100644 --- a/src/gallium/drivers/etna/etna_pipe.c +++ b/src/gallium/drivers/etna/etna_pipe.c @@ -636,7 +636,9 @@ static void sync_context(struct pipe_context *restrict pipe) /* set active samplers to their configuration value (determined by both the sampler state and sampler view), * set inactive sampler config to 0 */ /*02000*/ EMIT_STATE(TE_SAMPLER_CONFIG0(x), TE_SAMPLER_CONFIG0[x], - ((1<<x) & active_samplers)?(e->sampler[x].TE_SAMPLER_CONFIG0 | e->sampler_view[x].TE_SAMPLER_CONFIG0):0); + ((1<<x) & active_samplers)?( + (e->sampler[x].TE_SAMPLER_CONFIG0 & e->sampler_view[x].TE_SAMPLER_CONFIG0_MASK) | + e->sampler_view[x].TE_SAMPLER_CONFIG0):0); } } if(unlikely(dirty & (ETNA_STATE_SAMPLER_VIEWS))) diff --git a/src/gallium/drivers/etna/etna_texture.c b/src/gallium/drivers/etna/etna_texture.c index 94043fec30..3b4d1357ba 100644 --- a/src/gallium/drivers/etna/etna_texture.c +++ b/src/gallium/drivers/etna/etna_texture.c @@ -117,6 +117,7 @@ static struct pipe_sampler_view *etna_pipe_create_sampler_view(struct pipe_conte VIVS_TE_SAMPLER_CONFIG0_TYPE(translate_texture_target(res->base.target, false)) | VIVS_TE_SAMPLER_CONFIG0_FORMAT(translate_texture_format(sv->base.format, false)); /* merged with sampler state */ + cs->TE_SAMPLER_CONFIG0_MASK = 0xffffffff; cs->TE_SAMPLER_CONFIG1 = VIVS_TE_SAMPLER_CONFIG1_SWIZZLE_R(templat->swizzle_r) | @@ -130,6 +131,8 @@ static struct pipe_sampler_view *etna_pipe_create_sampler_view(struct pipe_conte cs->TE_SAMPLER_LOG_SIZE = VIVS_TE_SAMPLER_LOG_SIZE_WIDTH(etna_log2_fixp55(res->base.width0)) | VIVS_TE_SAMPLER_LOG_SIZE_HEIGHT(etna_log2_fixp55(res->base.height0)); + + /* Set up levels-of-detail */ /* XXX in principle we only have to define lods sv->first_level .. sv->last_level */ for(int lod=0; lod<=res->base.last_level; ++lod) { @@ -138,6 +141,15 @@ static struct pipe_sampler_view *etna_pipe_create_sampler_view(struct pipe_conte cs->min_lod = sv->base.u.tex.first_level << 5; cs->max_lod = MIN2(sv->base.u.tex.last_level, res->base.last_level) << 5; + /* Workaround for npot textures -- it appears that only CLAMP_TO_EDGE is supported */ + if(!util_is_power_of_two(res->base.width0) || !util_is_power_of_two(res->base.height0)) + { + cs->TE_SAMPLER_CONFIG0_MASK = ~(VIVS_TE_SAMPLER_CONFIG0_UWRAP__MASK | + VIVS_TE_SAMPLER_CONFIG0_VWRAP__MASK); + cs->TE_SAMPLER_CONFIG0 |= VIVS_TE_SAMPLER_CONFIG0_UWRAP(TEXTURE_WRAPMODE_CLAMP_TO_EDGE) | + VIVS_TE_SAMPLER_CONFIG0_VWRAP(TEXTURE_WRAPMODE_CLAMP_TO_EDGE); + } + sv->internal = cs; pipe_reference_init(&sv->base.reference, 1); return &sv->base; |