mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 18:48:28 +02:00
gallium: add st_set_teximage_surface for EXT_texture_from_pixmap
support.
This commit is contained in:
parent
16340f8d4d
commit
2acdb116ce
2 changed files with 50 additions and 0 deletions
|
|
@ -42,6 +42,8 @@
|
|||
#define ST_SURFACE_DEPTH 8
|
||||
|
||||
#define ST_TEXTURE_2D 0x2
|
||||
#define ST_TEXTURE_RECT 0x4
|
||||
|
||||
#define ST_TEXTURE_RGB 0x1
|
||||
#define ST_TEXTURE_RGBA 0x2
|
||||
|
||||
|
|
@ -99,6 +101,7 @@ void st_finish( struct st_context *st );
|
|||
void st_notify_swapbuffers(struct st_framebuffer *stfb);
|
||||
void st_notify_swapbuffers_complete(struct st_framebuffer *stfb);
|
||||
|
||||
int st_set_teximage(struct pipe_texture *pt, int target);
|
||||
|
||||
/** Redirect rendering into stfb's surface to a texture image */
|
||||
int st_bind_teximage(struct st_framebuffer *stfb, uint surfIndex,
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
#include "st_cb_fbo.h"
|
||||
#include "main/enums.h"
|
||||
#include "main/teximage.h"
|
||||
#include "main/texstore.h"
|
||||
|
||||
#undef Elements /* fix re-defined macro warning */
|
||||
|
||||
|
|
@ -352,6 +353,52 @@ st_texture_image_copy(struct pipe_context *pipe,
|
|||
}
|
||||
}
|
||||
|
||||
/** Bind a pipe surface for use as a texture image */
|
||||
int
|
||||
st_set_teximage(struct pipe_texture *pt, int target)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
const GLuint unit = ctx->Texture.CurrentUnit;
|
||||
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
|
||||
struct gl_texture_object *texObj;
|
||||
struct gl_texture_image *texImage;
|
||||
struct st_texture_image *stImage;
|
||||
int internalFormat;
|
||||
|
||||
switch (pt->format) {
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
internalFormat = GL_RGBA8;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
};
|
||||
|
||||
switch (target) {
|
||||
case ST_TEXTURE_2D:
|
||||
target = GL_TEXTURE_2D;
|
||||
break;
|
||||
case ST_TEXTURE_RECT:
|
||||
target = GL_TEXTURE_RECTANGLE_ARB;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
texObj = _mesa_select_tex_object(ctx, texUnit, target);
|
||||
texImage = _mesa_get_tex_image(ctx, texObj, target, 0);
|
||||
stImage = st_texture_image(texImage);
|
||||
|
||||
_mesa_init_teximage_fields(ctx, GL_TEXTURE_2D, texImage, pt->width[0],
|
||||
pt->height[0], 1, 0, internalFormat);
|
||||
|
||||
texImage->TexFormat = st_ChooseTextureFormat(ctx, internalFormat, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE);
|
||||
_mesa_set_fetch_functions(texImage, 2);
|
||||
|
||||
pipe_texture_reference(&stImage->pt, pt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/** Redirect rendering into stfb's surface to a texture image */
|
||||
int
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue