[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