summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/i965/brw_curbe.c
diff options
context:
space:
mode:
authorKeith Whitwell <keithw@vmware.com>2009-11-19 20:02:42 -0800
committerKeith Whitwell <keithw@vmware.com>2009-11-19 20:02:42 -0800
commit9507a6c206627b3ae76e2ae8398fff518e39941a (patch)
treeb60f35a4779567443e8dfc6b159f428a65de911b /src/gallium/drivers/i965/brw_curbe.c
parent63b0af07755201e5ad630bf7f67a7997263734d6 (diff)
i965g: fragment shader immediates working
Diffstat (limited to 'src/gallium/drivers/i965/brw_curbe.c')
-rw-r--r--src/gallium/drivers/i965/brw_curbe.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/gallium/drivers/i965/brw_curbe.c b/src/gallium/drivers/i965/brw_curbe.c
index 3e821d5afe..3f031577d5 100644
--- a/src/gallium/drivers/i965/brw_curbe.c
+++ b/src/gallium/drivers/i965/brw_curbe.c
@@ -182,16 +182,32 @@ static enum pipe_error prepare_curbe_buffer(struct brw_context *brw)
/* fragment shader constants */
if (brw->curbe.wm_size) {
+ const struct brw_fragment_shader *fs = brw->curr.fragment_shader;
GLuint offset = brw->curbe.wm_start * 16;
- unsigned nr = brw->wm.prog_data->nr_params;
+ GLuint nr_immediate, nr_const;
+
+ nr_immediate = fs->immediates.nr;
+ if (nr_immediate) {
+ memcpy(&buf[offset],
+ fs->immediates.data,
+ nr_immediate * 4 * sizeof(float));
- const GLfloat *value = screen->buffer_map( screen,
- brw->curr.fragment_constants,
- PIPE_BUFFER_USAGE_CPU_READ);
+ offset += nr_immediate * 4;
+ }
- memcpy(&buf[offset], value, nr * 4 * sizeof(float));
+ nr_const = fs->info.file_max[TGSI_FILE_CONSTANT] + 1;
+/* nr_const = brw->wm.prog_data->nr_params; */
+ if (nr_const) {
+ const GLfloat *value = screen->buffer_map( screen,
+ brw->curr.fragment_constants,
+ PIPE_BUFFER_USAGE_CPU_READ);
- screen->buffer_unmap( screen, brw->curr.fragment_constants );
+ memcpy(&buf[offset], value,
+ nr_const * 4 * sizeof(float));
+
+ screen->buffer_unmap( screen,
+ brw->curr.fragment_constants );
+ }
}
@@ -226,7 +242,7 @@ static enum pipe_error prepare_curbe_buffer(struct brw_context *brw)
/* vertex shader constants */
if (brw->curbe.vs_size) {
GLuint offset = brw->curbe.vs_start * 16;
- struct brw_vertex_shader *vs = brw->curr.vertex_shader;
+ const struct brw_vertex_shader *vs = brw->curr.vertex_shader;
GLuint nr_immediate, nr_const;
nr_immediate = vs->immediates.nr;