[Mesa-dev] [PATCH] st/atifs: merge gl_program and ati_fragment_shader

Ian Romanick idr at freedesktop.org
Tue Nov 14 17:38:58 UTC 2017


On 11/13/2017 10:49 PM, Timothy Arceri wrote:
> 
> 
> On 14/11/17 13:30, Ian Romanick wrote:
>> On 11/10/2017 02:35 AM, Timothy Arceri wrote:
>>> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
>>> index 6b5c5bbb36..7c357b07ee 100644
>>> --- a/src/mesa/main/mtypes.h
>>> +++ b/src/mesa/main/mtypes.h
>>> @@ -2352,58 +2376,29 @@ struct gl_fragment_program_state
>>>    */
>>>   struct gl_compute_program_state
>>>   {
>>>      /** Currently enabled and valid program (including internal
>>> programs
>>>       * and compiled shader programs).
>>>       */
>>>      struct gl_program *_Current;
>>>   };
>>>     -/**
>>> - * ATI_fragment_shader runtime state
>>> - */
>>> -
>>> -struct atifs_instruction;
>>> -struct atifs_setupinst;
>>> -
>>> -/**
>>> - * ATI fragment shader
>>> - */
>>> -struct ati_fragment_shader
>>> -{
>>> -   GLuint Id;
>>> -   GLint RefCount;
>>> -   struct atifs_instruction *Instructions[2];
>>> -   struct atifs_setupinst *SetupInst[2];
>>> -   GLfloat Constants[8][4];
>>> -   GLbitfield LocalConstDef;  /**< Indicates which constants have
>>> been set */
>>> -   GLubyte numArithInstr[2];
>>> -   GLubyte regsAssigned[2];
>>> -   GLubyte NumPasses;         /**< 1 or 2 */
>>> -   GLubyte cur_pass;
>>> -   GLubyte last_optype;
>>> -   GLboolean interpinp1;
>>> -   GLboolean isValid;
>>> -   GLuint swizzlerq;
>>> -   struct gl_program *Program;
>>> -};
>>> -
>>
>> Other places in Mesa would do this by C-style subclassing of gl_program:
>>
>> struct ati_fragment_shader {
>>     struct gl_program Base;
>>     struct atifs_instruction *Instructions[2];
>>     struct atifs_setupinst *SetupInst[2];
>>     GLfloat Constants[8][4];
>>     GLbitfield LocalConstDef;  /**< Indicates which constants have
>> been set */
>>     GLubyte numArithInstr[2];
>>     GLubyte regsAssigned[2];
>>     GLubyte NumPasses;         /**< 1 or 2 */
>>     GLubyte cur_pass;
>>     GLubyte last_optype;
>>     GLboolean interpinp1;
>>     GLboolean isValid;
>>     GLuint swizzlerq;
>> };
>>
>> Is there a reason to not do that here?
> 
> The st already does a C-style subclassing of gl_program, so it would
> start getting messy (which is what this patch tries to avoid in the
> first place). Also that type of subclassing is generally used for adding
> driver specific additional fields, not for specifying the basics of the
> program as we are doing here.
> 
> Having these fields inside gl_program simplifies things a bunch. Is
> there something you don't like? IMO this makes things more consistent as
> its how we handle arb programs. The final step is to make this all a
> union but that requires a bit of work on i915 and swrast,

There wasn't anything in particular that I didn't like, I was just
trying to understand the design choice.  What I mostly didn't like was
the old way ati_fragment_shader was implemented. :) I had forgotten that
ARB programs were also in gl_program, so this makes a bit more sense now.

>>>   /**
>>>    * Context state for GL_ATI_fragment_shader
>>>    */
>>>   struct gl_ati_fragment_shader_state
>>>   {
>>>      GLboolean Enabled;
>>>      GLboolean Compiling;
>>>      GLfloat GlobalConstants[8][4];
>>> -   struct ati_fragment_shader *Current;
>>> +   struct gl_program *Current;
>>>   };
>>>     /**
>>>    *  Shader subroutine function definition
>>>    */
>>>   struct gl_subroutine_function
>>>   {
>>>      char *name;
>>>      int index;
>>>      int num_compat_types;
> 



More information about the mesa-dev mailing list