diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2009-03-02 02:28:57 -0500 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2009-03-02 02:28:57 -0500 |
commit | fa98f424de739be2c6005b740a74bbf1ee968a8b (patch) | |
tree | 70af76e5cac9e4b6909b19d514dea93c05419a89 /src/r600_textured_videofuncs.c | |
parent | ccde35c3eda3fff0de29eb8c6fdc392629724a34 (diff) |
R6xx/R7xx Xv: combine packed and planar shaders
use a bool const to select the tex fetch routine
Diffstat (limited to 'src/r600_textured_videofuncs.c')
-rw-r--r-- | src/r600_textured_videofuncs.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/r600_textured_videofuncs.c b/src/r600_textured_videofuncs.c index bf98ec78..d208b076 100644 --- a/src/r600_textured_videofuncs.c +++ b/src/r600_textured_videofuncs.c @@ -115,7 +115,7 @@ R600DisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) tex_sampler_t tex_samp; shader_config_t vs_conf, ps_conf; int uv_offset; - + uint32_t bool_consts[1] = { 0 }; static float ps_alu_consts[] = { 1.0, 0.0, 1.4020, 0, /* r - c[0] */ 1.0, -0.34414, -0.71414, 0, /* g - c[1] */ @@ -166,17 +166,18 @@ R600DisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) accel_state->vs_mc_addr = info->fbLocation + pScrn->fbOffset + accel_state->shaders->offset + accel_state->xv_vs_offset; + accel_state->ps_mc_addr = info->fbLocation + pScrn->fbOffset + accel_state->shaders->offset + + accel_state->xv_ps_offset; + switch(pPriv->id) { case FOURCC_YV12: case FOURCC_I420: - accel_state->ps_mc_addr = info->fbLocation + pScrn->fbOffset + accel_state->shaders->offset + - accel_state->xv_ps_offset_planar; + bool_consts[0] = 1; break; case FOURCC_UYVY: case FOURCC_YUY2: default: - accel_state->ps_mc_addr = info->fbLocation + pScrn->fbOffset + accel_state->shaders->offset + - accel_state->xv_ps_offset_packed; + bool_consts[0] = 0; break; } @@ -200,14 +201,19 @@ R600DisplayTexturedVideo(ScrnInfoPtr pScrn, RADEONPortPrivPtr pPriv) ps_conf.shader_addr = accel_state->ps_mc_addr; ps_conf.num_gprs = 3; - ps_conf.stack_size = 0; + ps_conf.stack_size = 1; ps_conf.uncached_first_inst = 1; ps_conf.clamp_consts = 0; ps_conf.export_mode = 2; ps_setup (pScrn, accel_state->ib, &ps_conf); /* PS alu constants */ - set_alu_consts(pScrn, accel_state->ib, 0, sizeof(ps_alu_consts) / SQ_ALU_CONSTANT_offset, ps_alu_consts); + set_alu_consts(pScrn, accel_state->ib, SQ_ALU_CONSTANT_ps, + sizeof(ps_alu_consts) / SQ_ALU_CONSTANT_offset, ps_alu_consts); + + /* CF bool constants */ + set_bool_consts(pScrn, accel_state->ib, SQ_BOOL_CONST_ps, + sizeof(bool_consts) / SQ_BOOL_CONST_offset, bool_consts); /* Texture */ switch(pPriv->id) { |