• Content count

  • Joined

  • Last visited

Community Reputation

126 Neutral

About satchmo

  • Rank
  1. Makes sense alright. Thanks again.
  2. Ah, awesome, thanks guys. That's good to know about UpdateSubResource() copying the data into the command buffer. You say it's not a good thing because of the extra copying that would be required, right? So take this example: I have 1000 identical objects that all need unique values in their constant buffer. If I understand correctly, it would be just fine for me to create just one constant buffer for all of them to share, and use map/discard to update the constant buffer before each draw call. Is there any advantage to creating 1000 constant buffers and each object getting a unique one?
  3. I'm trying to determine the use cases for Map/Unmap versus UpdateSubResource when it comes to updating constant buffers. I know there have been a few different threads around this topic, but none of them have really satisfactorily answered the question. Here's how I understand Map() and UpdateSubResource() - someone please correct me if I'm wrong about something:[list] [*][b]Map()[/b]: You get a pointer directly to the driver's memory for that resource. You can write directly to it without incurring any other system memory copies, possibly causing a stall if you use _DISCARD while the resource is in use by the GPU and the driver runs out of temporary buffers. Good for gathering inputs from various memory locations and writing directly into the buffer without incurring any other extra copy. [*][b]UpdateSubResource()[/b]: Copies the whole structure from an area of system memory to the driver's memory for that resource. Useful when you already have a copy of the buffer in memory already. [/list] So based on this understanding, I have a few questions:[list=1] [*]What's the general limit of temporary buffers that are used when using _DISCARD with [b]Map()[/b]? Tens? Hundreds? I assume it's different per driver, but would like at least some general guidelines. [*]What happens when you use [b]UpdateSubResource()[/b] and the resource is being used by the GPU? Is it subject to the same process of using temporary buffers and possibly stalling if the drivers runs out of temporary buffers? Take an example of five objects drawn one after another, using the same shared constant buffer, and the constant buffer needs to be updated for each object. Using [b]Map()[/b] for each constant buffer update, every update after the first one will cause the driver to use a temporary buffer, as the previous one will not have been used yet. What will happen when using [b]UpdateSubResource() [/b]in this case? [*]How is it advantageous to use one over the other? Is it purely how much data is being moved around? As far as I can tell, the same amount of memory is being copied around no matter which method you use - but I suspect I'm missing something here. [/list]
  4. I'm looking for a way to retrieve the shader entry point function name of a pass, via either the Effects framework or the shader reflection interface, but I'm not having any luck. For example, given this technique and pass: [code]technique11 dx11test { pass p0 { SetVertexShader(CompileShader(vs_5_0, vertsh())); SetPixelShader(CompileShader(ps_5_0, pixsh())); } }[/code] ... I want to find out in code what the entry point for the vertex shader of pass 'p0' is (it should return "vertsh"). I've had a good look through the reflection and effects interfaces, but no luck. Does anyone know if this information is available anywhere?