On 2015-08-12 17:14, Brian Paul wrote: > Another question below... > > On 08/12/2015 08:31 AM, Daniel Scharrer wrote: >> On 2015-08-06 15:46, Brian Paul wrote: >>> On 08/06/2015 07:44 AM, Daniel Scharrer wrote: >>>> CC: "10.6" <mesa-sta...@lists.freedesktop.org> >>>> >>>> --- >>>> >>>> v2: added CC for 10.6 >>>> renamed _mesa_tex_target_to_index to tex_target_to_index >>>> moved declaration of variable before code >>>> added missing spaces in ternary operators >>>> >>>> src/mesa/main/get.c | 93 >>>> ++++++++++++++++++++++++++++++++++++++++++++++++ >>>> src/mesa/main/texparam.c | 12 +++++++ >>>> 2 files changed, 105 insertions(+) >>>> >>>> diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c >>>> index 307a5ff..3b8cbbc 100644 >>>> --- a/src/mesa/main/get.c >>>> +++ b/src/mesa/main/get.c >>>> @@ -1785,6 +1785,52 @@ _mesa_GetDoublev(GLenum pname, GLdouble *params) >>>> } >>>> } >>>> >>>> +/** >>>> + * Convert a GL texture binding enum such as GL_TEXTURE_BINDING_2D >>>> + * into the corresponding Mesa texture target index. >>>> + * \return TEXTURE_x_INDEX or -1 if binding is invalid >>>> + */ >>>> +static int >>>> +tex_binding_to_index(const struct gl_context *ctx, GLenum binding) >>>> +{ >>>> + switch (binding) { >>>> + case GL_TEXTURE_BINDING_1D: >>>> + return _mesa_is_desktop_gl(ctx) ? TEXTURE_1D_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_2D: >>>> + return TEXTURE_2D_INDEX; >>>> + case GL_TEXTURE_BINDING_3D: >>>> + return ctx->API != API_OPENGLES ? TEXTURE_3D_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_CUBE_MAP_ARB: >>>> + return ctx->Extensions.ARB_texture_cube_map >>>> + ? TEXTURE_CUBE_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_RECTANGLE_NV: >>>> + return _mesa_is_desktop_gl(ctx) && >>>> ctx->Extensions.NV_texture_rectangle >>>> + ? TEXTURE_RECT_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_1D_ARRAY_EXT: >>>> + return _mesa_is_desktop_gl(ctx) && ctx->Extensions.EXT_texture_array >>>> + ? TEXTURE_1D_ARRAY_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_2D_ARRAY_EXT: >>>> + return (_mesa_is_desktop_gl(ctx) && >>>> ctx->Extensions.EXT_texture_array) >>>> + || _mesa_is_gles3(ctx) >>>> + ? TEXTURE_2D_ARRAY_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_BUFFER: >>>> + return ctx->API == API_OPENGL_CORE && >>>> + ctx->Extensions.ARB_texture_buffer_object ? >>>> + TEXTURE_BUFFER_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: >>>> + return _mesa_is_desktop_gl(ctx) && >>>> ctx->Extensions.ARB_texture_cube_map_array >>>> + ? TEXTURE_CUBE_ARRAY_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_2D_MULTISAMPLE: >>>> + return _mesa_is_desktop_gl(ctx) && >>>> ctx->Extensions.ARB_texture_multisample >>>> + ? TEXTURE_2D_MULTISAMPLE_INDEX : -1; >>>> + case GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: >>>> + return _mesa_is_desktop_gl(ctx) && >>>> ctx->Extensions.ARB_texture_multisample >>>> + ? TEXTURE_2D_MULTISAMPLE_ARRAY_INDEX : -1; >>>> + default: >>>> + return -1; >>>> + } >>>> +} >>>> + >>>> static enum value_type >>>> find_value_indexed(const char *func, GLenum pname, GLuint index, union >>>> value *v) >>>> { >>>> @@ -2048,6 +2094,53 @@ find_value_indexed(const char *func, GLenum pname, >>>> GLuint index, union value *v) >>>> v->value_int = ctx->ImageUnits[index].Format; >>>> return TYPE_INT; >>>> >>>> + /* ARB_direct_state_access */ >>>> + case GL_TEXTURE_BINDING_1D: >>>> + case GL_TEXTURE_BINDING_1D_ARRAY_EXT: >>>> + case GL_TEXTURE_BINDING_2D: >>>> + case GL_TEXTURE_BINDING_2D_ARRAY_EXT: >>>> + case GL_TEXTURE_BINDING_2D_MULTISAMPLE: >>>> + case GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: >>>> + case GL_TEXTURE_BINDING_3D: >>>> + case GL_TEXTURE_BINDING_BUFFER: >>>> + case GL_TEXTURE_BINDING_CUBE_MAP_ARB: >>>> + case GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: >>>> + case GL_TEXTURE_BINDING_RECTANGLE_NV: { >>>> + int target; >>>> + >>>> + if (ctx->API != API_OPENGL_CORE) >>>> + goto invalid_enum; >>>> + target = tex_binding_to_index(ctx, pname); >>>> + if (target < 0) >>>> + goto invalid_enum; >>>> + if (index >= ctx->Const.MaxTextureUnits) > > Is ctx->Const.MaxTextureUnits the right limit here? I think it might be > ctx->Const.MaxCombinedTextureImageUnits
You're right, that limit is wrong. However, I see now that glActiveTexture / glBindTextureUnit use _mesa_max_tex_unit(ctx) as the limit, which equals MAX2(ctx->Const.MaxCombinedTextureImageUnits, ctx->Const.MaxTextureCoordUnits); Shouldn't that also be used for the *_BINDING queries, or does it not matter for core contexts. >>>> + goto invalid_value; >>>> + >>>> + v->value_int = ctx->Texture.Unit[index].CurrentTex[target]->Name; >>>> + return TYPE_INT; >>>> + } >>>> + >>>> + case GL_SAMPLER_BINDING: { >>>> + struct gl_sampler_object *samp; >>>> + >>>> + if (ctx->API != API_OPENGL_CORE) >>>> + goto invalid_enum; >>>> + if (index >= ctx->Const.MaxTextureUnits) > > Same there. > > >>>> + goto invalid_value; >>>> + >>>> + samp = ctx->Texture.Unit[index].Sampler; >>>> + /* >>>> + * The sampler object may have been deleted on another context, >>>> + * so we try to lookup the sampler object before returning its Name. >>>> + */ >>>> + if (samp && _mesa_lookup_samplerobj(ctx, samp->Name)) { >>>> + v->value_int = samp->Name; >>>> + } else { >>>> + v->value_int = 0; >>>> + } >>>> + return TYPE_INT; >>>> + } >>>> + >>>> case GL_MAX_COMPUTE_WORK_GROUP_COUNT: >>>> if (!_mesa_is_desktop_gl(ctx) || >>>> !ctx->Extensions.ARB_compute_shader) >>>> goto invalid_enum; >>>> diff --git a/src/mesa/main/texparam.c b/src/mesa/main/texparam.c >>>> index c0611c3..f68d49e 100644 >>>> --- a/src/mesa/main/texparam.c >>>> +++ b/src/mesa/main/texparam.c >>>> @@ -1890,6 +1890,12 @@ get_tex_parameterfv(struct gl_context *ctx, >>>> *params = (GLfloat) obj->Sampler.sRGBDecode; >>>> break; >>>> >>>> + case GL_TEXTURE_TARGET: >>>> + if (ctx->API != API_OPENGL_CORE) >>>> + goto invalid_pname; >>>> + *params = ENUM_TO_FLOAT(obj->Target); >>>> + break; >>>> + >>>> default: >>>> goto invalid_pname; >>>> } >>>> @@ -2115,6 +2121,12 @@ get_tex_parameteriv(struct gl_context *ctx, >>>> *params = obj->ImageFormatCompatibilityType; >>>> break; >>>> >>>> + case GL_TEXTURE_TARGET: >>>> + if (ctx->API != API_OPENGL_CORE) >>>> + goto invalid_pname; >>>> + *params = (GLint) obj->Target; >>>> + break; >>>> + >>>> default: >>>> goto invalid_pname; >>>> } >>>> >>> >>> >>> Reviewed-by: Brian Paul <bri...@vmware.com> >>> >> >> Hi, >> >> can you please push this - or is there something else I need to do here? > > Will do after the question above is resolved. > > -Brian > > -- Daniel _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev