From: Rémi Bernon <rbernon@codeweavers.com> Not just when using framebuffer surfaces, making sure it works as intended and catch more issues if it does not. --- dlls/opengl32/tests/opengl.c | 32 ++++++++++++++++---------------- dlls/opengl32/unix_wgl.c | 17 +++++++++-------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c index d542672b61e..0bfb394c357 100644 --- a/dlls/opengl32/tests/opengl.c +++ b/dlls/opengl32/tests/opengl.c @@ -3615,7 +3615,7 @@ static void test_framebuffer(void) ok_ret( GL_NO_ERROR, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_NONE ); @@ -3625,7 +3625,7 @@ static void test_framebuffer(void) ext.glGetFramebufferParameterivEXT( 0, GL_DRAW_BUFFER, &value ); if (broken( amd )) ok_ret( GL_INVALID_ENUM, glGetError() ); - else todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + else ok_x4( value, ==, GL_FRONT_AND_BACK ); ext.glGetFramebufferParameterivEXT( 0, GL_READ_BUFFER, &value ); if (broken( amd )) ok_ret( GL_INVALID_ENUM, glGetError() ); else ok_x4( value, ==, GL_BACK ); @@ -3681,10 +3681,10 @@ static void test_framebuffer(void) ok_x4( value, ==, GL_FALSE ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT ); + ok_x4( value, ==, GL_FRONT ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT ); + ok_x4( value, ==, GL_FRONT ); glDrawBuffer( GL_FRONT_AND_BACK ); ok_ret( GL_NO_ERROR, glGetError() ); @@ -3692,13 +3692,13 @@ static void test_framebuffer(void) ok_ret( GL_INVALID_OPERATION, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_NONE ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT ); + ok_x4( value, ==, GL_FRONT ); buffers[0] = GL_FRONT_LEFT; buffers[1] = GL_FRONT_LEFT; ext.glDrawBuffers( 2, buffers ); @@ -3713,19 +3713,19 @@ static void test_framebuffer(void) todo_wine ok_ret( GL_INVALID_ENUM, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_NONE ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT ); + ok_x4( value, ==, GL_FRONT ); glReadBuffer( GL_NONE ); ok_ret( GL_NO_ERROR, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_NONE ); @@ -3781,7 +3781,7 @@ static void test_framebuffer(void) ok_x4( status, ==, GL_FRAMEBUFFER_COMPLETE ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_COLOR_ATTACHMENT1 ); @@ -3810,7 +3810,7 @@ static void test_framebuffer(void) glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_COLOR_ATTACHMENT1 ); @@ -3821,10 +3821,10 @@ static void test_framebuffer(void) todo_wine ok_ret( GL_NO_ERROR, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_LEFT ); + ok_x4( value, ==, GL_FRONT_LEFT ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_BACK_LEFT ); + ok_x4( value, ==, GL_BACK_LEFT ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_COLOR_ATTACHMENT1 ); @@ -3833,7 +3833,7 @@ static void test_framebuffer(void) ok_ret( GL_NO_ERROR, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_AND_BACK ); + ok_x4( value, ==, GL_FRONT_AND_BACK ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_NONE ); @@ -3847,10 +3847,10 @@ static void test_framebuffer(void) todo_wine ok_ret( GL_NO_ERROR, glGetError() ); glGetIntegerv( GL_DRAW_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_FRONT_LEFT ); + ok_x4( value, ==, GL_FRONT_LEFT ); glGetIntegerv( GL_DRAW_BUFFER1, &value ); ok_ret( GL_NO_ERROR, glGetError() ); - todo_wine ok_x4( value, ==, GL_BACK_LEFT ); + ok_x4( value, ==, GL_BACK_LEFT ); glGetIntegerv( GL_READ_BUFFER, &value ); ok_ret( GL_NO_ERROR, glGetError() ); ok_x4( value, ==, GL_COLOR_ATTACHMENT1 ); diff --git a/dlls/opengl32/unix_wgl.c b/dlls/opengl32/unix_wgl.c index 26741a40773..ce84d8f9d9b 100644 --- a/dlls/opengl32/unix_wgl.c +++ b/dlls/opengl32/unix_wgl.c @@ -742,27 +742,27 @@ static void set_gl_error( TEB *teb, GLenum error ) static BOOL get_default_fbo_integer( struct context *ctx, struct opengl_drawable *draw, struct opengl_drawable *read, GLenum pname, GLint *data ) { - if (pname == GL_READ_BUFFER && !ctx->read_fbo && read->read_fbo) + if (pname == GL_READ_BUFFER && !ctx->read_fbo) { *data = ctx->pixel_mode.read_buffer; return TRUE; } - if ((pname == GL_DRAW_BUFFER || pname == GL_DRAW_BUFFER0) && !ctx->draw_fbo && draw->draw_fbo) + if ((pname == GL_DRAW_BUFFER || pname == GL_DRAW_BUFFER0) && !ctx->draw_fbo) { *data = ctx->color_buffer.draw_buffers[0]; return TRUE; } - if (pname >= GL_DRAW_BUFFER1 && pname <= GL_DRAW_BUFFER15 && !ctx->draw_fbo && draw->draw_fbo) + if (pname >= GL_DRAW_BUFFER1 && pname <= GL_DRAW_BUFFER15 && !ctx->draw_fbo) { *data = ctx->color_buffer.draw_buffers[pname - GL_DRAW_BUFFER0]; return TRUE; } - if (pname == GL_DOUBLEBUFFER && draw->draw_fbo) + if (pname == GL_DOUBLEBUFFER && !ctx->draw_fbo) { *data = draw->doublebuffer; return TRUE; } - if (pname == GL_STEREO && draw->draw_fbo) + if (pname == GL_STEREO && !ctx->draw_fbo) { *data = draw->stereo; return TRUE; @@ -786,11 +786,9 @@ static BOOL get_integer( TEB *teb, GLenum pname, GLint *data ) switch (pname) { case GL_DRAW_FRAMEBUFFER_BINDING: - if (!draw->draw_fbo) break; *data = ctx->draw_fbo; return TRUE; case GL_READ_FRAMEBUFFER_BINDING: - if (!read->read_fbo) break; *data = ctx->read_fbo; return TRUE; case GL_DEVICE_NODE_MASK_EXT: @@ -1802,8 +1800,11 @@ void wrap_glGetFramebufferParameteriv( TEB *teb, GLuint fbo, GLenum pname, GLint struct opengl_drawable *draw, *read; struct context *ctx; - if ((ctx = get_current_context( teb, &draw, &read )) && !fbo && (fbo = draw->draw_fbo)) + if ((ctx = get_current_context( teb, &draw, &read )) && !fbo) + { if (get_default_fbo_integer( ctx, draw, read, pname, params )) return; + fbo = draw->draw_fbo; + } p_glGetFramebufferParameteriv( fbo, pname, params ); } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10784