[Mesa-dev] [PATCH 1/2] gallium/st: Clean up Haiku depth mapping, fix colorspace errors

kallisti5 kallisti5 at ssl.unixzen.com
Sat Dec 27 17:58:55 PST 2014


On 2014-12-27 11:41, Ilia Mirkin wrote:
> On Sat, Dec 27, 2014 at 1:13 AM, Alexander von Gluck IV
> <kallisti5 at unixzen.com> wrote:
>> ---
>>  src/gallium/state_trackers/hgl/hgl.c |   48 
>> +++++++++++++--------------------
>>  1 files changed, 19 insertions(+), 29 deletions(-)
>> 
>> diff --git a/src/gallium/state_trackers/hgl/hgl.c 
>> b/src/gallium/state_trackers/hgl/hgl.c
>> index 4d7c479..0b30290 100644
>> --- a/src/gallium/state_trackers/hgl/hgl.c
>> +++ b/src/gallium/state_trackers/hgl/hgl.c
>> @@ -232,9 +232,10 @@ hgl_create_st_visual(ulong options)
>>         const GLboolean alphaFlag   = ((options & BGL_ALPHA) == 
>> BGL_ALPHA);
>>         const GLboolean dblFlag     = ((options & BGL_DOUBLE) == 
>> BGL_DOUBLE);
>>         const GLboolean stereoFlag  = false;
>> -       const GLint depth           = (options & BGL_DEPTH) ? 24 : 0;
>> -       const GLint stencil         = (options & BGL_STENCIL) ? 8 : 0;
>> -       const GLint accum           = (options & BGL_ACCUM) ? 16 : 0;
>> +       const GLboolean depthFlag   = ((options & BGL_DEPTH) == 
>> BGL_DEPTH);
>> +       const GLboolean stencilFlag = ((options & BGL_STENCIL) == 
>> BGL_STENCIL);
>> +       const GLboolean accumFlag   = ((options & BGL_ACCUM) == 
>> BGL_ACCUM);
>> +
>>         const GLint red             = rgbFlag ? 8 : 5;
>>         const GLint green           = rgbFlag ? 8 : 5;
>>         const GLint blue            = rgbFlag ? 8 : 5;
>> @@ -244,9 +245,9 @@ hgl_create_st_visual(ulong options)
>>         TRACE("alpha    :\t%d\n", (bool)alphaFlag);
>>         TRACE("dbl      :\t%d\n", (bool)dblFlag);
>>         TRACE("stereo   :\t%d\n", (bool)stereoFlag);
>> -       TRACE("depth    :\t%d\n", depth);
>> -       TRACE("stencil  :\t%d\n", stencil);
>> -       TRACE("accum    :\t%d\n", accum);
>> +       TRACE("depth    :\t%d\n", (bool)depthFlag);
>> +       TRACE("stencil  :\t%d\n", (bool)stencilFlag);
>> +       TRACE("accum    :\t%d\n", (bool)accumFlag);
>>         TRACE("red      :\t%d\n", red);
>>         TRACE("green    :\t%d\n", green);
>>         TRACE("blue     :\t%d\n", blue);
>> @@ -254,34 +255,23 @@ hgl_create_st_visual(ulong options)
>> 
>>         // Determine color format
>>         if (red == 8) {
>> +               // Color format
>>                 if (alpha == 8)
>> -                       visual->color_format = 
>> PIPE_FORMAT_A8R8G8B8_UNORM;
>> +                       visual->color_format = 
>> PIPE_FORMAT_B8G8R8A8_UNORM;
>>                 else
>> -                       visual->color_format = 
>> PIPE_FORMAT_X8R8G8B8_UNORM;
>> +                       visual->color_format = 
>> PIPE_FORMAT_B8G8R8X8_UNORM;
>> +
>> +               // Depth buffer
>> +               if (depthFlag)
>> +                       visual->depth_stencil_format = 
>> PIPE_FORMAT_Z32_UNORM;
> 
> I guess you only work with llvmpipe which supports whatever, but I
> don't think a lot of hw drivers support Z32_UNORM. Z24 is much more
> common. Some hardware also supports Z16 and Z32_FLOAT (and
> Z32_FLOAT_S8X24_UNORM for depth/stencil combined version).

Thanks :-).  If Z24 is a lot more common i'll go with that one for now.

I'm interested to see if we could figure out something with dri3 and C++ 
in Haiku
for hardware support, but that seems pretty far off.

> Further you appear to have dropped the stencil format here entirely.
> If that's expected, perhaps get rid of the stencilFlag above?

Yeah, I mostly left it there in-case we wanted to set something based on 
it
in the future, that BGL_STENCIL may not be obvious to non-Haiku people 
:-)

Here are the list of flags our OpenGL Kit accepts for new GL contexts:

BGL_RGB	        Use RGB graphics instead of indexed color (8-bit). This 
is the default if beither BGL_RGB nor BGL_INDEX is specified.
BGL_INDEX	Use indexed color (8-bit graphics). Not currently supported.
BGL_SINGLE	Use single-buffering; all rendering is done directly to the 
display. This is not currently supported by the BeOS implementation of 
OpenGL. This is the default
BGL_DOUBLE	Use double-buffered graphics. All rendering is done to an 
off-screen buffer and only becomes visible when the SwapBuffers() 
function is called.
BGL_ACCUM	Requests that the view have an accumulation buffer.
BGL_ALPHA	Requests that the view's color buffer include an alpha 
component.
BGL_DEPTH	Requests that the view have a depth buffer.
BGL_STENCIL	Requests that the view have a stencil buffer.

Right now i'm trying to get rid of the last of the _mesa_* calls from 
the gallium target
as they're cheating a bit.

  -- Alex


More information about the mesa-dev mailing list