Home | History | Annotate | Download | only in main
      1 /*
      2  * Mesa 3-D graphics library
      3  *
      4  * Copyright (C) 2011  VMware, Inc.  All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the "Software"),
      8  * to deal in the Software without restriction, including without limitation
      9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
     10  * and/or sell copies of the Software, and to permit persons to whom the
     11  * Software is furnished to do so, subject to the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be included
     14  * in all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
     19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
     20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
     21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
     22  * OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 
     26 
     27 #ifndef SAMPLEROBJ_H
     28 #define SAMPLEROBJ_H
     29 
     30 #include "mtypes.h"
     31 
     32 #ifdef __cplusplus
     33 extern "C" {
     34 #endif
     35 
     36 struct dd_function_table;
     37 
     38 static inline struct gl_sampler_object *
     39 _mesa_get_samplerobj(struct gl_context *ctx, GLuint unit)
     40 {
     41    if (ctx->Texture.Unit[unit].Sampler)
     42       return ctx->Texture.Unit[unit].Sampler;
     43    else if (ctx->Texture.Unit[unit]._Current)
     44       return &ctx->Texture.Unit[unit]._Current->Sampler;
     45    else
     46       return NULL;
     47 }
     48 
     49 
     50 /** Does the given filter state do mipmap filtering? */
     51 static inline GLboolean
     52 _mesa_is_mipmap_filter(const struct gl_sampler_object *samp)
     53 {
     54    return samp->MinFilter != GL_NEAREST && samp->MinFilter != GL_LINEAR;
     55 }
     56 
     57 
     58 extern void
     59 _mesa_reference_sampler_object_(struct gl_context *ctx,
     60                                 struct gl_sampler_object **ptr,
     61                                 struct gl_sampler_object *samp);
     62 
     63 static inline void
     64 _mesa_reference_sampler_object(struct gl_context *ctx,
     65                                struct gl_sampler_object **ptr,
     66                                struct gl_sampler_object *samp)
     67 {
     68    if (*ptr != samp)
     69       _mesa_reference_sampler_object_(ctx, ptr, samp);
     70 }
     71 
     72 extern struct gl_sampler_object *
     73 _mesa_lookup_samplerobj(struct gl_context *ctx, GLuint name);
     74 
     75 extern struct gl_sampler_object *
     76 _mesa_new_sampler_object(struct gl_context *ctx, GLuint name);
     77 
     78 extern void
     79 _mesa_init_sampler_object_functions(struct dd_function_table *driver);
     80 
     81 extern void
     82 _mesa_set_sampler_wrap(struct gl_context *ctx, struct gl_sampler_object *samp,
     83                        GLenum s, GLenum t, GLenum r);
     84 
     85 extern void
     86 _mesa_set_sampler_filters(struct gl_context *ctx,
     87                           struct gl_sampler_object *samp,
     88                           GLenum min_filter, GLenum mag_filter);
     89 
     90 extern void
     91 _mesa_set_sampler_srgb_decode(struct gl_context *ctx,
     92                               struct gl_sampler_object *samp, GLenum param);
     93 
     94 extern void
     95 _mesa_bind_sampler(struct gl_context *ctx, GLuint unit,
     96                    struct gl_sampler_object *sampObj);
     97 
     98 void GLAPIENTRY
     99 _mesa_GenSamplers(GLsizei count, GLuint *samplers);
    100 void GLAPIENTRY
    101 _mesa_CreateSamplers(GLsizei count, GLuint *samplers);
    102 void GLAPIENTRY
    103 _mesa_DeleteSamplers(GLsizei count, const GLuint *samplers);
    104 GLboolean GLAPIENTRY
    105 _mesa_IsSampler(GLuint sampler);
    106 void GLAPIENTRY
    107 _mesa_BindSampler(GLuint unit, GLuint sampler);
    108 void GLAPIENTRY
    109 _mesa_BindSamplers(GLuint first, GLsizei count, const GLuint *samplers);
    110 void GLAPIENTRY
    111 _mesa_SamplerParameteri(GLuint sampler, GLenum pname, GLint param);
    112 void GLAPIENTRY
    113 _mesa_SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param);
    114 void GLAPIENTRY
    115 _mesa_SamplerParameteriv(GLuint sampler, GLenum pname, const GLint *params);
    116 void GLAPIENTRY
    117 _mesa_SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat *params);
    118 void GLAPIENTRY
    119 _mesa_SamplerParameterIiv(GLuint sampler, GLenum pname, const GLint *params);
    120 void GLAPIENTRY
    121 _mesa_SamplerParameterIuiv(GLuint sampler, GLenum pname, const GLuint *params);
    122 void GLAPIENTRY
    123 _mesa_GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint *params);
    124 void GLAPIENTRY
    125 _mesa_GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat *params);
    126 void GLAPIENTRY
    127 _mesa_GetSamplerParameterIiv(GLuint sampler, GLenum pname, GLint *params);
    128 void GLAPIENTRY
    129 _mesa_GetSamplerParameterIuiv(GLuint sampler, GLenum pname, GLuint *params);
    130 
    131 #ifdef __cplusplus
    132 }
    133 #endif
    134 
    135 #endif /* SAMPLEROBJ_H */
    136