Ilia Mirkin <imir...@alum.mit.edu> writes: > Fixes assertions when trying to attach textures to fbs with formats not > supported by the render engines. > > See https://bugs.freedesktop.org/show_bug.cgi?id=73459 > > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > --- > > Francisco, thanks for the review. Is this more like what you had in mind? > Interesting that nv10/nv20 support different-bitness color/depth -- that > requirement came back for nv30/nv40. >
Looks good to me, Reviewed-by: Francisco Jerez <curroje...@riseup.net> Thanks. > src/mesa/drivers/dri/nouveau/nouveau_context.c | 1 + > src/mesa/drivers/dri/nouveau/nouveau_fbo.c | 52 > ++++++++++++++++++++++++++ > 2 files changed, 53 insertions(+) > > diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c > b/src/mesa/drivers/dri/nouveau/nouveau_context.c > index 181c9d0..ec474d4 100644 > --- a/src/mesa/drivers/dri/nouveau/nouveau_context.c > +++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c > @@ -187,6 +187,7 @@ nouveau_context_init(struct gl_context *ctx, struct > nouveau_screen *screen, > ctx->Extensions.EXT_framebuffer_blit = true; > ctx->Extensions.EXT_texture_filter_anisotropic = true; > ctx->Extensions.NV_texture_env_combine4 = true; > + ctx->Const.MaxColorAttachments = 1; > > return GL_TRUE; > } > diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c > b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c > index 25543e4..427eb00 100644 > --- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c > +++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c > @@ -268,6 +268,57 @@ nouveau_finish_render_texture(struct gl_context *ctx, > texture_dirty(rb->TexImage->TexObject); > } > > +static int > +validate_format_bpp(gl_format format) > +{ > + switch (format) { > + case MESA_FORMAT_XRGB8888: > + case MESA_FORMAT_ARGB8888: > + case MESA_FORMAT_Z24_S8: > + return 32; > + case MESA_FORMAT_RGB565: > + case MESA_FORMAT_Z16: > + return 16; > + default: > + return 0; > + } > +} > + > +static void > +nouveau_check_framebuffer_complete(struct gl_context *ctx, > + struct gl_framebuffer *fb) > +{ > + const struct nouveau_driver *drv = context_drv(ctx); > + struct gl_renderbuffer_attachment *color = > + &fb->Attachment[BUFFER_COLOR0]; > + struct gl_renderbuffer_attachment *depth = > + &fb->Attachment[BUFFER_DEPTH]; > + int color_bpp = 0, zeta_bpp; > + > + if (color->Type == GL_TEXTURE) { > + color_bpp = validate_format_bpp( > + color->Renderbuffer->TexImage->TexFormat); > + if (!color_bpp) > + goto err; > + } > + > + if (depth->Type == GL_TEXTURE) { > + zeta_bpp = validate_format_bpp( > + depth->Renderbuffer->TexImage->TexFormat); > + if (!zeta_bpp) > + goto err; > + /* NV04/NV05 requires same bpp-ness for color/zeta */ > + if (context_chipset(ctx) < 0x10 && > + color_bpp && color_bpp != zeta_bpp) > + goto err; > + } > + > + return; > +err: > + fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT; > + return; > +} > + > void > nouveau_fbo_functions_init(struct dd_function_table *functions) > { > @@ -279,4 +330,5 @@ nouveau_fbo_functions_init(struct dd_function_table > *functions) > functions->FramebufferRenderbuffer = nouveau_framebuffer_renderbuffer; > functions->RenderTexture = nouveau_render_texture; > functions->FinishRenderTexture = nouveau_finish_render_texture; > + functions->ValidateFramebuffer = nouveau_check_framebuffer_complete; > } > -- > 1.8.3.2
pgp_iJ7v7FqEk.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev