[Mesa-dev] [PATCH] mesa: add display listy support for glPatchParameter{i, fv}()

Marek Olšák maraeo at gmail.com
Tue May 29 22:53:43 UTC 2018


Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

On Mon, May 28, 2018 at 7:20 AM, Timothy Arceri <tarceri at itsqueeze.com>
wrote:

> This is required for tessellation shader Compat profile support.
> ---
>  src/mesa/main/dlist.c | 78 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 78 insertions(+)
>
> diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
> index 8be223559ab..4fc451000b5 100644
> --- a/src/mesa/main/dlist.c
> +++ b/src/mesa/main/dlist.c
> @@ -365,6 +365,11 @@ typedef enum
>     OPCODE_UNIFORM_3UIV,
>     OPCODE_UNIFORM_4UIV,
>
> +   /* OpenGL 4.0 / GL_ARB_tessellation_shader */
> +   OPCODE_PATCH_PARAMETER_I,
> +   OPCODE_PATCH_PARAMETER_FV_INNER,
> +   OPCODE_PATCH_PARAMETER_FV_OUTER,
> +
>     /* OpenGL 4.2 / GL_ARB_separate_shader_objects */
>     OPCODE_USE_PROGRAM_STAGES,
>     OPCODE_PROGRAM_UNIFORM_1F,
> @@ -3271,6 +3276,54 @@ save_Ortho(GLdouble left, GLdouble right,
>  }
>
>
> +static void GLAPIENTRY
> +save_PatchParameteri(GLenum pname, const GLint value)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   Node *n;
> +   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
> +   n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_I, 2);
> +   if (n) {
> +      n[1].e = pname;
> +      n[2].i = value;
> +   }
> +   if (ctx->ExecuteFlag) {
> +      CALL_PatchParameteri(ctx->Exec, (pname, value));
> +   }
> +}
> +
> +
> +static void GLAPIENTRY
> +save_PatchParameterfv(GLenum pname, const GLfloat *params)
> +{
> +   GET_CURRENT_CONTEXT(ctx);
> +   Node *n;
> +   ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
> +
> +   if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) {
> +      n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_OUTER, 5);
> +   } else {
> +      assert(pname == GL_PATCH_DEFAULT_INNER_LEVEL);
> +      n = alloc_instruction(ctx, OPCODE_PATCH_PARAMETER_FV_INNER, 3);
> +   }
> +   if (n) {
> +      n[1].e = pname;
> +      if (pname == GL_PATCH_DEFAULT_OUTER_LEVEL) {
> +         n[2].f = params[0];
> +         n[3].f = params[1];
> +         n[4].f = params[2];
> +         n[5].f = params[3];
> +      } else {
> +         n[2].f = params[0];
> +         n[3].f = params[1];
> +      }
> +   }
> +   if (ctx->ExecuteFlag) {
> +      CALL_PatchParameterfv(ctx->Exec, (pname, params));
> +   }
> +}
> +
> +
>  static void GLAPIENTRY
>  save_PixelMapfv(GLenum map, GLint mapsize, const GLfloat *values)
>  {
> @@ -8401,6 +8454,27 @@ execute_list(struct gl_context *ctx, GLuint list)
>           case OPCODE_PASSTHROUGH:
>              CALL_PassThrough(ctx->Exec, (n[1].f));
>              break;
> +         case OPCODE_PATCH_PARAMETER_I:
> +            CALL_PatchParameteri(ctx->Exec, (n[1].e, n[2].i));
> +            break;
> +         case OPCODE_PATCH_PARAMETER_FV_INNER:
> +            {
> +               GLfloat params[2];
> +               params[0] = n[2].f;
> +               params[1] = n[3].f;
> +               CALL_PatchParameterfv(ctx->Exec, (n[1].e, params));
> +            }
> +            break;
> +         case OPCODE_PATCH_PARAMETER_FV_OUTER:
> +            {
> +               GLfloat params[4];
> +               params[0] = n[2].f;
> +               params[1] = n[3].f;
> +               params[2] = n[4].f;
> +               params[3] = n[5].f;
> +               CALL_PatchParameterfv(ctx->Exec, (n[1].e, params));
> +            }
> +            break;
>           case OPCODE_PIXEL_MAP:
>              CALL_PixelMapfv(ctx->Exec,
>                              (n[1].e, n[2].i, get_pointer(&n[3])));
> @@ -9847,6 +9921,10 @@ _mesa_initialize_save_table(const struct
> gl_context *ctx)
>     SET_PointParameterf(table, save_PointParameterfEXT);
>     SET_PointParameterfv(table, save_PointParameterfvEXT);
>
> +   /* 91. GL_ARB_tessellation_shader */
> +   SET_PatchParameteri(table, save_PatchParameteri);
> +   SET_PatchParameterfv(table, save_PatchParameterfv);
> +
>     /* 173. GL_EXT_blend_func_separate */
>     SET_BlendFuncSeparate(table, save_BlendFuncSeparateEXT);
>
> --
> 2.17.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180529/95a7d2c5/attachment.html>


More information about the mesa-dev mailing list