diff options
author | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-04-01 15:14:19 -0700 |
---|---|---|
committer | Corbin Simpson <MostAwesomeDude@gmail.com> | 2009-04-01 15:14:19 -0700 |
commit | c4fb791909e687d5af5b95d88ebd6332c82c3095 (patch) | |
tree | 3be4539549c30c41caa356e2750e5a4e5a1ef971 /src/gallium/drivers/r300/r300_surface.c | |
parent | 8d72caea3f10a26e4b11a522f4f973ce61f95127 (diff) | |
download | external_mesa3d-c4fb791909e687d5af5b95d88ebd6332c82c3095.zip external_mesa3d-c4fb791909e687d5af5b95d88ebd6332c82c3095.tar.gz external_mesa3d-c4fb791909e687d5af5b95d88ebd6332c82c3095.tar.bz2 |
r300-gallium: Add vertex shader for surface_copy.
Diffstat (limited to 'src/gallium/drivers/r300/r300_surface.c')
-rw-r--r-- | src/gallium/drivers/r300/r300_surface.c | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/gallium/drivers/r300/r300_surface.c b/src/gallium/drivers/r300/r300_surface.c index 8cafe7d..ab0ecac 100644 --- a/src/gallium/drivers/r300/r300_surface.c +++ b/src/gallium/drivers/r300/r300_surface.c @@ -39,17 +39,6 @@ static void r300_surface_setup(struct pipe_context* pipe, r300_emit_dsa_state(r300, &dsa_clear_state); r300_emit_rs_state(r300, &rs_clear_state); - /* XXX these magic numbers should be explained when - * this becomes a cached state object */ - if (caps->has_tcl) { - r300_emit_vertex_shader(r300, &r300_passthrough_vertex_shader); - } else { - OUT_CS_REG(R300_VAP_CNTL, R300_PVS_NUM_SLOTS(5) | - R300_PVS_NUM_CNTLRS(5) | - R300_PVS_NUM_FPUS(caps->num_vert_fpus) | - R300_PVS_VF_MAX_VTX_NUM(12)); - } - BEGIN_CS(15); /* Pixel scissors. */ @@ -116,6 +105,18 @@ static void r300_surface_fill(struct pipe_context* pipe, r300_surface_setup(r300, dest, x, y, w, h); + /* Vertex shader setup */ + if (caps->has_tcl) { + r300_emit_vertex_shader(r300, &r300_passthrough_vertex_shader); + } else { + BEGIN_CS(2); + OUT_CS_REG(R300_VAP_CNTL, R300_PVS_NUM_SLOTS(5) | + R300_PVS_NUM_CNTLRS(5) | + R300_PVS_NUM_FPUS(caps->num_vert_fpus) | + R300_PVS_VF_MAX_VTX_NUM(12)); + END_CS; + } + /* Fragment shader setup */ if (caps->is_r500) { r500_emit_fragment_shader(r300, &r500_passthrough_fragment_shader); @@ -222,6 +223,18 @@ static void r300_surface_copy(struct pipe_context* pipe, r300_emit_texture(r300, srctex, 0); r300_flush_textures(r300); + /* Vertex shader setup */ + if (caps->has_tcl) { + r300_emit_vertex_shader(r300, &r300_texture_vertex_shader); + } else { + BEGIN_CS(2); + OUT_CS_REG(R300_VAP_CNTL, R300_PVS_NUM_SLOTS(5) | + R300_PVS_NUM_CNTLRS(5) | + R300_PVS_NUM_FPUS(caps->num_vert_fpus) | + R300_PVS_VF_MAX_VTX_NUM(12)); + END_CS; + } + /* Fragment shader setup */ if (caps->is_r500) { r500_emit_fragment_shader(r300, &r500_texture_fragment_shader); |