mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-21 10:00:36 +01:00
i965: fix polygon face orientation when rendering to FBO
In the i965, the FBO coordinate system is inverted from the standard
OpenGL/Mesa coordinate system; that means that the viewport and the
polygon face orientation have to be inverted if rendering to a FBO.
The viewport was already being handled correctly; but polygon face
was not. This caused a conform failure when rendering to texture with
two-sided lighting enabled.
This fixes the problem in the i965 driver, and adds to the comment about
the gl_framebuffer "Name" field so that this isn't a surprise to other
driver writers.
(cherry picked from commit 6dceeb2eb8)
This commit is contained in:
parent
9feb26584a
commit
918e5221ef
2 changed files with 18 additions and 4 deletions
|
|
@ -167,8 +167,14 @@ static void upload_sf_prog(struct brw_context *brw)
|
|||
key.do_twoside_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide);
|
||||
|
||||
/* _NEW_POLYGON */
|
||||
if (key.do_twoside_color)
|
||||
key.frontface_ccw = (ctx->Polygon.FrontFace == GL_CCW);
|
||||
if (key.do_twoside_color) {
|
||||
/* If we're rendering to a FBO, we have to invert the polygon
|
||||
* face orientation, just as we invert the viewport in
|
||||
* sf_unit_create_from_key(). ctx->DrawBuffer->Name will be
|
||||
* nonzero if we're rendering to such an FBO.
|
||||
*/
|
||||
key.frontface_ccw = (ctx->Polygon.FrontFace == GL_CCW) ^ (ctx->DrawBuffer->Name != 0);
|
||||
}
|
||||
|
||||
dri_bo_unreference(brw->sf.prog_bo);
|
||||
brw->sf.prog_bo = brw_search_cache(&brw->cache, BRW_SF_PROG,
|
||||
|
|
|
|||
|
|
@ -2376,8 +2376,16 @@ struct gl_renderbuffer_attachment
|
|||
*/
|
||||
struct gl_framebuffer
|
||||
{
|
||||
_glthread_Mutex Mutex; /**< for thread safety */
|
||||
GLuint Name; /* if zero, this is a window system framebuffer */
|
||||
_glthread_Mutex Mutex; /**< for thread safety */
|
||||
/**
|
||||
* If zero, this is a window system framebuffer. If non-zero, this
|
||||
* is a FBO framebuffer; note that for some devices (i.e. those with
|
||||
* a natural pixel coordinate system for FBOs that differs from the
|
||||
* OpenGL/Mesa coordinate system), this means that both the viewport
|
||||
* and polygon face orientation will have to be inverted.
|
||||
*/
|
||||
GLuint Name;
|
||||
|
||||
GLint RefCount;
|
||||
GLboolean DeletePending;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue