|
@@ -28,7 +28,6 @@
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
using std::istream;
|
|
using std::istream;
|
|
|
-using std::move;
|
|
|
|
|
using std::ostream;
|
|
using std::ostream;
|
|
|
using std::ostringstream;
|
|
using std::ostringstream;
|
|
|
using std::string;
|
|
using std::string;
|
|
@@ -92,10 +91,11 @@ cp_report_error(ShaderArgInfo &p, const string &msg) {
|
|
|
case SAT_sampler1d: tstr = "sampler1D "; break;
|
|
case SAT_sampler1d: tstr = "sampler1D "; break;
|
|
|
case SAT_sampler2d: tstr = "sampler2D "; break;
|
|
case SAT_sampler2d: tstr = "sampler2D "; break;
|
|
|
case SAT_sampler3d: tstr = "sampler3D "; break;
|
|
case SAT_sampler3d: tstr = "sampler3D "; break;
|
|
|
- case SAT_sampler2d_array: tstr = "sampler2DArray "; break;
|
|
|
|
|
|
|
+ case SAT_sampler2d_array: tstr = "sampler2DARRAY "; break;
|
|
|
case SAT_sampler_cube: tstr = "samplerCUBE "; break;
|
|
case SAT_sampler_cube: tstr = "samplerCUBE "; break;
|
|
|
case SAT_sampler_buffer: tstr = "samplerBUF "; break;
|
|
case SAT_sampler_buffer: tstr = "samplerBUF "; break;
|
|
|
case SAT_sampler_cube_array:tstr = "samplerCUBEARRAY "; break;
|
|
case SAT_sampler_cube_array:tstr = "samplerCUBEARRAY "; break;
|
|
|
|
|
+ case SAT_sampler1d_array: tstr = "sampler1DARRAY "; break;
|
|
|
default: tstr = "unknown "; break;
|
|
default: tstr = "unknown "; break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -228,15 +228,15 @@ cp_errchk_parameter_ptr(ShaderArgInfo &p) {
|
|
|
* message and return false.
|
|
* message and return false.
|
|
|
*/
|
|
*/
|
|
|
bool Shader::
|
|
bool Shader::
|
|
|
-cp_errchk_parameter_sampler(ShaderArgInfo &p)
|
|
|
|
|
-{
|
|
|
|
|
- if ((p._type!=SAT_sampler1d)&&
|
|
|
|
|
- (p._type!=SAT_sampler2d)&&
|
|
|
|
|
- (p._type!=SAT_sampler3d)&&
|
|
|
|
|
- (p._type!=SAT_sampler2d_array)&&
|
|
|
|
|
- (p._type!=SAT_sampler_cube)&&
|
|
|
|
|
- (p._type!=SAT_sampler_buffer)&&
|
|
|
|
|
- (p._type!=SAT_sampler_cube_array)) {
|
|
|
|
|
|
|
+cp_errchk_parameter_sampler(ShaderArgInfo &p) {
|
|
|
|
|
+ if (p._type != SAT_sampler1d &&
|
|
|
|
|
+ p._type != SAT_sampler2d &&
|
|
|
|
|
+ p._type != SAT_sampler3d &&
|
|
|
|
|
+ p._type != SAT_sampler2d_array &&
|
|
|
|
|
+ p._type != SAT_sampler_cube &&
|
|
|
|
|
+ p._type != SAT_sampler_buffer &&
|
|
|
|
|
+ p._type != SAT_sampler_cube_array &&
|
|
|
|
|
+ p._type != SAT_sampler1d_array) {
|
|
|
cp_report_error(p, "parameter should have a 'sampler' type");
|
|
cp_report_error(p, "parameter should have a 'sampler' type");
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -1429,6 +1429,7 @@ compile_parameter(ShaderArgInfo &p, int *arg_dim) {
|
|
|
case SAT_sampler_cube: bind._desired_type = Texture::TT_cube_map; break;
|
|
case SAT_sampler_cube: bind._desired_type = Texture::TT_cube_map; break;
|
|
|
case SAT_sampler_buffer: bind._desired_type = Texture::TT_buffer_texture; break;
|
|
case SAT_sampler_buffer: bind._desired_type = Texture::TT_buffer_texture; break;
|
|
|
case SAT_sampler_cube_array:bind._desired_type = Texture::TT_cube_map_array; break;
|
|
case SAT_sampler_cube_array:bind._desired_type = Texture::TT_cube_map_array; break;
|
|
|
|
|
+ case SAT_sampler1d_array:bind._desired_type = Texture::TT_1d_texture_array; break;
|
|
|
default:
|
|
default:
|
|
|
cp_report_error(p, "Invalid type for a tex-parameter");
|
|
cp_report_error(p, "Invalid type for a tex-parameter");
|
|
|
return false;
|
|
return false;
|
|
@@ -1630,6 +1631,15 @@ compile_parameter(ShaderArgInfo &p, int *arg_dim) {
|
|
|
_tex_spec.push_back(bind);
|
|
_tex_spec.push_back(bind);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
+ case SAT_sampler1d_array: {
|
|
|
|
|
+ ShaderTexSpec bind;
|
|
|
|
|
+ bind._id = p._id;
|
|
|
|
|
+ bind._name = kinputname;
|
|
|
|
|
+ bind._part = STO_named_input;
|
|
|
|
|
+ bind._desired_type = Texture::TT_1d_texture_array;
|
|
|
|
|
+ _tex_spec.push_back(bind);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
default:
|
|
default:
|
|
|
cp_report_error(p, "invalid type for non-prefix parameter");
|
|
cp_report_error(p, "invalid type for non-prefix parameter");
|
|
|
return false;
|
|
return false;
|
|
@@ -1751,6 +1761,7 @@ cg_parameter_type(CGparameter p) {
|
|
|
case CG_SAMPLERCUBE: return Shader::SAT_sampler_cube;
|
|
case CG_SAMPLERCUBE: return Shader::SAT_sampler_cube;
|
|
|
case CG_SAMPLERBUF: return Shader::SAT_sampler_buffer;
|
|
case CG_SAMPLERBUF: return Shader::SAT_sampler_buffer;
|
|
|
case CG_SAMPLERCUBEARRAY:return Shader::SAT_sampler_cube_array;
|
|
case CG_SAMPLERCUBEARRAY:return Shader::SAT_sampler_cube_array;
|
|
|
|
|
+ case CG_SAMPLER1DARRAY: return Shader::SAT_sampler1d_array;
|
|
|
// CG_SAMPLER1DSHADOW and CG_SAMPLER2DSHADOW
|
|
// CG_SAMPLER1DSHADOW and CG_SAMPLER2DSHADOW
|
|
|
case 1313: return Shader::SAT_sampler1d;
|
|
case 1313: return Shader::SAT_sampler1d;
|
|
|
case 1314: return Shader::SAT_sampler2d;
|
|
case 1314: return Shader::SAT_sampler2d;
|
|
@@ -3540,7 +3551,7 @@ make(string body, ShaderLanguage lang) {
|
|
|
}
|
|
}
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
- ShaderFile sbody(move(body));
|
|
|
|
|
|
|
+ ShaderFile sbody(std::move(body));
|
|
|
|
|
|
|
|
if (cache_generated_shaders) {
|
|
if (cache_generated_shaders) {
|
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
@@ -3600,8 +3611,8 @@ make(ShaderLanguage lang, string vertex, string fragment, string geometry,
|
|
|
return nullptr;
|
|
return nullptr;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- ShaderFile sbody(move(vertex), move(fragment), move(geometry),
|
|
|
|
|
- move(tess_control), move(tess_evaluation));
|
|
|
|
|
|
|
+ ShaderFile sbody(std::move(vertex), std::move(fragment), std::move(geometry),
|
|
|
|
|
+ std::move(tess_control), std::move(tess_evaluation));
|
|
|
|
|
|
|
|
if (cache_generated_shaders) {
|
|
if (cache_generated_shaders) {
|
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
@@ -3645,7 +3656,7 @@ make_compute(ShaderLanguage lang, string body) {
|
|
|
|
|
|
|
|
ShaderFile sbody;
|
|
ShaderFile sbody;
|
|
|
sbody._separate = true;
|
|
sbody._separate = true;
|
|
|
- sbody._compute = move(body);
|
|
|
|
|
|
|
+ sbody._compute = std::move(body);
|
|
|
|
|
|
|
|
if (cache_generated_shaders) {
|
|
if (cache_generated_shaders) {
|
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|
|
ShaderTable::const_iterator i = _make_table.find(sbody);
|