r600g,radeonsi: convert TGSI shader type to LLVM shader type
authorMarek Olšák <marek.olsak@amd.com>
Tue, 23 Sep 2014 15:17:01 +0000 (17:17 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 21 Oct 2014 20:39:50 +0000 (22:39 +0200)
The values are hardcoded in the LLVM backend, but the TGSI definitions are
going to be changed with tessellation, e.g. TGSI_PROCESSOR_COMPUTE will be
increased by 2.

We'll use VS for LS and HS, because there's nothing special about them
from the LLVM backend point of view, even though the hardware side is
different. We do the same for ES.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeon/radeon_llvm_emit.c

index 53694b74918e2f7e3bc48d450023bc6484ed28ff..dc871d79717bd6292800298bffe1980f8030742c 100644 (file)
 #define FS_STRING_LEN 30
 #define TRIPLE_STRING_LEN 7
 
+/**
+ * Shader types for the LLVM backend.
+ */
+enum radeon_llvm_shader_type {
+       RADEON_LLVM_SHADER_PS = 0,
+       RADEON_LLVM_SHADER_VS = 1,
+       RADEON_LLVM_SHADER_GS = 2,
+       RADEON_LLVM_SHADER_CS = 3,
+};
+
 /**
  * Set the shader type we want to compile
  *
 void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
 {
        char Str[2];
-       sprintf(Str, "%1d", type);
+       enum radeon_llvm_shader_type llvm_type;
+
+       switch (type) {
+       case TGSI_PROCESSOR_VERTEX:
+               llvm_type = RADEON_LLVM_SHADER_VS;
+               break;
+       case TGSI_PROCESSOR_GEOMETRY:
+               llvm_type = RADEON_LLVM_SHADER_GS;
+               break;
+       case TGSI_PROCESSOR_FRAGMENT:
+               llvm_type = RADEON_LLVM_SHADER_PS;
+               break;
+       case TGSI_PROCESSOR_COMPUTE:
+               llvm_type = RADEON_LLVM_SHADER_CS;
+               break;
+       default:
+               assert(0);
+       }
+
+       sprintf(Str, "%1d", llvm_type);
 
        LLVMAddTargetDependentFunctionAttr(F, "ShaderType", Str);