r600g: consolidate set_constant_buffer functions
authorMarek Olšák <maraeo@gmail.com>
Sat, 29 Jan 2011 02:15:52 +0000 (03:15 +0100)
committerMarek Olšák <maraeo@gmail.com>
Sun, 30 Jan 2011 02:29:48 +0000 (03:29 +0100)
src/gallium/drivers/r600/evergreen_state.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_state.c
src/gallium/drivers/r600/r600_state_common.c

index 08f9f753afe69e44dbce0a9161acf4c3f50c6281..fa239a816b530d988cd9e57505f192368476d6db 100644 (file)
@@ -837,54 +837,6 @@ static void evergreen_set_framebuffer_state(struct pipe_context *ctx,
        }
 }
 
-static void evergreen_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
-                                       struct pipe_resource *buffer)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_resource_buffer *rbuffer = r600_buffer(buffer);
-       uint32_t offset;
-
-       /* Note that the state tracker can unbind constant buffers by
-        * passing NULL here.
-        */
-       if (buffer == NULL) {
-               return;
-       }
-
-       r600_upload_const_buffer(rctx, &rbuffer, &offset);
-
-       switch (shader) {
-       case PIPE_SHADER_VERTEX:
-               rctx->vs_const_buffer.nregs = 0;
-               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
-                                       R_028180_ALU_CONST_BUFFER_SIZE_VS_0,
-                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
-                                       0xFFFFFFFF, NULL);
-               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
-                                       R_028980_ALU_CONST_CACHE_VS_0,
-                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
-               r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_const_buffer);
-               break;
-       case PIPE_SHADER_FRAGMENT:
-               rctx->ps_const_buffer.nregs = 0;
-               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
-                                       R_028140_ALU_CONST_BUFFER_SIZE_PS_0,
-                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
-                                       0xFFFFFFFF, NULL);
-               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
-                                       R_028940_ALU_CONST_CACHE_PS_0,
-                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
-               r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_const_buffer);
-               break;
-       default:
-               R600_ERR("unsupported %d\n", shader);
-               return;
-       }
-
-       if (!rbuffer->user_buffer)
-               pipe_resource_reference((struct pipe_resource**)&rbuffer, NULL);
-}
-
 void evergreen_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = evergreen_create_blend_state;
@@ -912,7 +864,7 @@ void evergreen_init_state_functions(struct r600_pipe_context *rctx)
        rctx->context.delete_vs_state = r600_delete_vs_shader;
        rctx->context.set_blend_color = evergreen_set_blend_color;
        rctx->context.set_clip_state = evergreen_set_clip_state;
-       rctx->context.set_constant_buffer = evergreen_set_constant_buffer;
+       rctx->context.set_constant_buffer = r600_set_constant_buffer;
        rctx->context.set_fragment_sampler_views = evergreen_set_ps_sampler_view;
        rctx->context.set_framebuffer_state = evergreen_set_framebuffer_state;
        rctx->context.set_polygon_stipple = evergreen_set_polygon_stipple;
index ae73f56d12ca17068c7b05bd20a88d0c9ac09885..a0164868f34019c04e4d0933bf129b742617c2f6 100644 (file)
@@ -277,6 +277,8 @@ void r600_bind_ps_shader(struct pipe_context *ctx, void *state);
 void r600_bind_vs_shader(struct pipe_context *ctx, void *state);
 void r600_delete_ps_shader(struct pipe_context *ctx, void *state);
 void r600_delete_vs_shader(struct pipe_context *ctx, void *state);
+void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
+                             struct pipe_resource *buffer);
 void r600_vertex_buffer_update(struct r600_pipe_context *rctx);
 void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info);
 
index e4423a309d3b0c9d71fac4e9a010ce04f65b7aad..8c583b4f39a24e81c12f20d3dba4911e86e0659e 100644 (file)
@@ -889,54 +889,6 @@ static void r600_set_framebuffer_state(struct pipe_context *ctx,
        }
 }
 
-static void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
-                                    struct pipe_resource *buffer)
-{
-       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
-       struct r600_resource_buffer *rbuffer = r600_buffer(buffer);
-       uint32_t offset;
-
-       /* Note that the state tracker can unbind constant buffers by
-        * passing NULL here.
-        */
-       if (buffer == NULL) {
-               return;
-       }
-
-       r600_upload_const_buffer(rctx, &rbuffer, &offset);
-
-       switch (shader) {
-       case PIPE_SHADER_VERTEX:
-               rctx->vs_const_buffer.nregs = 0;
-               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
-                                       R_028180_ALU_CONST_BUFFER_SIZE_VS_0,
-                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
-                                       0xFFFFFFFF, NULL);
-               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
-                                       R_028980_ALU_CONST_CACHE_VS_0,
-                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
-               r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_const_buffer);
-               break;
-       case PIPE_SHADER_FRAGMENT:
-               rctx->ps_const_buffer.nregs = 0;
-               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
-                                       R_028140_ALU_CONST_BUFFER_SIZE_PS_0,
-                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
-                                       0xFFFFFFFF, NULL);
-               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
-                                       R_028940_ALU_CONST_CACHE_PS_0,
-                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
-               r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_const_buffer);
-               break;
-       default:
-               R600_ERR("unsupported %d\n", shader);
-               return;
-       }
-
-       if (!rbuffer->user_buffer)
-               pipe_resource_reference((struct pipe_resource**)&rbuffer, NULL);
-}
-
 void r600_init_state_functions(struct r600_pipe_context *rctx)
 {
        rctx->context.create_blend_state = r600_create_blend_state;
index c07b09d15caed1a9386e81a95320c4a6e7560bfd..26e5981e982e794302391a53c5baf49ed83587a4 100644 (file)
@@ -359,6 +359,54 @@ void r600_spi_update(struct r600_pipe_context *rctx)
        r600_context_pipe_state_set(&rctx->ctx, &rstate);
 }
 
+void r600_set_constant_buffer(struct pipe_context *ctx, uint shader, uint index,
+                             struct pipe_resource *buffer)
+{
+       struct r600_pipe_context *rctx = (struct r600_pipe_context *)ctx;
+       struct r600_resource_buffer *rbuffer = r600_buffer(buffer);
+       uint32_t offset;
+
+       /* Note that the state tracker can unbind constant buffers by
+        * passing NULL here.
+        */
+       if (buffer == NULL) {
+               return;
+       }
+
+       r600_upload_const_buffer(rctx, &rbuffer, &offset);
+
+       switch (shader) {
+       case PIPE_SHADER_VERTEX:
+               rctx->vs_const_buffer.nregs = 0;
+               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
+                                       R_028180_ALU_CONST_BUFFER_SIZE_VS_0,
+                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
+                                       0xFFFFFFFF, NULL);
+               r600_pipe_state_add_reg(&rctx->vs_const_buffer,
+                                       R_028980_ALU_CONST_CACHE_VS_0,
+                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
+               r600_context_pipe_state_set(&rctx->ctx, &rctx->vs_const_buffer);
+               break;
+       case PIPE_SHADER_FRAGMENT:
+               rctx->ps_const_buffer.nregs = 0;
+               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
+                                       R_028140_ALU_CONST_BUFFER_SIZE_PS_0,
+                                       ALIGN_DIVUP(buffer->width0 >> 4, 16),
+                                       0xFFFFFFFF, NULL);
+               r600_pipe_state_add_reg(&rctx->ps_const_buffer,
+                                       R_028940_ALU_CONST_CACHE_PS_0,
+                                       (r600_bo_offset(rbuffer->r.bo) + offset) >> 8, 0xFFFFFFFF, rbuffer->r.bo);
+               r600_context_pipe_state_set(&rctx->ctx, &rctx->ps_const_buffer);
+               break;
+       default:
+               R600_ERR("unsupported %d\n", shader);
+               return;
+       }
+
+       if (!rbuffer->user_buffer)
+               pipe_resource_reference((struct pipe_resource**)&rbuffer, NULL);
+}
+
 void r600_vertex_buffer_update(struct r600_pipe_context *rctx)
 {
        struct r600_pipe_state *rstate;