Commit f6cc8ccf by Jamie Madill Committed by Shannon Woods

Implement support all sampler object associated GLES 3 API entry points.

TRAC #23454 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Authored-by: Jamie Madill
parent fb8a830e
...@@ -2107,6 +2107,26 @@ gl::Texture *getTargetTexture(gl::Context *context, GLenum target) ...@@ -2107,6 +2107,26 @@ gl::Texture *getTargetTexture(gl::Context *context, GLenum target)
} }
} }
bool validateSamplerObjectParameter(GLenum pname)
{
switch (pname)
{
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_MAG_FILTER:
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
case GL_TEXTURE_WRAP_R:
case GL_TEXTURE_MIN_LOD:
case GL_TEXTURE_MAX_LOD:
case GL_TEXTURE_COMPARE_MODE:
case GL_TEXTURE_COMPARE_FUNC:
return true;
default:
return gl::error(GL_INVALID_ENUM, false);
}
}
extern "C" extern "C"
{ {
...@@ -11135,8 +11155,15 @@ void __stdcall glGenSamplers(GLsizei count, GLuint* samplers) ...@@ -11135,8 +11155,15 @@ void __stdcall glGenSamplers(GLsizei count, GLuint* samplers)
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glGenSamplers if (count < 0)
UNIMPLEMENTED(); {
return gl::error(GL_INVALID_VALUE);
}
for (int i = 0; i < count; i++)
{
samplers[i] = context->createSampler();
}
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11160,8 +11187,15 @@ void __stdcall glDeleteSamplers(GLsizei count, const GLuint* samplers) ...@@ -11160,8 +11187,15 @@ void __stdcall glDeleteSamplers(GLsizei count, const GLuint* samplers)
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glDeleteSamplers if (count < 0)
UNIMPLEMENTED(); {
return gl::error(GL_INVALID_VALUE);
}
for (int i = 0; i < count; i++)
{
context->deleteSampler(samplers[i]);
}
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11185,8 +11219,7 @@ GLboolean __stdcall glIsSampler(GLuint sampler) ...@@ -11185,8 +11219,7 @@ GLboolean __stdcall glIsSampler(GLuint sampler)
return gl::error(GL_INVALID_OPERATION, GL_FALSE); return gl::error(GL_INVALID_OPERATION, GL_FALSE);
} }
// glIsSampler return context->isSampler(sampler);
UNIMPLEMENTED();
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11212,8 +11245,17 @@ void __stdcall glBindSampler(GLuint unit, GLuint sampler) ...@@ -11212,8 +11245,17 @@ void __stdcall glBindSampler(GLuint unit, GLuint sampler)
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glBindSampler if (sampler != 0 && !context->isSampler(sampler))
UNIMPLEMENTED(); {
return gl::error(GL_INVALID_OPERATION);
}
if (unit >= context->getMaximumCombinedTextureImageUnits())
{
return gl::error(GL_INVALID_VALUE);
}
context->bindSampler(unit, sampler);
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11237,34 +11279,22 @@ void __stdcall glSamplerParameteri(GLuint sampler, GLenum pname, GLint param) ...@@ -11237,34 +11279,22 @@ void __stdcall glSamplerParameteri(GLuint sampler, GLenum pname, GLint param)
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glSamplerParameteri if (!validateSamplerObjectParameter(pname))
UNIMPLEMENTED(); {
} return;
} }
catch(std::bad_alloc&)
{
return gl::error(GL_OUT_OF_MEMORY);
}
}
void __stdcall glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
{
EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLint* param = 0x%0.8p)",
sampler, pname, param);
try if (!validateTexParamParameters(context, pname, param))
{ {
gl::Context *context = gl::getNonLostContext(); return;
}
if (context) if (!context->isSampler(sampler))
{
if (context->getClientVersion() < 3)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glSamplerParameteriv context->samplerParameteri(sampler, pname, param);
UNIMPLEMENTED();
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11273,6 +11303,11 @@ void __stdcall glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* p ...@@ -11273,6 +11303,11 @@ void __stdcall glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* p
} }
} }
void __stdcall glSamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param)
{
glSamplerParameteri(sampler, pname, *param);
}
void __stdcall glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) void __stdcall glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
{ {
EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %g)", sampler, pname, param); EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLfloat param = %g)", sampler, pname, param);
...@@ -11288,33 +11323,22 @@ void __stdcall glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) ...@@ -11288,33 +11323,22 @@ void __stdcall glSamplerParameterf(GLuint sampler, GLenum pname, GLfloat param)
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glSamplerParameterf if (!validateSamplerObjectParameter(pname))
UNIMPLEMENTED(); {
} return;
} }
catch(std::bad_alloc&)
{
return gl::error(GL_OUT_OF_MEMORY);
}
}
void __stdcall glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
{
EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, const GLfloat* param = 0x%0.8p)", sampler, pname, param);
try if (!validateTexParamParameters(context, pname, static_cast<GLint>(param)))
{ {
gl::Context *context = gl::getNonLostContext(); return;
}
if (context) if (!context->isSampler(sampler))
{
if (context->getClientVersion() < 3)
{ {
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glSamplerParameterfv context->samplerParameterf(sampler, pname, param);
UNIMPLEMENTED();
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11323,6 +11347,11 @@ void __stdcall glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* ...@@ -11323,6 +11347,11 @@ void __stdcall glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat*
} }
} }
void __stdcall glSamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param)
{
glSamplerParameterf(sampler, pname, *param);
}
void __stdcall glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) void __stdcall glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params)
{ {
EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname, params); EVENT("(GLuint sampler = %u, GLenum pname = 0x%X, GLint* params = 0x%0.8p)", sampler, pname, params);
...@@ -11338,8 +11367,17 @@ void __stdcall glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* para ...@@ -11338,8 +11367,17 @@ void __stdcall glGetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* para
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glGetSamplerParameteriv if (!validateSamplerObjectParameter(pname))
UNIMPLEMENTED(); {
return;
}
if (!context->isSampler(sampler))
{
return gl::error(GL_INVALID_OPERATION);
}
*params = context->getSamplerParameteri(sampler, pname);
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
...@@ -11363,8 +11401,17 @@ void __stdcall glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* pa ...@@ -11363,8 +11401,17 @@ void __stdcall glGetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* pa
return gl::error(GL_INVALID_OPERATION); return gl::error(GL_INVALID_OPERATION);
} }
// glGetSamplerParameterfv if (!validateSamplerObjectParameter(pname))
UNIMPLEMENTED(); {
return;
}
if (!context->isSampler(sampler))
{
return gl::error(GL_INVALID_OPERATION);
}
*params = context->getSamplerParameterf(sampler, pname);
} }
} }
catch(std::bad_alloc&) catch(std::bad_alloc&)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment