Войти
ПрограммированиеФорумГрафика

[DX11] Шейдер и (МСАА или неМСАА) текстуры

Страницы: 1 2 3 Следующая »
#0
22:55, 22 фев. 2011

Здрасте!

Есть пиксельный шейдер, скажем просто вывод текстуры:

Texture2D<float4> tex : register( t0 );
SamplerState PointSampler : register (s0);

struct QuadVS_Output
{
    float4 Pos : SV_POSITION;              
    float4 Tex : TEXCOORD0;
};

float4 QuadPS( QuadVS_Output Input ) : SV_TARGET
{ 
    return tex.Sample(PointSampler,Input.Tex);
}

Все отлично до тех пор, пока я не хочу всунуть МСАА текстуру в tex. В отпут начало писать ворнинги, что я кидаю в шейдер МСАА текстуру, когда тот ожидает обычную.

Я немного переписал код:

Texture2DMS<float4> tex : register( t0 );  
SamplerState PointSampler : register (s0);

struct QuadVS_Output
{
    float4 Pos : SV_POSITION;              
    float4 Tex : TEXCOORD0;
    uint nSampleIndex       : SV_SAMPLEINDEX;
};

float4 QuadPS( QuadVS_Output Input ) : SV_TARGET
{  
    float3 DIM;
    tex.GetDimensions(DIM.x,DIM.y,DIM.z);
    return tex.Load(  int2(DIM*Input.Tex.xy),Input.nSampleIndex);
}

Этот код не стал возмущаться на МСАА текстуры, но стал на обычные.

Внимание вопрос:
Можно ли написать один шейдер для поддержки МСАА текстур и неМСАА текстур в одном и том же слоте(переменной)?
Фильтрация мне вообще не нужна...так что подойдут любые варианты чтения из текстур.


#1
23:03, 22 фев. 2011

Che@ter
> Все отлично до тех пор, пока я не хочу всунуть МСАА текстуру в tex. В отпут
> начало писать ворнинги, что я кидаю в шейдер МСАА текстуру, когда тот ожидает
> обычную.

ну да

> Можно ли написать один шейдер для поддержки МСАА текстур и неМСАА текстур в
> одном и том же слоте(переменной)?

как uber сделай

> Фильтрация мне вообще не нужна...так что подойдут любые варианты чтения из
> текстур.

Load он и используется для такого

#2
23:04, 22 фев. 2011

Che@ter
> В отпут начало писать ворнинги, что я кидаю в шейдер МСАА текстуру, когда тот
> ожидает обычную.
Ну и ладно, текстура же семплиться...

#3
23:07, 22 фев. 2011

innuendo
> как uber сделай
Это последний вариант... Думаю может можно через какойнить Buffer сделать?
Igor'
> Ну и ладно, текстура же семплиться...
На один кадр дофига ворнингов... нехорошо(

неМСАА = МСАА текстура, только с количеством семплов в 1, так что я думаю что вариант возможно замутить..

#4
23:23, 22 фев. 2011

Che@ter
> > Ну и ладно, текстура же семплиться...
> На один кадр дофига ворнингов... нехорошо(

поддерживаю, нужно без варнингов

лучше так сделать
Texture2DMS<float4,MSAA_LEVEL>

#5
23:33, 22 фев. 2011

Интересно, что если в шейдере сделать:

return tex.Load(  int2(DIM*Input.Tex.xy),0);
то будет семплится и нормальная текстура. Если же:
return tex.Load(  int2(DIM*Input.Tex.xy),1);
то только МСАА текстура. Тоесть неМСАА текстура, это МСАА текстура с семплингом=1.

Может тогда есть флаг, который форсировано принимает текстуру за МСАА текстуру... или по хитрому создавать текстуры чтоли.

#6
1:22, 23 фев. 2011

Хотя если не брать в учет ворнинги, то АА(И когда он выключен) прекрасно работает, ФПС падает предсказуемо, тоесть ничего страшного не происходит...Шейдер прописан только для МСАА.

#7
5:48, 23 фев. 2011

Che@ter
> Интересно, что если в шейдере сделать:
> return tex.Load( int2(DIM*Input.Tex.xy),0);то будет семплится и нормальная
> текстура. Если же:

ну так в нормальной есть только sample с индексом 0

> Если же:
> return tex.Load( int2(DIM*Input.Tex.xy),1);то только МСАА текстура.

у тебя же

for( int i = 0; i < MSAA_LEVEL; i++ ) {
      tex.Load(  int2(DIM*Input.Tex.xy),  i )
}

это обход всех samples

#8
9:26, 23 фев. 2011

Texture2DMS<float4,1> не работает:

D3D11: ERROR: ID3D11DeviceContext::Draw: The Shader Resource View dimension declared in the shader code (TEXTURE2DMS) does not match the view type bound to slot 0 of the Pixel Shader unit (TEXTURE2D).  This mismatch is invalid if the shader actually uses the view (e.g. it is not skipped due to shader code branching). [ EXECUTION ERROR #354: DEVICE_DRAW_VIEW_DIMENSION_MISMATCH ]

Мне сделать ресурсвью всех текстур как на МСАА текстуру? (потом проверю)

#9
9:51, 23 фев. 2011

Che@ter

Texture2DMS<float4,1>  - должно работать, совпадает число Samples в текстуре ?

#10
15:04, 23 фев. 2011

innuendo
Да, так работает, только неАА текстуры, но не вариант генерить шейдеры для АА и для неАА текстур.

> Мне сделать ресурсвью всех текстур как на МСАА текстуру?
Не выдержал, сделал на одной из лекций:) Работает!! Один шейдер для АА и для неАА текстур. Не нужно гнать переменные о том сколько семплов или чото в таком роде.

#11
15:08, 23 фев. 2011

Che@ter
если ты будешь делать resolve в шейдере всё равно жедательно uber заделать по числу samples

#12
15:13, 23 фев. 2011

Да нет, не буду. Я это сделаю в коде через ResolveSubresource, чтобы потом постпроцессы мутить)

#13
15:15, 23 фев. 2011

Che@ter
> Да нет, не буду.

ну имелось ввиду - если будешь делать перебор samples в шейдере

#14
15:16, 23 фев. 2011

innuendo
Не думаю что мне это нужно будет:)

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.