st/mesa: implement ARB_clear_texture
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -1873,6 +1873,34 @@ st_TextureView(struct gl_context *ctx,
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
st_ClearTexSubImage(struct gl_context *ctx,
|
||||
struct gl_texture_image *texImage,
|
||||
GLint xoffset, GLint yoffset, GLint zoffset,
|
||||
GLsizei width, GLsizei height, GLsizei depth,
|
||||
const GLvoid *clearValue)
|
||||
{
|
||||
static const char zeros[16] = {0};
|
||||
struct st_texture_image *stImage = st_texture_image(texImage);
|
||||
struct pipe_resource *pt = stImage->pt;
|
||||
struct st_context *st = st_context(ctx);
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
unsigned level = texImage->Level;
|
||||
struct pipe_box box;
|
||||
|
||||
if (!pt)
|
||||
return;
|
||||
|
||||
u_box_3d(xoffset, yoffset, zoffset + texImage->Face,
|
||||
width, height, depth, &box);
|
||||
if (texImage->TexObject->Immutable) {
|
||||
level += texImage->TexObject->MinLevel;
|
||||
box.z += texImage->TexObject->MinLayer;
|
||||
}
|
||||
|
||||
pipe->clear_texture(pipe, pt, level, &box, clearValue ? clearValue : zeros);
|
||||
}
|
||||
|
||||
void
|
||||
st_init_texture_functions(struct dd_function_table *functions)
|
||||
{
|
||||
@@ -1904,4 +1932,5 @@ st_init_texture_functions(struct dd_function_table *functions)
|
||||
|
||||
functions->AllocTextureStorage = st_AllocTextureStorage;
|
||||
functions->TextureView = st_TextureView;
|
||||
functions->ClearTexSubImage = st_ClearTexSubImage;
|
||||
}
|
||||
|
||||
@@ -439,6 +439,7 @@ void st_init_extensions(struct pipe_screen *screen,
|
||||
static const struct st_extension_cap_mapping cap_mapping[] = {
|
||||
{ o(ARB_base_instance), PIPE_CAP_START_INSTANCE },
|
||||
{ o(ARB_buffer_storage), PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT },
|
||||
{ o(ARB_clear_texture), PIPE_CAP_CLEAR_TEXTURE },
|
||||
{ o(ARB_color_buffer_float), PIPE_CAP_VERTEX_COLOR_UNCLAMPED },
|
||||
{ o(ARB_copy_image), PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS },
|
||||
{ o(ARB_depth_clamp), PIPE_CAP_DEPTH_CLIP_DISABLE },
|
||||
|
||||
Reference in New Issue
Block a user