[Mesa-dev] [PATCH 2/4] gallium: add threads per block TGSI property

Ilia Mirkin imirkin at alum.mit.edu
Fri Apr 1 22:52:00 UTC 2016


On Fri, Apr 1, 2016 at 6:50 PM, Bas Nieuwenhuizen
<bas at basnieuwenhuizen.nl> wrote:
> I will change that to
>
> TGSI_PROPERTY_CS_FIXED_BLOCK_WIDTH etc.
>
> since most other properties, seem to use S instead of P,
> unless you have any objections.

Indeed they do - no objections from me.

>
> - Bas
>
> On Sat, Apr 2, 2016 at 12:37 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
>> On Fri, Apr 1, 2016 at 6:32 PM, Bas Nieuwenhuizen
>> <bas at basnieuwenhuizen.nl> wrote:
>>> The value 0 for unknown has been chosen to so that
>>> drivers using tgsi_scan_shader do not need to detect
>>> missing properties if they zero-initialize the struct.
>>>
>>> Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
>>> ---
>>>  src/gallium/auxiliary/tgsi/tgsi_strings.c  |  3 +++
>>>  src/gallium/docs/source/tgsi.rst           |  6 ++++++
>>>  src/gallium/include/pipe/p_shader_tokens.h |  5 ++++-
>>>  src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 18 ++++++++++++++++++
>>>  4 files changed, 31 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c b/src/gallium/auxiliary/tgsi/tgsi_strings.c
>>> index ae779a8..2a9f9c5 100644
>>> --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c
>>> +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c
>>> @@ -146,6 +146,9 @@ const char *tgsi_property_names[TGSI_PROPERTY_COUNT] =
>>>     "NUM_CULLDIST_ENABLED",
>>>     "FS_EARLY_DEPTH_STENCIL",
>>>     "NEXT_SHADER",
>>> +   "FIXED_BLOCK_WIDTH",
>>> +   "FIXED_BLOCK_HEIGHT",
>>> +   "FIXED_BLOCK_DEPTH"
>>>  };
>>>
>>>  const char *tgsi_return_type_names[TGSI_RETURN_TYPE_COUNT] =
>>> diff --git a/src/gallium/docs/source/tgsi.rst b/src/gallium/docs/source/tgsi.rst
>>> index 3ac6ba3..b5eac9d 100644
>>> --- a/src/gallium/docs/source/tgsi.rst
>>> +++ b/src/gallium/docs/source/tgsi.rst
>>> @@ -3220,6 +3220,12 @@ Which shader stage will MOST LIKELY follow after this shader when the shader
>>>  is bound. This is only a hint to the driver and doesn't have to be precise.
>>>  Only set for VS and TES.
>>>
>>> +TGSI_PROPERTY_FIXED_BLOCK_WIDTH / HEIGHT / DEPTH
>>> +""""""""""""""""""""""""""""""""""""""""""""""""
>>> +
>>> +Threads per block in each dimension, if known at compile time. If the block size
>>> +is known all three should be at least 1. If it is unknown they should all be set
>>> +to 0 or not set.
>>>
>>>  Texture Sampling and Texture Formats
>>>  ------------------------------------
>>> diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h
>>> index 5cc18a2..362070c 100644
>>> --- a/src/gallium/include/pipe/p_shader_tokens.h
>>> +++ b/src/gallium/include/pipe/p_shader_tokens.h
>>> @@ -276,7 +276,10 @@ union tgsi_immediate_data
>>>  #define TGSI_PROPERTY_NUM_CULLDIST_ENABLED   16
>>>  #define TGSI_PROPERTY_FS_EARLY_DEPTH_STENCIL 17
>>>  #define TGSI_PROPERTY_NEXT_SHADER            18
>>> -#define TGSI_PROPERTY_COUNT                  19
>>> +#define TGSI_PROPERTY_FIXED_BLOCK_WIDTH      19
>>> +#define TGSI_PROPERTY_FIXED_BLOCK_HEIGHT     20
>>> +#define TGSI_PROPERTY_FIXED_BLOCK_DEPTH      21
>>
>> These types of single-shader-usefulness properties tend to be prefixed
>> with the shader type. In this case, CP, i.e.
>> TGSI_PROPERTY_CP_FIXED_BLOCK_WIDTH, etc.
>>
>>> +#define TGSI_PROPERTY_COUNT                  22
>>>
>>>  struct tgsi_property {
>>>     unsigned Type         : 4;  /**< TGSI_TOKEN_TYPE_PROPERTY */
>>> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> index 23786b8..473e782 100644
>>> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
>>> @@ -5935,6 +5935,20 @@ find_array(unsigned attr, struct array_decl *arrays, unsigned count,
>>>     return false;
>>>  }
>>>
>>> +static void
>>> +emit_compute_block_size(const struct gl_program *program,
>>> +                        struct ureg_program *ureg) {
>>> +   const struct gl_compute_program *cp =
>>> +      (const struct gl_compute_program *)program;
>>> +
>>> +   ureg_property(ureg, TGSI_PROPERTY_FIXED_BLOCK_WIDTH,
>>> +                       cp->LocalSize[0]);
>>> +   ureg_property(ureg, TGSI_PROPERTY_FIXED_BLOCK_HEIGHT,
>>> +                       cp->LocalSize[1]);
>>> +   ureg_property(ureg, TGSI_PROPERTY_FIXED_BLOCK_DEPTH,
>>> +                       cp->LocalSize[2]);
>>> +}
>>> +
>>>  /**
>>>   * Translate intermediate IR (glsl_to_tgsi_instruction) to TGSI format.
>>>   * \param program  the program to translate
>>> @@ -6180,6 +6194,10 @@ st_translate_program(
>>>        }
>>>     }
>>>
>>> +   if (procType == TGSI_PROCESSOR_COMPUTE) {
>>> +      emit_compute_block_size(proginfo, ureg);
>>> +   }
>>> +
>>>     /* Declare address register.
>>>      */
>>>     if (program->num_address_regs > 0) {
>>> --
>>> 2.7.4
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list