info->array_size = 1;
info->last_level = 0;
info->nr_samples = 0;
+ info->nr_storage_samples = 0;
hr = NineResource9_ctor(&This->base, pParams, NULL, TRUE,
Type, Pool, Usage);
user_warn(OffsetToLock != 0);
}
+ /* Write out of bound seems to have to be taken into account for these.
+ * TODO: Do more tests (is it only at buffer first lock ? etc).
+ * Since these buffers are supposed to be locked once and never
+ * writen again (MANAGED or DYNAMIC is used for the other uses cases),
+ * performance should be unaffected. */
+ if (!(This->base.usage & D3DUSAGE_DYNAMIC) && This->base.pool != D3DPOOL_MANAGED)
+ SizeToLock = This->size - OffsetToLock;
+
u_box_1d(OffsetToLock, SizeToLock, &box);
if (This->base.pool == D3DPOOL_MANAGED) {
nine_csmt_process(This->base.base.device);
} else
u_box_union_2d(&This->managed.dirty_box, &This->managed.dirty_box, &box);
+ /* Tests trying to draw while the buffer is locked show that
+ * MANAGED buffers are made dirty at Lock time */
+ BASEBUF_REGISTER_UPDATE(This);
}
*ppbData = (char *)This->managed.data + OffsetToLock;
DBG("returning pointer %p\n", *ppbData);
nine_context_get_pipe_release(device);
} else if (This->maps[This->nmaps].should_destroy_buf)
nine_upload_release_buffer(device->buffer_upload, This->maps[This->nmaps].buf);
- } else {
- BASEBUF_REGISTER_UPDATE(This);
}
return D3D_OK;
}