It doesn't know and can't fill in the stride value.gallium-resources
@@ -90,6 +90,10 @@ struct pipe_transfer * u_default_get_transfer(struct pipe_context *context, | |||
transfer->sr = sr; | |||
transfer->usage = usage; | |||
transfer->box = *box; | |||
/* Note strides are zero, this is ok for buffers, but not for | |||
* textures 2d & higher at least. | |||
*/ | |||
return transfer; | |||
} | |||
@@ -653,6 +653,26 @@ i915_texture_destroy(struct pipe_screen *screen, | |||
FREE(tex); | |||
} | |||
static struct pipe_transfer * | |||
i915_texture_get_transfer(struct pipe_context *context, | |||
struct pipe_resource *resource, | |||
struct pipe_subresource sr, | |||
unsigned usage, | |||
const struct pipe_box *box) | |||
{ | |||
struct i915_texture *tex = i915_texture(resource); | |||
struct pipe_transfer *transfer = CALLOC_STRUCT(pipe_transfer); | |||
if (transfer == NULL) | |||
return NULL; | |||
transfer->resource = resource; | |||
transfer->sr = sr; | |||
transfer->usage = usage; | |||
transfer->box = *box; | |||
transfer->stride = tex->stride; | |||
return transfer; | |||
} | |||
static void * | |||
@@ -707,7 +727,7 @@ struct u_resource_vtbl i915_texture_vtbl = | |||
i915_texture_get_handle, /* get_handle */ | |||
i915_texture_destroy, /* resource_destroy */ | |||
NULL, /* is_resource_referenced */ | |||
u_default_get_transfer, /* get_transfer */ | |||
i915_texture_get_transfer, /* get_transfer */ | |||
u_default_transfer_destroy, /* transfer_destroy */ | |||
i915_texture_transfer_map, /* transfer_map */ | |||
u_default_transfer_flush_region, /* transfer_flush_region */ |
@@ -270,6 +270,29 @@ static unsigned brw_texture_is_referenced( struct pipe_context *pipe, | |||
* Transfer functions | |||
*/ | |||
static struct pipe_transfer * | |||
brw_texture_get_transfer(struct pipe_context *context, | |||
struct pipe_resource *resource, | |||
struct pipe_subresource sr, | |||
unsigned usage, | |||
const struct pipe_box *box) | |||
{ | |||
struct brw_texture *tex = brw_texture(resource); | |||
struct pipe_transfer *transfer = CALLOC_STRUCT(pipe_transfer); | |||
if (transfer == NULL) | |||
return NULL; | |||
transfer->resource = resource; | |||
transfer->sr = sr; | |||
transfer->usage = usage; | |||
transfer->box = *box; | |||
transfer->stride = tex->pitch * tex->cpp; | |||
return transfer; | |||
} | |||
static void * | |||
brw_texture_transfer_map(struct pipe_context *pipe, | |||
struct pipe_transfer *transfer) | |||
@@ -331,7 +354,7 @@ struct u_resource_vtbl brw_texture_vtbl = | |||
brw_texture_get_handle, /* get_handle */ | |||
brw_texture_destroy, /* resource_destroy */ | |||
brw_texture_is_referenced, /* is_resource_referenced */ | |||
u_default_get_transfer, /* get_transfer */ | |||
brw_texture_get_transfer, /* get_transfer */ | |||
u_default_transfer_destroy, /* transfer_destroy */ | |||
brw_texture_transfer_map, /* transfer_map */ | |||
u_default_transfer_flush_region, /* transfer_flush_region */ |