ilo: remove ilo_image_params

It suffices to use ilo_image_layout directly.
This commit is contained in:
Chia-I Wu 2015-06-29 16:58:17 +08:00
parent b4c66e4d3e
commit 19ea623586
1 changed files with 47 additions and 75 deletions

View File

@ -40,14 +40,6 @@ enum {
IMAGE_TILING_W)
};
struct ilo_image_params {
const struct ilo_dev *dev;
const struct ilo_image_info *info;
unsigned h0, h1;
unsigned max_x, max_y;
};
struct ilo_image_layout {
enum ilo_image_walk_type walk;
bool interleaved_samples;
@ -951,6 +943,26 @@ image_bind_gpu(const struct ilo_image_info *info)
info->bind_cursor);
}
static bool
image_validate_gen6(const struct ilo_dev *dev,
const struct ilo_image_info *info)
{
ILO_DEV_ASSERT(dev, 6, 8);
/*
* From the Ivy Bridge PRM, volume 2 part 1, page 314:
*
* "The separate stencil buffer is always enabled, thus the field in
* 3DSTATE_DEPTH_BUFFER to explicitly enable the separate stencil
* buffer has been removed Surface formats with interleaved depth and
* stencil are no longer supported"
*/
if (ilo_dev_gen(dev) >= ILO_GEN(7) && info->bind_zs)
assert(!info->interleaved_stencil);
return true;
}
static bool
image_get_gen6_layout(const struct ilo_dev *dev,
const struct ilo_image_info *info,
@ -958,6 +970,9 @@ image_get_gen6_layout(const struct ilo_dev *dev,
{
ILO_DEV_ASSERT(dev, 6, 8);
if (!image_validate_gen6(dev, info))
return false;
if (image_bind_gpu(info) || info->level_count > 1) {
if (!image_init_gen6_hardware_layout(dev, info, layout))
return false;
@ -990,38 +1005,6 @@ image_get_gen6_layout(const struct ilo_dev *dev,
return true;
}
static void
img_init_size_and_format(struct ilo_image *img,
struct ilo_image_params *params)
{
const struct ilo_image_info *info = params->info;
img->type = info->type;
/*
* From the Ivy Bridge PRM, volume 2 part 1, page 314:
*
* "The separate stencil buffer is always enabled, thus the field in
* 3DSTATE_DEPTH_BUFFER to explicitly enable the separate stencil
* buffer has been removed Surface formats with interleaved depth and
* stencil are no longer supported"
*/
if (ilo_dev_gen(params->dev) >= ILO_GEN(7) && info->bind_zs)
assert(!info->interleaved_stencil);
img->format = info->format;
img->block_width = info->block_width;
img->block_height = info->block_height;
img->block_size = info->block_size;
img->width0 = info->width;
img->height0 = info->height;
img->depth0 = info->depth;
img->array_size = info->array_size;
img->level_count = info->level_count;
img->sample_count = info->sample_count;
}
static bool
image_set_gen6_bo_size(struct ilo_image *img,
const struct ilo_dev *dev,
@ -1407,19 +1390,34 @@ image_set_gen7_mcs(struct ilo_image *img,
return true;
}
static bool
img_init(struct ilo_image *img,
struct ilo_image_params *params)
bool
ilo_image_init(struct ilo_image *img,
const struct ilo_dev *dev,
const struct ilo_image_info *info)
{
struct ilo_image_layout layout;
assert(ilo_is_zeroed(img, sizeof(*img)));
memset(&layout, 0, sizeof(layout));
layout.lods = img->lods;
if (!image_get_gen6_layout(params->dev, params->info, &layout))
if (!image_get_gen6_layout(dev, info, &layout))
return false;
img_init_size_and_format(img, params);
img->type = info->type;
img->format = info->format;
img->block_width = info->block_width;
img->block_height = info->block_height;
img->block_size = info->block_size;
img->width0 = info->width;
img->height0 = info->height;
img->depth0 = info->depth;
img->array_size = info->array_size;
img->level_count = info->level_count;
img->sample_count = info->sample_count;
img->walk = layout.walk;
img->interleaved_samples = layout.interleaved_samples;
@ -1431,23 +1429,19 @@ img_init(struct ilo_image *img,
img->align_i = layout.align_i;
img->align_j = layout.align_j;
params->max_x = layout.monolithic_width;
params->max_y = layout.monolithic_height;
params->h0 = layout.walk_layer_h0;
params->h1 = layout.walk_layer_h1;
img->walk_layer_height = layout.walk_layer_height;
if (!image_set_gen6_bo_size(img, params->dev, params->info, &layout))
if (!image_set_gen6_bo_size(img, dev, info, &layout))
return false;
img->scanout = params->info->bind_scanout;
img->scanout = info->bind_scanout;
switch (layout.aux) {
case ILO_IMAGE_AUX_HIZ:
image_set_gen6_hiz(img, params->dev, params->info, &layout);
image_set_gen6_hiz(img, dev, info, &layout);
break;
case ILO_IMAGE_AUX_MCS:
image_set_gen7_mcs(img, params->dev, params->info, &layout);
image_set_gen7_mcs(img, dev, info, &layout);
break;
default:
break;
@ -1455,25 +1449,3 @@ img_init(struct ilo_image *img,
return true;
}
/**
* Initialize the image. Callers should zero-initialize \p img first.
*/
bool
ilo_image_init(struct ilo_image *img,
const struct ilo_dev *dev,
const struct ilo_image_info *info)
{
struct ilo_image_params params;
assert(ilo_is_zeroed(img, sizeof(*img)));
memset(&params, 0, sizeof(params));
params.dev = dev;
params.info = info;
if (!img_init(img, &params))
return false;
return true;
}