// static ImmutableString ImageFunctionHLSL::GetImageReference( TInfoSinkBase &out, const ImageFunctionHLSL::ImageFunction &imageFunction) { static const ImmutableString kImageIndexStr("[index]"); if (imageFunction.readonly) { static const ImmutableString kReadonlyImagesStr("readonlyImages"); ImmutableString suffix( TextureGroupSuffix(imageFunction.image, imageFunction.imageInternalFormat)); out << " const uint index = imageIndex - readonlyImageIndexOffset" << suffix.data() << ";\n"; ImmutableStringBuilder imageRefBuilder(kReadonlyImagesStr.length() + suffix.length() + kImageIndexStr.length()); imageRefBuilder << kReadonlyImagesStr << suffix << kImageIndexStr; return imageRefBuilder; } else { static const ImmutableString kImagesStr("images"); ImmutableString suffix( RWTextureGroupSuffix(imageFunction.image, imageFunction.imageInternalFormat)); out << " const uint index = imageIndex - imageIndexOffset" << suffix.data() << ";\n"; ImmutableStringBuilder imageRefBuilder(kImagesStr.length() + suffix.length() + kImageIndexStr.length()); imageRefBuilder << kImagesStr << suffix << kImageIndexStr; return imageRefBuilder; } }
ImmutableString ImageFunctionHLSL::ImageFunction::name() const { static const ImmutableString kGlImageName("gl_image"); ImmutableString suffix(nullptr); if (readonly) { suffix = ImmutableString(TextureTypeSuffix(image, imageInternalFormat)); } else { suffix = ImmutableString(RWTextureTypeSuffix(image, imageInternalFormat)); } ImmutableStringBuilder name(kGlImageName.length() + suffix.length() + 5u); name << kGlImageName << suffix; switch (method) { case Method::SIZE: name << "Size"; break; case Method::LOAD: name << "Load"; break; case Method::STORE: name << "Store"; break; default: UNREACHABLE(); } return name; }