Comments in header
| 3990 | |
| 3991 | // Comments in header |
| 3992 | Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameters, bool isUnsignedResult) |
| 3993 | { |
| 3994 | // Figure out the result type |
| 3995 | Id resultType = 0; |
| 3996 | switch (opCode) { |
| 3997 | case Op::OpImageQuerySize: |
| 3998 | case Op::OpImageQuerySizeLod: |
| 3999 | { |
| 4000 | int numComponents = 0; |
| 4001 | switch (getTypeDimensionality(getImageType(parameters.sampler))) { |
| 4002 | case Dim::Dim1D: |
| 4003 | case Dim::Buffer: |
| 4004 | numComponents = 1; |
| 4005 | break; |
| 4006 | case Dim::Dim2D: |
| 4007 | case Dim::Cube: |
| 4008 | case Dim::Rect: |
| 4009 | case Dim::SubpassData: |
| 4010 | numComponents = 2; |
| 4011 | break; |
| 4012 | case Dim::Dim3D: |
| 4013 | numComponents = 3; |
| 4014 | break; |
| 4015 | |
| 4016 | default: |
| 4017 | assert(0); |
| 4018 | break; |
| 4019 | } |
| 4020 | if (isArrayedImageType(getImageType(parameters.sampler))) |
| 4021 | ++numComponents; |
| 4022 | |
| 4023 | Id intType = isUnsignedResult ? makeUintType(32) : makeIntType(32); |
| 4024 | if (numComponents == 1) |
| 4025 | resultType = intType; |
| 4026 | else |
| 4027 | resultType = makeVectorType(intType, numComponents); |
| 4028 | |
| 4029 | break; |
| 4030 | } |
| 4031 | case Op::OpImageQueryLod: |
| 4032 | resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2); |
| 4033 | break; |
| 4034 | case Op::OpImageQueryLevels: |
| 4035 | case Op::OpImageQuerySamples: |
| 4036 | resultType = isUnsignedResult ? makeUintType(32) : makeIntType(32); |
| 4037 | break; |
| 4038 | default: |
| 4039 | assert(0); |
| 4040 | break; |
| 4041 | } |
| 4042 | |
| 4043 | Instruction* query = new Instruction(getUniqueId(), resultType, opCode); |
| 4044 | query->addIdOperand(parameters.sampler); |
| 4045 | if (parameters.coords) |
| 4046 | query->addIdOperand(parameters.coords); |
| 4047 | if (parameters.lod) |
| 4048 | query->addIdOperand(parameters.lod); |
| 4049 | addInstruction(std::unique_ptr<Instruction>(query)); |
no test coverage detected