ilo: replace pipe_texture_target by gen_surface_type
Replace pipe_texture_target by gen_surface_type in ilo_image. Change how GEN6_SURFTYPE_CUBE is specified in ilo_state_surface and ilo_state_zs.
This commit is contained in:
parent
934e4a469f
commit
dc2e92b2d3
|
@ -514,7 +514,7 @@ img_init_walk_gen7(struct ilo_image *img,
|
|||
* "note that the depth buffer and stencil buffer have an implied
|
||||
* value of ARYSPC_FULL"
|
||||
*/
|
||||
img->walk = (info->target == PIPE_TEXTURE_3D) ?
|
||||
img->walk = (info->type == GEN6_SURFTYPE_3D) ?
|
||||
ILO_IMAGE_WALK_3D : ILO_IMAGE_WALK_LAYER;
|
||||
|
||||
img->interleaved_samples = true;
|
||||
|
@ -533,7 +533,7 @@ img_init_walk_gen7(struct ilo_image *img,
|
|||
assert(info->level_count == 1);
|
||||
|
||||
img->walk =
|
||||
(info->target == PIPE_TEXTURE_3D) ? ILO_IMAGE_WALK_3D :
|
||||
(info->type == GEN6_SURFTYPE_3D) ? ILO_IMAGE_WALK_3D :
|
||||
(info->level_count > 1) ? ILO_IMAGE_WALK_LAYER :
|
||||
ILO_IMAGE_WALK_LOD;
|
||||
|
||||
|
@ -557,7 +557,7 @@ img_init_walk_gen6(struct ilo_image *img,
|
|||
* GEN6 does not support compact spacing otherwise.
|
||||
*/
|
||||
img->walk =
|
||||
(params->info->target == PIPE_TEXTURE_3D) ? ILO_IMAGE_WALK_3D :
|
||||
(params->info->type == GEN6_SURFTYPE_3D) ? ILO_IMAGE_WALK_3D :
|
||||
(img->format == PIPE_FORMAT_S8_UINT) ? ILO_IMAGE_WALK_LOD :
|
||||
ILO_IMAGE_WALK_LAYER;
|
||||
|
||||
|
@ -674,7 +674,7 @@ img_init_size_and_format(struct ilo_image *img,
|
|||
enum pipe_format format = info->format;
|
||||
bool require_separate_stencil = false;
|
||||
|
||||
img->target = info->target;
|
||||
img->type = info->type;
|
||||
img->width0 = info->width;
|
||||
img->height0 = info->height;
|
||||
img->depth0 = info->depth;
|
||||
|
@ -737,7 +737,7 @@ img_want_mcs(const struct ilo_image *img,
|
|||
if (ilo_dev_gen(params->dev) < ILO_GEN(7))
|
||||
return false;
|
||||
|
||||
if (info->target != PIPE_TEXTURE_2D || !info->bind_surface_dp_render)
|
||||
if (info->type != GEN6_SURFTYPE_2D || !info->bind_surface_dp_render)
|
||||
return false;
|
||||
|
||||
/*
|
||||
|
@ -799,7 +799,7 @@ img_want_hiz(const struct ilo_image *img,
|
|||
return false;
|
||||
|
||||
/* we want 8x4 aligned levels */
|
||||
if (info->target == PIPE_TEXTURE_1D)
|
||||
if (info->type == GEN6_SURFTYPE_1D)
|
||||
return false;
|
||||
|
||||
if (!info->bind_zs)
|
||||
|
@ -865,7 +865,7 @@ img_align(struct ilo_image *img, struct ilo_image_params *params)
|
|||
align_w = MAX2(align_w, img->align_i);
|
||||
align_h = MAX2(align_h, img->align_j);
|
||||
|
||||
if (info->target == PIPE_TEXTURE_CUBE)
|
||||
if (info->type == GEN6_SURFTYPE_CUBE)
|
||||
pad_h += 2;
|
||||
|
||||
if (params->compressed)
|
||||
|
@ -1339,7 +1339,7 @@ img_init_for_transfer(struct ilo_image *img,
|
|||
const struct ilo_dev *dev,
|
||||
const struct ilo_image_info *info)
|
||||
{
|
||||
const unsigned num_layers = (info->target == PIPE_TEXTURE_3D) ?
|
||||
const unsigned num_layers = (info->type == GEN6_SURFTYPE_3D) ?
|
||||
info->depth : info->array_size;
|
||||
unsigned layer_width, layer_height;
|
||||
|
||||
|
@ -1348,7 +1348,7 @@ img_init_for_transfer(struct ilo_image *img,
|
|||
|
||||
img->aux.type = ILO_IMAGE_AUX_NONE;
|
||||
|
||||
img->target = info->target;
|
||||
img->type = info->type;
|
||||
img->width0 = info->width;
|
||||
img->height0 = info->height;
|
||||
img->depth0 = info->depth;
|
||||
|
|
|
@ -68,7 +68,7 @@ enum ilo_image_walk_type {
|
|||
};
|
||||
|
||||
struct ilo_image_info {
|
||||
enum pipe_texture_target target;
|
||||
enum gen_surface_type type;
|
||||
|
||||
enum pipe_format format;
|
||||
|
||||
|
@ -117,7 +117,7 @@ struct ilo_image_lod {
|
|||
* Texture layout.
|
||||
*/
|
||||
struct ilo_image {
|
||||
enum pipe_texture_target target;
|
||||
enum gen_surface_type type;
|
||||
|
||||
/* size, format, etc for programming hardware states */
|
||||
unsigned width0;
|
||||
|
|
|
@ -425,29 +425,6 @@ surface_set_gen7_buffer_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
return true;
|
||||
}
|
||||
|
||||
static enum gen_surface_type
|
||||
get_gen6_surface_type(const struct ilo_dev *dev, const struct ilo_image *img)
|
||||
{
|
||||
ILO_DEV_ASSERT(dev, 6, 8);
|
||||
|
||||
switch (img->target) {
|
||||
case PIPE_TEXTURE_1D:
|
||||
case PIPE_TEXTURE_1D_ARRAY:
|
||||
return GEN6_SURFTYPE_1D;
|
||||
case PIPE_TEXTURE_2D:
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_2D_ARRAY:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
return GEN6_SURFTYPE_2D;
|
||||
case PIPE_TEXTURE_3D:
|
||||
return GEN6_SURFTYPE_3D;
|
||||
default:
|
||||
assert(!"unknown texture target");
|
||||
return GEN6_SURFTYPE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
surface_validate_gen6_image(const struct ilo_dev *dev,
|
||||
const struct ilo_state_surface_image_info *info)
|
||||
|
@ -487,17 +464,19 @@ surface_validate_gen6_image(const struct ilo_dev *dev,
|
|||
assert(info->img->bo_stride && info->img->bo_stride <= 512 * 1024 &&
|
||||
info->img->width0 <= info->img->bo_stride);
|
||||
|
||||
if (info->is_cube_map) {
|
||||
assert(get_gen6_surface_type(dev, info->img) == GEN6_SURFTYPE_2D);
|
||||
|
||||
/*
|
||||
* From the Sandy Bridge PRM, volume 4 part 1, page 78:
|
||||
*
|
||||
* "For cube maps, Width must be set equal to the Height."
|
||||
*/
|
||||
assert(info->img->width0 == info->img->height0);
|
||||
if (info->type != info->img->type) {
|
||||
assert(info->type == GEN6_SURFTYPE_2D &&
|
||||
info->img->type == GEN6_SURFTYPE_CUBE);
|
||||
}
|
||||
|
||||
/*
|
||||
* From the Sandy Bridge PRM, volume 4 part 1, page 78:
|
||||
*
|
||||
* "For cube maps, Width must be set equal to the Height."
|
||||
*/
|
||||
if (info->type == GEN6_SURFTYPE_CUBE)
|
||||
assert(info->img->width0 == info->img->height0);
|
||||
|
||||
/*
|
||||
* From the Sandy Bridge PRM, volume 4 part 1, page 72:
|
||||
*
|
||||
|
@ -532,20 +511,21 @@ surface_validate_gen6_image(const struct ilo_dev *dev,
|
|||
}
|
||||
|
||||
static void
|
||||
get_gen6_max_extent(const struct ilo_dev *dev,
|
||||
const struct ilo_image *img,
|
||||
uint16_t *max_w, uint16_t *max_h)
|
||||
surface_get_gen6_image_max_extent(const struct ilo_dev *dev,
|
||||
const struct ilo_state_surface_image_info *info,
|
||||
uint16_t *max_w, uint16_t *max_h)
|
||||
{
|
||||
const uint16_t max_size = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 16384 : 8192;
|
||||
|
||||
ILO_DEV_ASSERT(dev, 6, 8);
|
||||
|
||||
switch (get_gen6_surface_type(dev, img)) {
|
||||
switch (info->type) {
|
||||
case GEN6_SURFTYPE_1D:
|
||||
*max_w = max_size;
|
||||
*max_h = 1;
|
||||
break;
|
||||
case GEN6_SURFTYPE_2D:
|
||||
case GEN6_SURFTYPE_CUBE:
|
||||
*max_w = max_size;
|
||||
*max_h = max_size;
|
||||
break;
|
||||
|
@ -573,7 +553,7 @@ surface_get_gen6_image_extent(const struct ilo_dev *dev,
|
|||
w = info->img->width0;
|
||||
h = info->img->height0;
|
||||
|
||||
get_gen6_max_extent(dev, info->img, &max_w, &max_h);
|
||||
surface_get_gen6_image_max_extent(dev, info, &max_w, &max_h);
|
||||
assert(w && h && w <= max_w && h <= max_h);
|
||||
|
||||
*width = w - 1;
|
||||
|
@ -624,16 +604,17 @@ surface_get_gen6_image_slices(const struct ilo_dev *dev,
|
|||
* layers to (86 * 6), about 512.
|
||||
*/
|
||||
|
||||
switch (get_gen6_surface_type(dev, info->img)) {
|
||||
switch (info->type) {
|
||||
case GEN6_SURFTYPE_1D:
|
||||
case GEN6_SURFTYPE_2D:
|
||||
case GEN6_SURFTYPE_CUBE:
|
||||
max_slice = (ilo_dev_gen(dev) >= ILO_GEN(7.5)) ? 2048 : 512;
|
||||
|
||||
assert(info->img->array_size <= max_slice);
|
||||
max_slice = info->img->array_size;
|
||||
|
||||
d = info->slice_count;
|
||||
if (info->is_cube_map) {
|
||||
if (info->type == GEN6_SURFTYPE_CUBE) {
|
||||
if (info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER) {
|
||||
if (!d || d % 6) {
|
||||
ilo_warn("invalid cube slice count\n");
|
||||
|
@ -946,7 +927,6 @@ surface_set_gen6_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
uint8_t min_lod, mip_count;
|
||||
enum gen_sample_count sample_count;
|
||||
uint32_t alignments;
|
||||
enum gen_surface_type type;
|
||||
uint32_t dw0, dw2, dw3, dw4, dw5;
|
||||
|
||||
ILO_DEV_ASSERT(dev, 6, 6);
|
||||
|
@ -966,10 +946,7 @@ surface_set_gen6_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
if (info->img->sample_count > 1)
|
||||
assert(info->img->interleaved_samples);
|
||||
|
||||
type = (info->is_cube_map) ? GEN6_SURFTYPE_CUBE :
|
||||
get_gen6_surface_type(dev, info->img);
|
||||
|
||||
dw0 = type << GEN6_SURFACE_DW0_TYPE__SHIFT |
|
||||
dw0 = info->type << GEN6_SURFACE_DW0_TYPE__SHIFT |
|
||||
info->format << GEN6_SURFACE_DW0_FORMAT__SHIFT |
|
||||
GEN6_SURFACE_DW0_MIPLAYOUT_BELOW;
|
||||
|
||||
|
@ -996,7 +973,7 @@ surface_set_gen6_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
* "When TEXCOORDMODE_CLAMP is used when accessing a cube map, this
|
||||
* field must be programmed to 111111b (all faces enabled)."
|
||||
*/
|
||||
if (info->is_cube_map &&
|
||||
if (info->type == GEN6_SURFTYPE_CUBE &&
|
||||
info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER) {
|
||||
dw0 |= GEN6_SURFACE_DW0_CUBE_MAP_CORNER_MODE_AVERAGE |
|
||||
GEN6_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
|
||||
|
@ -1025,7 +1002,7 @@ surface_set_gen6_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
surf->surface[4] = dw4;
|
||||
surf->surface[5] = dw5;
|
||||
|
||||
surf->type = type;
|
||||
surf->type = info->type;
|
||||
surf->min_lod = min_lod;
|
||||
surf->mip_count = mip_count;
|
||||
|
||||
|
@ -1041,7 +1018,6 @@ surface_set_gen7_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
uint8_t min_lod, mip_count;
|
||||
uint32_t alignments;
|
||||
enum gen_sample_count sample_count;
|
||||
enum gen_surface_type type;
|
||||
uint32_t dw0, dw1, dw2, dw3, dw4, dw5, dw7;
|
||||
|
||||
ILO_DEV_ASSERT(dev, 7, 8);
|
||||
|
@ -1055,10 +1031,7 @@ surface_set_gen7_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
!surface_get_gen6_image_alignments(dev, info, &alignments))
|
||||
return false;
|
||||
|
||||
type = (info->is_cube_map) ? GEN6_SURFTYPE_CUBE :
|
||||
get_gen6_surface_type(dev, info->img);
|
||||
|
||||
dw0 = type << GEN7_SURFACE_DW0_TYPE__SHIFT |
|
||||
dw0 = info->type << GEN7_SURFACE_DW0_TYPE__SHIFT |
|
||||
info->format << GEN7_SURFACE_DW0_FORMAT__SHIFT |
|
||||
alignments;
|
||||
|
||||
|
@ -1092,7 +1065,7 @@ surface_set_gen7_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
* field must be programmed to 111111b (all faces enabled). This field
|
||||
* is ignored unless the Surface Type is SURFTYPE_CUBE."
|
||||
*/
|
||||
if (info->is_cube_map &&
|
||||
if (info->type == GEN6_SURFTYPE_CUBE &&
|
||||
info->access == ILO_STATE_SURFACE_ACCESS_SAMPLER)
|
||||
dw0 |= GEN7_SURFACE_DW0_CUBE_FACE_ENABLES__MASK;
|
||||
|
||||
|
@ -1156,7 +1129,7 @@ surface_set_gen7_image_SURFACE_STATE(struct ilo_state_surface *surf,
|
|||
surf->surface[12] = 0;
|
||||
}
|
||||
|
||||
surf->type = type;
|
||||
surf->type = info->type;
|
||||
surf->min_lod = min_lod;
|
||||
surf->mip_count = mip_count;
|
||||
|
||||
|
|
|
@ -72,11 +72,12 @@ struct ilo_state_surface_image_info {
|
|||
|
||||
enum ilo_state_surface_access access;
|
||||
|
||||
enum gen_surface_type type;
|
||||
|
||||
enum gen_surface_format format;
|
||||
bool is_integer;
|
||||
|
||||
bool readonly;
|
||||
bool is_cube_map;
|
||||
bool is_array;
|
||||
};
|
||||
|
||||
|
|
|
@ -60,29 +60,6 @@ zs_set_gen6_null_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
return true;
|
||||
}
|
||||
|
||||
static enum gen_surface_type
|
||||
get_gen6_surface_type(const struct ilo_dev *dev, const struct ilo_image *img)
|
||||
{
|
||||
ILO_DEV_ASSERT(dev, 6, 8);
|
||||
|
||||
switch (img->target) {
|
||||
case PIPE_TEXTURE_1D:
|
||||
case PIPE_TEXTURE_1D_ARRAY:
|
||||
return GEN6_SURFTYPE_1D;
|
||||
case PIPE_TEXTURE_2D:
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_2D_ARRAY:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
return GEN6_SURFTYPE_2D;
|
||||
case PIPE_TEXTURE_3D:
|
||||
return GEN6_SURFTYPE_3D;
|
||||
default:
|
||||
assert(!"unknown texture target");
|
||||
return GEN6_SURFTYPE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static enum gen_depth_format
|
||||
get_gen6_depth_format(const struct ilo_dev *dev, const struct ilo_image *img)
|
||||
{
|
||||
|
@ -148,50 +125,52 @@ zs_validate_gen6(const struct ilo_dev *dev,
|
|||
/*
|
||||
* From the Ivy Bridge PRM, volume 2 part 1, page 315:
|
||||
*
|
||||
* The stencil buffer has a format of S8_UINT, and shares Surface
|
||||
* "The stencil buffer has a format of S8_UINT, and shares Surface
|
||||
* Type, Height, Width, and Depth, Minimum Array Element, Render
|
||||
* Target View Extent, Depth Coordinate Offset X/Y, LOD, and Depth
|
||||
* Buffer Object Control State fields of the depth buffer.
|
||||
* Buffer Object Control State fields of the depth buffer."
|
||||
*/
|
||||
if (info->z_img == info->s_img) {
|
||||
assert(info->z_img->target == info->s_img->target &&
|
||||
info->z_img->width0 == info->s_img->width0 &&
|
||||
if (info->z_img && info->s_img && info->z_img != info->s_img) {
|
||||
assert(info->z_img->type == info->s_img->type &&
|
||||
info->z_img->height0 == info->s_img->height0 &&
|
||||
info->z_img->depth0 == info->s_img->depth0);
|
||||
}
|
||||
|
||||
if (info->type != img->type) {
|
||||
assert(info->type == GEN6_SURFTYPE_2D &&
|
||||
img->type == GEN6_SURFTYPE_CUBE);
|
||||
}
|
||||
|
||||
assert(info->level < img->level_count);
|
||||
assert(img->bo_stride);
|
||||
|
||||
if (info->is_cube_map) {
|
||||
assert(get_gen6_surface_type(dev, img) == GEN6_SURFTYPE_2D);
|
||||
|
||||
/*
|
||||
* From the Sandy Bridge PRM, volume 2 part 1, page 323:
|
||||
*
|
||||
* "For cube maps, Width must be set equal to Height."
|
||||
*/
|
||||
/*
|
||||
* From the Sandy Bridge PRM, volume 2 part 1, page 323:
|
||||
*
|
||||
* "For cube maps, Width must be set equal to Height."
|
||||
*/
|
||||
if (info->type == GEN6_SURFTYPE_CUBE)
|
||||
assert(img->width0 == img->height0);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
get_gen6_max_extent(const struct ilo_dev *dev,
|
||||
const struct ilo_image *img,
|
||||
uint16_t *max_w, uint16_t *max_h)
|
||||
zs_get_gen6_max_extent(const struct ilo_dev *dev,
|
||||
const struct ilo_state_zs_info *info,
|
||||
uint16_t *max_w, uint16_t *max_h)
|
||||
{
|
||||
const uint16_t max_size = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 16384 : 8192;
|
||||
|
||||
ILO_DEV_ASSERT(dev, 6, 8);
|
||||
|
||||
switch (get_gen6_surface_type(dev, img)) {
|
||||
switch (info->type) {
|
||||
case GEN6_SURFTYPE_1D:
|
||||
*max_w = max_size;
|
||||
*max_h = 1;
|
||||
break;
|
||||
case GEN6_SURFTYPE_2D:
|
||||
case GEN6_SURFTYPE_CUBE:
|
||||
*max_w = max_size;
|
||||
*max_h = max_size;
|
||||
break;
|
||||
|
@ -297,7 +276,7 @@ zs_get_gen6_depth_extent(const struct ilo_dev *dev,
|
|||
h = align(h, align_h);
|
||||
}
|
||||
|
||||
get_gen6_max_extent(dev, img, &max_w, &max_h);
|
||||
zs_get_gen6_max_extent(dev, info, &max_w, &max_h);
|
||||
assert(w && h && w <= max_w && h <= max_h);
|
||||
|
||||
*width = w - 1;
|
||||
|
@ -326,16 +305,17 @@ zs_get_gen6_depth_slices(const struct ilo_dev *dev,
|
|||
* surfaces. If the volume texture is MIP-mapped, this field specifies
|
||||
* the depth of the base MIP level."
|
||||
*/
|
||||
switch (get_gen6_surface_type(dev, img)) {
|
||||
switch (info->type) {
|
||||
case GEN6_SURFTYPE_1D:
|
||||
case GEN6_SURFTYPE_2D:
|
||||
case GEN6_SURFTYPE_CUBE:
|
||||
max_slice = (ilo_dev_gen(dev) >= ILO_GEN(7)) ? 2048 : 512;
|
||||
|
||||
assert(img->array_size <= max_slice);
|
||||
max_slice = img->array_size;
|
||||
|
||||
d = info->slice_count;
|
||||
if (info->is_cube_map) {
|
||||
if (info->type == GEN6_SURFTYPE_CUBE) {
|
||||
/*
|
||||
* Minumum Array Element and Depth must be 0; Render Target View
|
||||
* Extent is ignored.
|
||||
|
@ -415,7 +395,6 @@ zs_set_gen6_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
const struct ilo_state_zs_info *info)
|
||||
{
|
||||
uint16_t width, height, depth, array_base, view_extent;
|
||||
enum gen_surface_type type;
|
||||
enum gen_depth_format format;
|
||||
uint32_t dw1, dw2, dw3, dw4;
|
||||
|
||||
|
@ -427,10 +406,6 @@ zs_set_gen6_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
&view_extent))
|
||||
return false;
|
||||
|
||||
type = (info->is_cube_map) ? GEN6_SURFTYPE_CUBE :
|
||||
(info->z_img) ? get_gen6_surface_type(dev, info->z_img) :
|
||||
get_gen6_surface_type(dev, info->s_img);
|
||||
|
||||
format = (info->z_img) ? get_gen6_depth_format(dev, info->z_img) :
|
||||
GEN6_ZFORMAT_D32_FLOAT;
|
||||
|
||||
|
@ -450,7 +425,7 @@ zs_set_gen6_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
format = GEN6_ZFORMAT_D24_UNORM_S8_UINT;
|
||||
|
||||
/* info->z_readonly and info->s_readonly are ignored on Gen6 */
|
||||
dw1 = type << GEN6_DEPTH_DW1_TYPE__SHIFT |
|
||||
dw1 = info->type << GEN6_DEPTH_DW1_TYPE__SHIFT |
|
||||
GEN6_TILING_Y << GEN6_DEPTH_DW1_TILING__SHIFT |
|
||||
format << GEN6_DEPTH_DW1_FORMAT__SHIFT;
|
||||
|
||||
|
@ -488,7 +463,6 @@ zs_set_gen7_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
const struct ilo_dev *dev,
|
||||
const struct ilo_state_zs_info *info)
|
||||
{
|
||||
enum gen_surface_type type;
|
||||
enum gen_depth_format format;
|
||||
uint16_t width, height, depth;
|
||||
uint16_t array_base, view_extent;
|
||||
|
@ -502,14 +476,10 @@ zs_set_gen7_3DSTATE_DEPTH_BUFFER(struct ilo_state_zs *zs,
|
|||
&view_extent))
|
||||
return false;
|
||||
|
||||
type = (info->is_cube_map) ? GEN6_SURFTYPE_CUBE :
|
||||
(info->z_img) ? get_gen6_surface_type(dev, info->z_img) :
|
||||
get_gen6_surface_type(dev, info->s_img);
|
||||
|
||||
format = (info->z_img) ? get_gen6_depth_format(dev, info->z_img) :
|
||||
GEN6_ZFORMAT_D32_FLOAT;
|
||||
|
||||
dw1 = type << GEN7_DEPTH_DW1_TYPE__SHIFT |
|
||||
dw1 = info->type << GEN7_DEPTH_DW1_TYPE__SHIFT |
|
||||
format << GEN7_DEPTH_DW1_FORMAT__SHIFT;
|
||||
|
||||
if (info->z_img) {
|
||||
|
@ -714,6 +684,7 @@ ilo_state_zs_init_for_null(struct ilo_state_zs *zs,
|
|||
struct ilo_state_zs_info info;
|
||||
|
||||
memset(&info, 0, sizeof(info));
|
||||
info.type = GEN6_SURFTYPE_NULL;
|
||||
|
||||
return ilo_state_zs_init(zs, dev, &info);
|
||||
}
|
||||
|
|
|
@ -48,11 +48,11 @@ struct ilo_state_zs_info {
|
|||
const struct ilo_vma *s_vma;
|
||||
const struct ilo_vma *hiz_vma;
|
||||
|
||||
enum gen_surface_type type;
|
||||
|
||||
/* ignored prior to Gen7 */
|
||||
bool z_readonly;
|
||||
bool s_readonly;
|
||||
|
||||
bool is_cube_map;
|
||||
};
|
||||
|
||||
struct ilo_state_zs {
|
||||
|
|
|
@ -87,6 +87,28 @@ resource_get_cpu_init(const struct pipe_resource *templ)
|
|||
PIPE_BIND_STREAM_OUTPUT)) ? false : true;
|
||||
}
|
||||
|
||||
static enum gen_surface_type
|
||||
get_surface_type(enum pipe_texture_target target)
|
||||
{
|
||||
switch (target) {
|
||||
case PIPE_TEXTURE_1D:
|
||||
case PIPE_TEXTURE_1D_ARRAY:
|
||||
return GEN6_SURFTYPE_1D;
|
||||
case PIPE_TEXTURE_2D:
|
||||
case PIPE_TEXTURE_RECT:
|
||||
case PIPE_TEXTURE_2D_ARRAY:
|
||||
return GEN6_SURFTYPE_2D;
|
||||
case PIPE_TEXTURE_3D:
|
||||
return GEN6_SURFTYPE_3D;
|
||||
case PIPE_TEXTURE_CUBE:
|
||||
case PIPE_TEXTURE_CUBE_ARRAY:
|
||||
return GEN6_SURFTYPE_CUBE;
|
||||
default:
|
||||
assert(!"unknown texture target");
|
||||
return GEN6_SURFTYPE_NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
resource_get_image_info(const struct pipe_resource *templ,
|
||||
const struct ilo_dev *dev,
|
||||
|
@ -95,7 +117,7 @@ resource_get_image_info(const struct pipe_resource *templ,
|
|||
{
|
||||
memset(info, 0, sizeof(*info));
|
||||
|
||||
info->target = templ->target;
|
||||
info->type = get_surface_type(templ->target);
|
||||
info->format = image_format;
|
||||
|
||||
info->width = templ->width0;
|
||||
|
|
|
@ -2045,6 +2045,7 @@ ilo_create_sampler_view(struct pipe_context *pipe,
|
|||
|
||||
info.vma = &tex->vma;
|
||||
info.access = ILO_STATE_SURFACE_ACCESS_SAMPLER;
|
||||
info.type = tex->image.type;
|
||||
|
||||
if (templ->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT &&
|
||||
tex->image.separate_stencil) {
|
||||
|
@ -2054,8 +2055,6 @@ ilo_create_sampler_view(struct pipe_context *pipe,
|
|||
info.format = ilo_format_translate_texture(dev, templ->format);
|
||||
}
|
||||
|
||||
info.is_cube_map = (tex->image.target == PIPE_TEXTURE_CUBE ||
|
||||
tex->image.target == PIPE_TEXTURE_CUBE_ARRAY);
|
||||
info.is_array = util_resource_is_array_texture(&tex->base);
|
||||
info.readonly = true;
|
||||
|
||||
|
@ -2116,6 +2115,10 @@ ilo_create_surface(struct pipe_context *pipe,
|
|||
info.aux_vma = &tex->aux_vma;
|
||||
|
||||
info.access = ILO_STATE_SURFACE_ACCESS_DP_RENDER;
|
||||
|
||||
info.type = (tex->image.type == GEN6_SURFTYPE_CUBE) ?
|
||||
GEN6_SURFTYPE_2D : tex->image.type;
|
||||
|
||||
info.format = ilo_format_translate_render(dev, templ->format);
|
||||
info.is_array = util_resource_is_array_texture(&tex->base);
|
||||
|
||||
|
@ -2148,6 +2151,9 @@ ilo_create_surface(struct pipe_context *pipe,
|
|||
info.slice_count = templ->u.tex.last_layer -
|
||||
templ->u.tex.first_layer + 1;
|
||||
|
||||
info.type = (tex->image.type == GEN6_SURFTYPE_CUBE) ?
|
||||
GEN6_SURFTYPE_2D : tex->image.type;
|
||||
|
||||
ilo_state_zs_init(&surf->u.zs, dev, &info);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue