diff options
Diffstat (limited to 'src/gallium/drivers/swr/rasterizer/jitter')
-rw-r--r-- | src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp index bdd818b6b8f..c5936e59bfe 100644 --- a/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp +++ b/src/gallium/drivers/swr/rasterizer/jitter/fetch_jit.cpp @@ -46,6 +46,7 @@ enum ConversionType CONVERT_NORMALIZED, CONVERT_USCALED, CONVERT_SSCALED, + CONVERT_SFIXED, }; ////////////////////////////////////////////////////////////////////////// @@ -424,6 +425,9 @@ void FetchJit::JitLoadVertices(const FETCH_COMPILE_STATE &fetchState, Value* str case SWR_TYPE_SSCALED: vec = SI_TO_FP(vec, VectorType::get(mFP32Ty, 4)); break; + case SWR_TYPE_SFIXED: + vec = FMUL(SI_TO_FP(vec, VectorType::get(mFP32Ty, 4)), VBROADCAST(C(1/65536.0f))); + break; case SWR_TYPE_UNKNOWN: case SWR_TYPE_UNUSED: SWR_ASSERT(false, "Unsupported type %d!", info.type[0]); @@ -943,6 +947,10 @@ void FetchJit::JitGatherVertices(const FETCH_COMPILE_STATE &fetchState, conversionType = CONVERT_SSCALED; extendCastType = Instruction::CastOps::SIToFP; break; + case SWR_TYPE_SFIXED: + conversionType = CONVERT_SFIXED; + extendCastType = Instruction::CastOps::SExt; + break; default: break; } @@ -1034,6 +1042,10 @@ void FetchJit::JitGatherVertices(const FETCH_COMPILE_STATE &fetchState, { pGather = SI_TO_FP(pGather, mSimdFP32Ty); } + else if (conversionType == CONVERT_SFIXED) + { + pGather = FMUL(SI_TO_FP(pGather, mSimdFP32Ty), VBROADCAST(C(1/65536.0f))); + } vVertexElements[currentVertexElement++] = pGather; // e.g. result of a single 8x32bit integer gather for 32bit components |