Radeon ProRender

Basic Example

#include "RadeonImageFilters.h"

int main()
{
   rif_int status = RIF_SUCCESS;
   rif_context context = nullptr;
   rif_command_queue queue = nullptr;
   rif_image_filter filter = nullptr;
   rif_image inputImage = nullptr;
   rif_image outputImage = nullptr;

   // First create context and queue
   int deviceCount = 0;
   status = rifGetDeviceCount(RIF_BACKEND_API_OPENCL, &deviceCount);
   if (status != RIF_SUCCESS) return -1;
   if (deviceCount > 0 || status)
   {
          status = rifCreateContext(RIF_API_VERSION, RIF_BACKEND_API_OPENCL, 0, nullptr, &context);
          if (status != RIF_SUCCESS || !context) return -1;
   }
   status = rifContextCreateCommandQueue(context, &queue);
   if (status != RIF_SUCCESS || !queue) return -1;

   //Create image filter
   status = rifContextCreateImageFilter(context, RIF_IMAGE_FILTER_GAMMA_CORRECTION, &filter);
   if (status != RIF_SUCCESS) return -1;

   //Create input and output images
   rif_image_desc desc;
   desc.image_width = 100;
   desc.image_height = 100;
   desc.num_components = 3; // rgb image
   desc.type = RIF_COMPONENT_TYPE_FLOAT16;

   status = rifContextCreateImage(context, &desc, nullptr, &inputImage);
   if (status != RIF_SUCCESS) return -1;
   status = rifContextCreateImage(context, &desc, nullptr, &outputImage);
   if (status != RIF_SUCCESS) return -1;

   //Set input image data
   void* data = nullptr;
   status = rifImageMap(inputImage, RIF_IMAGE_MAP_WRITE, (void**)&data);
   if (status != RIF_SUCCESS) return -1;
   //Fill data
   status = rifImageUnmap(inputImage, data);
   if (status != RIF_SUCCESS) return -1;

   //Attach filter and set parameters
   status = rifImageFilterSetParameter1f(filter, "gamma", 0.1f);
   if (status != RIF_SUCCESS) return -1;
   status = rifCommandQueueAttachImageFilter(queue, filter, inputImage, outputImage);
   if (status != RIF_SUCCESS) return -1;

   //Execute queue
   status = rifContextExecuteCommandQueue(context, queue, nullptr, nullptr, nullptr);
   if (status != RIF_SUCCESS) return -1;

   //Free resources
   rifCommandQueueDetachImageFilter(queue, filter);
   rifObjectDelete(inputImage);
   rifObjectDelete(outputImage);
   rifObjectDelete(filter);
   rifObjectDelete(queue);
   rifObjectDelete(context);
   return 0;
}