summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2013-10-04 15:57:38 +0200
committerLucas Stach <l.stach@pengutronix.de>2014-07-28 12:33:38 +0200
commit7562972ac7157775a4bdf07c7f17fcd3bd55cee2 (patch)
treeaea18f5a7295e38610a0e03e344fb30960145d32
parentbf4655eecca0f66ed74967079805edb0650ef388 (diff)
downloadmesa-7562972ac7157775a4bdf07c7f17fcd3bd55cee2.tar.gz
mesa-7562972ac7157775a4bdf07c7f17fcd3bd55cee2.tar.xz
sync etna driver to cec463b
-rw-r--r--src/gallium/drivers/etna/etna_internal.h13
-rw-r--r--src/gallium/drivers/etna/etna_pipe.c4
-rw-r--r--src/gallium/drivers/etna/etna_texture.c12
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;