소스 검색

gallium: don't use generic get_transfer func for textures

It doesn't know and can't fill in the stride value.
gallium-resources
Keith Whitwell 15 년 전
부모
커밋
0189cb2fde
3개의 변경된 파일49개의 추가작업 그리고 2개의 파일을 삭제
  1. 4
    0
      src/gallium/auxiliary/util/u_transfer.c
  2. 21
    1
      src/gallium/drivers/i915/i915_resource_texture.c
  3. 24
    1
      src/gallium/drivers/i965/brw_resource_texture.c

+ 4
- 0
src/gallium/auxiliary/util/u_transfer.c 파일 보기

@@ -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;
}


+ 21
- 1
src/gallium/drivers/i915/i915_resource_texture.c 파일 보기

@@ -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 */

+ 24
- 1
src/gallium/drivers/i965/brw_resource_texture.c 파일 보기

@@ -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 */

Loading…
취소
저장