diff options
| author | Marek Olšák <maraeo@gmail.com> | 2011-01-29 03:15:52 +0100 | 
|---|---|---|
| committer | Marek Olšák <maraeo@gmail.com> | 2011-01-30 03:29:48 +0100 | 
| commit | 15730a8207374936e354d945730070cb29c9547c (patch) | |
| tree | 9a099a8df18f86bffedacbe592a170035a80c1e7 | |
| parent | 73fb2b7c9074c8878e8ff617ad6d6a21b93b66f2 (diff) | |
r600g: consolidate set_constant_buffer functions
| -rw-r--r-- | src/gallium/drivers/r600/evergreen_state.c | 50 | ||||
| -rw-r--r-- | src/gallium/drivers/r600/r600_pipe.h | 2 | ||||
| -rw-r--r-- | src/gallium/drivers/r600/r600_state.c | 48 | ||||
| -rw-r--r-- | src/gallium/drivers/r600/r600_state_common.c | 48 | 
4 files changed, 51 insertions, 97 deletions
| diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c index 08f9f753af..fa239a816b 100644 --- a/src/gallium/drivers/r600/evergreen_state.c +++ b/src/gallium/drivers/r600/evergreen_state.c @@ -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; diff --git a/src/gallium/drivers/r600/r600_pipe.h b/src/gallium/drivers/r600/r600_pipe.h index ae73f56d12..a0164868f3 100644 --- a/src/gallium/drivers/r600/r600_pipe.h +++ b/src/gallium/drivers/r600/r600_pipe.h @@ -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); diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c index e4423a309d..8c583b4f39 100644 --- a/src/gallium/drivers/r600/r600_state.c +++ b/src/gallium/drivers/r600/r600_state.c @@ -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; diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c index c07b09d15c..26e5981e98 100644 --- a/src/gallium/drivers/r600/r600_state_common.c +++ b/src/gallium/drivers/r600/r600_state_common.c @@ -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; | 
