Skip to content
Snippets Groups Projects
Commit 89ed566a authored by Stephan Seitz's avatar Stephan Seitz
Browse files

Bugfix: textures should be implemented as textures without changes

parent 9f76ea1d
No related branches found
No related tags found
No related merge requests found
...@@ -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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment