MCPcopy Create free account
hub / github.com/baldurk/renderdoc / FillShaderVarData

Function FillShaderVarData

qrenderdoc/Code/BufferFormatter.cpp:3138–3208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3136}
3137
3138static void FillShaderVarData(ShaderVariable &var, const ShaderConstant &elem, const byte *data,
3139 const byte *end)
3140{
3141 int src = 0;
3142
3143 uint32_t outerCount = elem.type.rows;
3144 uint32_t innerCount = elem.type.columns;
3145
3146 bool colMajor = false;
3147
3148 if(elem.type.ColMajor() && outerCount > 1)
3149 {
3150 colMajor = true;
3151 std::swap(outerCount, innerCount);
3152 }
3153
3154 QVariantList objs = GetVariants(GetInterpretedResourceFormat(elem), elem, data, end);
3155
3156 if(objs.isEmpty())
3157 {
3158 var.name = elem.name;
3159 var.value = ShaderValue();
3160 var.flags |= ShaderVariableFlags::Truncated;
3161 return;
3162 }
3163
3164 for(uint32_t outer = 0; outer < outerCount; outer++)
3165 {
3166 for(uint32_t inner = 0; inner < innerCount; inner++)
3167 {
3168 uint32_t dst = outer * innerCount + inner;
3169
3170 QVariant o = objs[src];
3171
3172 src++;
3173
3174 switch(var.type)
3175 {
3176 case VarType::Float: var.value.f32v[dst] = o.toFloat(); break;
3177 case VarType::Double: var.value.f64v[dst] = o.toDouble(); break;
3178 case VarType::Half: var.value.f16v[dst] = rdhalf::make(o.toFloat()); break;
3179 case VarType::Bool: var.value.u32v[dst] = o.toBool() ? 1 : 0; break;
3180 case VarType::ULong: var.value.u64v[dst] = o.toULongLong(); break;
3181 case VarType::UInt: var.value.u32v[dst] = o.toUInt(); break;
3182 case VarType::UShort: var.value.u16v[dst] = o.toUInt() & 0xffff; break;
3183 case VarType::UByte: var.value.u8v[dst] = o.toUInt() & 0xff; break;
3184 case VarType::SLong: var.value.s64v[dst] = o.toLongLong(); break;
3185 case VarType::SInt: var.value.s32v[dst] = o.toInt(); break;
3186 case VarType::SShort:
3187 var.value.u16v[dst] = (int16_t)qBound((int)INT16_MIN, o.toInt(), (int)INT16_MAX);
3188 break;
3189 case VarType::SByte:
3190 var.value.u8v[dst] = (int8_t)qBound((int)INT8_MIN, o.toInt(), (int)INT8_MAX);
3191 break;
3192 case VarType::Enum: var.value.u64v[dst] = o.value<EnumInterpValue>().val; break;
3193 case VarType::GPUPointer:
3194 var.SetTypedPointer(o.toULongLong(), ResourceId(), elem.type.pointerTypeID);
3195 break;

Callers 1

InterpretShaderVarFunction · 0.85

Calls 7

GetVariantsFunction · 0.85
toDoubleMethod · 0.80
ToQStrFunction · 0.70
swapFunction · 0.50
ResourceIdFunction · 0.50
isEmptyMethod · 0.45

Tested by

no test coverage detected