1 /* 2 * Copyright (C) 2018-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 #include "shared/source/execution_environment/execution_environment.h" 10 #include "shared/source/helpers/hw_info.h" 11 #include "shared/test/common/helpers/default_hw_info.h" 12 #include "shared/test/common/test_macros/test.h" 13 14 #include "opencl/source/helpers/cl_memory_properties_helpers.h" 15 #include "opencl/source/mem_obj/image.h" 16 #include "opencl/source/platform/platform.h" 17 #include "opencl/test/unit_test/fixtures/cl_device_fixture.h" 18 #include "opencl/test/unit_test/mocks/mock_context.h" 19 #include "opencl/test/unit_test/mocks/mock_platform.h" 20 21 #include "CL/cl.h" 22 23 #include <cassert> 24 #include <cstdio> 25 26 struct Image1dDefaults { 27 enum { flags = 0 }; 28 static const cl_image_format imageFormat; 29 static const cl_image_desc imageDesc; 30 static void *hostPtr; 31 static NEO::Context *context; 32 }; 33 34 struct Image1dBufferDefaults : public Image1dDefaults { 35 static const cl_image_desc imageDesc; 36 }; 37 38 struct Image2dDefaults : public Image1dDefaults { 39 static const cl_image_desc imageDesc; 40 }; 41 42 struct Image3dDefaults : public Image2dDefaults { 43 static const cl_image_desc imageDesc; 44 }; 45 46 struct Image2dArrayDefaults : public Image2dDefaults { 47 static const cl_image_desc imageDesc; 48 }; 49 50 struct Image1dArrayDefaults : public Image2dDefaults { 51 static const cl_image_desc imageDesc; 52 }; 53 54 struct LuminanceImage : public Image2dDefaults { 55 static const cl_image_format imageFormat; 56 }; 57 58 struct ImageWithoutHostPtr : public Image1dDefaults { 59 enum { flags = 0 }; 60 static void *hostPtr; 61 }; 62 63 template <typename BaseClass> 64 struct ImageUseHostPtr : public BaseClass { 65 enum { flags = BaseClass::flags | CL_MEM_USE_HOST_PTR }; 66 }; 67 68 template <typename BaseClass> 69 struct ImageReadOnly : public BaseClass { 70 enum { flags = BaseClass::flags | CL_MEM_READ_ONLY }; 71 }; 72 73 template <typename BaseClass> 74 struct ImageWriteOnly : public BaseClass { 75 enum { flags = BaseClass::flags | CL_MEM_WRITE_ONLY }; 76 }; 77 78 template <typename Traits> 79 struct ImageHelper { 80 using Context = NEO::Context; 81 using Image = NEO::Image; 82 using MockContext = NEO::MockContext; 83 84 static Image *create(Context *context = Traits::context, const cl_image_desc *imgDesc = &Traits::imageDesc, 85 const cl_image_format *imgFormat = &Traits::imageFormat) { 86 auto retVal = CL_INVALID_VALUE; 87 auto surfaceFormat = Image::getSurfaceFormatFromTable(Traits::flags, imgFormat, context->getDevice(0)->getHardwareInfo().capabilityTable.supportsOcl21Features); 88 auto image = Image::create( 89 context, 90 NEO::ClMemoryPropertiesHelper::createMemoryProperties(Traits::flags, 0, 0, &context->getDevice(0)->getDevice()), 91 Traits::flags, 92 0, 93 surfaceFormat, 94 imgDesc, 95 Traits::hostPtr, 96 retVal); 97 98 return image; 99 } 100 }; 101 102 template <typename Traits = Image1dDefaults> 103 struct Image1dHelper : public ImageHelper<Traits> { 104 }; 105 106 template <typename Traits = Image1dBufferDefaults> 107 struct Image1dBufferHelper : public ImageHelper<Traits> { 108 }; 109 110 template <typename Traits = Image2dDefaults> 111 struct Image2dHelper : public ImageHelper<Traits> { 112 }; 113 114 template <typename Traits = Image3dDefaults> 115 struct Image3dHelper : public ImageHelper<Traits> { 116 }; 117 118 template <typename Traits = Image2dArrayDefaults> 119 struct Image2dArrayHelper : public ImageHelper<Traits> { 120 }; 121 122 template <typename Traits = Image1dArrayDefaults> 123 struct Image1dArrayHelper : public ImageHelper<Traits> { 124 }; 125 126 struct ImageClearColorFixture : ::testing::Test { 127 using MockContext = NEO::MockContext; 128 using Image = NEO::Image; 129 130 template <typename FamilyType> setUpImplImageClearColorFixture131 void setUpImpl() { 132 hardwareInfo.capabilityTable.ftrRenderCompressedImages = true; 133 134 NEO::platformsImpl->clear(); 135 NEO::constructPlatform()->peekExecutionEnvironment()->prepareRootDeviceEnvironments(1u); 136 NEO::platform()->peekExecutionEnvironment()->rootDeviceEnvironments[0]->setHwInfo(&hardwareInfo); 137 NEO::platform()->peekExecutionEnvironment()->rootDeviceEnvironments[0]->initGmm(); 138 } 139 140 template <typename FamilyType> getSurfaceStateImageClearColorFixture141 typename FamilyType::RENDER_SURFACE_STATE getSurfaceState() { 142 using AUXILIARY_SURFACE_MODE = typename FamilyType::RENDER_SURFACE_STATE::AUXILIARY_SURFACE_MODE; 143 auto surfaceState = FamilyType::cmdInitRenderSurfaceState; 144 surfaceState.setAuxiliarySurfaceMode(AUXILIARY_SURFACE_MODE::AUXILIARY_SURFACE_MODE_AUX_CCS_E); 145 return surfaceState; 146 } 147 148 NEO::HardwareInfo hardwareInfo = *NEO::defaultHwInfo; 149 MockContext context; 150 std::unique_ptr<Image> image; 151 }; 152