diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2014-02-22 12:04:27 +0100 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2014-07-28 15:04:24 +0200 |
commit | d5d39c65f176a50916cbfaaa066da89acda203b4 (patch) | |
tree | 321e0c140a0d4efcba1ad63f6aea4e61ad357ff5 | |
parent | a76ab86748dfe2dcb4985fd20ad0a547bcd0aa18 (diff) | |
download | mesa-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.h | 7 | ||||
-rw-r--r-- | src/gallium/drivers/etna/etna_pipe.c | 63 |
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 ****/ |