Reviewed-by: Marek Olšák <marek.ol...@amd.com> Marek
On Mon, May 28, 2018 at 7:20 AM, Timothy Arceri <tarc...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev