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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user