On 01/16/2018 10:59 AM, Brian Paul wrote:
> On 01/16/2018 11:12 AM, Ian Romanick wrote:
>> On 01/15/2018 11:23 AM, Brian Paul wrote:
>>> On 01/12/2018 03:56 PM, Ian Romanick wrote:
>>>> From: Ian Romanick <ian.d.roman...@intel.com>
>>>>
>>>> With the exception of NVIDIA hardware, these are is the values that all
>>>> hardware and Gallium want.  The remapping is currently implemented
>>>> in at
>>>> least 6 places.  This starts the process of consolidating to a single
>>>> place.
>>>>
>>>> Signed-off-by: Ian Romanick <ian.d.roman...@intel.com>
>>>> ---
>>>>    src/mesa/main/blend.c  | 22 ++++++++++++++++++++++
>>>>    src/mesa/main/mtypes.h | 29 +++++++++++++++++++++++++++++
>>>>    2 files changed, 51 insertions(+)
>>>>
>>>> diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
>>>> index 01721ab..f47b102 100644
>>>> --- a/src/mesa/main/blend.c
>>>> +++ b/src/mesa/main/blend.c
>>>> @@ -849,6 +849,26 @@ _mesa_AlphaFunc( GLenum func, GLclampf ref )
>>>>       }
>>>>    }
>>>>    +static const enum color_logic_ops color_logicop_mapping[16] = {
>>>> +   COLOR_LOGICOP_CLEAR,
>>>> +   COLOR_LOGICOP_AND,
>>>> +   COLOR_LOGICOP_AND_REVERSE,
>>>> +   COLOR_LOGICOP_COPY,
>>>> +   COLOR_LOGICOP_AND_INVERTED,
>>>> +   COLOR_LOGICOP_NOOP,
>>>> +   COLOR_LOGICOP_XOR,
>>>> +   COLOR_LOGICOP_OR,
>>>> +   COLOR_LOGICOP_NOR,
>>>> +   COLOR_LOGICOP_EQUIV,
>>>> +   COLOR_LOGICOP_INVERT,
>>>> +   COLOR_LOGICOP_OR_REVERSE,
>>>> +   COLOR_LOGICOP_COPY_INVERTED,
>>>> +   COLOR_LOGICOP_OR_INVERTED,
>>>> +   COLOR_LOGICOP_NAND,
>>>> +   COLOR_LOGICOP_SET
>>>> +};
>>>> +
>>>> +#define GLenum_to_color_logicop(x) color_logicop_mapping[x & 0x0f]
>>>>      static ALWAYS_INLINE void
>>>>    logic_op(struct gl_context *ctx, GLenum opcode, bool no_error)
>>>> @@ -884,6 +904,7 @@ logic_op(struct gl_context *ctx, GLenum opcode,
>>>> bool no_error)
>>>>       FLUSH_VERTICES(ctx, ctx->DriverFlags.NewLogicOp ? 0 :
>>>> _NEW_COLOR);
>>>>       ctx->NewDriverState |= ctx->DriverFlags.NewLogicOp;
>>>>       ctx->Color.LogicOp = opcode;
>>>> +   ctx->Color._LogicOp = GLenum_to_color_logicop(opcode);
>>>>         if (ctx->Driver.LogicOpcode)
>>>>          ctx->Driver.LogicOpcode(ctx, opcode);
>>>> @@ -1189,6 +1210,7 @@ void _mesa_init_color( struct gl_context * ctx )
>>>>       ctx->Color.IndexLogicOpEnabled = GL_FALSE;
>>>>       ctx->Color.ColorLogicOpEnabled = GL_FALSE;
>>>>       ctx->Color.LogicOp = GL_COPY;
>>>> +   ctx->Color._LogicOp = COLOR_LOGICOP_COPY;
>>>>       ctx->Color.DitherFlag = GL_TRUE;
>>>>         /* GL_FRONT is not possible on GLES. Instead GL_BACK will
>>>> render to either
>>>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>>>> index 226eb94..2fbfd27 100644
>>>> --- a/src/mesa/main/mtypes.h
>>>> +++ b/src/mesa/main/mtypes.h
>>>> @@ -418,6 +418,34 @@ union gl_color_union
>>>>       GLuint ui[4];
>>>>    };
>>>>    +/**
>>>> + * Remapped color logical operations
>>>> + *
>>>> + * With the exception of NVIDIA hardware, which consumes the OpenGL
>>>> enumerants
>>>> + * directly, everything wants this mapping of color logical
>>>> operations.
>>>> + *
>>>> + * Fun fact: These values are just the bit-reverse of the low-nibble
>>>> of the GL
>>>> + * enumerant values (i.e., `GL_NOOP & 0x0f` is `b0101' while
>>>> + * \c COLOR_LOGICOP_NOOP is `b1010`).
>>>> + */
>>>> +enum PACKED color_logic_ops {
>>>
>>> A name such as gl_logicop_mode would be more in line with other mesa
>>> enum types.
>>
>> I thought about that, but I thought the "gl_" prefix could cause some
>> confusion since these are the "not GL" enums.  I can change it if you
>> like.
> 
> I'd prefer you change it.  If you look around, we have lots of other
> enums like that (ex: gl_fog_mode, gl_tex_env_mode, gl_tex_env_source,
> gl_vert_attrib, gl_varying_slot, etc).  Maybe they should all be
> "mesa_foo" but it is what it is.

That makes sense.  I've changed it locally.

> Thanks.
> 
> -Brian
> 
>>
>>>> +   COLOR_LOGICOP_CLEAR = 0,
>>>> +   COLOR_LOGICOP_NOR = 1,
>>>> +   COLOR_LOGICOP_AND_INVERTED = 2,
>>>> +   COLOR_LOGICOP_COPY_INVERTED = 3,
>>>> +   COLOR_LOGICOP_AND_REVERSE = 4,
>>>> +   COLOR_LOGICOP_INVERT = 5,
>>>> +   COLOR_LOGICOP_XOR = 6,
>>>> +   COLOR_LOGICOP_NAND = 7,
>>>> +   COLOR_LOGICOP_AND = 8,
>>>> +   COLOR_LOGICOP_EQUIV = 9,
>>>> +   COLOR_LOGICOP_NOOP = 10,
>>>> +   COLOR_LOGICOP_OR_INVERTED = 11,
>>>> +   COLOR_LOGICOP_COPY = 12,
>>>> +   COLOR_LOGICOP_OR_REVERSE = 13,
>>>> +   COLOR_LOGICOP_OR = 14,
>>>> +   COLOR_LOGICOP_SET = 15
>>>> +};
>>>>      /**
>>>>     * Color buffer attribute group (GL_COLOR_BUFFER_BIT).
>>>> @@ -493,6 +521,7 @@ struct gl_colorbuffer_attrib
>>>>       GLboolean IndexLogicOpEnabled;    /**< Color index logic op
>>>> enabled flag */
>>>>       GLboolean ColorLogicOpEnabled;    /**< RGBA logic op enabled
>>>> flag */
>>>>       GLenum LogicOp;            /**< Logic operator */
>>>> +   enum color_logic_ops _LogicOp;
>>>>         /*@}*/
>>>>   
>>>
>>> For patches 1,3,4, Reviewed-by: Brian Paul <bri...@vmware.com>
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to