Commit 0189cb2f authored by Keith Whitwell's avatar Keith Whitwell

gallium: don't use generic get_transfer func for textures

It doesn't know and can't fill in the stride value.
parent 65bc6f88
...@@ -90,6 +90,10 @@ struct pipe_transfer * u_default_get_transfer(struct pipe_context *context, ...@@ -90,6 +90,10 @@ struct pipe_transfer * u_default_get_transfer(struct pipe_context *context,
transfer->sr = sr; transfer->sr = sr;
transfer->usage = usage; transfer->usage = usage;
transfer->box = *box; transfer->box = *box;
/* Note strides are zero, this is ok for buffers, but not for
* textures 2d & higher at least.
*/
return transfer; return transfer;
} }
......
...@@ -653,6 +653,26 @@ i915_texture_destroy(struct pipe_screen *screen, ...@@ -653,6 +653,26 @@ i915_texture_destroy(struct pipe_screen *screen,
FREE(tex); 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 * static void *
...@@ -707,7 +727,7 @@ struct u_resource_vtbl i915_texture_vtbl = ...@@ -707,7 +727,7 @@ struct u_resource_vtbl i915_texture_vtbl =
i915_texture_get_handle, /* get_handle */ i915_texture_get_handle, /* get_handle */
i915_texture_destroy, /* resource_destroy */ i915_texture_destroy, /* resource_destroy */
NULL, /* is_resource_referenced */ NULL, /* is_resource_referenced */
u_default_get_transfer, /* get_transfer */ i915_texture_get_transfer, /* get_transfer */
u_default_transfer_destroy, /* transfer_destroy */ u_default_transfer_destroy, /* transfer_destroy */
i915_texture_transfer_map, /* transfer_map */ i915_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */ u_default_transfer_flush_region, /* transfer_flush_region */
......
...@@ -270,6 +270,29 @@ static unsigned brw_texture_is_referenced( struct pipe_context *pipe, ...@@ -270,6 +270,29 @@ static unsigned brw_texture_is_referenced( struct pipe_context *pipe,
* Transfer functions * 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 * static void *
brw_texture_transfer_map(struct pipe_context *pipe, brw_texture_transfer_map(struct pipe_context *pipe,
struct pipe_transfer *transfer) struct pipe_transfer *transfer)
...@@ -331,7 +354,7 @@ struct u_resource_vtbl brw_texture_vtbl = ...@@ -331,7 +354,7 @@ struct u_resource_vtbl brw_texture_vtbl =
brw_texture_get_handle, /* get_handle */ brw_texture_get_handle, /* get_handle */
brw_texture_destroy, /* resource_destroy */ brw_texture_destroy, /* resource_destroy */
brw_texture_is_referenced, /* is_resource_referenced */ 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 */ u_default_transfer_destroy, /* transfer_destroy */
brw_texture_transfer_map, /* transfer_map */ brw_texture_transfer_map, /* transfer_map */
u_default_transfer_flush_region, /* transfer_flush_region */ u_default_transfer_flush_region, /* transfer_flush_region */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment