r600: refactor out the immediate setup code.

This just refactors the same code out of the images/buffers paths.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2017-12-05 08:34:26 +00:00
parent df21cd5248
commit 275293b2b4
1 changed files with 28 additions and 38 deletions

View File

@ -3853,6 +3853,32 @@ static void evergreen_set_tess_state(struct pipe_context *ctx,
rctx->tess_state_dirty = true;
}
static void evergreen_setup_immed_buffer(struct r600_context *rctx,
struct r600_image_view *rview,
enum pipe_format pformat)
{
struct r600_screen *rscreen = (struct r600_screen *)rctx->b.b.screen;
uint32_t immed_size = rscreen->b.info.max_se * 256 * 64 * util_format_get_blocksize(pformat);
struct eg_buf_res_params buf_params;
bool skip_reloc = false;
struct r600_resource *resource = (struct r600_resource *)rview->base.resource;
if (!resource->immed_buffer) {
eg_resource_alloc_immed(&rscreen->b, resource, immed_size);
}
memset(&buf_params, 0, sizeof(buf_params));
buf_params.pipe_format = pformat;
buf_params.size = resource->immed_buffer->b.b.width0;
buf_params.swizzle[0] = PIPE_SWIZZLE_X;
buf_params.swizzle[1] = PIPE_SWIZZLE_Y;
buf_params.swizzle[2] = PIPE_SWIZZLE_Z;
buf_params.swizzle[3] = PIPE_SWIZZLE_W;
buf_params.uncached = 1;
evergreen_fill_buffer_resource_words(rctx, &resource->immed_buffer->b.b,
&buf_params, &skip_reloc,
rview->immed_resource_words);
}
static void evergreen_set_hw_atomic_buffers(struct pipe_context *ctx,
unsigned start_slot,
unsigned count,
@ -3891,7 +3917,6 @@ static void evergreen_set_shader_buffers(struct pipe_context *ctx,
const struct pipe_shader_buffer *buffers)
{
struct r600_context *rctx = (struct r600_context *)ctx;
struct r600_screen *rscreen = (struct r600_screen *)ctx->screen;
struct r600_image_state *istate = NULL;
struct r600_image_view *rview;
struct r600_tex_color_info color;
@ -3899,7 +3924,6 @@ static void evergreen_set_shader_buffers(struct pipe_context *ctx,
struct r600_resource *resource;
int i, idx;
unsigned old_mask;
bool skip_reloc = false;
if (shader != PIPE_SHADER_FRAGMENT && count == 0)
return;
@ -3924,11 +3948,8 @@ static void evergreen_set_shader_buffers(struct pipe_context *ctx,
pipe_resource_reference((struct pipe_resource **)&rview->base.resource, buf->buffer);
resource = (struct r600_resource *)rview->base.resource;
if (!resource->immed_buffer) {
int immed_size = (rscreen->b.info.max_se * 256 * 64) * util_format_get_blocksize(resource->b.b.format);
eg_resource_alloc_immed(&rscreen->b, resource, immed_size);
}
evergreen_setup_immed_buffer(rctx, rview, resource->b.b.format);
color.offset = 0;
color.view = 0;
@ -3952,18 +3973,6 @@ static void evergreen_set_shader_buffers(struct pipe_context *ctx,
rview->cb_color_fmask = color.fmask;
rview->cb_color_fmask_slice = color.fmask_slice;
memset(&buf_params, 0, sizeof(buf_params));
buf_params.pipe_format = resource->b.b.format;
buf_params.size = resource->immed_buffer->b.b.width0;
buf_params.swizzle[0] = PIPE_SWIZZLE_X;
buf_params.swizzle[1] = PIPE_SWIZZLE_Y;
buf_params.swizzle[2] = PIPE_SWIZZLE_Z;
buf_params.swizzle[3] = PIPE_SWIZZLE_W;
buf_params.uncached = 1;
evergreen_fill_buffer_resource_words(rctx, &resource->immed_buffer->b.b,
&buf_params, &skip_reloc,
rview->immed_resource_words);
memset(&buf_params, 0, sizeof(buf_params));
buf_params.pipe_format = PIPE_FORMAT_R32_FLOAT;
buf_params.offset = buf->buffer_offset;
@ -4001,7 +4010,6 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
const struct pipe_image_view *images)
{
struct r600_context *rctx = (struct r600_context *)ctx;
struct r600_screen *rscreen = (struct r600_screen *)ctx->screen;
int i;
struct r600_image_view *rview;
struct pipe_resource *image;
@ -4010,7 +4018,6 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
struct eg_buf_res_params buf_params;
struct eg_tex_res_params tex_params;
unsigned old_mask;
bool skip_reloc = false;
struct r600_image_state *istate = NULL;
int idx;
if (shader != PIPE_SHADER_FRAGMENT && count == 0)
@ -4041,11 +4048,7 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
rview->base.resource = NULL;
pipe_resource_reference((struct pipe_resource **)&rview->base.resource, image);
if (!resource->immed_buffer) {
int immed_size = (rscreen->b.info.max_se * 256 * 64) * util_format_get_blocksize(iview->format);
eg_resource_alloc_immed(&rscreen->b, resource, immed_size);
}
evergreen_setup_immed_buffer(rctx, rview, iview->format);
bool is_buffer = image->target == PIPE_BUFFER;
struct r600_texture *rtex = (struct r600_texture *)image;
@ -4118,19 +4121,6 @@ static void evergreen_set_shader_images(struct pipe_context *ctx,
rview->cb_color_fmask = color.fmask;
rview->cb_color_fmask_slice = color.fmask_slice;
memset(&buf_params, 0, sizeof(buf_params));
buf_params.pipe_format = iview->format;
buf_params.size = resource->immed_buffer->b.b.width0;
buf_params.swizzle[0] = PIPE_SWIZZLE_X;
buf_params.swizzle[1] = PIPE_SWIZZLE_Y;
buf_params.swizzle[2] = PIPE_SWIZZLE_Z;
buf_params.swizzle[3] = PIPE_SWIZZLE_W;
buf_params.uncached = 1;
evergreen_fill_buffer_resource_words(rctx, &resource->immed_buffer->b.b,
&buf_params, &skip_reloc,
rview->immed_resource_words);
if (image->target != PIPE_BUFFER) {
memset(&tex_params, 0, sizeof(tex_params));
tex_params.pipe_format = iview->format;