Skip to content
Snippets Groups Projects

Bugfix: textures should be implemented as textures without changes

Merged Stephan Seitz requested to merge seitz/pystencils:bugfix-textures into master
Viewing commit 89ed566a
Show latest version
1 file
+ 14
6
Preferences
Compare changes
@@ -12,12 +12,11 @@ import itertools
@@ -12,12 +12,11 @@ import itertools
from enum import Enum
from enum import Enum
from typing import Set
from typing import Set
import sympy as sp
from sympy.core.cache import cacheit
import pystencils
import pystencils
 
import sympy as sp
from pystencils.astnodes import Node
from pystencils.astnodes import Node
from pystencils.data_types import TypedSymbol, cast_func, create_type
from pystencils.data_types import TypedSymbol, cast_func, create_type
 
from sympy.core.cache import cacheit
try:
try:
import pycuda.driver
import pycuda.driver
@@ -304,18 +303,19 @@ class TextureCachedField:
@@ -304,18 +303,19 @@ class TextureCachedField:
self.filter_mode = filter_mode
self.filter_mode = filter_mode
self.read_as_integer = read_as_integer
self.read_as_integer = read_as_integer
self.use_normalized_coordinates = use_normalized_coordinates
self.use_normalized_coordinates = use_normalized_coordinates
 
self.interpolation_mode = interpolation_mode
self.symbol = TypedSymbol(str(self), self.field.dtype.numpy_dtype)
self.symbol = TypedSymbol(str(self), self.field.dtype.numpy_dtype)
self.symbol.interpolator = self
self.symbol.interpolator = self
self.symbol.field = self.field
self.symbol.field = self.field
self.required_global_declarations = [TextureDeclaration(self)]
self.required_global_declarations = [TextureDeclaration(self)]
self.interpolation_mode = interpolation_mode
# assert str(self.field.dtype) != 'double', "CUDA does not support double textures!"
# assert str(self.field.dtype) != 'double', "CUDA does not support double textures!"
# assert dtype_supports_textures(self.field.dtype), "CUDA only supports texture types with 32 bits or less"
# assert dtype_supports_textures(self.field.dtype), "CUDA only supports texture types with 32 bits or less"
@classmethod
@classmethod
def from_interpolator(cls, interpolator: LinearInterpolator):
def from_interpolator(cls, interpolator: LinearInterpolator):
if hasattr(interpolator, 'allow_textures') and not interpolator.allow_textures:
if (isinstance(interpolator, cls)
 
or (hasattr(interpolator, 'allow_textures') and not interpolator.allow_textures)):
return interpolator
return interpolator
obj = cls(interpolator.field, interpolator.address_mode, interpolation_mode=interpolator.interpolation_mode)
obj = cls(interpolator.field, interpolator.address_mode, interpolation_mode=interpolator.interpolation_mode)
return obj
return obj
@@ -327,11 +327,19 @@ class TextureCachedField:
@@ -327,11 +327,19 @@ class TextureCachedField:
return TextureAccess(self.symbol, *offset)
return TextureAccess(self.symbol, *offset)
def __str__(self):
def __str__(self):
return '%s_texture_%x' % (self.field.name, abs(hash(self.field) + hash(str(self.address_mode))))
return '%s_texture_%x' % (self.field.name, abs(hash(self)))
def __repr__(self):
def __repr__(self):
return self.__str__()
return self.__str__()
 
def __hash__(self):
 
return hash((str(type(self)),
 
self.address_mode,
 
self.filter_mode,
 
self.read_as_integer,
 
self.interpolation_mode,
 
self.use_normalized_coordinates))
 
class TextureAccess(InterpolatorAccess):
class TextureAccess(InterpolatorAccess):
def __new__(cls, texture_symbol, offsets, *args, **kwargs):
def __new__(cls, texture_symbol, offsets, *args, **kwargs):