meta: Infer bind_fbo_image parameters from an incoming image.
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -94,9 +94,12 @@ static void meta_decompress_cleanup(struct decompress_state *decompress);
|
||||
static void meta_drawpix_cleanup(struct drawpix_state *drawpix);
|
||||
|
||||
void
|
||||
_mesa_meta_bind_fbo_image(struct gl_texture_object *texObj, GLenum target,
|
||||
GLuint level, GLuint layer)
|
||||
_mesa_meta_bind_fbo_image(struct gl_texture_image *texImage, GLuint layer)
|
||||
{
|
||||
struct gl_texture_object *texObj = texImage->TexObject;
|
||||
int level = texImage->Level;
|
||||
GLenum target = texObj->Target;
|
||||
|
||||
switch (target) {
|
||||
case GL_TEXTURE_1D:
|
||||
_mesa_FramebufferTexture1D(GL_FRAMEBUFFER,
|
||||
@@ -115,6 +118,9 @@ _mesa_meta_bind_fbo_image(struct gl_texture_object *texObj, GLenum target,
|
||||
layer);
|
||||
break;
|
||||
default: /* 2D / cube */
|
||||
if (target == GL_TEXTURE_CUBE_MAP)
|
||||
target = GL_TEXTURE_CUBE_MAP_POSITIVE_X + texImage->Face;
|
||||
|
||||
_mesa_FramebufferTexture2D(GL_FRAMEBUFFER,
|
||||
GL_COLOR_ATTACHMENT0,
|
||||
target,
|
||||
|
||||
@@ -505,7 +505,6 @@ void
|
||||
_mesa_meta_glsl_generate_mipmap_cleanup(struct gen_mipmap_state *mipmap);
|
||||
|
||||
void
|
||||
_mesa_meta_bind_fbo_image(struct gl_texture_object *texObj, GLenum target,
|
||||
GLuint level, GLuint layer);
|
||||
_mesa_meta_bind_fbo_image(struct gl_texture_image *texImage, GLuint layer);
|
||||
|
||||
#endif /* META_H */
|
||||
|
||||
@@ -103,7 +103,7 @@ fallback_required(struct gl_context *ctx, GLenum target,
|
||||
_mesa_GenFramebuffers(1, &mipmap->FBO);
|
||||
_mesa_BindFramebuffer(GL_FRAMEBUFFER_EXT, mipmap->FBO);
|
||||
|
||||
_mesa_meta_bind_fbo_image(texObj, target, srcLevel, 0);
|
||||
_mesa_meta_bind_fbo_image(baseImage, 0);
|
||||
|
||||
status = _mesa_CheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
|
||||
|
||||
@@ -249,6 +249,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
|
||||
|
||||
for (dstLevel = baseLevel + 1; dstLevel <= maxLevel; dstLevel++) {
|
||||
const struct gl_texture_image *srcImage;
|
||||
struct gl_texture_image *dstImage;
|
||||
const GLuint srcLevel = dstLevel - 1;
|
||||
GLuint layer;
|
||||
GLsizei srcWidth, srcHeight, srcDepth;
|
||||
@@ -293,6 +294,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
|
||||
*/
|
||||
break;
|
||||
}
|
||||
dstImage = _mesa_select_tex_image(ctx, texObj, faceTarget, dstLevel);
|
||||
|
||||
/* limit minification to src level */
|
||||
_mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, srcLevel);
|
||||
@@ -315,7 +317,7 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
|
||||
_mesa_BufferData(GL_ARRAY_BUFFER_ARB, sizeof(verts),
|
||||
verts, GL_DYNAMIC_DRAW_ARB);
|
||||
|
||||
_mesa_meta_bind_fbo_image(texObj, faceTarget, dstLevel, layer);
|
||||
_mesa_meta_bind_fbo_image(dstImage, layer);
|
||||
|
||||
/* sanity check */
|
||||
if (_mesa_CheckFramebufferStatus(GL_FRAMEBUFFER) !=
|
||||
|
||||
Reference in New Issue
Block a user