| 802 | }; |
| 803 | |
| 804 | opencl_context_ptr opencl_create_context() |
| 805 | { |
| 806 | if (!opencl_is_available()) |
| 807 | { |
| 808 | ocl_error_printf("opencl_create_context: OpenCL not initialized\n"); |
| 809 | assert(0); |
| 810 | return nullptr; |
| 811 | } |
| 812 | |
| 813 | interval_timer tm; |
| 814 | tm.start(); |
| 815 | |
| 816 | opencl_context* pContext = static_cast<opencl_context * >(calloc(sizeof(opencl_context), 1)); |
| 817 | if (!pContext) |
| 818 | return nullptr; |
| 819 | |
| 820 | // To avoid driver bugs in some drivers - serialize this. Likely not necessary, we don't know. |
| 821 | // https://community.intel.com/t5/OpenCL-for-CPU/Bug-report-clCreateKernelsInProgram-is-not-thread-safe/td-p/1159771 |
| 822 | |
| 823 | pContext->m_command_queue = g_ocl.create_command_queue(); |
| 824 | if (!pContext->m_command_queue) |
| 825 | { |
| 826 | ocl_error_printf("opencl_create_context: Failed creating OpenCL command queue!\n"); |
| 827 | opencl_destroy_context(pContext); |
| 828 | return nullptr; |
| 829 | } |
| 830 | |
| 831 | pContext->m_ocl_encode_etc1s_blocks_kernel = g_ocl.create_kernel("encode_etc1s_blocks"); |
| 832 | if (!pContext->m_ocl_encode_etc1s_blocks_kernel) |
| 833 | { |
| 834 | ocl_error_printf("opencl_create_context: Failed creating OpenCL kernel encode_etc1s_block\n"); |
| 835 | opencl_destroy_context(pContext); |
| 836 | return nullptr; |
| 837 | } |
| 838 | |
| 839 | pContext->m_ocl_refine_endpoint_clusterization_kernel = g_ocl.create_kernel("refine_endpoint_clusterization"); |
| 840 | if (!pContext->m_ocl_refine_endpoint_clusterization_kernel) |
| 841 | { |
| 842 | ocl_error_printf("opencl_create_context: Failed creating OpenCL kernel refine_endpoint_clusterization\n"); |
| 843 | opencl_destroy_context(pContext); |
| 844 | return nullptr; |
| 845 | } |
| 846 | |
| 847 | pContext->m_ocl_encode_etc1s_from_pixel_cluster_kernel = g_ocl.create_kernel("encode_etc1s_from_pixel_cluster"); |
| 848 | if (!pContext->m_ocl_encode_etc1s_from_pixel_cluster_kernel) |
| 849 | { |
| 850 | ocl_error_printf("opencl_create_context: Failed creating OpenCL kernel encode_etc1s_from_pixel_cluster\n"); |
| 851 | opencl_destroy_context(pContext); |
| 852 | return nullptr; |
| 853 | } |
| 854 | |
| 855 | pContext->m_ocl_find_optimal_selector_clusters_for_each_block_kernel = g_ocl.create_kernel("find_optimal_selector_clusters_for_each_block"); |
| 856 | if (!pContext->m_ocl_find_optimal_selector_clusters_for_each_block_kernel) |
| 857 | { |
| 858 | ocl_error_printf("opencl_create_context: Failed creating OpenCL kernel find_optimal_selector_clusters_for_each_block\n"); |
| 859 | opencl_destroy_context(pContext); |
| 860 | return nullptr; |
| 861 | } |
no test coverage detected