gallium: add PIPE_CAP_CLEAR_TEXTURE and clear_texture prototype
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -227,6 +227,10 @@ is is also possible to only clear one or the other part). While it is only
|
|||||||
possible to clear one surface at a time (which can include several layers),
|
possible to clear one surface at a time (which can include several layers),
|
||||||
this surface need not be bound to the framebuffer.
|
this surface need not be bound to the framebuffer.
|
||||||
|
|
||||||
|
``clear_texture`` clears a non-PIPE_BUFFER resource's specified level
|
||||||
|
and bounding box with a clear value provided in that resource's native
|
||||||
|
format.
|
||||||
|
|
||||||
``clear_buffer`` clears a PIPE_BUFFER resource with the specified clear value
|
``clear_buffer`` clears a PIPE_BUFFER resource with the specified clear value
|
||||||
(which may be multiple bytes in length). Logically this is a memset with a
|
(which may be multiple bytes in length). Logically this is a memset with a
|
||||||
multi-byte element value starting at offset bytes from resource start, going
|
multi-byte element value starting at offset bytes from resource start, going
|
||||||
|
@@ -281,6 +281,8 @@ The integer capabilities:
|
|||||||
* ``PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS``:
|
* ``PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS``:
|
||||||
Whether copying between compressed and plain formats is supported where
|
Whether copying between compressed and plain formats is supported where
|
||||||
a compressed block is copied to/from a plain pixel of the same size.
|
a compressed block is copied to/from a plain pixel of the same size.
|
||||||
|
* ``PIPE_CAP_CLEAR_TEXTURE``: Whether `clear_texture` will be
|
||||||
|
available in contexts.
|
||||||
|
|
||||||
|
|
||||||
.. _pipe_capf:
|
.. _pipe_capf:
|
||||||
|
@@ -239,6 +239,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_VIEWPORTS:
|
case PIPE_CAP_MAX_VIEWPORTS:
|
||||||
|
@@ -253,6 +253,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
|
||||||
|
@@ -475,6 +475,7 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
|
@@ -300,6 +300,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* should only get here on unhandled cases */
|
/* should only get here on unhandled cases */
|
||||||
|
@@ -173,6 +173,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
|
@@ -218,6 +218,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||||
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
|
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
|
@@ -204,6 +204,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_VERTEXID_NOBASE:
|
case PIPE_CAP_VERTEXID_NOBASE:
|
||||||
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
|
||||||
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
|
@@ -199,6 +199,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* SWTCL-only features. */
|
/* SWTCL-only features. */
|
||||||
|
@@ -345,6 +345,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Stream output. */
|
/* Stream output. */
|
||||||
|
@@ -337,6 +337,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FAKE_SW_MSAA:
|
case PIPE_CAP_FAKE_SW_MSAA:
|
||||||
case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
|
case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
|
||||||
case PIPE_CAP_VERTEXID_NOBASE:
|
case PIPE_CAP_VERTEXID_NOBASE:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
|
case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
|
||||||
|
@@ -250,6 +250,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* should only get here on unhandled cases */
|
/* should only get here on unhandled cases */
|
||||||
|
@@ -383,6 +383,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -184,6 +184,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Stream output. */
|
/* Stream output. */
|
||||||
|
@@ -218,6 +218,7 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
|
|||||||
case PIPE_CAP_TGSI_TXQS:
|
case PIPE_CAP_TGSI_TXQS:
|
||||||
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
|
||||||
case PIPE_CAP_SHAREABLE_SHADERS:
|
case PIPE_CAP_SHAREABLE_SHADERS:
|
||||||
|
case PIPE_CAP_CLEAR_TEXTURE:
|
||||||
return 0;
|
return 0;
|
||||||
case PIPE_CAP_VENDOR_ID:
|
case PIPE_CAP_VENDOR_ID:
|
||||||
return 0x1af4;
|
return 0x1af4;
|
||||||
|
@@ -379,6 +379,16 @@ struct pipe_context {
|
|||||||
unsigned dstx, unsigned dsty,
|
unsigned dstx, unsigned dsty,
|
||||||
unsigned width, unsigned height);
|
unsigned width, unsigned height);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear the texture with the specified texel. Not guaranteed to be a
|
||||||
|
* renderable format. Data provided in the resource's format.
|
||||||
|
*/
|
||||||
|
void (*clear_texture)(struct pipe_context *pipe,
|
||||||
|
struct pipe_resource *res,
|
||||||
|
unsigned level,
|
||||||
|
const struct pipe_box *box,
|
||||||
|
const void *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear a buffer. Runs a memset over the specified region with the element
|
* Clear a buffer. Runs a memset over the specified region with the element
|
||||||
* value passed in through clear_value of size clear_value_size.
|
* value passed in through clear_value of size clear_value_size.
|
||||||
|
@@ -634,6 +634,7 @@ enum pipe_cap
|
|||||||
PIPE_CAP_FORCE_PERSAMPLE_INTERP,
|
PIPE_CAP_FORCE_PERSAMPLE_INTERP,
|
||||||
PIPE_CAP_SHAREABLE_SHADERS,
|
PIPE_CAP_SHAREABLE_SHADERS,
|
||||||
PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS,
|
PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS,
|
||||||
|
PIPE_CAP_CLEAR_TEXTURE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
|
#define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
|
||||||
|
Reference in New Issue
Block a user