summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_tex_layout.c66
1 files changed, 37 insertions, 29 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c b/src/mesa/drivers/dri/i965/brw_tex_layout.c
index 83690ef9b7b..e030ffcd21f 100644
--- a/src/mesa/drivers/dri/i965/brw_tex_layout.c
+++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c
@@ -39,6 +39,35 @@
#define FILE_DEBUG_FLAG DEBUG_MIPTREE
+static void
+brw_miptree_layout_texture_array(struct intel_context *intel,
+ struct intel_mipmap_tree *mt,
+ int slices)
+{
+ GLuint align_w;
+ GLuint align_h;
+ GLuint level;
+ GLuint qpitch = 0;
+ int h0, h1, q;
+
+ intel_get_texture_alignment_unit(mt->format, &align_w, &align_h);
+
+ h0 = ALIGN(mt->height0, align_h);
+ h1 = ALIGN(minify(mt->height0), align_h);
+ qpitch = (h0 + h1 + (intel->gen >= 7 ? 12 : 11) * align_h);
+ if (mt->compressed)
+ qpitch /= 4;
+
+ i945_miptree_layout_2d(mt, slices);
+
+ for (level = mt->first_level; level <= mt->last_level; level++) {
+ for (q = 0; q < slices; q++) {
+ intel_miptree_set_image_offset(mt, level, q, 0, q * qpitch);
+ }
+ }
+ mt->total_height = qpitch * slices;
+}
+
void
brw_miptree_layout(struct intel_context *intel, struct intel_mipmap_tree *mt)
{
@@ -48,36 +77,15 @@ brw_miptree_layout(struct intel_context *intel, struct intel_mipmap_tree *mt)
switch (mt->target) {
case GL_TEXTURE_CUBE_MAP:
if (intel->gen >= 5) {
- GLuint align_w;
- GLuint align_h;
- GLuint level;
- GLuint qpitch = 0;
- int h0, h1, q;
-
- intel_get_texture_alignment_unit(mt->format, &align_w, &align_h);
-
- /* On Ironlake, cube maps are finally represented as just a series
- * of MIPLAYOUT_BELOW 2D textures (like 2D texture arrays), separated
- * by a pitch of qpitch rows, where qpitch is defined by the equation
- * given in Volume 1 of the BSpec.
- */
- h0 = ALIGN(mt->height0, align_h);
- h1 = ALIGN(minify(mt->height0), align_h);
- qpitch = (h0 + h1 + (intel->gen >= 7 ? 12 : 11) * align_h);
- if (mt->compressed)
- qpitch /= 4;
-
- i945_miptree_layout_2d(mt, 6);
-
- for (level = mt->first_level; level <= mt->last_level; level++) {
- for (q = 0; q < 6; q++) {
- intel_miptree_set_image_offset(mt, level, q, 0, q * qpitch);
- }
- }
- mt->total_height = qpitch * 6;
-
- break;
+ /* On Ironlake, cube maps are finally represented as just a series of
+ * MIPLAYOUT_BELOW 2D textures (like 2D texture arrays), separated by a
+ * pitch of qpitch rows, where qpitch is defined by the equation given
+ * in Volume 1 of the BSpec.
+ */
+ brw_miptree_layout_texture_array(intel, mt, 6);
+ break;
}
+ /* FALLTHROUGH */
case GL_TEXTURE_3D: {
GLuint width = mt->width0;