--- src/mapi/glapi/gen/ARB_direct_state_access.xml | 2 +- src/mesa/main/fbobject.c | 32 ++++++++++++++++++++++++++ src/mesa/main/fbobject.h | 5 ++++ 3 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/src/mapi/glapi/gen/ARB_direct_state_access.xml b/src/mapi/glapi/gen/ARB_direct_state_access.xml index 3cb486e..2f3d60f 100644 --- a/src/mapi/glapi/gen/ARB_direct_state_access.xml +++ b/src/mapi/glapi/gen/ARB_direct_state_access.xml @@ -171,21 +171,21 @@ <param name="param" type="GLint" /> </function> <function name="NamedFramebufferTexture"> <param name="framebuffer" type="GLuint" /> <param name="attachment" type="GLenum" /> <param name="texture" type="GLuint" /> <param name="level" type="GLint" /> </function> - <function name="NamedFramebufferTextureLayer"> + <function name="NamedFramebufferTextureLayer" no_error="true"> <param name="framebuffer" type="GLuint" /> <param name="attachment" type="GLenum" /> <param name="texture" type="GLuint" /> <param name="level" type="GLint" /> <param name="layer" type="GLint" /> </function> <function name="NamedFramebufferDrawBuffer"> <param name="framebuffer" type="GLuint" /> <param name="buf" type="GLenum" /> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 08e7347..1d3c1b5 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -3506,20 +3506,52 @@ _mesa_FramebufferTextureLayer(GLenum target, GLenum attachment, _mesa_get_and_validate_attachment(ctx, fb, attachment, func); if (!att) return; _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, textarget, level, layer, GL_FALSE); } void GLAPIENTRY +_mesa_NamedFramebufferTextureLayer_no_error(GLuint framebuffer, + GLenum attachment, + GLuint texture, GLint level, + GLint layer) +{ + GET_CURRENT_CONTEXT(ctx); + + /* Get the framebuffer object */ + struct gl_framebuffer *fb = _mesa_lookup_framebuffer(ctx, framebuffer); + + /* Get the texture object */ + struct gl_texture_object *texObj = + get_texture_for_framebuffer(ctx, texture); + + struct gl_renderbuffer_attachment *att = + get_attachment(ctx, fb, attachment, NULL); + + GLenum textarget = 0; + if (texObj) { + if (texObj->Target == GL_TEXTURE_CUBE_MAP) { + assert(layer >= 0 && layer < 6); + textarget = GL_TEXTURE_CUBE_MAP_POSITIVE_X + layer; + layer = 0; + } + } + + _mesa_framebuffer_texture(ctx, fb, attachment, att, texObj, textarget, + level, layer, GL_FALSE); +} + + +void GLAPIENTRY _mesa_NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) { GET_CURRENT_CONTEXT(ctx); struct gl_framebuffer *fb; struct gl_texture_object *texObj; GLenum textarget = 0; const char *func = "glNamedFramebufferTextureLayer"; diff --git a/src/mesa/main/fbobject.h b/src/mesa/main/fbobject.h index 7c32b87..a2f9264 100644 --- a/src/mesa/main/fbobject.h +++ b/src/mesa/main/fbobject.h @@ -242,20 +242,25 @@ _mesa_FramebufferTexture3D(GLenum target, GLenum attachment, extern void GLAPIENTRY _mesa_FramebufferTextureLayer_no_error(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); extern void GLAPIENTRY _mesa_FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); extern void GLAPIENTRY +_mesa_NamedFramebufferTextureLayer_no_error(GLuint framebuffer, + GLenum attachment, + GLuint texture, GLint level, + GLint layer); +extern void GLAPIENTRY _mesa_NamedFramebufferTextureLayer(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); extern void GLAPIENTRY _mesa_FramebufferTexture(GLenum target, GLenum attachment, GLuint texture, GLint level); extern void GLAPIENTRY _mesa_NamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev