Home | History | Annotate | Download | only in r300

Lines Matching refs:tex

91 static boolean r300_texture_macro_switch(struct r300_resource *tex,
98 tile = r300_get_pixel_alignment(tex->b.b.format, tex->b.b.nr_samples,
99 tex->tex.microtile, RADEON_LAYOUT_TILED, dim, 0);
101 texdim = u_minify(tex->tex.width0, level);
103 texdim = u_minify(tex->tex.height0, level);
119 struct r300_resource *tex,
127 if (tex->tex.stride_in_bytes_override)
128 return tex->tex.stride_in_bytes_override;
131 if (level > tex->b.b.last_level) {
133 __FUNCTION__, level, tex->b.b.last_level);
137 width = u_minify(tex->tex.width0, level);
139 if (util_format_is_plain(tex->b.b.format)) {
140 tile_width = r300_get_pixel_alignment(tex->b.b.format,
141 tex->b.b.nr_samples,
142 tex->tex.microtile,
143 tex->tex.macrotile[level],
147 stride = util_format_get_stride(tex->b.b.format, width);
151 return align(util_format_get_stride(tex->b.b.format, width), is_rs690 ? 64 : 32);
155 static unsigned r300_texture_get_nblocksy(struct r300_resource *tex,
161 height = u_minify(tex->tex.height0, level);
164 if ((tex->b.b.target != PIPE_TEXTURE_1D &&
165 tex->b.b.target != PIPE_TEXTURE_2D &&
166 tex->b.b.target != PIPE_TEXTURE_RECT) ||
167 tex->b.b.last_level != 0) {
171 if (util_format_is_plain(tex->b.b.format)) {
172 tile_height = r300_get_pixel_alignment(tex->b.b.format,
173 tex->b.b.nr_samples,
174 tex->tex.microtile,
175 tex->tex.macrotile[level],
182 if (tex->tex.macrotile[level]) {
190 if (level == 0 && tex->b.b.last_level == 0 &&
191 (tex->b.b.target == PIPE_TEXTURE_1D ||
192 tex->b.b.target == PIPE_TEXTURE_2D ||
193 tex->b.b.target == PIPE_TEXTURE_RECT) &&
205 return util_format_get_nblocksy(tex->b.b.format, height);
217 struct r300_resource *tex,
220 struct pipe_resource *base = &tex->b.b;
225 tex->tex.size_in_bytes = 0;
233 tex->tex.macrotile[i] =
234 (tex->tex.macrotile[0] == RADEON_LAYOUT_TILED &&
235 r300_texture_macro_switch(tex, i, rv350_mode, DIM_WIDTH) &&
236 r300_texture_macro_switch(tex, i, rv350_mode, DIM_HEIGHT)) ?
239 stride = r300_texture_get_stride(screen, tex, i);
244 if (align_for_cbzb && tex->tex.cbzb_allowed[i])
245 nblocksy = r300_texture_get_nblocksy(tex, i, &aligned_for_cbzb);
247 nblocksy = r300_texture_get_nblocksy(tex, i, NULL);
258 size = layer_size * u_minify(tex->tex.depth0, i);
260 tex->tex.offset_in_bytes[i] = tex->tex.size_in_bytes;
261 tex->tex.size_in_bytes = tex->tex.offset_in_bytes[i] + size;
262 tex->tex.layer_size_in_bytes[i] = layer_size;
263 tex->tex.stride_in_bytes[i] = stride;
264 tex->tex.cbzb_allowed[i] = tex->tex.cbzb_allowed[i] && aligned_for_cbzb;
268 i, u_minify(tex->tex.width0, i), u_minify(tex->tex.height0, i),
269 u_minify(tex->tex.depth0, i), stride, tex->tex.size_in_bytes,
270 tex->tex.macrotile[i] ? "TRUE" : "FALSE");
274 static void r300_setup_flags(struct r300_resource *tex)
276 tex->tex.uses_stride_addressing =
277 !util_is_power_of_two(tex->b.b.width0) ||
278 (tex->tex.stride_in_bytes_override &&
279 r300_stride_to_width(tex->b.b.format,
280 tex->tex.stride_in_bytes_override) != tex->b.b.width0);
282 tex->tex.is_npot =
283 tex->tex.uses_stride_addressing ||
284 !util_is_power_of_two(tex->b.b.height0) ||
285 !util_is_power_of_two(tex->b.b.depth0);
289 struct r300_resource *tex)
294 bpp = util_format_get_blocksizebits(tex->b.b.format);
300 first_level_valid = tex->b.b.nr_samples <= 1 &&
302 tex->tex.macrotile[0];
307 for (i = 0; i <= tex->b.b.last_level; i++)
308 tex->tex.cbzb_allowed[i] = first_level_valid && tex->tex.macrotile[i];
319 struct r300_resource *tex)
356 if (util_format_is_depth_or_stencil(tex->b.b.format) &&
357 util_format_get_blocksizebits(tex->b.b.format) == 32 &&
358 tex->tex.microtile) {
367 for (i = 0; i <= tex->b.b.last_level; i++) {
370 stride = r300_stride_to_width(tex->b.b.format,
371 tex->tex.stride_in_bytes[i]);
373 height = u_minify(tex->b.b.height0, i);
377 tex->tex.macrotile[i] &&
378 tex->b.b.nr_samples <= 1 ? 8 : 4;
386 if (util_format_get_blocksizebits(tex->b.b.format) == 32 &&
388 tex->tex.zmask_dwords[i] = zcomp_numdw;
389 tex->tex.zcomp8x8[i] = zcompsize == 8;
391 tex->tex.zmask_stride_in_pixels[i] =
394 tex->tex.zmask_dwords[i] = 0;
395 tex->tex.zcomp8x8[i] = FALSE;
396 tex->tex.zmask_stride_in_pixels[i] = 0;
408 tex->tex.hiz_dwords[i] = hiz_numdw;
409 tex->tex.hiz_stride_in_pixels[i] = stride;
411 tex->tex.hiz_dwords[i] = 0;
412 tex->tex.hiz_stride_in_pixels[i] = 0;
419 struct r300_resource *tex)
421 enum pipe_format format = tex->b.b.format;
426 tex->tex.microtile = RADEON_LAYOUT_LINEAR;
427 tex->tex.macrotile[0] = RADEON_LAYOUT_LINEAR;
434 if (!is_zb && (tex->b.b.height0 == 1 || dbg_no_tiling)) {
443 tex->tex.microtile = RADEON_LAYOUT_TILED;
447 tex->tex.microtile = RADEON_LAYOUT_SQUARETILED;
456 if (r300_texture_macro_switch(tex, 0, rv350_mode, DIM_WIDTH) &&
457 r300_texture_macro_switch(tex, 0, rv350_mode, DIM_HEIGHT)) {
458 tex->tex.macrotile[0] = RADEON_LAYOUT_TILED;
462 static void r300_tex_print_info(struct r300_resource *tex,
469 tex->tex.macrotile[0] ? "YES" : " NO",
470 tex->tex.microtile ? "YES" : " NO",
471 r300_stride_to_width(tex->b.b.format, tex->tex.stride_in_bytes[0]),
472 tex->b.b.width0, tex->b.b.height0, tex->b.b.depth0,
473 tex->b.b.last_level, tex->tex.size_in_bytes,
474 util_format_short_name(tex->b.b.format));
478 struct r300_resource *tex,
481 tex->b.b.target = base->target;
482 tex->b.b.format = base->format;
483 tex->b.b.width0 = base->width0;
484 tex->b.b.height0 = base->height0;
485 tex->b.b.depth0 = base->depth0;
486 tex->b.b.array_size = base->array_size;
487 tex->b.b.last_level = base->last_level;
488 tex->b.b.nr_samples = base->nr_samples;
489 tex->tex.width0 = base->width0;
490 tex->tex.height0 = base->height0;
491 tex->tex.depth0 = base->depth0;
493 r300_setup_flags(tex);
496 if (base->target == PIPE_TEXTURE_3D && tex->tex.is_npot) {
497 tex->tex.width0 = util_next_power_of_two(tex->tex.width0);
498 tex->tex.height0 = util_next_power_of_two(tex->tex.height0);
499 tex->tex.depth0 = util_next_power_of_two(tex->tex.depth0);
503 if (tex->tex.microtile == RADEON_LAYOUT_UNKNOWN) {
504 r300_setup_tiling(rscreen, tex);
507 r300_setup_cbzb_flags(rscreen, tex);
510 r300_setup_miptree(rscreen, tex, TRUE);
513 if (tex->buf && tex->tex.size_in_bytes > tex->buf->size) {
514 r300_setup_miptree(rscreen, tex, FALSE);
517 if (tex->tex.size_in_bytes > tex->buf->size) {
523 tex->buf->size, tex->tex.size_in_bytes);
524 r300_tex_print_info(tex, "texture_desc_init");
530 r300_setup_hyperz_properties(rscreen, tex);
533 r300_tex_print_info(tex, "texture_desc_init");
536 unsigned r300_texture_get_offset(struct r300_resource *tex,
539 unsigned offset = tex->tex.offset_in_bytes[level];
541 switch (tex->b.b.target) {
544 return offset + layer * tex->tex.layer_size_in_bytes[level];