summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2014-02-22 12:04:27 +0100
committerLucas Stach <l.stach@pengutronix.de>2014-07-28 15:04:24 +0200
commitd5d39c65f176a50916cbfaaa066da89acda203b4 (patch)
tree321e0c140a0d4efcba1ad63f6aea4e61ad357ff5
parenta76ab86748dfe2dcb4985fd20ad0a547bcd0aa18 (diff)
downloadmesa-d5d39c65f176a50916cbfaaa066da89acda203b4.tar.gz
mesa-d5d39c65f176a50916cbfaaa066da89acda203b4.tar.xz
unclean: emit texture state to new sampler regs
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r--src/gallium/drivers/etna/etna_internal.h7
-rw-r--r--src/gallium/drivers/etna/etna_pipe.c63
2 files changed, 70 insertions, 0 deletions
diff --git a/src/gallium/drivers/etna/etna_internal.h b/src/gallium/drivers/etna/etna_internal.h
index e4b2ef249c..48d1358997 100644
--- a/src/gallium/drivers/etna/etna_internal.h
+++ b/src/gallium/drivers/etna/etna_internal.h
@@ -396,6 +396,13 @@ struct etna_3d_state
uint32_t /*05000*/ VS_UNIFORMS[VIVS_VS_UNIFORMS__LEN];
uint32_t /*06000*/ PS_INST_MEM[VIVS_PS_INST_MEM__LEN];
uint32_t /*07000*/ PS_UNIFORMS[VIVS_PS_UNIFORMS__LEN];
+
+ uint32_t /*10000*/ NTE_SAMPLER_CONFIG0[VIVS_NTE_SAMPLER__LEN];
+ uint32_t /*10040*/ NTE_SAMPLER_SIZE[VIVS_NTE_SAMPLER__LEN];
+ uint32_t /*10080*/ NTE_SAMPLER_LOG_SIZE[VIVS_NTE_SAMPLER__LEN];
+ uint32_t /*100C0*/ NTE_SAMPLER_LOD_CONFIG[VIVS_NTE_SAMPLER__LEN];
+ uint32_t /*101C0*/ NTE_SAMPLER_CONFIG1[VIVS_NTE_SAMPLER__LEN];
+ uint32_t /*10400*/ NTE_SAMPLER_ADDR_LOD[VIVS_NTE_SAMPLER__LEN][VIVS_NTE_SAMPLER_ADDR_LOD__LEN];
};
diff --git a/src/gallium/drivers/etna/etna_pipe.c b/src/gallium/drivers/etna/etna_pipe.c
index 216b86fb40..5c40609fa9 100644
--- a/src/gallium/drivers/etna/etna_pipe.c
+++ b/src/gallium/drivers/etna/etna_pipe.c
@@ -638,6 +638,7 @@ static void sync_context(struct pipe_context *restrict pipe)
/*01668*/ EMIT_STATE(TS_DEPTH_SURFACE_BASE, TS_DEPTH_SURFACE_BASE, e->framebuffer.TS_DEPTH_SURFACE_BASE);
/*0166C*/ EMIT_STATE(TS_DEPTH_CLEAR_VALUE, TS_DEPTH_CLEAR_VALUE, e->framebuffer.TS_DEPTH_CLEAR_VALUE);
}
+#if 0
if(unlikely(dirty & (ETNA_STATE_SAMPLER_VIEWS | ETNA_STATE_SAMPLERS)))
{
for(int x=0; x<VIVS_TE_SAMPLER__LEN; ++x)
@@ -702,6 +703,7 @@ static void sync_context(struct pipe_context *restrict pipe)
}
}
}
+#endif
if(unlikely(dirty & (ETNA_STATE_SHADER)))
{
/*0381C*/ EMIT_STATE(GL_VARYING_TOTAL_COMPONENTS, GL_VARYING_TOTAL_COMPONENTS, e->shader_state.GL_VARYING_TOTAL_COMPONENTS);
@@ -711,6 +713,67 @@ static void sync_context(struct pipe_context *restrict pipe)
/*03828*/ EMIT_STATE(GL_VARYING_COMPONENT_USE(x), GL_VARYING_COMPONENT_USE[x], e->shader_state.GL_VARYING_COMPONENT_USE[x]);
}
}
+
+ if(unlikely(dirty & (ETNA_STATE_SAMPLER_VIEWS | ETNA_STATE_SAMPLERS)))
+ {
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ /* 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(NTE_SAMPLER_CONFIG0(x), NTE_SAMPLER_CONFIG0[x],
+ ((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)))
+ {
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ if((1<<x) & active_samplers)
+ {
+ /*02040*/ EMIT_STATE(NTE_SAMPLER_SIZE(x), NTE_SAMPLER_SIZE[x], e->sampler_view[x].TE_SAMPLER_SIZE);
+ }
+ }
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ if((1<<x) & active_samplers)
+ {
+ /*02080*/ EMIT_STATE(NTE_SAMPLER_LOG_SIZE(x), NTE_SAMPLER_LOG_SIZE[x], e->sampler_view[x].TE_SAMPLER_LOG_SIZE);
+ }
+ }
+ }
+ if(unlikely(dirty & (ETNA_STATE_SAMPLER_VIEWS | ETNA_STATE_SAMPLERS)))
+ {
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ /* min and max lod is determined both by the sampler and the view */
+ /*020C0*/ EMIT_STATE(NTE_SAMPLER_LOD_CONFIG(x), NTE_SAMPLER_LOD_CONFIG[x], VIVS_TE_SAMPLER_LOD_CONFIG_MAX(0 << 5) | VIVS_TE_SAMPLER_LOD_CONFIG_MIN(0 << 5));
+ }
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ if((1<<x) & active_samplers)
+ {
+ /*021C0*/ EMIT_STATE(NTE_SAMPLER_CONFIG1(x), NTE_SAMPLER_CONFIG1[x],
+ e->sampler[x].TE_SAMPLER_CONFIG1 | e->sampler_view[x].TE_SAMPLER_CONFIG1);
+ }
+ }
+ }
+ if(unlikely(dirty & (ETNA_STATE_SAMPLER_VIEWS)))
+ {
+ for(int y=0; y<VIVS_NTE_SAMPLER_ADDR_LOD__LEN; ++y)
+ {
+ for(int x=0; x<VIVS_NTE_SAMPLER__LEN; ++x)
+ {
+ if((1<<x) & active_samplers)
+ {
+ /*02400*/ EMIT_STATE(NTE_SAMPLER_ADDR_LOD(y, x), NTE_SAMPLER_ADDR_LOD[x][y], e->sampler_view[x].TE_SAMPLER_LOD_ADDR[y]);
+ }
+ }
+ }
+ }
+
ETNA_COALESCE_STATE_CLOSE();
/* end only EMIT_STATE */
/**** Large dynamically-sized state ****/