glsl: Add glsl_type::sampler_index

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Ian Romanick 2011-11-14 14:02:09 -08:00
parent 195ee502c3
commit 32be81de39
2 changed files with 35 additions and 0 deletions

View file

@ -127,6 +127,35 @@ glsl_type::contains_sampler() const
}
}
gl_texture_index
glsl_type::sampler_index() const
{
const glsl_type *const t = (this->is_array()) ? this->fields.array : this;
assert(t->is_sampler());
switch (t->sampler_dimensionality) {
case GLSL_SAMPLER_DIM_1D:
return (t->sampler_array) ? TEXTURE_1D_ARRAY_INDEX : TEXTURE_1D_INDEX;
case GLSL_SAMPLER_DIM_2D:
return (t->sampler_array) ? TEXTURE_2D_ARRAY_INDEX : TEXTURE_2D_INDEX;
case GLSL_SAMPLER_DIM_3D:
return TEXTURE_3D_INDEX;
case GLSL_SAMPLER_DIM_CUBE:
return TEXTURE_CUBE_INDEX;
case GLSL_SAMPLER_DIM_RECT:
return TEXTURE_RECT_INDEX;
case GLSL_SAMPLER_DIM_BUF:
assert(!"FINISHME: Implement ARB_texture_buffer_object");
break;
case GLSL_SAMPLER_DIM_EXTERNAL:
return TEXTURE_EXTERNAL_INDEX;
default:
assert(!"Should not get here.");
break;
}
}
void
glsl_type::generate_100ES_types(glsl_symbol_table *symtab)
{

View file

@ -28,6 +28,7 @@
#include <string.h>
#include <assert.h>
#include "main/mtypes.h" /* for gl_texture_index, C++'s enum rules are broken */
#ifdef __cplusplus
extern "C" {
@ -353,6 +354,11 @@ struct glsl_type {
*/
bool contains_sampler() const;
/**
* Get the Mesa texture target index for a sampler type.
*/
gl_texture_index sampler_index() const;
/**
* Query whether or not a type is an array
*/