summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/i965/brw_curbe.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-04-09 18:37:03 -0600
committerBrian Paul <brianp@vmware.com>2009-04-09 18:37:03 -0600
commit20f3497e4b6756e330f7b3f54e8acaa1d6c92052 (patch)
tree429c43043582d5d753dff8e1be675c796490c395 /src/mesa/drivers/dri/i965/brw_curbe.c
parent08a1e1ebcb612dfa9172f04e4644b34d95ec7dac (diff)
i965: re-org of some of the new constant buffer code
Plus, begin the new code for vertex shader const buffers.
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_curbe.c')
-rw-r--r--src/mesa/drivers/dri/i965/brw_curbe.c46
1 files changed, 32 insertions, 14 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c b/src/mesa/drivers/dri/i965/brw_curbe.c
index a6bfb7507e..08b602a5ab 100644
--- a/src/mesa/drivers/dri/i965/brw_curbe.c
+++ b/src/mesa/drivers/dri/i965/brw_curbe.c
@@ -333,37 +333,55 @@ static void prepare_constant_buffer(struct brw_context *brw)
/**
- * Vertex/fragment shader constants are stored in a pseudo 1D texture.
- * This function updates the constants in that buffer.
+ * Copy Mesa program parameters into given constant buffer.
*/
static void
-update_texture_constant_buffer(struct brw_context *brw)
+update_constant_buffer(struct brw_context *brw,
+ const struct gl_program_parameter_list *params,
+ dri_bo *const_buffer)
{
- struct brw_fragment_program *fp =
- (struct brw_fragment_program *) brw->fragment_program;
- const struct gl_program_parameter_list *params = fp->program.Base.Parameters;
const int size = params->NumParameters * 4 * sizeof(GLfloat);
- assert(fp->const_buffer);
- assert(fp->const_buffer->size >= size);
-
- /* copy constants into the buffer */
+ /* copy Mesa program constants into the buffer */
if (size > 0) {
GLubyte *map;
- dri_bo_map(fp->const_buffer, GL_TRUE);
- map = fp->const_buffer->virtual;
+
+ assert(const_buffer);
+ assert(const_buffer->size >= size);
+
+ dri_bo_map(const_buffer, GL_TRUE);
+ map = const_buffer->virtual;
memcpy(map, params->ParameterValues, size);
- dri_bo_unmap(fp->const_buffer);
+ dri_bo_unmap(const_buffer);
}
}
+static void
+update_vertex_constant_buffer(struct brw_context *brw)
+{
+ struct brw_vertex_program *vp =
+ (struct brw_vertex_program *) brw->vertex_program;
+ update_constant_buffer(brw, vp->program.Base.Parameters, vp->const_buffer);
+}
+
+
+static void
+update_fragment_constant_buffer(struct brw_context *brw)
+{
+ struct brw_fragment_program *fp =
+ (struct brw_fragment_program *) brw->fragment_program;
+ update_constant_buffer(brw, fp->program.Base.Parameters, fp->const_buffer);
+}
+
+
static void emit_constant_buffer(struct brw_context *brw)
{
struct intel_context *intel = &brw->intel;
GLuint sz = brw->curbe.total_size;
- update_texture_constant_buffer(brw);
+ update_vertex_constant_buffer(brw);
+ update_fragment_constant_buffer(brw);
BEGIN_BATCH(2, IGNORE_CLIPRECTS);
if (sz == 0) {