1127
1128
struct pipe_transfer *srcTrans, *dstTrans;
1128
1129
void *srcMap, *dstMap;
1130
srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
1131
srcTrans = pipe_get_transfer(pipe, pt, face, srcLevel, zslice,
1131
1132
PIPE_TRANSFER_READ, 0, 0,
1132
1133
u_minify(pt->width0, srcLevel),
1133
1134
u_minify(pt->height0, srcLevel));
1134
dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
1135
dstTrans = pipe_get_transfer(pipe, pt, face, dstLevel, zslice,
1135
1136
PIPE_TRANSFER_WRITE, 0, 0,
1136
1137
u_minify(pt->width0, dstLevel),
1137
1138
u_minify(pt->height0, dstLevel));
1139
srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
1140
dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
1140
srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
1141
dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
1142
1143
reduce_1d(pt->format,
1143
srcTrans->width, srcMap,
1144
dstTrans->width, dstMap);
1146
screen->transfer_unmap(screen, srcTrans);
1147
screen->transfer_unmap(screen, dstTrans);
1149
screen->tex_transfer_destroy(srcTrans);
1150
screen->tex_transfer_destroy(dstTrans);
1144
srcTrans->box.width, srcMap,
1145
dstTrans->box.width, dstMap);
1147
pipe->transfer_unmap(pipe, srcTrans);
1148
pipe->transfer_unmap(pipe, dstTrans);
1150
pipe->transfer_destroy(pipe, srcTrans);
1151
pipe->transfer_destroy(pipe, dstTrans);
1156
1157
make_2d_mipmap(struct gen_mipmap_state *ctx,
1157
struct pipe_texture *pt,
1158
struct pipe_resource *pt,
1158
1159
uint face, uint baseLevel, uint lastLevel)
1160
1161
struct pipe_context *pipe = ctx->pipe;
1161
struct pipe_screen *screen = pipe->screen;
1162
1162
const uint zslice = 0;
1170
1170
struct pipe_transfer *srcTrans, *dstTrans;
1171
1171
ubyte *srcMap, *dstMap;
1173
srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
1174
PIPE_TRANSFER_READ, 0, 0,
1175
u_minify(pt->width0, srcLevel),
1176
u_minify(pt->height0, srcLevel));
1177
dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
1178
PIPE_TRANSFER_WRITE, 0, 0,
1179
u_minify(pt->width0, dstLevel),
1180
u_minify(pt->height0, dstLevel));
1173
srcTrans = pipe_get_transfer(pipe, pt, face, srcLevel, zslice,
1174
PIPE_TRANSFER_READ, 0, 0,
1175
u_minify(pt->width0, srcLevel),
1176
u_minify(pt->height0, srcLevel));
1177
dstTrans = pipe_get_transfer(pipe, pt, face, dstLevel, zslice,
1178
PIPE_TRANSFER_WRITE, 0, 0,
1179
u_minify(pt->width0, dstLevel),
1180
u_minify(pt->height0, dstLevel));
1182
srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
1183
dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
1182
srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
1183
dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
1185
1185
reduce_2d(pt->format,
1186
srcTrans->width, srcTrans->height,
1186
srcTrans->box.width, srcTrans->box.height,
1187
1187
srcTrans->stride, srcMap,
1188
dstTrans->width, dstTrans->height,
1188
dstTrans->box.width, dstTrans->box.height,
1189
1189
dstTrans->stride, dstMap);
1191
screen->transfer_unmap(screen, srcTrans);
1192
screen->transfer_unmap(screen, dstTrans);
1191
pipe->transfer_unmap(pipe, srcTrans);
1192
pipe->transfer_unmap(pipe, dstTrans);
1194
screen->tex_transfer_destroy(srcTrans);
1195
screen->tex_transfer_destroy(dstTrans);
1194
pipe->transfer_destroy(pipe, srcTrans);
1195
pipe->transfer_destroy(pipe, dstTrans);
1201
1201
make_3d_mipmap(struct gen_mipmap_state *ctx,
1202
struct pipe_texture *pt,
1202
struct pipe_resource *pt,
1203
1203
uint face, uint baseLevel, uint lastLevel)
1215
1215
struct pipe_transfer *srcTrans, *dstTrans;
1216
1216
ubyte *srcMap, *dstMap;
1218
srcTrans = screen->get_tex_transfer(screen, pt, face, srcLevel, zslice,
1218
srcTrans = pipe->get_transfer(pipe, pt, face, srcLevel, zslice,
1219
1219
PIPE_TRANSFER_READ, 0, 0,
1220
1220
u_minify(pt->width0, srcLevel),
1221
1221
u_minify(pt->height0, srcLevel));
1222
dstTrans = screen->get_tex_transfer(screen, pt, face, dstLevel, zslice,
1222
dstTrans = pipe->get_transfer(pipe, pt, face, dstLevel, zslice,
1223
1223
PIPE_TRANSFER_WRITE, 0, 0,
1224
1224
u_minify(pt->width0, dstLevel),
1225
1225
u_minify(pt->height0, dstLevel));
1227
srcMap = (ubyte *) screen->transfer_map(screen, srcTrans);
1228
dstMap = (ubyte *) screen->transfer_map(screen, dstTrans);
1227
srcMap = (ubyte *) pipe->transfer_map(pipe, srcTrans);
1228
dstMap = (ubyte *) pipe->transfer_map(pipe, dstTrans);
1230
1230
reduce_3d(pt->format,
1231
1231
srcTrans->width, srcTrans->height,
1233
1233
dstTrans->width, dstTrans->height,
1234
1234
dstTrans->stride, dstMap);
1236
screen->transfer_unmap(screen, srcTrans);
1237
screen->transfer_unmap(screen, dstTrans);
1236
pipe->transfer_unmap(pipe, srcTrans);
1237
pipe->transfer_unmap(pipe, dstTrans);
1239
screen->tex_transfer_destroy(srcTrans);
1240
screen->tex_transfer_destroy(dstTrans);
1239
pipe->transfer_destroy(pipe, srcTrans);
1240
pipe->transfer_destroy(pipe, dstTrans);
1243
1243
(void) reduce_3d;
1307
1307
ctx->sampler.min_mip_filter = PIPE_TEX_MIPFILTER_NEAREST;
1308
1308
ctx->sampler.normalized_coords = 1;
1310
/* vertex elements state */
1311
memset(&ctx->velem[0], 0, sizeof(ctx->velem[0]) * 2);
1312
for (i = 0; i < 2; i++) {
1313
ctx->velem[i].src_offset = i * 4 * sizeof(float);
1314
ctx->velem[i].instance_divisor = 0;
1315
ctx->velem[i].vertex_buffer_index = 0;
1316
ctx->velem[i].src_format = PIPE_FORMAT_R32G32B32A32_FLOAT;
1310
1319
/* vertex shader - still needed to specify mapping from fragment
1311
1320
* shader input semantics to vertex elements
1321
1330
/* fragment shader */
1322
ctx->fs2d = util_make_fragment_tex_shader(pipe, TGSI_TEXTURE_2D);
1323
ctx->fsCube = util_make_fragment_tex_shader(pipe, TGSI_TEXTURE_CUBE);
1331
ctx->fs2d = util_make_fragment_tex_shader(pipe, TGSI_TEXTURE_2D,
1332
TGSI_INTERPOLATE_LINEAR);
1333
ctx->fsCube = util_make_fragment_tex_shader(pipe, TGSI_TEXTURE_CUBE,
1334
TGSI_INTERPOLATE_LINEAR);
1325
1336
/* vertex data that doesn't change */
1326
1337
for (i = 0; i < 4; i++) {
1463
1473
util_gen_mipmap(struct gen_mipmap_state *ctx,
1464
struct pipe_texture *pt,
1474
struct pipe_sampler_view *psv,
1465
1475
uint face, uint baseLevel, uint lastLevel, uint filter)
1467
1477
struct pipe_context *pipe = ctx->pipe;
1468
1478
struct pipe_screen *screen = pipe->screen;
1469
1479
struct pipe_framebuffer_state fb;
1480
struct pipe_resource *pt = psv->texture;
1470
1481
void *fs = (pt->target == PIPE_TEXTURE_CUBE) ? ctx->fsCube : ctx->fs2d;
1472
1483
uint zslice = 0;
1484
1495
filter == PIPE_TEX_FILTER_NEAREST);
1486
1497
/* check if we can render in the texture's format */
1487
if (!screen->is_format_supported(screen, pt->format, PIPE_TEXTURE_2D,
1488
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0)) {
1498
if (!screen->is_format_supported(screen, psv->format, PIPE_TEXTURE_2D,
1499
pt->nr_samples, PIPE_BIND_RENDER_TARGET, 0)) {
1489
1500
fallback_gen_mipmap(ctx, pt, face, baseLevel, lastLevel);
1495
1506
cso_save_depth_stencil_alpha(ctx->cso);
1496
1507
cso_save_rasterizer(ctx->cso);
1497
1508
cso_save_samplers(ctx->cso);
1498
cso_save_sampler_textures(ctx->cso);
1509
cso_save_fragment_sampler_views(ctx->cso);
1499
1510
cso_save_framebuffer(ctx->cso);
1500
1511
cso_save_fragment_shader(ctx->cso);
1501
1512
cso_save_vertex_shader(ctx->cso);
1502
1513
cso_save_viewport(ctx->cso);
1503
1514
cso_save_clip(ctx->cso);
1515
cso_save_vertex_elements(ctx->cso);
1505
1517
/* bind our state */
1506
1518
cso_set_blend(ctx->cso, &ctx->blend);
1507
1519
cso_set_depth_stencil_alpha(ctx->cso, &ctx->depthstencil);
1508
1520
cso_set_rasterizer(ctx->cso, &ctx->rasterizer);
1509
1521
cso_set_clip(ctx->cso, &ctx->clip);
1522
cso_set_vertex_elements(ctx->cso, 2, ctx->velem);
1511
1524
cso_set_fragment_shader_handle(ctx->cso, fs);
1512
1525
cso_set_vertex_shader_handle(ctx->cso, ctx->vs);
1587
1600
cso_restore_depth_stencil_alpha(ctx->cso);
1588
1601
cso_restore_rasterizer(ctx->cso);
1589
1602
cso_restore_samplers(ctx->cso);
1590
cso_restore_sampler_textures(ctx->cso);
1603
cso_restore_fragment_sampler_views(ctx->cso);
1591
1604
cso_restore_framebuffer(ctx->cso);
1592
1605
cso_restore_fragment_shader(ctx->cso);
1593
1606
cso_restore_vertex_shader(ctx->cso);
1594
1607
cso_restore_viewport(ctx->cso);
1595
1608
cso_restore_clip(ctx->cso);
1609
cso_restore_vertex_elements(ctx->cso);