Don't fetch sampling parameters for texture buffers (invalid)

This commit is contained in:
baldurk
2015-01-17 15:49:03 +00:00
parent 25ab5520c5
commit ce7c8eb44f
+76 -56
View File
@@ -1265,68 +1265,88 @@ void GLReplay::SavePipelineState()
pipe.Samplers[unit].Samp = rm->GetOriginalID(rm->GetID(SamplerRes(ctx, samp)));
if(samp != 0)
gl.glGetSamplerParameterfv(samp, eGL_TEXTURE_BORDER_COLOR, &pipe.Samplers[unit].BorderColor[0]);
else
gl.glGetTexParameterfv(target, eGL_TEXTURE_BORDER_COLOR, &pipe.Samplers[unit].BorderColor[0]);
if(target != eGL_TEXTURE_BUFFER)
{
if(samp != 0)
gl.glGetSamplerParameterfv(samp, eGL_TEXTURE_BORDER_COLOR, &pipe.Samplers[unit].BorderColor[0]);
else
gl.glGetTexParameterfv(target, eGL_TEXTURE_BORDER_COLOR, &pipe.Samplers[unit].BorderColor[0]);
pipe.Samplers[unit].UseBorder = false;
pipe.Samplers[unit].UseComparison = shadow;
pipe.Samplers[unit].UseBorder = false;
pipe.Samplers[unit].UseComparison = shadow;
GLint v;
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_S, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_S, &v);
pipe.Samplers[unit].AddressS = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
GLint v;
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_S, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_S, &v);
pipe.Samplers[unit].AddressS = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_T, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_T, &v);
pipe.Samplers[unit].AddressT = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_T, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_T, &v);
pipe.Samplers[unit].AddressT = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_R, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_R, &v);
pipe.Samplers[unit].AddressR = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_COMPARE_FUNC, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_COMPARE_FUNC, &v);
pipe.Samplers[unit].Comparison = ToStr::Get((GLenum)v).substr(3).c_str();
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_MIN_FILTER, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_MIN_FILTER, &v);
pipe.Samplers[unit].MinFilter = SamplerString((GLenum)v);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_MAG_FILTER, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_MAG_FILTER, &v);
pipe.Samplers[unit].MagFilter = SamplerString((GLenum)v);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_WRAP_R, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_WRAP_R, &v);
pipe.Samplers[unit].AddressR = SamplerString((GLenum)v);
pipe.Samplers[unit].UseBorder |= (v == eGL_CLAMP_TO_BORDER);
if(samp != 0)
gl.glGetSamplerParameterfv(samp, eGL_TEXTURE_MAX_ANISOTROPY_EXT, &pipe.Samplers[unit].MaxAniso);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_COMPARE_FUNC, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_COMPARE_FUNC, &v);
pipe.Samplers[unit].Comparison = ToStr::Get((GLenum)v).substr(3).c_str();
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_MIN_FILTER, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_MIN_FILTER, &v);
pipe.Samplers[unit].MinFilter = SamplerString((GLenum)v);
v=0;
if(samp != 0)
gl.glGetSamplerParameteriv(samp, eGL_TEXTURE_MAG_FILTER, &v);
else
gl.glGetTexParameteriv(target, eGL_TEXTURE_MAG_FILTER, &v);
pipe.Samplers[unit].MagFilter = SamplerString((GLenum)v);
if(samp != 0)
gl.glGetSamplerParameterfv(samp, eGL_TEXTURE_MAX_ANISOTROPY_EXT, &pipe.Samplers[unit].MaxAniso);
else
gl.glGetTexParameterfv(target, eGL_TEXTURE_MAX_ANISOTROPY_EXT, &pipe.Samplers[unit].MaxAniso);
gl.glGetTexParameterfv(target, eGL_TEXTURE_MAX_LOD, &pipe.Samplers[unit].MaxLOD);
gl.glGetTexParameterfv(target, eGL_TEXTURE_MIN_LOD, &pipe.Samplers[unit].MinLOD);
gl.glGetTexParameterfv(target, eGL_TEXTURE_LOD_BIAS, &pipe.Samplers[unit].MipLODBias);
}
else
gl.glGetTexParameterfv(target, eGL_TEXTURE_MAX_ANISOTROPY_EXT, &pipe.Samplers[unit].MaxAniso);
gl.glGetTexParameterfv(target, eGL_TEXTURE_MAX_LOD, &pipe.Samplers[unit].MaxLOD);
gl.glGetTexParameterfv(target, eGL_TEXTURE_MIN_LOD, &pipe.Samplers[unit].MinLOD);
gl.glGetTexParameterfv(target, eGL_TEXTURE_LOD_BIAS, &pipe.Samplers[unit].MipLODBias);
{
// texture buffers don't support sampling
RDCEraseEl(pipe.Samplers[unit].BorderColor);
pipe.Samplers[unit].AddressS = "";
pipe.Samplers[unit].AddressT = "";
pipe.Samplers[unit].AddressR = "";
pipe.Samplers[unit].Comparison = "";
pipe.Samplers[unit].MinFilter = "";
pipe.Samplers[unit].MagFilter = "";
pipe.Samplers[unit].UseBorder = false;
pipe.Samplers[unit].UseComparison = false;
pipe.Samplers[unit].MaxAniso = 0.0f;
pipe.Samplers[unit].MaxLOD = 0.0f;
pipe.Samplers[unit].MinLOD = 0.0f;
pipe.Samplers[unit].MipLODBias = 0.0f;
}
}
else
{