[0012] While the more sophisticated bilinear, trilinear, and anisotropic filtering techniques produce better results they require higher amounts of computation. In addition, where the dynamic range of sampled texels is large, the required computations typically are done using floating point arithmetic solutions in order to preserve data quality. Floating point calculations require the use of floating point arithmetic logic units within a GPU which increases the associated cost and area required in a circuit to implement.
[0013] When an interpolation, such as a bilinear interpolation, is generated using normalized fixed point texel data where the range of data (i.e., the differences between the texel magnitudes) is large, there can be a loss of precision due to the limited number of bits of calculation provided in a single precision bilinear filtering unit. Such a limitation could be overcome by the use of extended precision filtering using multiple single precision bilinear filtering units which would, by operating in parallel on texel data, generate extended precision floating point texel data.
[0014] What are needed, therefore, are systems and/or methods to alleviate the aforementioned deficiencies. Particularly, what is needed is a system and method to dynamically determine when an interpolator should generate extended precision results and a bilinear filter system that could generate such results when desired.
[...leading to...]
[0040] FIG. 4 is a more detailed illustration of bilinear interpolator 310 with the ability to be dynamically reconfigured for extended precision according to an embodiment of the present invention. Bilinear interpolator 310 comprises input control, shifter, and multiplexer 410, dual bilinear interpolators, A 412 and B 414, and output control, summation, and multiplexer 420. Bilinear interpolator 310 may operate in either a "standard" precision mode where, as an example, two blocks of normalized mantissas 242 are presented to bilinear interpolator 310. Input control, shifter, and multiplexer 410 will pass one block to bilinear interpolator A and the other block to bilinear interpolator B.
[0041] In this "standard" precision mode bilinear interpolator A 412 and bilinear interpolator B 414 act independently. Bilinear interpolator A 412 utilizes the horizontal and vertical weights, wH1, 312-1 and wV1 314-1 whereas bilinear interpolator B 414 utilizes the horizontal and vertical weights, wH2 312-2 and wV2 314-2. Output control, summation, and multiplexer 420 will keep the results of bilinear interpolator A 412 and bilinear interpolator B 414 separate and distinct, outputting the bilinear filter results of bilinear interpolator A 412 through path 421-1 and bilinear interpolator B 414 through path 421-2. In the "standard" precision mode, bilinear interpolator 310 produces two bilinear filtered results per cycle.
[0042] However, when input control, shifter and multiplexer 310 inspects a incoming pair of normalized mantissas 242 where the exponent range exceeds a certain threshold, for example as in the example previously presented when the exponent range of a block of texel data is greater than the difference between the number of bits of filtering precision in the bilinear module and the number of bits in the texel data mantissa, the input control, shifter and multiplexer 310 would allow just a single bilinear interpolator operation to occur whereby both bilinear interpolator A 412 and bilinear interpolator B 414 are used in an "extended" precision mode. In this manner the bilinear filter precision width is doubled to 2M where M is the number of bits of precision in a single bilinear interpolator.
[0043] Therefore, in a double bilinear interpolator embodiment there is no loss of precision where the exponent range is less than twice the filter precision width of a single bilinear interpolator, assuming the widths of the interpolators are equal, less the width of the texel mantissa. This example of a double bilinear interpolator is not meant to limit the implementation of an extended precision bilinear interpolator as other embodiments could be implemented using any number of bilinear interpolators.
[0044] When the input control, shifter, and multiplex 410 identifies an incoming pair of normalized mantissas 242 where the exponent range exceeds a certain threshold, it will multiplex the most significant bits of the mantissa into a bilinear interpolator, for example into bilinear interpolator B 414, and the least significant bits of the mantissa into the other bilinear interpolator, for example into bilinear interpolator A 412. In an extended precision mode the horizontal weights applied to bilinear interpolator A 412 and bilinear interpolator B 414 must be equivalent as the same weighting factor must be applied to all of the mantissa bits representing a particular texel. In the same manner, the vertical weights must also be equivalent. Therefore, in this dual bilinear interpolator example, horizontal weight wH1, 312-1 is equal to wH2 312-2, and vertical weight wV1, 314-1 is equal to wV2 314-2.
[0045] Once bilinear interpolator A 412 and bilinear interpolator B 414 complete an interpolation cycle, the results are presented to output control, summation and multiplexer 420. In the situation where there has just been an extended precision interpolation performed, output control, summation and multiplexer 420 will sum the results of bilinear interpolator A 412 and bilinear interpolator B 414, shifting the least significant bits left by the width of a single precision interpolator (M), thereby producing a single bilinear filtered result mantissa of double precision which is then output on either path 421-1 or 421-2 as desired.