[Mesa-dev] [PATCH 2/5] glsl: Optionally lower TES gl_PatchVerticesIn to a uniform.

Alejandro Piñeiro apinheiro at igalia.com
Thu Jun 9 07:00:43 UTC 2016


On 09/06/16 05:50, Kenneth Graunke wrote:
> On Wednesday, June 8, 2016 7:45:16 PM PDT Alejandro Piñeiro wrote:
>> On 02/06/16 23:09, Kenneth Graunke wrote:
>>> i965 has no special hardware for this, so we need to pass this value in
>>> as a uniform (unless the TES is linked against a TCS, in which case the
>>> linker can just replace this with a constant).
>>>
>>> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
>>> Cc: mesa-stable at lists.freedesktop.org
>>> ---
>>>  src/compiler/glsl/linker.cpp      | 20 +++++++++++++++++---
>>>  src/mesa/main/mtypes.h            |  1 +
>>>  src/mesa/program/prog_statevars.c |  7 +++++++
>>>  src/mesa/program/prog_statevars.h |  1 +
>>>  4 files changed, 26 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
>>> index 9e65590..7c7dbfe 100644
>>> --- a/src/compiler/glsl/linker.cpp
>>> +++ b/src/compiler/glsl/linker.cpp
>>> @@ -72,6 +72,7 @@
>>>  #include "ir.h"
>>>  #include "program.h"
>>>  #include "program/hash_table.h"
>>> +#include "program/prog_instruction.h"
>>>  #include "linker.h"
>>>  #include "link_varyings.h"
>>>  #include "ir_optimization.h"
>>> @@ -2485,7 +2486,7 @@ resize_tes_inputs(struct gl_context *ctx,
>>>        ir->accept(&input_resize_visitor);
>>>     }
>>>  
>>> -   if (tcs) {
>>> +   if (tcs || ctx->Const.LowerTESPatchVerticesIn) {
>>>        /* Convert the gl_PatchVerticesIn system value into a constant, since
>>>         * the value is known at this point.
>> Now this comment became obsolete as can be converted to a constant or a
>> uniform. Perhaps it would be better to just remove the comment.
>>
>>>         */
>>> @@ -2494,9 +2495,22 @@ resize_tes_inputs(struct gl_context *ctx,
>>>           if (var && var->data.mode == ir_var_system_value &&
>>>               var->data.location == SYSTEM_VALUE_VERTICES_IN) {
>>>              void *mem_ctx = ralloc_parent(var);
>>> -            var->data.mode = ir_var_auto;
>>>              var->data.location = 0;
>>> -            var->constant_value = new(mem_ctx) ir_constant(num_vertices);
>>> +            var->data.explicit_location = false;
>> Nitpick: With this change you are also changing slightly the option that
>> was present before (use a constant) in addition to add the option to
>> lower to an uniform. Not sure if it is worth to be mentioned though,
>> feel free to ignore.
> I am?  Before this patch, there was no option.  If the program being
> linked contained a TCS, we would turn it into a constant.  If not, we
> would leave it as a system value.
>
> With this patch, my intention was to do the same behavior when no
> options were set.  If ctx->Const.LowerTESPatchVerticesIn is set, we
> turn it into a constant if there's a linked TCS (as before), and turn
> it into a uniform otherwise (instead of a system value).
>
> Did I miss something?

Yes, the behaviour without options set would be the same. The slight
change I was mentioning, is that on the line Im pointing, you are
setting data.explicit location to false on both cases (uniform and
constant). Before this patch, that only have the constant option,
data.explicit_location was not assigned.

BR


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160609/bfae4b5a/attachment.sig>


More information about the mesa-dev mailing list