180
teximage_fits(struct gl_texture_object *t, int level,
181
struct gl_texture_image *ti)
181
teximage_fits(struct gl_texture_object *t, int level)
183
183
struct nouveau_surface *s = &to_nouveau_texture(t)->surfaces[level];
184
struct gl_texture_image *ti = t->Image[0][level];
185
return t->Target == GL_TEXTURE_RECTANGLE ||
186
(s->bo && s->width == ti->Width &&
187
s->height == ti->Height &&
188
s->format == ti->TexFormat);
186
return ti && to_nouveau_teximage(ti)->surface.bo &&
187
(t->Target == GL_TEXTURE_RECTANGLE ||
188
(s->bo && s->format == ti->TexFormat &&
189
s->width == ti->Width && s->height == ti->Height));
196
197
struct gl_texture_image *ti = t->Image[0][level];
198
if (ti && teximage_fits(t, level, ti)) {
199
if (teximage_fits(t, level)) {
199
200
struct nouveau_surface *ss = to_nouveau_texture(t)->surfaces;
200
201
struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
305
309
nouveau_texture_reallocate(GLcontext *ctx, struct gl_texture_object *t)
308
relayout_texture(ctx, t);
309
nouveau_texture_validate(ctx, t);
311
if (!teximage_fits(t, t->BaseLevel) ||
312
!teximage_fits(t, get_last_level(t))) {
314
relayout_texture(ctx, t);
315
nouveau_texture_validate(ctx, t);
366
373
if (level == t->BaseLevel) {
367
if (!teximage_fits(t, level, ti))
374
if (!teximage_fits(t, level))
368
375
relayout_texture(ctx, t);
369
376
nouveau_texture_validate(ctx, t);
426
nouveau_texsubimage(GLcontext *ctx, GLint dims, GLenum target, GLint level,
427
GLint xoffset, GLint yoffset, GLint zoffset,
428
GLint width, GLint height, GLint depth,
429
GLenum format, GLenum type, const void *pixels,
430
const struct gl_pixelstore_attrib *packing,
431
struct gl_texture_object *t,
432
struct gl_texture_image *ti)
434
struct nouveau_surface *s = &to_nouveau_teximage(ti)->surface;
437
pixels = _mesa_validate_pbo_teximage(ctx, dims, width, height, depth,
438
format, type, pixels, packing,
441
nouveau_teximage_map(ctx, ti);
443
ret = _mesa_texstore(ctx, 3, ti->_BaseFormat, ti->TexFormat,
444
ti->Data, xoffset, yoffset, zoffset,
445
s->pitch, ti->ImageOffsets,
446
width, height, depth, format, type,
450
nouveau_teximage_unmap(ctx, ti);
451
_mesa_unmap_teximage_pbo(ctx, packing);
454
if (!to_nouveau_texture(t)->dirty)
455
validate_teximage(ctx, t, level, xoffset, yoffset, zoffset,
456
width, height, depth);
419
460
nouveau_texsubimage_3d(GLcontext *ctx, GLenum target, GLint level,
420
461
GLint xoffset, GLint yoffset, GLint zoffset,
421
462
GLint width, GLint height, GLint depth,
424
465
struct gl_texture_object *t,
425
466
struct gl_texture_image *ti)
427
nouveau_teximage_map(ctx, ti);
428
_mesa_store_texsubimage3d(ctx, target, level, xoffset, yoffset, zoffset,
429
width, height, depth, format, type, pixels,
431
nouveau_teximage_unmap(ctx, ti);
433
if (!to_nouveau_texture(t)->dirty)
434
validate_teximage(ctx, t, level, xoffset, yoffset, zoffset,
435
width, height, depth);
468
nouveau_texsubimage(ctx, 3, target, level, xoffset, yoffset, zoffset,
469
width, height, depth, format, type, pixels,
444
479
struct gl_texture_object *t,
445
480
struct gl_texture_image *ti)
447
nouveau_teximage_map(ctx, ti);
448
_mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset,
449
width, height, format, type, pixels,
451
nouveau_teximage_unmap(ctx, ti);
453
if (!to_nouveau_texture(t)->dirty)
454
validate_teximage(ctx, t, level, xoffset, yoffset, 0,
482
nouveau_texsubimage(ctx, 2, target, level, xoffset, yoffset, 0,
483
width, height, 1, format, type, pixels,
463
492
struct gl_texture_object *t,
464
493
struct gl_texture_image *ti)
466
nouveau_teximage_map(ctx, ti);
467
_mesa_store_texsubimage1d(ctx, target, level, xoffset,
468
width, format, type, pixels,
470
nouveau_teximage_unmap(ctx, ti);
472
if (!to_nouveau_texture(t)->dirty)
473
validate_teximage(ctx, t, level, xoffset, 0, 0,
495
nouveau_texsubimage(ctx, 1, target, level, xoffset, 0, 0,
496
width, 1, 1, format, type, pixels,
594
store_mipmap(GLcontext *ctx, GLenum target, int first, int last,
595
struct gl_texture_object *t)
597
struct gl_pixelstore_attrib packing = {
598
.BufferObj = ctx->Shared->NullBufferObj,
601
GLenum format = t->Image[0][first]->TexFormat;
602
unsigned base_format, type, comps;
605
base_format = _mesa_get_format_base_format(format);
606
_mesa_format_to_type_and_comps(format, &type, &comps);
608
for (i = first; i <= last; i++) {
609
struct gl_texture_image *ti = t->Image[0][i];
610
void *data = ti->Data;
612
nouveau_teximage(ctx, 3, target, i, ti->InternalFormat,
613
ti->Width, ti->Height, ti->Depth,
614
ti->Border, base_format, type, data,
617
_mesa_free_texmemory(data);
622
nouveau_generate_mipmap(GLcontext *ctx, GLenum target,
623
struct gl_texture_object *t)
625
if (_mesa_meta_check_generate_mipmap_fallback(ctx, target, t)) {
626
struct gl_texture_image *base = t->Image[0][t->BaseLevel];
628
nouveau_teximage_map(ctx, base);
629
_mesa_generate_mipmap(ctx, target, t);
630
nouveau_teximage_unmap(ctx, base);
632
store_mipmap(ctx, target, t->BaseLevel + 1,
633
get_last_level(t), t);
636
_mesa_meta_GenerateMipmap(ctx, target, t);
571
641
nouveau_texture_functions_init(struct dd_function_table *functions)