Example #1
0
inline void
NineVolume9_AddDirtyRegion( struct NineVolume9 *This,
                            const struct pipe_box *box )
{
    struct pipe_box cover_a, cover_b;
    float vol[2];

    if (!box) {
        u_box_3d(0, 0, 0, This->desc.Width, This->desc.Height,
                 This->desc.Depth, &This->dirty_box[0]);
        memset(&This->dirty_box[1], 0, sizeof(This->dirty_box[1]));
        return;
    }
    if (!This->dirty_box[0].width) {
        This->dirty_box[0] = *box;
        return;
    }

    u_box_union_3d(&cover_a, &This->dirty_box[0], box);
    vol[0] = u_box_volume_3d(&cover_a);

    if (This->dirty_box[1].width == 0) {
        vol[1] = u_box_volume_3d(&This->dirty_box[0]);
        if (vol[0] > (vol[1] * 1.5f))
            This->dirty_box[1] = *box;
        else
            This->dirty_box[0] = cover_a;
    } else {
        u_box_union_3d(&cover_b, &This->dirty_box[1], box);
        vol[1] = u_box_volume_3d(&cover_b);

        if (vol[0] > vol[1])
            This->dirty_box[1] = cover_b;
        else
            This->dirty_box[0] = cover_a;
    }
}
Example #2
0
HRESULT NINE_WINAPI
NineVolumeTexture9_AddDirtyBox( struct NineVolumeTexture9 *This,
                                const D3DBOX *pDirtyBox )
{
    DBG("This=%p pDirtybox=%p\n", This, pDirtyBox);

    if (This->base.base.pool == D3DPOOL_DEFAULT) {
        return D3D_OK;
    }

    if (This->base.base.pool == D3DPOOL_MANAGED) {
        This->base.managed.dirty = TRUE;
        BASETEX_REGISTER_UPDATE(&This->base);
    }

    if (!pDirtyBox) {
        This->dirty_box.x = 0;
        This->dirty_box.y = 0;
        This->dirty_box.z = 0;
        This->dirty_box.width = This->base.base.info.width0;
        This->dirty_box.height = This->base.base.info.height0;
        This->dirty_box.depth = This->base.base.info.depth0;
    } else {
        if (This->dirty_box.width == 0) {
            d3dbox_to_pipe_box(&This->dirty_box, pDirtyBox);
        } else {
            struct pipe_box box;
            d3dbox_to_pipe_box(&box, pDirtyBox);
            u_box_union_3d(&This->dirty_box, &This->dirty_box, &box);
        }
        This->dirty_box.x = MAX2(This->dirty_box.x, 0);
        This->dirty_box.y = MAX2(This->dirty_box.y, 0);
        This->dirty_box.z = MAX2(This->dirty_box.z, 0);
        This->dirty_box.width = MIN2(This->dirty_box.width,
                                     This->base.base.info.width0 - This->dirty_box.x);
        This->dirty_box.height = MIN2(This->dirty_box.height,
                                     This->base.base.info.height0 - This->dirty_box.y);
        This->dirty_box.depth = MIN2(This->dirty_box.depth,
                                     This->base.base.info.depth0 - This->dirty_box.z);
    }
    return D3D_OK;
}