 				return _sampler.m_texture.Sample(_sampler.m_sampler, _coord);
 			}
 
+			vec4 bgfxTexture2DBias(BgfxSampler2D _sampler, vec2 _coord, float _bias)
+			{
+				return _sampler.m_texture.SampleBias(_sampler.m_sampler, _coord, _bias);
+			}
+
 			vec4 bgfxTexture2DLod(BgfxSampler2D _sampler, vec2 _coord, float _level)
 			{
 				return _sampler.m_texture.SampleLevel(_sampler.m_sampler, _coord, _level);
+			}
+
+			vec4 bgfxTexture2DLodOffset(BgfxSampler2D _sampler, vec2 _coord, float _level, ivec2 _offset)
+			{
+				return _sampler.m_texture.SampleLevel(_sampler.m_sampler, _coord, _level, _offset);
 			}
 
 			vec4 bgfxTexture2DProj(BgfxSampler2D _sampler, vec3 _coord)

			#endif // BGFX_SHADER_LANGUAGE_HLSL > 3 && BGFX_SHADER_TYPE_FRAGMENT

			#if BGFX_SHADER_LANGUAGE_GLSL
			#   define ARRAY_BEGIN(_type, _name, _count) _type _name[_count] = _type[](
			#   define ARRAY_END() )
			#else
			#   define ARRAY_BEGIN(_type, _name, _count) _type _name[_count] = {
			#   define ARRAY_END() }
			#endif // BGFX_SHADER_LANGUAGE_GLSL

			#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_SPIRV
			#	define CONST(_x) static const _x
			#	define dFdx(_x) ddx(_x)
			#	define dFdy(_y) ddy(-_y)

			{
				vec3 coord = _coord.xyz * rcp(_coord.w);
				return _sampler.m_texture.SampleCmpLevelZero(_sampler.m_sampler, coord.xy, coord.z);
			}

			vec4 bgfxShadow2DArray(BgfxSampler2DArrayShadow _sampler, vec4 _coord)
			{
				return _sampler.m_texture.SampleCmpLevelZero(_sampler.m_sampler, _coord.xyz, _coord.w);
			}

			vec4 bgfxTexture3D(BgfxSampler3D _sampler, vec3 _coord)
